diff --git a/app/assets/javascripts/directives/views/componentView.ts b/app/assets/javascripts/directives/views/componentView.ts index edc28369d..40923b0ee 100644 --- a/app/assets/javascripts/directives/views/componentView.ts +++ b/app/assets/javascripts/directives/views/componentView.ts @@ -1,5 +1,5 @@ import { WebApplication } from '@/ui_models/application'; -import { SNComponent } from 'snjs'; +import { SNComponent, ComponentAction, LiveItem } from 'snjs'; import { WebDirective } from './../../types'; import template from '%/directives/component-view.pug'; import { isDesktopApplication } from '../../utils'; @@ -7,38 +7,37 @@ import { isDesktopApplication } from '../../utils'; * The maximum amount of time we'll wait for a component * to load before displaying error */ -const MAX_LOAD_THRESHOLD = 4000; - -const VISIBILITY_CHANGE_LISTENER_KEY = 'visibilitychange'; +const MaxLoadThreshold = 4000; +const VisibilityChangeKey = 'visibilitychange'; interface ComponentViewScope { - component: SNComponent + componentUuid: string onLoad?: (component: SNComponent) => void - manualDealloc: boolean application: WebApplication } class ComponentViewCtrl implements ComponentViewScope { - $rootScope: ng.IRootScopeService - $timeout: ng.ITimeoutService - componentValid = true - cleanUpOn: () => void - unregisterComponentHandler!: () => void - component!: SNComponent + /** @scope */ onLoad?: (component: SNComponent) => void - manualDealloc = false + componentUuid!: string application!: WebApplication - unregisterDesktopObserver!: () => void - didRegisterObservers = false - lastComponentValue?: SNComponent - issueLoading = false - reloading = false - expired = false - loading = false - didAttemptReload = false - error: 'offline-restricted' | 'url-missing' | undefined - loadTimeout: any + liveComponent!: LiveItem + + private $rootScope: ng.IRootScopeService + private $timeout: ng.ITimeoutService + private componentValid = true + private cleanUpOn: () => void + private unregisterComponentHandler!: () => void + private unregisterDesktopObserver!: () => void + private didRegisterObservers = false + private issueLoading = false + public reloading = false + private expired = false + private loading = false + private didAttemptReload = false + public error: 'offline-restricted' | 'url-missing' | undefined + private loadTimeout: any /* @ngInject */ constructor( @@ -51,7 +50,6 @@ class ComponentViewCtrl implements ComponentViewScope { this.cleanUpOn = $scope.$on('ext-reload-complete', () => { this.reloadStatus(false); }); - /** To allow for registering events */ this.onVisibilityChange = this.onVisibilityChange.bind(this); } @@ -61,49 +59,56 @@ class ComponentViewCtrl implements ComponentViewScope { (this.cleanUpOn as any) = undefined; this.unregisterComponentHandler(); (this.unregisterComponentHandler as any) = undefined; - if (this.component && !this.manualDealloc) { - /* application and componentManager may be destroyed if this onDestroy is part of - the entire application being destroyed rather than part of just a single component - view being removed */ - if (this.application && this.application.componentManager) { - this.application.componentManager.deregisterComponent(this.component); - } - } this.unregisterDesktopObserver(); (this.unregisterDesktopObserver as any) = undefined; - document.removeEventListener( - VISIBILITY_CHANGE_LISTENER_KEY, - this.onVisibilityChange - ); - (this.component as any) = undefined; - this.onLoad = undefined; + this.liveComponent.deinit(); + (this.liveComponent as any) = undefined; (this.application as any) = undefined; (this.onVisibilityChange as any) = undefined; + this.onLoad = undefined; + document.removeEventListener( + VisibilityChangeKey, + this.onVisibilityChange + ); } - $onChanges() { - if (!this.didRegisterObservers) { - this.didRegisterObservers = true; - this.registerComponentHandlers(); - this.registerPackageUpdateObserver(); - } - const newComponent = this.component; - const oldComponent = this.lastComponentValue; - this.lastComponentValue = newComponent; - if (oldComponent && oldComponent !== newComponent) { - this.application.componentManager!.deregisterComponent( - oldComponent - ); - } - if (newComponent && newComponent !== oldComponent) { - this.application.componentManager!.registerComponent( - newComponent - ) - this.reloadStatus(); - } + $onInit() { + this.liveComponent = new LiveItem(this.componentUuid, this.application); + this.loadComponent(); + this.registerComponentHandlers(); + this.registerPackageUpdateObserver(); } - registerPackageUpdateObserver() { + get component() { + return this.liveComponent?.item; + } + + private loadComponent() { + if (!this.component) { + throw 'Component view is missing component'; + } + if (!this.component.active) { + throw 'Component view component must be active'; + } + const iframe = this.application.componentManager!.iframeForComponent( + this.component + ); + if (!iframe) { + return; + } + this.loading = true; + if (this.loadTimeout) { + this.$timeout.cancel(this.loadTimeout); + } + this.loadTimeout = this.$timeout(() => { + this.handleIframeLoadTimeout(); + }, MaxLoadThreshold); + iframe.onload = (event) => { + this.handleIframeLoad(iframe); + }; + } + + private registerPackageUpdateObserver() { this.unregisterDesktopObserver = this.application.getDesktopService() .registerUpdateObserver((component: SNComponent) => { if (component === this.component && component.active) { @@ -112,27 +117,19 @@ class ComponentViewCtrl implements ComponentViewScope { }); } - registerComponentHandlers() { + private registerComponentHandlers() { this.unregisterComponentHandler = this.application.componentManager!.registerHandler({ identifier: 'component-view-' + Math.random(), areas: [this.component.area], - activationHandler: (component) => { - if (component !== this.component) { - return; - } - this.$timeout(() => { - this.handleActivation(); - }); - }, actionHandler: (component, action, data) => { - if (action === 'set-size') { + if (action === ComponentAction.SetSize) { this.application.componentManager!.handleSetSizeEvent(component, data); } } }); } - onVisibilityChange() { + private onVisibilityChange() { if (document.visibilityState === 'hidden') { return; } @@ -141,13 +138,13 @@ class ComponentViewCtrl implements ComponentViewScope { } } - async reloadComponent() { + public async reloadComponent() { this.componentValid = false; await this.application.componentManager!.reloadComponent(this.component); this.reloadStatus(); } - reloadStatus(doManualReload = true) { + public reloadStatus(doManualReload = true) { this.reloading = true; const component = this.component; const previouslyValid = this.componentValid; @@ -183,36 +180,12 @@ class ComponentViewCtrl implements ComponentViewScope { if (this.expired && doManualReload) { this.$rootScope.$broadcast('reload-ext-dat'); } - this.$timeout(() => { this.reloading = false; }, 500); } - handleActivation() { - if (!this.component || !this.component.active) { - return; - } - const iframe = this.application.componentManager!.iframeForComponent( - this.component - ); - if (!iframe) { - return; - } - this.loading = true; - if (this.loadTimeout) { - this.$timeout.cancel(this.loadTimeout); - } - this.loadTimeout = this.$timeout(() => { - this.handleIframeLoadTimeout(); - }, MAX_LOAD_THRESHOLD); - - iframe.onload = (event) => { - this.handleIframeLoad(iframe); - }; - } - - async handleIframeLoadTimeout() { + private async handleIframeLoadTimeout() { if (this.loading) { this.loading = false; this.issueLoading = true; @@ -221,14 +194,14 @@ class ComponentViewCtrl implements ComponentViewScope { this.reloadComponent(); } else { document.addEventListener( - VISIBILITY_CHANGE_LISTENER_KEY, + VisibilityChangeKey, this.onVisibilityChange ); } } } - async handleIframeLoad(iframe: HTMLIFrameElement) { + private async handleIframeLoad(iframe: HTMLIFrameElement) { let desktopError = false; if (isDesktopApplication()) { try { @@ -252,11 +225,7 @@ class ComponentViewCtrl implements ComponentViewScope { }, avoidFlickerTimeout); } - disableActiveTheme() { - this.application.getThemeService().deactivateAllThemes(); - } - - getUrl() { + public getUrl() { const url = this.application.componentManager!.urlForComponent(this.component); return url; } @@ -268,9 +237,8 @@ export class ComponentView extends WebDirective { this.restrict = 'E'; this.template = template; this.scope = { - component: '=', + componentUuid: '=', onLoad: '=?', - manualDealloc: '=?', application: '=' }; this.controller = ComponentViewCtrl; diff --git a/app/assets/javascripts/directives/views/editorMenu.ts b/app/assets/javascripts/directives/views/editorMenu.ts index 3381a6fce..df6e0b33d 100644 --- a/app/assets/javascripts/directives/views/editorMenu.ts +++ b/app/assets/javascripts/directives/views/editorMenu.ts @@ -15,7 +15,7 @@ interface EditorMenuScope { class EditorMenuCtrl extends PureViewCtrl implements EditorMenuScope { - callback!: (component: SNComponent) => void + callback!: () => (component: SNComponent) => void selectedEditor!: SNComponent currentItem!: SNItem application!: WebApplication @@ -52,7 +52,7 @@ class EditorMenuCtrl extends PureViewCtrl implements EditorMenuScope { } } this.$timeout(() => { - this.callback(component); + this.callback()(component); }); } diff --git a/app/assets/javascripts/web_device_interface.ts b/app/assets/javascripts/interface.ts similarity index 100% rename from app/assets/javascripts/web_device_interface.ts rename to app/assets/javascripts/interface.ts diff --git a/app/assets/javascripts/ui_models/application.ts b/app/assets/javascripts/ui_models/application.ts index 4934edf02..ec10fb102 100644 --- a/app/assets/javascripts/ui_models/application.ts +++ b/app/assets/javascripts/ui_models/application.ts @@ -1,3 +1,4 @@ +import { ComponentGroup } from './component_group'; import { EditorGroup } from '@/ui_models/editor_group'; import { InputModalScope } from '@/directives/views/inputModal'; import { PasswordWizardType, PasswordWizardScope } from '@/types'; @@ -13,7 +14,7 @@ import { import angular from 'angular'; import { getPlatformString } from '@/utils'; import { AlertService } from '@/services/alertService'; -import { WebDeviceInterface } from '@/web_device_interface'; +import { WebDeviceInterface } from '@/interface'; import { AppState, DesktopManager, @@ -46,6 +47,7 @@ export class WebApplication extends SNApplication { private webServices!: WebServices private currentAuthenticationElement?: JQLite public editorGroup: EditorGroup + public componentGroup: ComponentGroup /* @ngInject */ constructor( @@ -74,6 +76,7 @@ export class WebApplication extends SNApplication { this.onDeinit = onDeinit; deviceInterface.setApplication(this); this.editorGroup = new EditorGroup(this); + this.componentGroup = new ComponentGroup(this); } /** @override */ @@ -90,6 +93,7 @@ export class WebApplication extends SNApplication { this.onDeinit = undefined; this.$compile = undefined; this.editorGroup.deinit(); + this.componentGroup.deinit(); (this.scope! as any).application = undefined; this.scope!.$destroy(); this.scope = undefined; diff --git a/app/assets/javascripts/ui_models/component_group.ts b/app/assets/javascripts/ui_models/component_group.ts new file mode 100644 index 000000000..9ad94d5c5 --- /dev/null +++ b/app/assets/javascripts/ui_models/component_group.ts @@ -0,0 +1,100 @@ +import { dictToArray } from '../utils'; +import { SNComponent, ComponentArea, removeFromArray } from 'snjs'; +import { WebApplication } from './application'; + +/** Areas that only allow a single component to be active */ +const SingleComponentAreas = [ + ComponentArea.Editor, + ComponentArea.NoteTags, + ComponentArea.TagsList +] + +export class ComponentGroup { + + private application: WebApplication + changeObservers: any[] = [] + activeComponents: Partial> = {} + + + constructor(application: WebApplication) { + this.application = application; + } + + get componentManager() { + return this.application.componentManager!; + } + + public deinit() { + (this.application as any) = undefined; + for (const component of this.allActiveComponents()) { + this.componentManager.deregisterComponent(component); + } + } + + async activateComponent(component: SNComponent) { + if (this.activeComponents[component.uuid]) { + return; + } + if (SingleComponentAreas.includes(component.area)) { + const currentActive = this.activeComponentForArea(component.area); + if (currentActive) { + await this.deactivateComponent(currentActive, false); + } + } + this.activeComponents[component.uuid] = component; + await this.componentManager.activateComponent(component); + this.notifyObservers(); + } + + async deactivateComponent(component: SNComponent, notify = true) { + if (!this.activeComponents[component.uuid]) { + return; + } + delete this.activeComponents[component.uuid]; + await this.componentManager.deactivateComponent(component); + if(notify) { + this.notifyObservers(); + } + } + + async deactivateComponentForArea(area: ComponentArea) { + const component = this.activeComponentForArea(area); + if (component) { + return this.deactivateComponent(component); + } + } + + activeComponentForArea(area: ComponentArea) { + return this.activeComponentsForArea(area)[0]; + } + + activeComponentsForArea(area: ComponentArea) { + const all = dictToArray(this.activeComponents); + return all.filter((c) => c.area === area); + } + + allComponentsForArea(area: ComponentArea) { + return this.componentManager.componentsForArea(area); + } + + private allActiveComponents() { + return dictToArray(this.activeComponents); + } + + + /** + * Notifies observer when the active editor has changed. + */ + public addChangeObserver(callback: () => void) { + this.changeObservers.push(callback); + return () => { + removeFromArray(this.changeObservers, callback); + } + } + + private notifyObservers() { + for (const observer of this.changeObservers) { + observer(); + } + } +} \ No newline at end of file diff --git a/app/assets/javascripts/utils.ts b/app/assets/javascripts/utils.ts index 858d58ac4..dc2c6c7a8 100644 --- a/app/assets/javascripts/utils.ts +++ b/app/assets/javascripts/utils.ts @@ -11,8 +11,8 @@ export function isNullOrUndefined(value: any) { return value === null || value === undefined; } -export function dictToArray(dict: any) { - return Object.keys(dict).map((key) => dict[key]); +export function dictToArray(dict: Record) { + return Object.keys(dict).map((key) => dict[key]!); } export function getPlatformString() { diff --git a/app/assets/javascripts/views/editor/editor-view.pug b/app/assets/javascripts/views/editor/editor-view.pug index a3b90492f..8c1fd37a0 100644 --- a/app/assets/javascripts/views/editor/editor-view.pug +++ b/app/assets/javascripts/views/editor/editor-view.pug @@ -31,9 +31,9 @@ ) {{self.state.noteStatus.message}} .desc(ng-show='self.state.noteStatus.desc') {{self.state.noteStatus.desc}} .editor-tags - #note-tags-component-container(ng-if='self.state.tagsComponent') + #note-tags-component-container(ng-if='self.activeTagsComponent') component-view.component-view( - component='self.state.tagsComponent', + component-uuid='self.activeTagsComponent.uuid', ng-class="{'locked' : self.noteLocked}", ng-style="self.noteLocked && {'pointer-events' : 'none'}", application='self.application' @@ -41,7 +41,7 @@ input.tags-input( ng-blur='self.onTagsInputBlur()', ng-disabled='self.noteLocked', - ng-if='!(self.state.tagsComponent && self.state.tagsComponent.active)', + ng-if='!self.activeTagsComponent', ng-keyup='$event.keyCode == 13 && $event.target.blur();', ng-model='self.editorValues.tagsInputValue', placeholder='#tags', @@ -133,18 +133,18 @@ action="self.selectedMenuItem(true); self.toggleWebPrefKey(self.prefKeyMonospace)", circle="self.state.monospaceEnabled ? 'success' : 'neutral'", desc="'Toggles the font style for the default editor'", - disabled='self.state.selectedEditor', + disabled='self.activeEditorComponent', label="'Monospace Font'", - subtitle="self.state.selectedEditor ? 'Not available with editor extensions' : null" + subtitle="self.activeEditorComponent ? 'Not available with editor extensions' : null" ) menu-row( action="self.selectedMenuItem(true); self.toggleWebPrefKey(self.prefKeySpellcheck)", circle="self.state.spellcheck ? 'success' : 'neutral'", desc="'Toggles spellcheck for the default editor'", - disabled='self.state.selectedEditor', + disabled='self.activeEditorComponent', label="'Spellcheck'", subtitle=` - self.state.selectedEditor + self.activeEditorComponent ? 'Not available with editor extensions' : (self.state.isDesktop ? 'May degrade editor performance' : null) `) @@ -163,10 +163,10 @@ ) .sk-label Editor editor-menu( - callback='self.editorMenuOnSelect()', + callback='self.editorMenuOnSelect', current-item='self.note', ng-if='self.state.showEditorMenu', - selected-editor='self.state.selectedEditor', + selected-editor='self.activeEditorComponent', application='self.application' ) .sk-app-bar-item( @@ -205,8 +205,8 @@ property="'left'" ) component-view.component-view( - component='self.state.selectedEditor', - ng-if='self.state.selectedEditor', + component-uuid='self.activeEditorComponent.uuid', + ng-if='self.activeEditorComponent', on-load='self.onEditorLoad', application='self.application' ) @@ -216,7 +216,7 @@ ng-change='self.contentChanged()', ng-click='self.clickedTextArea()', ng-focus='self.onContentFocus()', - ng-if='!self.state.selectedEditor', + ng-if='!self.activeEditorComponent', ng-model='self.editorValues.text', ng-model-options='{ debounce: self.state.editorDebounce}', ng-readonly='self.noteLocked', @@ -236,11 +236,11 @@ | There was an error decrypting this item. Ensure you are running the | latest version of this app, then sign out and sign back in to try again. #editor-pane-component-stack(ng-show='self.note') - #component-stack-menu-bar.sk-app-bar.no-edges(ng-if='self.state.componentStack.length') + #component-stack-menu-bar.sk-app-bar.no-edges(ng-if='self.state.allStackComponents.length') .left .sk-app-bar-item( + ng-repeat='component in self.state.allStackComponents track by component.uuid' ng-click='self.toggleStackComponentForCurrentItem(component)', - ng-repeat='component in self.state.componentStack track by component.uuid' ) .sk-app-bar-item-column .sk-circle.small( @@ -250,10 +250,9 @@ .sk-label {{component.name}} .sn-component component-view.component-view.component-stack-item( - component='component', + ng-repeat='component in self.activeStackComponents track by component.uuid', + component-uuid='component.uuid', manual-dealloc='true', - ng-if='component.active', - ng-repeat='component in self.state.componentStack track by component.uuid', ng-show='!component.hidden', application='self.application' ) diff --git a/app/assets/javascripts/views/editor/editor_view.ts b/app/assets/javascripts/views/editor/editor_view.ts index d4242bdcb..73d128dbc 100644 --- a/app/assets/javascripts/views/editor/editor_view.ts +++ b/app/assets/javascripts/views/editor/editor_view.ts @@ -58,15 +58,16 @@ type NoteStatus = { } type EditorState = { + allStackComponents: SNComponent[] + activeEditorComponent?: SNComponent + activeTagsComponent?: SNComponent + activeStackComponents: SNComponent[] saveError?: any - editorComponent?: SNComponent noteStatus?: NoteStatus tagsAsStrings?: string marginResizersEnabled?: boolean monospaceEnabled?: boolean isDesktop?: boolean - tagsComponent?: SNComponent - componentStack?: SNComponent[] syncTakingTooLong: boolean showExtensions: boolean noteReady: boolean @@ -106,6 +107,7 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { private removeTrashKeyObserver?: any private removeDeleteKeyObserver?: any private removeTabObserver?: any + private removeComponentObserver: any prefKeyMonospace: string prefKeySpellcheck: string @@ -133,6 +135,8 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { } deinit() { + this.removeComponentObserver(); + this.removeComponentObserver = undefined; this.removeAltKeyObserver(); this.removeAltKeyObserver = undefined; this.removeTrashKeyObserver(); @@ -173,20 +177,29 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { this.editorValues.text = note.text; this.reloadTagsString(); } + }); + this.removeComponentObserver = this.componentGroup.addChangeObserver(() => { + this.setEditorState({ + activeEditorComponent: this.componentGroup.activeComponentForArea(ComponentArea.Editor), + activeTagsComponent: this.componentGroup.activeComponentForArea(ComponentArea.NoteTags), + activeStackComponents: this.componentGroup.activeComponentsForArea(ComponentArea.EditorStack) + }) }) } /** @override */ getInitialState() { return { - componentStack: [], + allStackComponents: [], + activeStackComponents: [], editorDebounce: EDITOR_DEBOUNCE, isDesktop: isDesktopApplication(), spellcheck: true, + noteReady: true, mutable: { tagsString: '' } - }; + } as Partial; } async setEditorState(state: Partial) { @@ -238,6 +251,22 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { } } + get activeEditorComponent() { + return this.getState().activeEditorComponent; + } + + get activeTagsComponent() { + return this.getState().activeTagsComponent; + } + + get activeStackComponents() { + return this.getState().activeStackComponents; + } + + get componentGroup() { + return this.application.componentGroup; + } + async handleEditorNoteChange() { const note = this.editor.note; await this.setEditorState({ @@ -248,31 +277,7 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { }); this.editorValues.title = note.title; this.editorValues.text = note.text; - if (!note) { - this.setEditorState({ - noteReady: false - }); - return; - } - const associatedEditor = this.editorForNote(note); - if (associatedEditor && associatedEditor !== this.getState().editorComponent) { - /** - * Setting note to not ready will remove the editor from view in a flash, - * so we only want to do this if switching between external editors - */ - this.setEditorState({ - noteReady: false, - editorComponent: associatedEditor - }); - } else if (!associatedEditor) { - /** No editor */ - this.setEditorState({ - editorComponent: undefined - }); - } - await this.setEditorState({ - noteReady: true, - }); + await this.reloadComponentEditorState(); this.reloadTagsString(); this.reloadPreferences(); if (note.safeText().length === 0) { @@ -281,6 +286,19 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { this.reloadComponentContext(); } + async reloadComponentEditorState() { + const associatedEditor = this.application.componentManager!.editorForNote(this.note) + if (associatedEditor && associatedEditor !== this.activeEditorComponent) { + /** Setting note to not ready will remove the editor from view in a flash, + * so we only want to do this if switching between external editors */ + await this.componentGroup.activateComponent(associatedEditor); + } else if (!associatedEditor) { + /** No editor */ + await this.componentGroup.deactivateComponentForArea(ComponentArea.Editor); + } + return associatedEditor; + } + /** * Because note.locked accesses note.content.appData, @@ -334,10 +352,7 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { return; } /** Find the most recent editor for note */ - const editor = this.editorForNote(this.note); - this.setEditorState({ - editorComponent: editor - }); + const editor = this.reloadComponentEditorState(); if (!editor) { this.reloadFont(); } @@ -345,10 +360,6 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { ); } - editorForNote(note: SNNote) { - return this.application.componentManager!.editorForNote(note); - } - setMenuState(menu: string, state: boolean) { this.setEditorState({ [menu]: state @@ -376,42 +387,39 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { this.setEditorState(menuState); } - editorMenuOnSelect(component: SNComponent) { - if (!component || component.area === 'editor-editor') { - /** If plain editor or other editor */ - this.setMenuState('showEditorMenu', false); - const editor = component; - if (this.getState().editorComponent && editor !== this.getState().editorComponent) { - this.disassociateComponentWithCurrentNote(this.getState().editorComponent!); + async editorMenuOnSelect(component?: SNComponent) { + this.setMenuState('showEditorMenu', false); + if (!component) { + if (!this.note.prefersPlainEditor) { + await this.application.changeItem(this.note.uuid, (mutator) => { + const noteMutator = mutator as NoteMutator; + noteMutator.prefersPlainEditor = true; + }) } - const note = this.note; - if (editor) { - const prefersPlain = note.prefersPlainEditor; - if (prefersPlain) { - this.application.changeItem(note.uuid, (mutator) => { - const noteMutator = mutator as NoteMutator; - noteMutator.prefersPlainEditor = false; - }) - } - this.associateComponentWithCurrentNote(editor); - } else { - /** Note prefers plain editor */ - if (!note.prefersPlainEditor) { - this.application.changeItem(note.uuid, (mutator) => { - const noteMutator = mutator as NoteMutator; - noteMutator.prefersPlainEditor = true; - }) - } - this.reloadFont(); + if(this.activeEditorComponent?.isExplicitlyEnabledForItem(this.note)) { + await this.disassociateComponentWithCurrentNote(this.activeEditorComponent); } - - this.setEditorState({ - editorComponent: editor - }); - } else if (component.area === 'editor-stack') { - this.toggleStackComponentForCurrentItem(component); + await this.componentGroup.deactivateComponentForArea(ComponentArea.Editor); + this.reloadFont(); + } + else if (component.area === ComponentArea.Editor) { + const currentEditor = this.activeEditorComponent; + if (currentEditor && component !== currentEditor) { + await this.disassociateComponentWithCurrentNote(currentEditor); + } + const prefersPlain = this.note.prefersPlainEditor; + if (prefersPlain) { + await this.application.changeItem(this.note.uuid, (mutator) => { + const noteMutator = mutator as NoteMutator; + noteMutator.prefersPlainEditor = false; + }) + } + await this.associateComponentWithCurrentNote(component); + await this.componentGroup.activateComponent(component); + } + else if (component.area === ComponentArea.EditorStack) { + await this.toggleStackComponentForCurrentItem(component); } - /** Dirtying can happen above */ this.application.sync(); } @@ -980,55 +988,16 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { ComponentArea.Editor ], activationHandler: (component) => { - if (component.area === 'note-tags') { - this.setEditorState({ - tagsComponent: component.active ? component : undefined - }); - } else if (component.area === 'editor-editor') { - if ( - component === this.getState().editorComponent && - !component.active - ) { - this.setEditorState({ editorComponent: undefined }); - } - else if (this.getState().editorComponent) { - if (this.getState().editorComponent!.active && this.note) { - if ( - component.isExplicitlyEnabledForItem(this.note) - && !this.getState().editorComponent!.isExplicitlyEnabledForItem(this.note) - ) { - this.setEditorState({ editorComponent: component }); - } - } - } - else if (this.note) { - const enableable = ( - component.isExplicitlyEnabledForItem(this.note) - || component.isDefaultEditor() - ); - if ( - component.active - && enableable - ) { - this.setEditorState({ editorComponent: component }); - } else { - /** - * Not a candidate, and no qualified editor. - * Disable the current editor. - */ - this.setEditorState({ editorComponent: undefined }); - } - } - - } else if (component.area === 'editor-stack') { + if (component.area === ComponentArea.EditorStack) { this.reloadComponentContext(); } }, contextRequestHandler: (component) => { + const currentEditor = this.activeEditorComponent; if ( - component === this.getState().editorComponent || - component === this.getState().tagsComponent || - this.getState().componentStack!.includes(component) + component === currentEditor || + component === this.activeTagsComponent || + this.activeStackComponents.includes(component) ) { return this.note; } @@ -1040,7 +1009,10 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { }, actionHandler: (component, action, data) => { if (action === ComponentAction.SetSize) { - const setSize = function (element: HTMLElement, size: { width: number, height: number }) { + const setSize = ( + element: HTMLElement, + size: { width: number, height: number } + ) => { const widthString = typeof size.width === 'string' ? size.width : `${data.width}px`; @@ -1089,16 +1061,15 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { .sort((a, b) => { return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; }); - this.setEditorState({ - componentStack: components + allStackComponents: components }); } reloadComponentContext() { this.reloadComponentStackArray(); if (this.note) { - for (const component of this.getState().componentStack!) { + for (const component of this.getState().allStackComponents!) { if (component.active) { this.application.componentManager!.setComponentHidden( component, @@ -1113,33 +1084,34 @@ class EditorViewCtrl extends PureViewCtrl implements EditorViewScope { this.application.componentManager!.contextItemDidChangeInArea(ComponentArea.Editor); } - toggleStackComponentForCurrentItem(component: SNComponent) { + async toggleStackComponentForCurrentItem(component: SNComponent) { const hidden = this.application.componentManager!.isComponentHidden(component); if (hidden || !component.active) { this.application.componentManager!.setComponentHidden(component, false); - this.associateComponentWithCurrentNote(component); + await this.associateComponentWithCurrentNote(component); if (!component.active) { this.application.componentManager!.activateComponent(component); } this.application.componentManager!.contextItemDidChangeInArea(ComponentArea.EditorStack); } else { this.application.componentManager!.setComponentHidden(component, true); - this.disassociateComponentWithCurrentNote(component); + await this.disassociateComponentWithCurrentNote(component); } + this.application.sync(); } - disassociateComponentWithCurrentNote(component: SNComponent) { + async disassociateComponentWithCurrentNote(component: SNComponent) { const note = this.note; - this.application.changeAndSaveItem(component.uuid, (m) => { + return this.application.changeItem(component.uuid, (m) => { const mutator = m as ComponentMutator; mutator.removeAssociatedItemId(note.uuid); mutator.disassociateWithItem(note); }) } - associateComponentWithCurrentNote(component: SNComponent) { + async associateComponentWithCurrentNote(component: SNComponent) { const note = this.note; - this.application.changeAndSaveItem(component.uuid, (m) => { + return this.application.changeItem(component.uuid, (m) => { const mutator = m as ComponentMutator; mutator.removeDisassociatedItemId(note.uuid); mutator.associateWithItem(note); diff --git a/app/assets/javascripts/views/tags/tags-view.pug b/app/assets/javascripts/views/tags/tags-view.pug index e0787e6a4..fa2a3f62a 100644 --- a/app/assets/javascripts/views/tags/tags-view.pug +++ b/app/assets/javascripts/views/tags/tags-view.pug @@ -1,7 +1,7 @@ #tags-column.sn-component.section.tags(aria-label='Tags') .component-view-container(ng-if='self.component.active') component-view.component-view( - component='self.component', + component-uuid='self.component.uuid', application='self.application' ) #tags-content.content(ng-if='!(self.component && self.component.active)') diff --git a/app/assets/templates/directives/component-modal.pug b/app/assets/templates/directives/component-modal.pug index 08a0ad888..6c0f37194 100644 --- a/app/assets/templates/directives/component-modal.pug +++ b/app/assets/templates/directives/component-modal.pug @@ -11,6 +11,6 @@ | {{ctrl.component.name}} a.sk-a.info.close-button(ng-click="ctrl.dismiss()") Close component-view.component-view( - component="ctrl.component", + component-uuid="ctrl.component.uuid", application='ctrl.application' ) diff --git a/app/assets/templates/directives/revision-preview-modal.pug b/app/assets/templates/directives/revision-preview-modal.pug index af9d1f2bd..5471a4dda 100644 --- a/app/assets/templates/directives/revision-preview-modal.pug +++ b/app/assets/templates/directives/revision-preview-modal.pug @@ -22,7 +22,7 @@ style="white-space: pre-wrap; font-size: 16px;" ) {{ctrl.content.text}} component-view.component-view( - component="ctrl.editor" + component-uuid="ctrl.editor.uuid" ng-if="ctrl.editor", application='ctrl.application' ) diff --git a/dist/@types/app/assets/javascripts/interface.d.ts b/dist/@types/app/assets/javascripts/interface.d.ts new file mode 100644 index 000000000..9ddc931e1 --- /dev/null +++ b/dist/@types/app/assets/javascripts/interface.d.ts @@ -0,0 +1,29 @@ +import { DeviceInterface, SNApplication } from 'snjs'; +export declare class WebDeviceInterface extends DeviceInterface { + private database; + constructor(namespace: string, timeout: any); + setApplication(application: SNApplication): void; + deinit(): void; + getRawStorageValue(key: string): Promise; + getAllRawStorageKeyValues(): Promise<{ + key: string; + value: any; + }[]>; + setRawStorageValue(key: string, value: any): Promise; + removeRawStorageValue(key: string): Promise; + removeAllRawStorageValues(): Promise; + openDatabase(): Promise<{ + isNewDatabase?: boolean | undefined; + } | undefined>; + private getDatabaseKeyPrefix; + private keyForPayloadId; + getAllRawDatabasePayloads(): Promise; + saveRawDatabasePayload(payload: any): Promise; + saveRawDatabasePayloads(payloads: any[]): Promise; + removeRawDatabasePayloadWithId(id: string): Promise; + removeAllRawDatabasePayloads(): Promise; + getKeychainValue(): Promise; + setKeychainValue(value: any): Promise; + clearKeychainValue(): Promise; + openUrl(url: string): void; +} diff --git a/dist/@types/app/assets/javascripts/ui_models/application.d.ts b/dist/@types/app/assets/javascripts/ui_models/application.d.ts index bd609af0a..41e622e92 100644 --- a/dist/@types/app/assets/javascripts/ui_models/application.d.ts +++ b/dist/@types/app/assets/javascripts/ui_models/application.d.ts @@ -1,4 +1,5 @@ /// +import { ComponentGroup } from './component_group'; import { EditorGroup } from '@/ui_models/editor_group'; import { PasswordWizardType } from '@/types'; import { SNApplication, Challenge, ChallengeOrchestrator, ProtectedAction } from 'snjs'; @@ -21,27 +22,19 @@ export declare class WebApplication extends SNApplication { private webServices; private currentAuthenticationElement?; editorGroup: EditorGroup; + componentGroup: ComponentGroup; constructor($compile: ng.ICompileService, $timeout: ng.ITimeoutService, scope: ng.IScope, onDeinit: (app: WebApplication) => void); /** @override */ deinit(): void; setWebServices(services: WebServices): void; - /** @access public */ getAppState(): AppState; - /** @access public */ getDesktopService(): DesktopManager; - /** @access public */ getLockService(): LockManager; - /** @access public */ getArchiveService(): ArchiveManager; - /** @access public */ getNativeExtService(): NativeExtManager; - /** @access public */ getStatusService(): StatusManager; - /** @access public */ getThemeService(): ThemeManager; - /** @access public */ getPrefsService(): PreferencesManager; - /** @access public */ getKeyboardService(): KeyboardManager; checkForSecurityUpdate(): Promise; presentPasswordWizard(type: PasswordWizardType): void; diff --git a/dist/@types/app/assets/javascripts/ui_models/component_group.d.ts b/dist/@types/app/assets/javascripts/ui_models/component_group.d.ts new file mode 100644 index 000000000..6ddc701e2 --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/component_group.d.ts @@ -0,0 +1,23 @@ +import { SNComponent, ComponentArea } from 'snjs'; +import { WebApplication } from './application'; +export declare class ComponentGroup { + private application; + changeObservers: any[]; + activeComponents: Partial>; + constructor(application: WebApplication); + get componentManager(): import("../../../../../snjs/dist/@types").SNComponentManager; + deinit(): void; + registerComponentHandler(): void; + activateComponent(component: SNComponent): Promise; + deactivateComponent(component: SNComponent): Promise; + deactivateComponentForArea(area: ComponentArea): Promise; + activeComponentForArea(area: ComponentArea): SNComponent; + activeComponentsForArea(area: ComponentArea): SNComponent[]; + allComponentsForArea(area: ComponentArea): SNComponent[]; + private allActiveComponents; + /** + * Notifies observer when the active editor has changed. + */ + addChangeObserver(callback: any): void; + private notifyObservers; +} diff --git a/dist/@types/app/assets/javascripts/utils.d.ts b/dist/@types/app/assets/javascripts/utils.d.ts index e35b23e08..4200bee15 100644 --- a/dist/@types/app/assets/javascripts/utils.d.ts +++ b/dist/@types/app/assets/javascripts/utils.d.ts @@ -1,6 +1,6 @@ export declare function getParameterByName(name: string, url: string): string | null; export declare function isNullOrUndefined(value: any): boolean; -export declare function dictToArray(dict: any): any[]; +export declare function dictToArray(dict: Record): NonNullable[]; export declare function getPlatformString(): string; export declare function dateToLocalizedString(date: Date): string; /** Via https://davidwalsh.name/javascript-debounce-function */ diff --git a/dist/javascripts/app.js b/dist/javascripts/app.js index 4c26af63f..ba6f6ee0c 100644 --- a/dist/javascripts/app.js +++ b/dist/javascripts/app.js @@ -261,7 +261,7 @@ !*** ./lib/events.ts ***! \***********************/ /*! exports provided: SyncEvent, ApplicationEvent, applicationEventForSyncEvent */ /***/function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);/* harmony export (binding) */__webpack_require__.d(__webpack_exports__,"ApplicationEvent",function(){return ApplicationEvent;});/* harmony export (binding) */__webpack_require__.d(__webpack_exports__,"applicationEventForSyncEvent",function(){return applicationEventForSyncEvent;});/* harmony import */var _Services_sync_events__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(/*! @Services/sync/events */"./lib/services/sync/events.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncEvent",function(){return _Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"];});function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}var ApplicationEvent;(function(ApplicationEvent){ApplicationEvent[ApplicationEvent["SignedIn"]=2]="SignedIn";ApplicationEvent[ApplicationEvent["SignedOut"]=3]="SignedOut";ApplicationEvent[ApplicationEvent["CompletedSync"]=5]="CompletedSync";ApplicationEvent[ApplicationEvent["FailedSync"]=6]="FailedSync";ApplicationEvent[ApplicationEvent["HighLatencySync"]=7]="HighLatencySync";ApplicationEvent[ApplicationEvent["EnteredOutOfSync"]=8]="EnteredOutOfSync";ApplicationEvent[ApplicationEvent["ExitedOutOfSync"]=9]="ExitedOutOfSync";ApplicationEvent[ApplicationEvent["Started"]=10]="Started";ApplicationEvent[ApplicationEvent["Launched"]=11]="Launched";ApplicationEvent[ApplicationEvent["LocalDataLoaded"]=12]="LocalDataLoaded";ApplicationEvent[ApplicationEvent["KeyStatusChanged"]=13]="KeyStatusChanged";ApplicationEvent[ApplicationEvent["MajorDataChange"]=14]="MajorDataChange";ApplicationEvent[ApplicationEvent["CompletedRestart"]=15]="CompletedRestart";ApplicationEvent[ApplicationEvent["LocalDataIncrementalLoad"]=16]="LocalDataIncrementalLoad";ApplicationEvent[ApplicationEvent["SyncStatusChanged"]=17]="SyncStatusChanged";ApplicationEvent[ApplicationEvent["WillSync"]=18]="WillSync";ApplicationEvent[ApplicationEvent["InvalidSyncSession"]=19]="InvalidSyncSession";ApplicationEvent[ApplicationEvent["LocalDatabaseReadError"]=20]="LocalDatabaseReadError";ApplicationEvent[ApplicationEvent["LocalDatabaseWriteError"]=21]="LocalDatabaseWriteError";})(ApplicationEvent||(ApplicationEvent={}));;function applicationEventForSyncEvent(syncEvent){var _SyncEvent$FullSyncCo;return(_SyncEvent$FullSyncCo={},_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].FullSyncCompleted,ApplicationEvent.CompletedSync),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].SyncError,ApplicationEvent.FailedSync),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].SyncTakingTooLong,ApplicationEvent.HighLatencySync),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].EnterOutOfSync,ApplicationEvent.EnteredOutOfSync),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].ExitOutOfSync,ApplicationEvent.ExitedOutOfSync),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].LocalDataLoaded,ApplicationEvent.LocalDataLoaded),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].MajorDataChange,ApplicationEvent.MajorDataChange),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].LocalDataIncrementalLoad,ApplicationEvent.LocalDataIncrementalLoad),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].StatusChanged,ApplicationEvent.SyncStatusChanged),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].SyncWillBegin,ApplicationEvent.WillSync),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].InvalidSession,ApplicationEvent.InvalidSyncSession),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].DatabaseReadError,ApplicationEvent.LocalDatabaseReadError),_defineProperty(_SyncEvent$FullSyncCo,_Services_sync_events__WEBPACK_IMPORTED_MODULE_0__["SyncEvent"].DatabaseWriteError,ApplicationEvent.LocalDatabaseWriteError),_SyncEvent$FullSyncCo)[syncEvent];}/***/},/***/"./lib/index.ts":/*!**********************!*\ !*** ./lib/index.ts ***! - \**********************/ /*! exports provided: SNApplication, SNProtocolService, KeyMode, SNProtocolOperator001, SNProtocolOperator002, SNProtocolOperator003, SNProtocolOperator004, DeviceInterface, SNItem, ItemMutator, AppDataField, SNItemsKey, SNPredicate, SNNote, NoteMutator, SNTag, SNSmartTag, SNActionsExtension, Action, SNTheme, SNComponent, ComponentAction, ComponentMutator, SNEditor, SNUserPrefs, UserPrefsMutator, WebPrefKey, ComponentArea, SNComponentManager, HistorySession, ItemHistory, ItemHistoryEntry, SNPrivileges, ProtectedAction, PrivilegeCredential, SNWebCrypto, PayloadManager, ItemManager, SNHttpService, ChallengeService, ChallengeOrchestrator, PureService, ApplicationService, SNStorageService, StoragePersistencePolicies, StorageEncryptionPolicies, StorageValueModes, ValueModesKeys, Challenge, ChallengeReason, ChallengeResponse, ChallengeType, challengeTypeToString, ChallengeValue, SNSyncService, SyncSources, SyncModes, SyncQueueStrategy, SNSessionManager, SNMigrationService, SNAlertService, SNHistoryManager, SNPrivilegesService, SNSingletonManager, SNApiService, findInArray, isNullOrUndefined, deepMerge, extendArray, removeFromIndex, subtractFromArray, arrayByDifference, uniqCombineObjArrays, greaterOfTwoDates, getGlobalScope, removeFromArray, truncateHexString, jsonParseEmbeddedKeys, Copy, Uuid, EncryptionIntent, isLocalStorageIntent, isFileIntent, isDecryptedIntent, intentRequiresEncryption, ContentType, CreateItemFromPayload, Uuids, FillItemContent, ApplicationEvent, Environment, Platform, isEnvironmentWebOrDesktop, isEnvironmentMobile, platformFromString, SyncEvent, MutableCollection, ImmutablePayloadCollection, CreateMaxPayloadFromAnyObject, CreateSourcedPayloadFromObject, CreateIntentPayloadFromObject, CreateEncryptionParameters, PayloadByMerging, CopyPayload, PayloadSource, isPayloadSourceRetrieved, ProtocolVersion, PayloadFormat, PurePayload, PayloadField, StorageKey, BaseMigration, PrivilegeSessionLength */ /***/function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);/* harmony import */var _Lib_application__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(/*! @Lib/application */"./lib/application.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNApplication",function(){return _Lib_application__WEBPACK_IMPORTED_MODULE_0__["SNApplication"];});/* harmony import */var _Services_protocol_service__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(/*! @Services/protocol_service */"./lib/services/protocol_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolService",function(){return _Services_protocol_service__WEBPACK_IMPORTED_MODULE_1__["SNProtocolService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"KeyMode",function(){return _Services_protocol_service__WEBPACK_IMPORTED_MODULE_1__["KeyMode"];});/* harmony import */var _Protocol_operator_001_operator_001__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(/*! @Protocol/operator/001/operator_001 */"./lib/protocol/operator/001/operator_001.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator001",function(){return _Protocol_operator_001_operator_001__WEBPACK_IMPORTED_MODULE_2__["SNProtocolOperator001"];});/* harmony import */var _Protocol_operator_002_operator_002__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(/*! @Protocol/operator/002/operator_002 */"./lib/protocol/operator/002/operator_002.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator002",function(){return _Protocol_operator_002_operator_002__WEBPACK_IMPORTED_MODULE_3__["SNProtocolOperator002"];});/* harmony import */var _Protocol_operator_003_operator_003__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(/*! @Protocol/operator/003/operator_003 */"./lib/protocol/operator/003/operator_003.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator003",function(){return _Protocol_operator_003_operator_003__WEBPACK_IMPORTED_MODULE_4__["SNProtocolOperator003"];});/* harmony import */var _Protocol_operator_004_operator_004__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(/*! @Protocol/operator/004/operator_004 */"./lib/protocol/operator/004/operator_004.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator004",function(){return _Protocol_operator_004_operator_004__WEBPACK_IMPORTED_MODULE_5__["SNProtocolOperator004"];});/* harmony import */var _Lib_device_interface__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(/*! @Lib/device_interface */"./lib/device_interface.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"DeviceInterface",function(){return _Lib_device_interface__WEBPACK_IMPORTED_MODULE_6__["DeviceInterface"];});/* harmony import */var _models__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(/*! ./models */"./lib/models/index.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNItem",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNItem"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["ItemMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"AppDataField",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["AppDataField"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNItemsKey",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNItemsKey"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNPredicate",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNPredicate"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNNote",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNNote"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"NoteMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["NoteMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNTag",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNTag"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSmartTag",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNSmartTag"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNActionsExtension",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNActionsExtension"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Action",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["Action"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNTheme",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNTheme"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNComponent",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNComponent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ComponentAction",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["ComponentAction"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ComponentMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["ComponentMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNEditor",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNEditor"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNUserPrefs",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNUserPrefs"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"UserPrefsMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["UserPrefsMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"WebPrefKey",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["WebPrefKey"];});/* harmony import */var _models_app_component__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(/*! ./models/app/component */"./lib/models/app/component.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ComponentArea",function(){return _models_app_component__WEBPACK_IMPORTED_MODULE_8__["ComponentArea"];});/* harmony import */var _services_component_manager__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(/*! ./services/component_manager */"./lib/services/component_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNComponentManager",function(){return _services_component_manager__WEBPACK_IMPORTED_MODULE_9__["SNComponentManager"];});/* harmony import */var _Services_history_history_session__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(/*! @Services/history/history_session */"./lib/services/history/history_session.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"HistorySession",function(){return _Services_history_history_session__WEBPACK_IMPORTED_MODULE_10__["HistorySession"];});/* harmony import */var _Services_history_item_history__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__(/*! @Services/history/item_history */"./lib/services/history/item_history.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemHistory",function(){return _Services_history_item_history__WEBPACK_IMPORTED_MODULE_11__["ItemHistory"];});/* harmony import */var _Services_history_item_history_entry__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__(/*! @Services/history/item_history_entry */"./lib/services/history/item_history_entry.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemHistoryEntry",function(){return _Services_history_item_history_entry__WEBPACK_IMPORTED_MODULE_12__["ItemHistoryEntry"];});/* harmony import */var _models_app_privileges__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__(/*! ./models/app/privileges */"./lib/models/app/privileges.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNPrivileges",function(){return _models_app_privileges__WEBPACK_IMPORTED_MODULE_13__["SNPrivileges"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ProtectedAction",function(){return _models_app_privileges__WEBPACK_IMPORTED_MODULE_13__["ProtectedAction"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PrivilegeCredential",function(){return _models_app_privileges__WEBPACK_IMPORTED_MODULE_13__["PrivilegeCredential"];});/* harmony import */var sncrypto__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__(/*! sncrypto */"./node_modules/sncrypto/dist/sncrypto.js");/* harmony import */var sncrypto__WEBPACK_IMPORTED_MODULE_14___default=/*#__PURE__*/__webpack_require__.n(sncrypto__WEBPACK_IMPORTED_MODULE_14__);/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNWebCrypto",function(){return sncrypto__WEBPACK_IMPORTED_MODULE_14__["SNWebCrypto"];});/* harmony import */var _services_model_manager__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__(/*! ./services/model_manager */"./lib/services/model_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadManager",function(){return _services_model_manager__WEBPACK_IMPORTED_MODULE_15__["PayloadManager"];});/* harmony import */var _services_item_manager__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__(/*! ./services/item_manager */"./lib/services/item_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemManager",function(){return _services_item_manager__WEBPACK_IMPORTED_MODULE_16__["ItemManager"];});/* harmony import */var _services_api_http_service__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__(/*! ./services/api/http_service */"./lib/services/api/http_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNHttpService",function(){return _services_api_http_service__WEBPACK_IMPORTED_MODULE_17__["SNHttpService"];});/* harmony import */var _services_challenge_service__WEBPACK_IMPORTED_MODULE_18__=__webpack_require__(/*! ./services/challenge_service */"./lib/services/challenge_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeService",function(){return _services_challenge_service__WEBPACK_IMPORTED_MODULE_18__["ChallengeService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeOrchestrator",function(){return _services_challenge_service__WEBPACK_IMPORTED_MODULE_18__["ChallengeOrchestrator"];});/* harmony import */var _Services_pure_service__WEBPACK_IMPORTED_MODULE_19__=__webpack_require__(/*! @Services/pure_service */"./lib/services/pure_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PureService",function(){return _Services_pure_service__WEBPACK_IMPORTED_MODULE_19__["PureService"];});/* harmony import */var _Services_application_service__WEBPACK_IMPORTED_MODULE_20__=__webpack_require__(/*! @Services/application_service */"./lib/services/application_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ApplicationService",function(){return _Services_application_service__WEBPACK_IMPORTED_MODULE_20__["ApplicationService"];});/* harmony import */var _services_storage_service__WEBPACK_IMPORTED_MODULE_21__=__webpack_require__(/*! ./services/storage_service */"./lib/services/storage_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNStorageService",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_21__["SNStorageService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StoragePersistencePolicies",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_21__["StoragePersistencePolicies"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StorageEncryptionPolicies",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_21__["StorageEncryptionPolicies"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StorageValueModes",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_21__["StorageValueModes"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ValueModesKeys",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_21__["ValueModesKeys"];});/* harmony import */var _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__=__webpack_require__(/*! @Lib/challenges */"./lib/challenges.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Challenge",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__["Challenge"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeReason",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__["ChallengeReason"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeResponse",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__["ChallengeResponse"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeType",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__["ChallengeType"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"challengeTypeToString",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__["challengeTypeToString"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeValue",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_22__["ChallengeValue"];});/* harmony import */var _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_23__=__webpack_require__(/*! ./services/sync/sync_service */"./lib/services/sync/sync_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSyncService",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_23__["SNSyncService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncSources",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_23__["SyncSources"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncModes",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_23__["SyncModes"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncQueueStrategy",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_23__["SyncQueueStrategy"];});/* harmony import */var _services_api_session_manager__WEBPACK_IMPORTED_MODULE_24__=__webpack_require__(/*! ./services/api/session_manager */"./lib/services/api/session_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSessionManager",function(){return _services_api_session_manager__WEBPACK_IMPORTED_MODULE_24__["SNSessionManager"];});/* harmony import */var _services_migration_service__WEBPACK_IMPORTED_MODULE_25__=__webpack_require__(/*! ./services/migration_service */"./lib/services/migration_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNMigrationService",function(){return _services_migration_service__WEBPACK_IMPORTED_MODULE_25__["SNMigrationService"];});/* harmony import */var _services_alert_service__WEBPACK_IMPORTED_MODULE_26__=__webpack_require__(/*! ./services/alert_service */"./lib/services/alert_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNAlertService",function(){return _services_alert_service__WEBPACK_IMPORTED_MODULE_26__["SNAlertService"];});/* harmony import */var _services_history_history_manager__WEBPACK_IMPORTED_MODULE_27__=__webpack_require__(/*! ./services/history/history_manager */"./lib/services/history/history_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNHistoryManager",function(){return _services_history_history_manager__WEBPACK_IMPORTED_MODULE_27__["SNHistoryManager"];});/* harmony import */var _services_privileges_service__WEBPACK_IMPORTED_MODULE_28__=__webpack_require__(/*! ./services/privileges_service */"./lib/services/privileges_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNPrivilegesService",function(){return _services_privileges_service__WEBPACK_IMPORTED_MODULE_28__["SNPrivilegesService"];});/* harmony import */var _services_singleton_manager__WEBPACK_IMPORTED_MODULE_29__=__webpack_require__(/*! ./services/singleton_manager */"./lib/services/singleton_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSingletonManager",function(){return _services_singleton_manager__WEBPACK_IMPORTED_MODULE_29__["SNSingletonManager"];});/* harmony import */var _services_api_api_service__WEBPACK_IMPORTED_MODULE_30__=__webpack_require__(/*! ./services/api/api_service */"./lib/services/api/api_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNApiService",function(){return _services_api_api_service__WEBPACK_IMPORTED_MODULE_30__["SNApiService"];});/* harmony import */var _utils__WEBPACK_IMPORTED_MODULE_31__=__webpack_require__(/*! ./utils */"./lib/utils.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"findInArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["findInArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isNullOrUndefined",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["isNullOrUndefined"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"deepMerge",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["deepMerge"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"extendArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["extendArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"removeFromIndex",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["removeFromIndex"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"subtractFromArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["subtractFromArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"arrayByDifference",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["arrayByDifference"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"uniqCombineObjArrays",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["uniqCombineObjArrays"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"greaterOfTwoDates",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["greaterOfTwoDates"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"getGlobalScope",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["getGlobalScope"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"removeFromArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["removeFromArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"truncateHexString",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["truncateHexString"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"jsonParseEmbeddedKeys",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["jsonParseEmbeddedKeys"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Copy",function(){return _utils__WEBPACK_IMPORTED_MODULE_31__["Copy"];});/* harmony import */var _Lib_uuid__WEBPACK_IMPORTED_MODULE_32__=__webpack_require__(/*! @Lib/uuid */"./lib/uuid.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Uuid",function(){return _Lib_uuid__WEBPACK_IMPORTED_MODULE_32__["Uuid"];});/* harmony import */var _Protocol_intents__WEBPACK_IMPORTED_MODULE_33__=__webpack_require__(/*! @Protocol/intents */"./lib/protocol/intents.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"EncryptionIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_33__["EncryptionIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isLocalStorageIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_33__["isLocalStorageIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isFileIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_33__["isFileIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isDecryptedIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_33__["isDecryptedIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"intentRequiresEncryption",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_33__["intentRequiresEncryption"];});/* harmony import */var _Models_content_types__WEBPACK_IMPORTED_MODULE_34__=__webpack_require__(/*! @Models/content_types */"./lib/models/content_types.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ContentType",function(){return _Models_content_types__WEBPACK_IMPORTED_MODULE_34__["ContentType"];});/* harmony import */var _Models_generator__WEBPACK_IMPORTED_MODULE_35__=__webpack_require__(/*! @Models/generator */"./lib/models/generator.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateItemFromPayload",function(){return _Models_generator__WEBPACK_IMPORTED_MODULE_35__["CreateItemFromPayload"];});/* harmony import */var _Models_functions__WEBPACK_IMPORTED_MODULE_36__=__webpack_require__(/*! @Models/functions */"./lib/models/functions.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Uuids",function(){return _Models_functions__WEBPACK_IMPORTED_MODULE_36__["Uuids"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"FillItemContent",function(){return _Models_functions__WEBPACK_IMPORTED_MODULE_36__["FillItemContent"];});/* harmony import */var _Lib_events__WEBPACK_IMPORTED_MODULE_37__=__webpack_require__(/*! @Lib/events */"./lib/events.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ApplicationEvent",function(){return _Lib_events__WEBPACK_IMPORTED_MODULE_37__["ApplicationEvent"];});/* harmony import */var _Lib_platforms__WEBPACK_IMPORTED_MODULE_38__=__webpack_require__(/*! @Lib/platforms */"./lib/platforms.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Environment",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_38__["Environment"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Platform",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_38__["Platform"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isEnvironmentWebOrDesktop",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_38__["isEnvironmentWebOrDesktop"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isEnvironmentMobile",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_38__["isEnvironmentMobile"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"platformFromString",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_38__["platformFromString"];});/* harmony import */var _Lib_services_sync_events__WEBPACK_IMPORTED_MODULE_39__=__webpack_require__(/*! @Lib/services/sync/events */"./lib/services/sync/events.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncEvent",function(){return _Lib_services_sync_events__WEBPACK_IMPORTED_MODULE_39__["SyncEvent"];});/* harmony import */var _Payloads_collection__WEBPACK_IMPORTED_MODULE_40__=__webpack_require__(/*! @Payloads/collection */"./lib/protocol/payloads/collection.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"MutableCollection",function(){return _Payloads_collection__WEBPACK_IMPORTED_MODULE_40__["MutableCollection"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ImmutablePayloadCollection",function(){return _Payloads_collection__WEBPACK_IMPORTED_MODULE_40__["ImmutablePayloadCollection"];});/* harmony import */var _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__=__webpack_require__(/*! @Payloads/generator */"./lib/protocol/payloads/generator.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateMaxPayloadFromAnyObject",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__["CreateMaxPayloadFromAnyObject"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateSourcedPayloadFromObject",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__["CreateSourcedPayloadFromObject"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateIntentPayloadFromObject",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__["CreateIntentPayloadFromObject"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateEncryptionParameters",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__["CreateEncryptionParameters"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadByMerging",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__["PayloadByMerging"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CopyPayload",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_41__["CopyPayload"];});/* harmony import */var _Lib_protocol_payloads_sources__WEBPACK_IMPORTED_MODULE_42__=__webpack_require__(/*! @Lib/protocol/payloads/sources */"./lib/protocol/payloads/sources.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadSource",function(){return _Lib_protocol_payloads_sources__WEBPACK_IMPORTED_MODULE_42__["PayloadSource"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isPayloadSourceRetrieved",function(){return _Lib_protocol_payloads_sources__WEBPACK_IMPORTED_MODULE_42__["isPayloadSourceRetrieved"];});/* harmony import */var _Lib_protocol_versions__WEBPACK_IMPORTED_MODULE_43__=__webpack_require__(/*! @Lib/protocol/versions */"./lib/protocol/versions.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ProtocolVersion",function(){return _Lib_protocol_versions__WEBPACK_IMPORTED_MODULE_43__["ProtocolVersion"];});/* harmony import */var _Payloads_formats__WEBPACK_IMPORTED_MODULE_44__=__webpack_require__(/*! @Payloads/formats */"./lib/protocol/payloads/formats.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadFormat",function(){return _Payloads_formats__WEBPACK_IMPORTED_MODULE_44__["PayloadFormat"];});/* harmony import */var _Payloads_pure_payload__WEBPACK_IMPORTED_MODULE_45__=__webpack_require__(/*! @Payloads/pure_payload */"./lib/protocol/payloads/pure_payload.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PurePayload",function(){return _Payloads_pure_payload__WEBPACK_IMPORTED_MODULE_45__["PurePayload"];});/* harmony import */var _Payloads_fields__WEBPACK_IMPORTED_MODULE_46__=__webpack_require__(/*! @Payloads/fields */"./lib/protocol/payloads/fields.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadField",function(){return _Payloads_fields__WEBPACK_IMPORTED_MODULE_46__["PayloadField"];});/* harmony import */var _Lib_storage_keys__WEBPACK_IMPORTED_MODULE_47__=__webpack_require__(/*! @Lib/storage_keys */"./lib/storage_keys.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StorageKey",function(){return _Lib_storage_keys__WEBPACK_IMPORTED_MODULE_47__["StorageKey"];});/* harmony import */var _Lib_migrations_2020_01_01_base__WEBPACK_IMPORTED_MODULE_48__=__webpack_require__(/*! @Lib/migrations/2020-01-01-base */"./lib/migrations/2020-01-01-base.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"BaseMigration",function(){return _Lib_migrations_2020_01_01_base__WEBPACK_IMPORTED_MODULE_48__["BaseMigration"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PrivilegeSessionLength",function(){return _services_privileges_service__WEBPACK_IMPORTED_MODULE_28__["PrivilegeSessionLength"];});/** Payloads */ /** Migrations */ /** Privileges */ /***/},/***/"./lib/migrations/2020-01-01-base.ts":/*!*******************************************!*\ + \**********************/ /*! exports provided: SNApplication, SNProtocolService, KeyMode, SNProtocolOperator001, SNProtocolOperator002, SNProtocolOperator003, SNProtocolOperator004, DeviceInterface, SNItem, ItemMutator, AppDataField, SNItemsKey, SNPredicate, SNNote, NoteMutator, SNTag, SNSmartTag, SNActionsExtension, Action, SNTheme, SNComponent, ComponentAction, ComponentMutator, SNEditor, SNUserPrefs, UserPrefsMutator, WebPrefKey, ComponentArea, LiveItem, SNComponentManager, HistorySession, ItemHistory, ItemHistoryEntry, SNPrivileges, ProtectedAction, PrivilegeCredential, SNWebCrypto, PayloadManager, ItemManager, SNHttpService, ChallengeService, ChallengeOrchestrator, PureService, ApplicationService, SNStorageService, StoragePersistencePolicies, StorageEncryptionPolicies, StorageValueModes, ValueModesKeys, Challenge, ChallengeReason, ChallengeResponse, ChallengeType, challengeTypeToString, ChallengeValue, SNSyncService, SyncSources, SyncModes, SyncQueueStrategy, SNSessionManager, SNMigrationService, SNAlertService, SNHistoryManager, SNPrivilegesService, SNSingletonManager, SNApiService, findInArray, isNullOrUndefined, deepMerge, extendArray, removeFromIndex, subtractFromArray, arrayByDifference, uniqCombineObjArrays, greaterOfTwoDates, getGlobalScope, removeFromArray, truncateHexString, jsonParseEmbeddedKeys, Copy, Uuid, EncryptionIntent, isLocalStorageIntent, isFileIntent, isDecryptedIntent, intentRequiresEncryption, ContentType, CreateItemFromPayload, Uuids, FillItemContent, ApplicationEvent, Environment, Platform, isEnvironmentWebOrDesktop, isEnvironmentMobile, platformFromString, SyncEvent, MutableCollection, ImmutablePayloadCollection, CreateMaxPayloadFromAnyObject, CreateSourcedPayloadFromObject, CreateIntentPayloadFromObject, CreateEncryptionParameters, PayloadByMerging, CopyPayload, PayloadSource, isPayloadSourceRetrieved, ProtocolVersion, PayloadFormat, PurePayload, PayloadField, StorageKey, BaseMigration, PrivilegeSessionLength */ /***/function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);/* harmony import */var _Lib_application__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(/*! @Lib/application */"./lib/application.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNApplication",function(){return _Lib_application__WEBPACK_IMPORTED_MODULE_0__["SNApplication"];});/* harmony import */var _Services_protocol_service__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(/*! @Services/protocol_service */"./lib/services/protocol_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolService",function(){return _Services_protocol_service__WEBPACK_IMPORTED_MODULE_1__["SNProtocolService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"KeyMode",function(){return _Services_protocol_service__WEBPACK_IMPORTED_MODULE_1__["KeyMode"];});/* harmony import */var _Protocol_operator_001_operator_001__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(/*! @Protocol/operator/001/operator_001 */"./lib/protocol/operator/001/operator_001.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator001",function(){return _Protocol_operator_001_operator_001__WEBPACK_IMPORTED_MODULE_2__["SNProtocolOperator001"];});/* harmony import */var _Protocol_operator_002_operator_002__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(/*! @Protocol/operator/002/operator_002 */"./lib/protocol/operator/002/operator_002.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator002",function(){return _Protocol_operator_002_operator_002__WEBPACK_IMPORTED_MODULE_3__["SNProtocolOperator002"];});/* harmony import */var _Protocol_operator_003_operator_003__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(/*! @Protocol/operator/003/operator_003 */"./lib/protocol/operator/003/operator_003.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator003",function(){return _Protocol_operator_003_operator_003__WEBPACK_IMPORTED_MODULE_4__["SNProtocolOperator003"];});/* harmony import */var _Protocol_operator_004_operator_004__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(/*! @Protocol/operator/004/operator_004 */"./lib/protocol/operator/004/operator_004.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNProtocolOperator004",function(){return _Protocol_operator_004_operator_004__WEBPACK_IMPORTED_MODULE_5__["SNProtocolOperator004"];});/* harmony import */var _Lib_device_interface__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(/*! @Lib/device_interface */"./lib/device_interface.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"DeviceInterface",function(){return _Lib_device_interface__WEBPACK_IMPORTED_MODULE_6__["DeviceInterface"];});/* harmony import */var _models__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(/*! ./models */"./lib/models/index.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNItem",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNItem"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["ItemMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"AppDataField",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["AppDataField"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNItemsKey",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNItemsKey"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNPredicate",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNPredicate"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNNote",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNNote"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"NoteMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["NoteMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNTag",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNTag"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSmartTag",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNSmartTag"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNActionsExtension",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNActionsExtension"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Action",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["Action"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNTheme",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNTheme"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNComponent",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNComponent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ComponentAction",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["ComponentAction"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ComponentMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["ComponentMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNEditor",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNEditor"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNUserPrefs",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["SNUserPrefs"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"UserPrefsMutator",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["UserPrefsMutator"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"WebPrefKey",function(){return _models__WEBPACK_IMPORTED_MODULE_7__["WebPrefKey"];});/* harmony import */var _models_app_component__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(/*! ./models/app/component */"./lib/models/app/component.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ComponentArea",function(){return _models_app_component__WEBPACK_IMPORTED_MODULE_8__["ComponentArea"];});/* harmony import */var _models_live_item__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(/*! ./models/live_item */"./lib/models/live_item.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"LiveItem",function(){return _models_live_item__WEBPACK_IMPORTED_MODULE_9__["LiveItem"];});/* harmony import */var _services_component_manager__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(/*! ./services/component_manager */"./lib/services/component_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNComponentManager",function(){return _services_component_manager__WEBPACK_IMPORTED_MODULE_10__["SNComponentManager"];});/* harmony import */var _Services_history_history_session__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__(/*! @Services/history/history_session */"./lib/services/history/history_session.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"HistorySession",function(){return _Services_history_history_session__WEBPACK_IMPORTED_MODULE_11__["HistorySession"];});/* harmony import */var _Services_history_item_history__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__(/*! @Services/history/item_history */"./lib/services/history/item_history.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemHistory",function(){return _Services_history_item_history__WEBPACK_IMPORTED_MODULE_12__["ItemHistory"];});/* harmony import */var _Services_history_item_history_entry__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__(/*! @Services/history/item_history_entry */"./lib/services/history/item_history_entry.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemHistoryEntry",function(){return _Services_history_item_history_entry__WEBPACK_IMPORTED_MODULE_13__["ItemHistoryEntry"];});/* harmony import */var _models_app_privileges__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__(/*! ./models/app/privileges */"./lib/models/app/privileges.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNPrivileges",function(){return _models_app_privileges__WEBPACK_IMPORTED_MODULE_14__["SNPrivileges"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ProtectedAction",function(){return _models_app_privileges__WEBPACK_IMPORTED_MODULE_14__["ProtectedAction"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PrivilegeCredential",function(){return _models_app_privileges__WEBPACK_IMPORTED_MODULE_14__["PrivilegeCredential"];});/* harmony import */var sncrypto__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__(/*! sncrypto */"./node_modules/sncrypto/dist/sncrypto.js");/* harmony import */var sncrypto__WEBPACK_IMPORTED_MODULE_15___default=/*#__PURE__*/__webpack_require__.n(sncrypto__WEBPACK_IMPORTED_MODULE_15__);/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNWebCrypto",function(){return sncrypto__WEBPACK_IMPORTED_MODULE_15__["SNWebCrypto"];});/* harmony import */var _services_model_manager__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__(/*! ./services/model_manager */"./lib/services/model_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadManager",function(){return _services_model_manager__WEBPACK_IMPORTED_MODULE_16__["PayloadManager"];});/* harmony import */var _services_item_manager__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__(/*! ./services/item_manager */"./lib/services/item_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ItemManager",function(){return _services_item_manager__WEBPACK_IMPORTED_MODULE_17__["ItemManager"];});/* harmony import */var _services_api_http_service__WEBPACK_IMPORTED_MODULE_18__=__webpack_require__(/*! ./services/api/http_service */"./lib/services/api/http_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNHttpService",function(){return _services_api_http_service__WEBPACK_IMPORTED_MODULE_18__["SNHttpService"];});/* harmony import */var _services_challenge_service__WEBPACK_IMPORTED_MODULE_19__=__webpack_require__(/*! ./services/challenge_service */"./lib/services/challenge_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeService",function(){return _services_challenge_service__WEBPACK_IMPORTED_MODULE_19__["ChallengeService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeOrchestrator",function(){return _services_challenge_service__WEBPACK_IMPORTED_MODULE_19__["ChallengeOrchestrator"];});/* harmony import */var _Services_pure_service__WEBPACK_IMPORTED_MODULE_20__=__webpack_require__(/*! @Services/pure_service */"./lib/services/pure_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PureService",function(){return _Services_pure_service__WEBPACK_IMPORTED_MODULE_20__["PureService"];});/* harmony import */var _Services_application_service__WEBPACK_IMPORTED_MODULE_21__=__webpack_require__(/*! @Services/application_service */"./lib/services/application_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ApplicationService",function(){return _Services_application_service__WEBPACK_IMPORTED_MODULE_21__["ApplicationService"];});/* harmony import */var _services_storage_service__WEBPACK_IMPORTED_MODULE_22__=__webpack_require__(/*! ./services/storage_service */"./lib/services/storage_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNStorageService",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_22__["SNStorageService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StoragePersistencePolicies",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_22__["StoragePersistencePolicies"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StorageEncryptionPolicies",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_22__["StorageEncryptionPolicies"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StorageValueModes",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_22__["StorageValueModes"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ValueModesKeys",function(){return _services_storage_service__WEBPACK_IMPORTED_MODULE_22__["ValueModesKeys"];});/* harmony import */var _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__=__webpack_require__(/*! @Lib/challenges */"./lib/challenges.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Challenge",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__["Challenge"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeReason",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__["ChallengeReason"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeResponse",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__["ChallengeResponse"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeType",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__["ChallengeType"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"challengeTypeToString",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__["challengeTypeToString"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ChallengeValue",function(){return _Lib_challenges__WEBPACK_IMPORTED_MODULE_23__["ChallengeValue"];});/* harmony import */var _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_24__=__webpack_require__(/*! ./services/sync/sync_service */"./lib/services/sync/sync_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSyncService",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_24__["SNSyncService"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncSources",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_24__["SyncSources"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncModes",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_24__["SyncModes"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncQueueStrategy",function(){return _services_sync_sync_service__WEBPACK_IMPORTED_MODULE_24__["SyncQueueStrategy"];});/* harmony import */var _services_api_session_manager__WEBPACK_IMPORTED_MODULE_25__=__webpack_require__(/*! ./services/api/session_manager */"./lib/services/api/session_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSessionManager",function(){return _services_api_session_manager__WEBPACK_IMPORTED_MODULE_25__["SNSessionManager"];});/* harmony import */var _services_migration_service__WEBPACK_IMPORTED_MODULE_26__=__webpack_require__(/*! ./services/migration_service */"./lib/services/migration_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNMigrationService",function(){return _services_migration_service__WEBPACK_IMPORTED_MODULE_26__["SNMigrationService"];});/* harmony import */var _services_alert_service__WEBPACK_IMPORTED_MODULE_27__=__webpack_require__(/*! ./services/alert_service */"./lib/services/alert_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNAlertService",function(){return _services_alert_service__WEBPACK_IMPORTED_MODULE_27__["SNAlertService"];});/* harmony import */var _services_history_history_manager__WEBPACK_IMPORTED_MODULE_28__=__webpack_require__(/*! ./services/history/history_manager */"./lib/services/history/history_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNHistoryManager",function(){return _services_history_history_manager__WEBPACK_IMPORTED_MODULE_28__["SNHistoryManager"];});/* harmony import */var _services_privileges_service__WEBPACK_IMPORTED_MODULE_29__=__webpack_require__(/*! ./services/privileges_service */"./lib/services/privileges_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNPrivilegesService",function(){return _services_privileges_service__WEBPACK_IMPORTED_MODULE_29__["SNPrivilegesService"];});/* harmony import */var _services_singleton_manager__WEBPACK_IMPORTED_MODULE_30__=__webpack_require__(/*! ./services/singleton_manager */"./lib/services/singleton_manager.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNSingletonManager",function(){return _services_singleton_manager__WEBPACK_IMPORTED_MODULE_30__["SNSingletonManager"];});/* harmony import */var _services_api_api_service__WEBPACK_IMPORTED_MODULE_31__=__webpack_require__(/*! ./services/api/api_service */"./lib/services/api/api_service.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SNApiService",function(){return _services_api_api_service__WEBPACK_IMPORTED_MODULE_31__["SNApiService"];});/* harmony import */var _utils__WEBPACK_IMPORTED_MODULE_32__=__webpack_require__(/*! ./utils */"./lib/utils.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"findInArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["findInArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isNullOrUndefined",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["isNullOrUndefined"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"deepMerge",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["deepMerge"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"extendArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["extendArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"removeFromIndex",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["removeFromIndex"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"subtractFromArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["subtractFromArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"arrayByDifference",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["arrayByDifference"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"uniqCombineObjArrays",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["uniqCombineObjArrays"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"greaterOfTwoDates",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["greaterOfTwoDates"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"getGlobalScope",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["getGlobalScope"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"removeFromArray",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["removeFromArray"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"truncateHexString",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["truncateHexString"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"jsonParseEmbeddedKeys",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["jsonParseEmbeddedKeys"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Copy",function(){return _utils__WEBPACK_IMPORTED_MODULE_32__["Copy"];});/* harmony import */var _Lib_uuid__WEBPACK_IMPORTED_MODULE_33__=__webpack_require__(/*! @Lib/uuid */"./lib/uuid.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Uuid",function(){return _Lib_uuid__WEBPACK_IMPORTED_MODULE_33__["Uuid"];});/* harmony import */var _Protocol_intents__WEBPACK_IMPORTED_MODULE_34__=__webpack_require__(/*! @Protocol/intents */"./lib/protocol/intents.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"EncryptionIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_34__["EncryptionIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isLocalStorageIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_34__["isLocalStorageIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isFileIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_34__["isFileIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isDecryptedIntent",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_34__["isDecryptedIntent"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"intentRequiresEncryption",function(){return _Protocol_intents__WEBPACK_IMPORTED_MODULE_34__["intentRequiresEncryption"];});/* harmony import */var _Models_content_types__WEBPACK_IMPORTED_MODULE_35__=__webpack_require__(/*! @Models/content_types */"./lib/models/content_types.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ContentType",function(){return _Models_content_types__WEBPACK_IMPORTED_MODULE_35__["ContentType"];});/* harmony import */var _Models_generator__WEBPACK_IMPORTED_MODULE_36__=__webpack_require__(/*! @Models/generator */"./lib/models/generator.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateItemFromPayload",function(){return _Models_generator__WEBPACK_IMPORTED_MODULE_36__["CreateItemFromPayload"];});/* harmony import */var _Models_functions__WEBPACK_IMPORTED_MODULE_37__=__webpack_require__(/*! @Models/functions */"./lib/models/functions.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Uuids",function(){return _Models_functions__WEBPACK_IMPORTED_MODULE_37__["Uuids"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"FillItemContent",function(){return _Models_functions__WEBPACK_IMPORTED_MODULE_37__["FillItemContent"];});/* harmony import */var _Lib_events__WEBPACK_IMPORTED_MODULE_38__=__webpack_require__(/*! @Lib/events */"./lib/events.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ApplicationEvent",function(){return _Lib_events__WEBPACK_IMPORTED_MODULE_38__["ApplicationEvent"];});/* harmony import */var _Lib_platforms__WEBPACK_IMPORTED_MODULE_39__=__webpack_require__(/*! @Lib/platforms */"./lib/platforms.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Environment",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_39__["Environment"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"Platform",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_39__["Platform"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isEnvironmentWebOrDesktop",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_39__["isEnvironmentWebOrDesktop"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isEnvironmentMobile",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_39__["isEnvironmentMobile"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"platformFromString",function(){return _Lib_platforms__WEBPACK_IMPORTED_MODULE_39__["platformFromString"];});/* harmony import */var _Lib_services_sync_events__WEBPACK_IMPORTED_MODULE_40__=__webpack_require__(/*! @Lib/services/sync/events */"./lib/services/sync/events.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"SyncEvent",function(){return _Lib_services_sync_events__WEBPACK_IMPORTED_MODULE_40__["SyncEvent"];});/* harmony import */var _Payloads_collection__WEBPACK_IMPORTED_MODULE_41__=__webpack_require__(/*! @Payloads/collection */"./lib/protocol/payloads/collection.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"MutableCollection",function(){return _Payloads_collection__WEBPACK_IMPORTED_MODULE_41__["MutableCollection"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ImmutablePayloadCollection",function(){return _Payloads_collection__WEBPACK_IMPORTED_MODULE_41__["ImmutablePayloadCollection"];});/* harmony import */var _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__=__webpack_require__(/*! @Payloads/generator */"./lib/protocol/payloads/generator.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateMaxPayloadFromAnyObject",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__["CreateMaxPayloadFromAnyObject"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateSourcedPayloadFromObject",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__["CreateSourcedPayloadFromObject"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateIntentPayloadFromObject",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__["CreateIntentPayloadFromObject"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CreateEncryptionParameters",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__["CreateEncryptionParameters"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadByMerging",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__["PayloadByMerging"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"CopyPayload",function(){return _Payloads_generator__WEBPACK_IMPORTED_MODULE_42__["CopyPayload"];});/* harmony import */var _Lib_protocol_payloads_sources__WEBPACK_IMPORTED_MODULE_43__=__webpack_require__(/*! @Lib/protocol/payloads/sources */"./lib/protocol/payloads/sources.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadSource",function(){return _Lib_protocol_payloads_sources__WEBPACK_IMPORTED_MODULE_43__["PayloadSource"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"isPayloadSourceRetrieved",function(){return _Lib_protocol_payloads_sources__WEBPACK_IMPORTED_MODULE_43__["isPayloadSourceRetrieved"];});/* harmony import */var _Lib_protocol_versions__WEBPACK_IMPORTED_MODULE_44__=__webpack_require__(/*! @Lib/protocol/versions */"./lib/protocol/versions.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"ProtocolVersion",function(){return _Lib_protocol_versions__WEBPACK_IMPORTED_MODULE_44__["ProtocolVersion"];});/* harmony import */var _Payloads_formats__WEBPACK_IMPORTED_MODULE_45__=__webpack_require__(/*! @Payloads/formats */"./lib/protocol/payloads/formats.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadFormat",function(){return _Payloads_formats__WEBPACK_IMPORTED_MODULE_45__["PayloadFormat"];});/* harmony import */var _Payloads_pure_payload__WEBPACK_IMPORTED_MODULE_46__=__webpack_require__(/*! @Payloads/pure_payload */"./lib/protocol/payloads/pure_payload.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PurePayload",function(){return _Payloads_pure_payload__WEBPACK_IMPORTED_MODULE_46__["PurePayload"];});/* harmony import */var _Payloads_fields__WEBPACK_IMPORTED_MODULE_47__=__webpack_require__(/*! @Payloads/fields */"./lib/protocol/payloads/fields.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PayloadField",function(){return _Payloads_fields__WEBPACK_IMPORTED_MODULE_47__["PayloadField"];});/* harmony import */var _Lib_storage_keys__WEBPACK_IMPORTED_MODULE_48__=__webpack_require__(/*! @Lib/storage_keys */"./lib/storage_keys.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"StorageKey",function(){return _Lib_storage_keys__WEBPACK_IMPORTED_MODULE_48__["StorageKey"];});/* harmony import */var _Lib_migrations_2020_01_01_base__WEBPACK_IMPORTED_MODULE_49__=__webpack_require__(/*! @Lib/migrations/2020-01-01-base */"./lib/migrations/2020-01-01-base.ts");/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"BaseMigration",function(){return _Lib_migrations_2020_01_01_base__WEBPACK_IMPORTED_MODULE_49__["BaseMigration"];});/* harmony reexport (safe) */__webpack_require__.d(__webpack_exports__,"PrivilegeSessionLength",function(){return _services_privileges_service__WEBPACK_IMPORTED_MODULE_29__["PrivilegeSessionLength"];});/** Payloads */ /** Migrations */ /** Privileges */ /***/},/***/"./lib/migrations/2020-01-01-base.ts":/*!*******************************************!*\ !*** ./lib/migrations/2020-01-01-base.ts ***! \*******************************************/ /*! exports provided: BaseMigration */ /***/function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);/* harmony export (binding) */__webpack_require__.d(__webpack_exports__,"BaseMigration",function(){return BaseMigration;});/* harmony import */var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(/*! @babel/runtime/regenerator */"./node_modules/@babel/runtime/regenerator/index.js");/* harmony import */var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default=/*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);/* harmony import */var _Lib_migrations_migration__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(/*! @Lib/migrations/migration */"./lib/migrations/migration.ts");/* harmony import */var _Lib_storage_keys__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(/*! @Lib/storage_keys */"./lib/storage_keys.ts");/* harmony import */var _Lib_stages__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(/*! @Lib/stages */"./lib/stages.ts");/* harmony import */var _Lib_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(/*! @Lib/utils */"./lib/utils.ts");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i