refactor: smart tags to smart views (#562)

This commit is contained in:
Mo
2022-02-27 14:44:45 -06:00
committed by GitHub
parent f0bc7467c9
commit 28eaeca46e
8 changed files with 164 additions and 134 deletions

View File

@@ -289,7 +289,7 @@ PODS:
- React-Core
- react-native-segmented-control (2.2.2):
- React-Core
- react-native-sodium-jsi (1.0.0):
- react-native-sodium-jsi (1.1.3):
- React-Core
- react-native-static-server (0.5.0):
- GCDWebServer (~> 3.0)
@@ -640,7 +640,7 @@ SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
BugsnagReactNative: d6988f685aae2de5ecda1f5ca39f03661759d416
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1
FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
Flipper: 30e8eeeed6abdc98edaf32af0cda2f198be4b733
@@ -654,7 +654,7 @@ SPEC CHECKSUMS:
FlipperKit: d8d346844eca5d9120c17d441a2f38596e8ed2b9
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
glog: 5337263514dd6f09803962437687240c5dc39aa4
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
@@ -675,7 +675,7 @@ SPEC CHECKSUMS:
react-native-mail: 5fe7239a5b5c1e858d425501c03d1ab977434122
react-native-safe-area-context: b6e0e284002381d2ff29fa4fff42b4d8282e3c94
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
react-native-sodium-jsi: 546d6caf98889940311af86752e97f3757c75263
react-native-sodium-jsi: e86fb6bc2f48b5148c1339b07b18a7f3799d17a3
react-native-static-server: 201b2a945a35096be3ae7f43e367c65bcbd61343
react-native-version-info: 36490da17d2c6b5cc21321c70e433784dee7ed0b
react-native-webview: e89bf2dba26a04cda967814df3ed1be99f291233

View File

@@ -26,12 +26,12 @@
"@react-navigation/native": "^5.9.3",
"@react-navigation/stack": "^5.14.3",
"@standardnotes/components": "^1.7.6",
"@standardnotes/features": "^1.33.0",
"@standardnotes/payloads": "^1.1.0",
"@standardnotes/features": "^1.33.1",
"@standardnotes/payloads": "^1.1.2",
"@standardnotes/react-native-textview": "1.0.1",
"@standardnotes/react-native-utils": "1.0.1",
"@standardnotes/sncrypto-common": "1.7.1",
"@standardnotes/snjs": "2.65.0",
"@standardnotes/snjs": "2.65.3",
"@standardnotes/stylekit": "5.9.0",
"js-base64": "^3.5.2",
"moment": "^2.29.1",
@@ -54,7 +54,7 @@
"react-native-screens": "3.4.0",
"react-native-search-bar": "standardnotes/react-native-search-bar#7d2139d",
"react-native-search-box": "standardnotes/react-native-search-box#c0de5bab18cb418fef75ef2c2cd921304142e492",
"react-native-sodium-jsi": "1.1.1",
"react-native-sodium-jsi": "1.1.3",
"react-native-static-server": "standardnotes/react-native-static-server#d0c4cb0feae233634ef26fc33118f258192c7b7d",
"react-native-store-review": "^0.1.5",
"react-native-svg": "^12.1.1",

View File

@@ -10,12 +10,13 @@ import {
NoteViewController,
PayloadSource,
removeFromArray,
SmartView,
SNNote,
SNSmartTag,
SNTag,
SNUserPrefs,
StorageKey,
StorageValueModes,
SystemViewId,
} from '@standardnotes/snjs';
import {
AppState,
@@ -37,7 +38,6 @@ import { PrefKey } from './preferences_manager';
const pjson = require('../../package.json');
const { PlatformConstants } = NativeModules;
// eslint-disable-next-line no-shadow
export enum AppStateType {
LosingFocus = 1,
EnteringBackground = 2,
@@ -48,13 +48,11 @@ export enum AppStateType {
PreferencesChanged = 7,
}
// eslint-disable-next-line no-shadow
export enum LockStateType {
Locked = 1,
Unlocked = 2,
}
// eslint-disable-next-line no-shadow
export enum AppStateEventType {
KeyboardChangeEvent = 1,
TabletModeChange = 2,
@@ -66,19 +64,16 @@ export type TabletModeChangeData = {
old_isInTabletMode: boolean;
};
// eslint-disable-next-line no-shadow
export enum UnlockTiming {
Immediately = 'immediately',
OnQuit = 'on-quit',
}
// eslint-disable-next-line no-shadow
export enum PasscodeKeyboardType {
Default = 'default',
Numeric = 'numeric',
}
// eslint-disable-next-line no-shadow
export enum MobileStorageKey {
PasscodeKeyboardTypeKey = 'passcodeKeyboardType',
}
@@ -104,7 +99,7 @@ export class ApplicationState extends ApplicationService {
keyboardHeight?: number;
appEventObersever: any;
selectedTagRestored = false;
selectedTag: SNTag = this.application.getSmartTags()[0];
selectedTag: SNTag | SmartView = this.application.getSmartViews()[0];
userPreferences?: SNUserPrefs;
tabletMode: boolean = false;
ignoreStateChanges: boolean = false;
@@ -170,7 +165,7 @@ export class ApplicationState extends ApplicationService {
const savedTag =
(this.application.findItem(savedTagUuid) as SNTag) ||
this.application.getSmartTags().find(tag => tag.uuid === savedTagUuid);
this.application.getSmartViews().find(tag => tag.uuid === savedTagUuid);
if (savedTag) {
this.setSelectedTag(savedTag, false);
this.selectedTagRestored = true;
@@ -281,7 +276,7 @@ export class ApplicationState extends ApplicationService {
*/
async createEditor(title?: string) {
const selectedTagUuid = this.selectedTag
? this.selectedTag.isSmartTag
? this.selectedTag instanceof SmartView
? undefined
: this.selectedTag.uuid
: undefined;
@@ -389,9 +384,21 @@ export class ApplicationState extends ApplicationService {
}
if (note.deleted) {
this.closeEditor(editor);
} else if (note.trashed && !this.selectedTag?.isTrashTag) {
} else if (
note.trashed &&
!(
this.selectedTag instanceof SmartView &&
this.selectedTag.uuid === SystemViewId.TrashedNotes
)
) {
this.closeEditor(editor);
} else if (note.archived && !this.selectedTag?.isArchiveTag) {
} else if (
note.archived &&
!(
this.selectedTag instanceof SmartView &&
this.selectedTag.uuid === SystemViewId.ArchivedNotes
)
) {
this.closeEditor(editor);
}
}
@@ -437,7 +444,7 @@ export class ApplicationState extends ApplicationService {
/**
* Set selected @SNTag
*/
public setSelectedTag(tag: SNTag, saveSelection: boolean = true) {
public setSelectedTag(tag: SNTag | SmartView, saveSelection: boolean = true) {
if (this.selectedTag.uuid === tag.uuid) {
return;
}
@@ -468,9 +475,9 @@ export class ApplicationState extends ApplicationService {
/**
* @returns notes this tag references
*/
public getTagNotes(tag: SNTag) {
if (tag.isSmartTag) {
return this.application.notesMatchingSmartTag(tag as SNSmartTag);
public getTagNotes(tag: SNTag | SmartView) {
if (tag instanceof SmartView) {
return this.application.notesMatchingSmartView(tag);
} else {
return this.application.referencesForItem(tag).filter(ref => {
return ref.content_type === ContentType.Note;

View File

@@ -13,7 +13,10 @@ import {
CollectionSort,
ContentType,
NotesDisplayCriteria,
SmartView,
SNNote,
SNTag,
SystemViewId,
} from '@standardnotes/snjs';
import { ICON_ADD } from '@Style/icons';
import { ThemeService } from '@Style/theme_service';
@@ -109,7 +112,7 @@ export const Notes = React.memo(
const haveDisplayOptions = useRef(false);
const protectionsEnabled = useRef(
application!.hasProtectionSources() &&
!application!.hasUnprotectedAccessSession()
!application!.hasUnprotectedAccessSession()
);
const reloadTitle = useCallback(
@@ -127,7 +130,7 @@ export const Notes = React.memo(
: `${resultCount} search results`;
} else if (selectedTag) {
title = selectedTag.title;
if (selectedTag.parentId) {
if (selectedTag instanceof SNTag && selectedTag.parentId) {
const parents = application!.getTagParentChain(selectedTag);
const hierarchy = parents.map(tag => tag.title).join(' ⫽ ');
subTitle = hierarchy.length > 0 ? `in ${hierarchy}` : undefined;
@@ -244,10 +247,10 @@ export const Notes = React.memo(
const searchQuery =
searchText || searchFilter
? {
query: searchFilter?.toLowerCase() ?? searchText.toLowerCase(),
includeProtectedNoteText:
includeProtected ?? includeProtectedNoteText,
}
query: searchFilter?.toLowerCase() ?? searchText.toLowerCase(),
includeProtectedNoteText:
includeProtected ?? includeProtectedNoteText,
}
: undefined;
let applyFilters = false;
@@ -261,7 +264,8 @@ export const Notes = React.memo(
sortProperty: sortOptions?.sortBy ?? (sortBy! as CollectionSort),
sortDirection:
sortOptions?.sortReverse ?? sortReverse! ? 'asc' : 'dsc',
tags: tag ? [tag] : [],
tags: tag instanceof SNTag ? [tag] : [],
views: tag instanceof SmartView ? [tag] : [],
searchQuery: searchQuery,
includeArchived:
applyFilters && (includeArchived ?? includeArchivedNotes),
@@ -340,7 +344,13 @@ export const Notes = React.memo(
},
];
if (!selectedTag?.isArchiveTag && !selectedTag?.isTrashTag) {
const isArchiveView =
selectedTag instanceof SmartView &&
selectedTag.uuid === SystemViewId.ArchivedNotes;
const isTrashView =
selectedTag instanceof SmartView &&
selectedTag.uuid === SystemViewId.TrashedNotes;
if (!isArchiveView && !isTrashView) {
setSearchOptions([
...options,
{
@@ -431,10 +441,11 @@ export const Notes = React.memo(
.getActiveNoteController()?.note;
if (activeNote) {
const discarded = activeNote.deleted || activeNote.trashed;
if (
discarded &&
!application?.getAppState().selectedTag?.isTrashTag
) {
const isTrashView =
application?.getAppState().selectedTag instanceof SmartView &&
application?.getAppState().selectedTag.uuid ===
SystemViewId.TrashedNotes;
if (discarded && !isTrashView) {
selectNextOrCreateNew(renderedNotes);
}
} else {

View File

@@ -2,7 +2,7 @@ import { AppStateType } from '@Lib/application_state';
import { useNavigation } from '@react-navigation/native';
import { ApplicationContext } from '@Root/ApplicationContext';
import { SCREEN_SETTINGS } from '@Screens/screens';
import { ContentType, SNTag, SNTheme } from '@standardnotes/snjs';
import { ContentType, SmartView, SNTag, SNTheme } from '@standardnotes/snjs';
import {
CustomActionSheetOption,
useCustomActionSheet,
@@ -33,7 +33,11 @@ import {
useStyles,
} from './MainSideMenu.styled';
import { SideMenuHero } from './SideMenuHero';
import { SideMenuOptionIconDescriptionType, SideMenuOption, SideMenuSection } from './SideMenuSection';
import {
SideMenuOption,
SideMenuOptionIconDescriptionType,
SideMenuSection,
} from './SideMenuSection';
import { TagSelectionList } from './TagSelectionList';
type Props = {
@@ -243,7 +247,7 @@ export const MainSideMenu = React.memo(({ drawerRef }: Props) => {
]);
const onTagSelect = useCallback(
async (tag: SNTag) => {
async (tag: SNTag | SmartView) => {
if (tag.conflictOf) {
application!.changeAndSaveItem(tag.uuid, mutator => {
mutator.conflictOf = undefined;
@@ -263,11 +267,11 @@ export const MainSideMenu = React.memo(({ drawerRef }: Props) => {
const outOfSyncPressed = async () => {
const confirmed = await application!.alertService!.confirm(
"We've detected that the data in the current application session may " +
'not match the data on the server. This can happen due to poor ' +
'network conditions, or if a large note fails to download on your ' +
'device. To resolve this issue, we recommend first creating a backup ' +
'of your data in the Settings screen, then signing out of your account ' +
'and signing back in.',
'not match the data on the server. This can happen due to poor ' +
'network conditions, or if a large note fails to download on your ' +
'device. To resolve this issue, we recommend first creating a backup ' +
'of your data in the Settings screen, then signing out of your account ' +
'and signing back in.',
'Potentially Out of Sync',
'Open Settings',
undefined
@@ -277,9 +281,10 @@ export const MainSideMenu = React.memo(({ drawerRef }: Props) => {
}
};
const selectedTags = useMemo(() => (selectedTag ? [selectedTag] : []), [
selectedTag,
]);
const selectedTags: SNTag[] | SmartView[] = useMemo(
() => (selectedTag ? ([selectedTag] as SNTag[] | SmartView[]) : []),
[selectedTag]
);
return (
<Fragment>
@@ -310,7 +315,7 @@ export const MainSideMenu = React.memo(({ drawerRef }: Props) => {
) : index === 1 ? (
<SideMenuSection title="Views">
<TagSelectionList
contentType={ContentType.SmartTag}
contentType={ContentType.SmartView}
onTagSelect={item.onTagSelect}
selectedTags={item.selectedTags}
/>

View File

@@ -21,9 +21,9 @@ import {
NoteMutator,
NoteViewController,
PayloadSource,
SmartView,
SNComponent,
SNNote,
SNSmartTag,
SNTag,
} from '@standardnotes/snjs';
import { useCustomActionSheet } from '@Style/custom_action_sheet';
@@ -53,7 +53,11 @@ import DrawerLayout from 'react-native-gesture-handler/DrawerLayout';
import Icon from 'react-native-vector-icons/Ionicons';
import { ThemeContext } from 'styled-components/native';
import { SafeAreaContainer, useStyles } from './NoteSideMenu.styled';
import { SideMenuOption, SideMenuOptionIconDescriptionType, SideMenuSection } from './SideMenuSection';
import {
SideMenuOption,
SideMenuOptionIconDescriptionType,
SideMenuSection,
} from './SideMenuSection';
import { TagSelectionList } from './TagSelectionList';
function sortAlphabetically(array: SNComponent[]): SNComponent[] {
@@ -560,7 +564,7 @@ export const NoteSideMenu = React.memo((props: Props) => {
]);
const onTagSelect = useCallback(
async (tag: SNTag | SNSmartTag) => {
async (tag: SNTag | SmartView) => {
const isSelected =
selectedTags.findIndex(selectedTag => selectedTag.uuid === tag.uuid) >
-1;

View File

@@ -2,11 +2,12 @@ import { useNavigation } from '@react-navigation/native';
import { ApplicationContext } from '@Root/ApplicationContext';
import { AppStackNavigationProp } from '@Root/AppStack';
import { SCREEN_COMPOSE, SCREEN_INPUT_MODAL_TAG } from '@Screens/screens';
import { SideMenuOptionIconDescriptionType } from '@Screens/SideMenu/SideMenuSection';
import {
ButtonType,
CollectionSort,
ContentType,
SNSmartTag,
SmartView,
SNTag,
} from '@standardnotes/snjs';
import { useCustomActionSheet } from '@Style/custom_action_sheet';
@@ -20,12 +21,11 @@ import React, {
import { FlatList, ListRenderItem } from 'react-native';
import { SideMenuCell } from './SideMenuCell';
import { EmptyPlaceholder } from './TagSelectionList.styled';
import {SideMenuOptionIconDescriptionType} from "@Screens/SideMenu/SideMenuSection";
type Props = {
contentType: ContentType.Tag | ContentType.SmartTag;
onTagSelect: (tag: SNTag | SNSmartTag) => void;
selectedTags: SNTag[] | SNSmartTag[];
contentType: ContentType.Tag | ContentType.SmartView;
onTagSelect: (tag: SNTag | SmartView) => void;
selectedTags: SNTag[] | SmartView[];
emptyPlaceholder?: string;
hasBottomPadding?: boolean;
};
@@ -46,14 +46,14 @@ export const TagSelectionList = React.memo(
const { showActionSheet } = useCustomActionSheet();
// State
const [tags, setTags] = useState<SNTag[] | SNSmartTag[]>(() =>
contentType === ContentType.SmartTag ? application!.getSmartTags() : []
const [tags, setTags] = useState<SNTag[] | SmartView[]>(() =>
contentType === ContentType.SmartView ? application!.getSmartViews() : []
);
const displayOptionsSet = useRef<boolean>(false);
const reloadTags = useCallback(() => {
if (contentType === ContentType.SmartTag) {
setTags(application!.getSmartTags());
if (contentType === ContentType.SmartView) {
setTags(application!.getSmartViews());
} else {
setTags(application!.getDisplayableItems(contentType) as SNTag[]);
}
@@ -72,7 +72,7 @@ export const TagSelectionList = React.memo(
if (matchingTag.deleted) {
application
.getAppState()
.setSelectedTag(application!.getSmartTags()[0], true);
.setSelectedTag(application!.getSmartViews()[0], true);
}
}
}
@@ -95,7 +95,7 @@ export const TagSelectionList = React.memo(
return removeStreamTags;
}, [application, contentType, streamTags]);
const onTagLongPress = (tag: SNTag | SNSmartTag) => {
const onTagLongPress = (tag: SNTag | SmartView) => {
showActionSheet(tag.title, [
{
text: 'Rename',
@@ -120,15 +120,15 @@ export const TagSelectionList = React.memo(
]);
};
const isRootTag = (tag: SNTag | SNSmartTag): boolean =>
!(application?.getTagParent(tag) || false);
const isRegularTag = (tag: SNTag | SNSmartTag): boolean =>
tag.content_type === ContentType.Tag;
const isRootTag = (tag: SNTag | SmartView): boolean =>
tag instanceof SmartView || !application?.getTagParent(tag);
const showFolders = contentType === ContentType.Tag;
const renderedTags = showFolders ? tags.filter(isRootTag) : tags;
const renderedTags = showFolders
? (tags as SNTag[]).filter(isRootTag)
: tags;
const renderItem: ListRenderItem<SNTag | SNSmartTag> = ({ item }) => {
const renderItem: ListRenderItem<SNTag | SmartView> = ({ item }) => {
if (!application) {
return null;
}
@@ -138,17 +138,19 @@ export const TagSelectionList = React.memo(
title = 'Unable to Decrypt';
}
let children: (SNTag | SNSmartTag)[] = [];
let children: SNTag[] = [];
if (showFolders && isRegularTag(item)) {
if (showFolders && item instanceof SNTag) {
const rawChildren = application
.getTagChildren(item)
.map(tag => tag.uuid);
children = tags.filter(tag => rawChildren.includes(tag.uuid));
children = (tags as SNTag[]).filter((tag: SNTag) =>
rawChildren.includes(tag.uuid)
);
}
const isSelected = selectedTags.some(
selectedTag => selectedTag.uuid === item.uuid
(selectedTag: SNTag | SmartView) => selectedTag.uuid === item.uuid
);
return (
@@ -191,7 +193,7 @@ export const TagSelectionList = React.memo(
initialNumToRender={10}
windowSize={10}
maxToRenderPerBatch={10}
data={renderedTags}
data={renderedTags as SNTag[]}
keyExtractor={item => item.uuid}
renderItem={renderItem}
/>

123
yarn.lock
View File

@@ -2526,56 +2526,56 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
"@standardnotes/applications@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@standardnotes/applications/-/applications-1.1.0.tgz#544604c6cc7c7792c1a547176f3f05159055d037"
integrity sha512-j+oWTMa4xTlr0DPg/fa6HOm1gYcBCDfCQEokrkjNHKeCUp1vQc9+BSqFkedww6/XLpRmSM0WoD7+nLnA/fk+nA==
"@standardnotes/applications@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@standardnotes/applications/-/applications-1.1.1.tgz#c57b9e192436d43963b36919ab44d1c626838151"
integrity sha512-C3K1dzjLG/kG4BCXMhCaL5xBnLXIaElkxZRxmg3Xrnh2XqtO7IbEsrjii8VxdYvjbhCEriFXLgghcSyHujaTTA==
dependencies:
"@standardnotes/common" "^1.15.0"
"@standardnotes/common" "^1.15.1"
"@standardnotes/auth@^3.17.0":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.17.0.tgz#05b1a2a46071fa6fdc96e4642c95cdbf27f506da"
integrity sha512-CEwBalNNhj1/ciST4gxMbPz3UD9B8BZBcv0HXRMRO/zOV8qsHr8Rt+n0vaJGSama809U0QAnBv8tEheHWaJ41Q==
"@standardnotes/auth@^3.17.1":
version "3.17.1"
resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.17.1.tgz#eda5f3e156c990c59407ce5a17f043a5caefe5f9"
integrity sha512-A3y20NeXa5MU5jxTlM1rxD6eMWe6K7WdWsANIiJceuFUx2jisX2esZyJluGZ2Pi3dwhMuOzmoX8iRgk3eUmkgg==
dependencies:
"@standardnotes/common" "^1.15.0"
"@standardnotes/common" "^1.15.1"
jsonwebtoken "^8.5.1"
"@standardnotes/common@^1.15.0":
version "1.15.0"
resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.15.0.tgz#3216d8683bcf79db2df33e536f1691fb48d61fc9"
integrity sha512-L+3iIyLrS2aHS4ZLGWOZiZFXcI0661nlW912eMH5nW88TM5F2w2mdm4jr2mbEBbDoVL/AHnrexrRKCwk+vV+kQ==
"@standardnotes/common@^1.15.1":
version "1.15.1"
resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.15.1.tgz#e028ca719e9c4c1acbf8867be5f97599275c7490"
integrity sha512-OQTDsB+DatNyRplzx6SUasOTWFdwJZXkJkyDUr1rb1HnPz/VQpHYaQh5pRNHt7OHe002373rQZPAweHBlmEoDg==
"@standardnotes/components@^1.7.6":
version "1.7.6"
resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.7.6.tgz#6dcce572b32580a6df9091422d96c9c0b6917174"
integrity sha512-5lSYNKpO1tQRD6PMOs0IVTmPhfUh33+h6HQZdbWyCmjUk99QE86cI6IC8LnPh5rjHKG+jkfwgVzBKrR3QS/eQw==
"@standardnotes/domain-events@^2.23.16":
version "2.23.16"
resolved "https://registry.yarnpkg.com/@standardnotes/domain-events/-/domain-events-2.23.16.tgz#54b1df25a08f5dec782751da47b370dc82366988"
integrity sha512-FHtW0Po1+CjrxWuM1fjGuycIPcisFPqxawOfgnBbEFyCDkJaMC1jPuLufgkWvlfDHL5yd5xpuXSWgJZyZ3nxYw==
"@standardnotes/domain-events@^2.23.17":
version "2.23.17"
resolved "https://registry.yarnpkg.com/@standardnotes/domain-events/-/domain-events-2.23.17.tgz#b2256ad7711003fb1790ac53548e8db37df38b4c"
integrity sha512-9qhQFydyi0ZNw2u2tAAp53Gbz1VLRwDX4S7FK4vT3sSoHTmkvkI354ETcgDBlZuIMZSo7AwthKu3wZTCz3jvMA==
dependencies:
"@standardnotes/auth" "^3.17.0"
"@standardnotes/features" "^1.33.0"
"@standardnotes/auth" "^3.17.1"
"@standardnotes/features" "^1.33.1"
"@standardnotes/features@^1.33.0":
version "1.33.0"
resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.33.0.tgz#34e98d27f76b70afadecd36ae52af97b5bca8203"
integrity sha512-HBW1FEvKyk2IshXp8urQvJad+Duin2DBEJkpFzroLu89TJM5k8IMO7LdMjNNM9J+R18C9FqzF4aSP2mGTfn7Pw==
"@standardnotes/features@^1.33.1":
version "1.33.1"
resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.33.1.tgz#0269acf6672396cd7015b8df7f559f600de4dd08"
integrity sha512-TeZJ8nfaVMi1RGCNhGoXtzbhLuODf8fmceuMdZGMJYJEE6eEIr/YvqpDp1tYO/xCsvboZgRdwVmC7D5jPPmIwg==
dependencies:
"@standardnotes/auth" "^3.17.0"
"@standardnotes/common" "^1.15.0"
"@standardnotes/auth" "^3.17.1"
"@standardnotes/common" "^1.15.1"
"@standardnotes/payloads@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@standardnotes/payloads/-/payloads-1.1.0.tgz#3853dfd7a8cd50d1a7f9ad064144eba7818d36cd"
integrity sha512-QsGdbmpINIJrTGoEkouQFfe5+z4t3LXi3JgTC7RdLQ74KvLJjvS6cv/ccDvRxrbyjlF43fzZtKK9oFY7lBlp1g==
"@standardnotes/payloads@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@standardnotes/payloads/-/payloads-1.1.2.tgz#6cb7819ab5fedc17d2e90a703015d0a46e350643"
integrity sha512-uV7cKkgP7eqfqyzvsd8r3t+DOGFkWIYNT8bGqYvTSrj+gjIGVSPhqL//oN1iUTvFUtcFTJHVLO2eirE2xcn/0A==
dependencies:
"@standardnotes/applications" "^1.1.0"
"@standardnotes/common" "^1.15.0"
"@standardnotes/features" "^1.33.0"
"@standardnotes/utils" "^1.2.0"
"@standardnotes/applications" "^1.1.1"
"@standardnotes/common" "^1.15.1"
"@standardnotes/features" "^1.33.1"
"@standardnotes/utils" "^1.2.1"
"@standardnotes/react-native-textview@1.0.1":
version "1.0.1"
@@ -2587,14 +2587,14 @@
resolved "https://registry.yarnpkg.com/@standardnotes/react-native-utils/-/react-native-utils-1.0.1.tgz#acaf80ac9abc6d074d2f283dcd6ace88ba86df5e"
integrity sha512-In9v6RfK+FRexfIYHs1WhFHMX8xYmtDlIw3dAkSU0IpmxRmV/Dobj4fENYVOBWjYfYKF8fgBFFpC+W+mv/zu/Q==
"@standardnotes/services@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@standardnotes/services/-/services-1.2.0.tgz#027e66a4497331a68f6ed065534d92ff2e8b3002"
integrity sha512-PRmntaylTLtZPsmlxQ0uWhrgSnvMUZGHhQfkQxsPmHhEjDGmBfcIEWagCVrcpm7MJInbC+raWhVMnb/rhxXEfA==
"@standardnotes/services@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@standardnotes/services/-/services-1.2.1.tgz#7f1ddd3a16cd1c8dc43d3466fbe936a28d6d5eeb"
integrity sha512-b8Nw20SSg3Xr34hHoDQPxWNJ6Xgnswrjfg2paYPHXclP1Qwvo7OpiqdcjMntZ88UftvY1bFZJvqF1xrak7TJFA==
dependencies:
"@standardnotes/applications" "^1.1.0"
"@standardnotes/common" "^1.15.0"
"@standardnotes/utils" "^1.2.0"
"@standardnotes/applications" "^1.1.1"
"@standardnotes/common" "^1.15.1"
"@standardnotes/utils" "^1.2.1"
"@standardnotes/settings@^1.11.3":
version "1.11.3"
@@ -2606,20 +2606,21 @@
resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-common/-/sncrypto-common-1.7.1.tgz#2feead118e83b605696b2bc46a0986cbf577f855"
integrity sha512-KAT/bZdbgLzDG8gOeuV07ObnYVE3kBoIK3dtRwlRfal3+BuiXE6JxaSblsophjTLG4i38/sBZ0Ex+UTZoebkug==
"@standardnotes/snjs@2.65.0":
version "2.65.0"
resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.65.0.tgz#69489923e9354a5cc71b958ede34e6fb4dc67a65"
integrity sha512-AqHHO6AA0WK7WY6uaztWAMe5HImlh6EueLVF8qX5uBJM3Qxbqg6WK+MOoXlDI/HLRUl992BLIcIgl9Azr6C5rQ==
"@standardnotes/snjs@2.65.3":
version "2.65.3"
resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.65.3.tgz#a5a769c3aabb80623cd62e3f861a865c1f376bf8"
integrity sha512-5kCJ53IKwhdZ9/hWpwmBnJlQ5kVSvAtrqfOf23Y/wHBhBmqSbaME3WtwUcvDS+MNZ1DH2ikv/iGkElAC+aClVw==
dependencies:
"@standardnotes/applications" "^1.1.0"
"@standardnotes/auth" "^3.17.0"
"@standardnotes/common" "^1.15.0"
"@standardnotes/domain-events" "^2.23.16"
"@standardnotes/features" "^1.33.0"
"@standardnotes/services" "^1.2.0"
"@standardnotes/applications" "^1.1.1"
"@standardnotes/auth" "^3.17.1"
"@standardnotes/common" "^1.15.1"
"@standardnotes/domain-events" "^2.23.17"
"@standardnotes/features" "^1.33.1"
"@standardnotes/payloads" "^1.1.2"
"@standardnotes/services" "^1.2.1"
"@standardnotes/settings" "^1.11.3"
"@standardnotes/sncrypto-common" "^1.7.1"
"@standardnotes/utils" "^1.2.0"
"@standardnotes/utils" "^1.2.1"
"@standardnotes/stylekit@5.9.0":
version "5.9.0"
@@ -2631,12 +2632,12 @@
"@svgr/webpack" "^6.2.1"
prop-types "^15.7.2"
"@standardnotes/utils@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@standardnotes/utils/-/utils-1.2.0.tgz#0cb537a860c831f90c8abaa6c2690268cd753129"
integrity sha512-y4IBdpOY/OpuGrlbG/TMaXvEPJ0jiMq2u5xBsKLq0Zf8AmYxTAioDnQcK+Y/qaDO0J8oPHiElZuTY+C4wkjLfA==
"@standardnotes/utils@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@standardnotes/utils/-/utils-1.2.1.tgz#226c679f5f91713c58f8ec0e837ea4586b234b3c"
integrity sha512-6lCzDsps9jh+CcgAeyPjwVaZG7VYCqKl5+Qp6mLUyFbqBIylg4ZW3VXvjjfw8DYY1LgHZtCTIHTuDdXCDuGm+w==
dependencies:
"@standardnotes/common" "^1.15.0"
"@standardnotes/common" "^1.15.1"
dompurify "^2.3.4"
lodash "^4.17.19"
@@ -8329,10 +8330,10 @@ react-native-search-box@standardnotes/react-native-search-box#c0de5bab18cb418fef
dependencies:
prop-types "^15.5.10"
react-native-sodium-jsi@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/react-native-sodium-jsi/-/react-native-sodium-jsi-1.1.1.tgz#8b19f3fc87053ef99f8ff1ee720bdeaf34641b0a"
integrity sha512-V4yiCgJd9GqkHawVg5cMi7nmtBzfZvNBtPOSwLIBq9x5UbxDT+b7VuWzHT+4UlpLm8g0NVqvOqsIzm9GDQ7SLA==
react-native-sodium-jsi@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/react-native-sodium-jsi/-/react-native-sodium-jsi-1.1.3.tgz#163e9bbd3dfb7ee312eeb579c45ad3274203115b"
integrity sha512-HdCdxfahCf4PkGDyO2uNwLNiunbh1yolMpsIBmq8Fhn3mNXEevWeZyu9KMtBqxmG5SjhJ+ZoFLm0TPiM6gqJYQ==
dependencies:
"@standardnotes/sncrypto-common" "^1.7.1"