fragment { import interface ReadingNavigation; atom ReadingNavigationObject id "atom:reading:navigation"; conform ReadingLibrary as PresentationStateFactory id "reading:navigation:factory" { bind create.call to package LanguageReaderRuntime.createNavigation with {navigation to creation ReadingNavigationObject with {PresentationState from input;};}; } conform ReadingNavigationObject as PresentationStateRecord id "reading:navigation:metadata" {} conform ReadingNavigationObject as PresentationStateValues id "reading:navigation:copy" { bind copyValues.call to package LanguageReaderRuntime.copyNavigation with {source to interface ReadingNavigation;target to interface ReadingNavigation from input;}; } conform ReadingNavigationObject as ReadingNavigation id "reading:navigation:values" { private edge SelectedDocument id "reading:navigation:selected" {atom Self projection document id "reading:navigation:document" optional-one on-delete "detach" public-traversal;interface ReadingDocument projection readers id "reading:document:readers" many on-delete "detach";} private state Cursor id "reading:navigation:cursor" on Self : record {anchor:uint32;focus:uint32;size:uint32;} policy register default {"anchor":0,"focus":0,"size":23}; private state Draft id "reading:navigation:draft" on Self : record {title:string;text:string;custom:string;} policy crdt(record {title:string;text:string;custom:string;}) default {"title":"","text":"","custom":""}; bind document.resolve to edge SelectedDocument.document.resolve; private state ReadingView id "reading:navigation:reading" on Self : record {displayMode:string;position:uint32;} policy register default {"displayMode":"pages","position":0}; bind reading.get to state ReadingView.read; bind reading.set to package LanguageReaderRuntime.setReadingView with {reading to state ReadingView;}; private state AnnotationTarget id "reading:navigation:annotation-target" on Self : optional policy register default null; private state Viewports id "reading:navigation:viewports" on Self : list policy register default []; bind annotationTarget to state AnnotationTarget; bind viewports.get to state Viewports.read; bind reportViewport.call to package LanguageReaderRuntime.reportViewport with {viewports to state Viewports;}; bind open.call to package LanguageReaderRuntime.openDocument with {document to edge SelectedDocument.document;cursor to state Cursor;reading to state ReadingView;target to state AnnotationTarget;}; bind cursor to state Cursor; private state UI id "reading:navigation:ui" on Self : record {page:string;panel:string;section:string;sourceTab:string;} policy register default {"page":"reading","panel":"","section":"general","sourceTab":"paste"}; private state Builder id "reading:navigation:builder" on Self : record {style:string;reveal:string;color:string;options:string;} policy register default {"style":"highlight","reveal":"always","color":"#53796c","options":"{}"}; private state Prompts id "reading:navigation:prompts" on Self : record {name:string;change:string;followup:string;generate:string;} policy crdt(record {name:string;change:string;followup:string;generate:string;}) default {"name":"","change":"","followup":"","generate":""}; private edge SettingsReader id "reading:navigation:settings-reader" {atom Self projection reader id "reading:navigation:settings-reader" optional-one on-delete "detach" public-traversal;interface ReadingReader projection views id "reading:reader:settings-views" many on-delete "detach";} private edge SettingsFeature id "reading:navigation:settings-feature" {atom Self projection feature id "reading:navigation:settings-feature" optional-one on-delete "detach" public-traversal;interface ReadingFeature projection views id "reading:feature:settings-views" many on-delete "detach";} bind ui to state UI; bind builder to state Builder; bind prompts.get to state Prompts.read;bind prompts.edit to state Prompts.edit; bind settingsReader.resolve to edge SettingsReader.reader.resolve; bind settingsReader.connect to edge SettingsReader.reader.connect; bind settingsReader.disconnect to edge SettingsReader.reader.disconnect; bind settingsFeature.resolve to edge SettingsFeature.feature.resolve; bind settingsFeature.connect to edge SettingsFeature.feature.connect; bind settingsFeature.disconnect to edge SettingsFeature.feature.disconnect; bind selectSettings.call to package LanguageReaderRuntime.selectSettings with {ui to state UI;reader to edge SettingsReader.reader;feature to edge SettingsFeature.feature;document to interface ReadingDocument from input;}; bind draft.get to state Draft.read;bind draft.edit to state Draft.edit; } }