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 method node : Jstr.t -> < .. > t opt -> fragment t opt -> 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 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 method dispatchTransaction : (editor_view t, transaction t -> unit) meth_callback writeonly_prop (** The call back is called with this = instance of editor_view *) 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