open Js_of_ocaml.Js module TypedObject : sig type 'a t val get : 'a t -> Jv.prop -> 'a option val get' : 'a t -> Jv.prop' -> 'a option val set : 'a t -> Jv.prop -> 'a -> unit val set' : 'a t -> Jv.prop' -> 'a -> unit val create : unit -> 'a t val init : (Jv.prop * 'a) array -> 'a t end = struct type 'a t = Jv.t let get : 'a t -> Jv.prop -> 'a = fun t prop -> Jv.to_option Jv.Id.of_jv (Jv.get t prop) let get' : 'a t -> Jv.prop' -> 'a = fun t prop -> Jv.to_option Jv.Id.of_jv (Jv.get' t prop) let set : 'a t -> Jv.prop -> 'a -> unit = fun o prop v -> Jv.set o prop (Jv.Id.to_jv v) let set' : 'a t -> Jv.prop' -> 'a -> unit = fun o prop v -> Jv.set' o prop (Jv.Id.to_jv v) let create : unit -> 'a t = fun () -> Jv.obj [||] let init : (Jv.prop * 'a) array -> 'a t = fun param -> Jv.obj (Obj.magic param) end class type ['a] ordered_map = object ('this) method get: Jstr.t -> 'a t opt meth method update: Jstr.t -> 'a t -> Jstr.t opt -> 'this meth method remove: Jstr.t -> 'this meth method addToStart: Jstr.t -> 'a t -> 'this t meth method addToEnd: Jstr.t -> 'a t -> 'this t meth end module Classes = struct type 'a meta_data type domOutputSpec type parse_rule type content_match type slice class type _node_props = object ('this) method inlineContent: bool t readonly_prop (** True if this node type has inline content. *) method isBlock: bool t readonly_prop method isText: bool t readonly_prop method isInline: bool t readonly_prop method isTextblock: bool t readonly_prop method isLeaf: bool t readonly_prop method isAtom: bool t readonly_prop end type depth = int opt class type mark = object ('this) method _type : mark_type t readonly_prop method attrs : 'a TypedObject.t prop method isInSet : mark t js_array t -> bool t meth method eq : 'this t -> bool t meth end and node_spec = object ('this) method content : Jstr.t opt prop method marks : Jstr.t opt prop method group : Jstr.t opt prop method inline : bool t opt prop method atom : bool t opt prop method attrs : 'a TypedObject.t prop method selectable : bool t opt prop method draggable : bool t opt prop method code : bool t opt prop method defining : bool t opt prop method isolating : bool t opt prop method toDOM : (node t -> domOutputSpec t) callback prop method parseDom : parse_rule t js_array t opt prop end and resolved_pos = object ('this) method pos : int readonly_prop method depth : int readonly_prop method parentOffset : int readonly_prop method parent : node t readonly_prop method doc : node t readonly_prop method node : depth -> node t meth method index : depth -> int meth method start : depth -> int meth method _end : depth -> int meth method after : depth -> int meth method nodeAfter : node t opt readonly_prop method nodeBefore : node t opt readonly_prop method marks : unit -> mark t js_array t meth method sameParent : 'this t -> bool t meth method max : 'this t -> 'this t meth method min : 'this t -> 'this t meth end and mark_spec = object ('this) method toDOM: (node t -> domOutputSpec t) callback prop method inclusive: bool t prop method spanning: bool t prop end and schema_spec = object ('this) method nodes: node_spec ordered_map t readonly_prop method marks: mark_spec ordered_map t readonly_prop method topNode: Jstr.t opt readonly_prop end and schema = object ('this) method spec: schema_spec t prop method nodes: node_type t TypedObject.t readonly_prop method marks: mark_type t TypedObject.t readonly_prop method topNodeType: node_type t readonly_prop method text: Jstr.t -> mark t js_array t opt -> node t meth (** [node t attrs fragment ] Will create a node with the type [t] and attributes [attrs]. The content will always be a fragment. You can create a fragment from an array on node with the function [Model.Fragment.from_array] *) method node: Jstr.t -> < .. > t opt -> fragment t opt -> mark t js_array t opt -> node t meth method mark_fromType: mark_type t -> 'a TypedObject.t opt -> mark t meth end and node_type = object ('this) inherit _node_props method name: Jstr.t readonly_prop method schema: schema t readonly_prop method spec: node_spec t readonly_prop method contentMatch: content_match t readonly_prop method hasRequiredAttrs: unit -> bool t meth method create_withFragmentContent: < .. > t opt -> fragment t opt -> mark t opt -> node t meth end (** Signature for MarkType class https://prosemirror.net/docs/ref/#model.MarkType *) and mark_type = object ('this) method name: Jstr.t readonly_prop method schema: schema t readonly_prop method spec: mark_spec t readonly_prop method isInSet: mark t js_array t -> mark t opt meth end (** Common signature between fragment and node *) and _element = object ('this) method childCount: int readonly_prop (** The number of children that the node has. *) method child: int -> node t meth (** Get the child node at the given index. Raise an error when the index is out of range. *) method maybeChild: int -> node t opt meth (** Get the child node at the given index, if it exists. *) method eq: 'this t -> bool t meth (** Compare this element to another one. *) method cut: int -> int opt -> 'this t meth (** Cut out the element between the two given positions. *) method toString: unit -> Jstr.t meth (** Return a debugging string that describes this element. *) method descendants : (node t -> pos:int -> node t -> bool t) callback -> unit meth method forEach : (node t -> offset:int -> index:int -> unit) callback -> unit meth (** Call [f] for every child node, passing the node, its offset into this parent node, and its index. *) end and fragment = object ('this) inherit _element method size : int readonly_prop (** The size of the fragment, which is the total of the size of its content nodes. *) method append : 'this t -> 'this t meth method lastChild : node t opt readonly_prop method firstChild : node t opt readonly_prop method findDiffStart : 'this t -> int opt meth method findDiffEnd : 'this t -> < a: int prop; b: int prop> t opt meth end (** https://prosemirror.net/docs/ref/#model.Node *) and node = object ('this) inherit _element inherit _node_props method _type : node_type t readonly_prop method attrs : < .. > t prop method content : fragment t prop method copy : fragment t -> 'this t meth method slice : from:int -> to_:int opt -> slice t meth method resolve : int -> resolved_pos t meth method nodeAt : int -> 'this t opt meth method marks : mark t js_array t readonly_prop method sameMarkup : node t -> bool t meth method text : Jstr.t opt prop end (** View *) and editor_props = object ('this) method editable : (editor_state t -> bool t) callback prop method handleDOMEvents : (editor_view t -> Jv.t -> bool t) callback TypedObject.t prop method handleClickOn : (editor_view t -> int t -> node t -> int -> Brr.Ev.Mouse.t Brr.Ev.type' -> bool t -> bool t) callback prop method nodeViews : (node t -> editor_view t -> (unit -> int) -> < .. > t) TypedObject.t prop end and direct_editor_props = object ('this) inherit editor_props method state: editor_state t writeonly_prop (** The call back is called with this = instance of editor_view *) method dispatchTransaction: (editor_view t, transaction t -> unit) meth_callback writeonly_prop end and editor_view = object ('this) method state: editor_state t readonly_prop method dom: Brr.El.t readonly_prop prop method editable: bool t readonly_prop method props: direct_editor_props t readonly_prop method update: direct_editor_props t -> unit meth method setProps: direct_editor_props t -> unit meth method updateState: editor_state t -> unit meth method hasFocus: unit -> bool t meth method focus: unit -> unit meth method posAtCoords: < left: float prop ; top: float prop > t -> < pos: int prop; inside: int prop> t meth method coordsAtPos: int -> int opt -> < left: float prop; right: float prop; top: float prop; bottom: float prop > t meth method domAtPos: pos:int -> side:int opt -> < node: Brr.El.t t prop; offset: int prop > t meth method destroy : unit meth method dispatch: transaction t -> unit meth end (** State *) and plugin = object ('this) method props : editor_props t opt prop method view: (editor_view t -> < .. > t) callback opt prop method filterTransaction: (transaction t -> editor_state t -> bool t) opt prop end and selection = object ('this) method from: int readonly_prop method _to: int readonly_prop method empty: bool t readonly_prop method eq: 'this t -> bool t meth method content: unit -> slice t meth method replace: transaction t -> slice t -> unit meth method replaceWith: transaction t -> node t -> unit meth end and text_selection = object ('this) inherit selection end and node_selection = object ('this) inherit selection end (* Transform *) and mappable = object ('this) end and step_map = object ('this) inherit mappable end and step = object ('this) method map : mappable t -> 'this t meth end and transform = object ('this) method doc : node t readonly_prop method steps : step t js_array t readonly_prop method docs : node t js_array t readonly_prop method step : step t -> 'this t meth method docChanged : bool t prop method addMark : from:int -> to_:int -> mark t -> 'this t meth method removeMark : from:int -> to_:int -> mark t -> 'this t meth method replace : from:int -> to_:int -> slice t opt -> 'this t meth method delete : from:int -> to_:int -> 'this t meth method insert : pos:int -> node t -> 'this t meth method replaceRangeWith : from:int -> to_:int -> node t -> 'this t meth method setBlockType : from:int -> to_:int -> node_type t -> < .. > t -> 'this t meth end and transaction = object ('this) inherit transform method time: int readonly_prop method setTime : int -> 'this t meth method storedMarks : mark t js_array t opt readonly_prop method setStoredMarks : mark t js_array t opt -> 'this t meth method addStoredMark : mark t -> 'this t meth method removeStoredMark_mark : mark t -> 'this t meth method removeStoredMark_marktype : mark_type t -> 'this t meth method ensureMarks : mark t js_array t -> 'this t meth method storedMarksSet : bool readonly_prop method selection : selection t readonly_prop method setSelection : selection t -> 'this t meth method deleteSelection : 'this t meth method replaceSelection : slice t -> 'this t meth method replaceSelectionWith : node t -> bool t opt -> 'this t meth method selectionSet : bool readonly_prop method before : node t readonly_prop method insertText : Jstr.t -> from:int opt -> to_:int opt -> 'this t meth method setMeta : 'a meta_data t -> 'a -> 'this t meth method getMeta : 'a meta_data t -> 'a optdef meth method scrollIntoView : unit -> 'this t meth end and configuration_prop = object ('this) method schema: schema t opt prop method plugins: plugin t js_array t opt prop end and creation_prop = object ('this) inherit configuration_prop method doc: node t opt prop method selection: selection t opt prop method storedMarks: mark t js_array t opt prop end and editor_state = object ('this) method doc : node t readonly_prop method selection: selection t readonly_prop method storedMarks: mark t js_array t opt readonly_prop method schema: schema t readonly_prop method plugins: plugin t js_array t readonly_prop method apply: transaction t -> 'this t meth method applyTransaction : transaction t -> < state: 'this t prop; transactions : transaction t js_array t prop> t meth method tr: transaction t readonly_prop method reconfigure: configuration_prop t meth method toJSON: unit -> Brr.Json.t meth end end module Model = struct type parse_rule = Classes.parse_rule type domOutputSpec = Classes.domOutputSpec type depth = Classes.depth class type mark = Classes.mark class type fragment = Classes.fragment class type node_spec = Classes.node_spec class type resolved_pos = Classes.resolved_pos class type mark_spec = Classes.mark_spec class type schema_spec = Classes.schema_spec class type schema = Classes.schema class type node_type = Classes.node_type class type mark_type = Classes.mark_type class type node = Classes.node end module Transform = struct type step_result class type step_map = Classes.step_map class type step = Classes.step class type replace_step = object ('this) inherit step end class type replace_around_step = object ('this) inherit step end class type add_mark_step = object ('this) inherit step end class type transform = Classes.transform end module State = struct type 'a meta_data = 'a Classes.meta_data class type plugin = Classes.plugin class type selection = Classes.selection class type text_selection = Classes.text_selection class type node_selection = Classes.node_selection class type transaction = Classes.transaction class type configuration_prop = Classes.configuration_prop class type creation_prop = Classes.creation_prop class type editor_state = Classes.editor_state type dispatch = (Classes.transaction t -> unit) end module View = struct class type editor_props = Classes.editor_props class type direct_editor_props = Classes.direct_editor_props class type editor_view = Classes.editor_view end module History = struct class type history_prop = object ('this) method depth: int opt prop method newGroupDelay: int opt prop end end module SchemaBasic = struct class type nodes = object ('this) method doc: Model.node_spec t prop method paragraph: Model.node_spec t prop method blockquote: Model.node_spec t prop method horizontal_rule: Model.node_spec t prop method heading: Model.node_spec t prop method code_block: Model.node_spec t prop method text: Model.node_spec t prop method image: Model.node_spec t prop method hard_break: Model.node_spec t prop end class type marks = object ('this) method link: Model.mark_spec t prop method em: Model.mark_spec t prop method strong: Model.mark_spec t prop method code: Model.mark_spec t prop end end module Menu = struct class type menuElement = object ('this) end class type menuItemSpec = object ('this) method title : Jstr.t opt prop method label : Jstr.t opt prop method select : (menuItem t, State.editor_state t -> bool t) meth_callback prop method run : (menuItem t, State.editor_state t -> (State.transaction t -> unit) -> View.editor_view t -> 'a Brr.Ev.t -> unit) meth_callback prop end and menuItem = object ('this) inherit menuElement end class type dropdown = object ('this) inherit menuElement method content : menuItem t js_array t prop end end module Example = struct class type menuItems = object ('this) method insertMenu : Menu.dropdown t prop method fullMenu : Menu.menuElement t js_array t prop end class type options = object ('this) method schema : Model.schema t prop method menuBar : bool t opt prop method floatingMenu : bool t opt prop method history : bool t opt prop method menuContent : Menu.menuElement t js_array t prop end end