npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

prosemirror-menu

v1.2.4

Published

Simple menu elements for ProseMirror

Downloads

4,620,693

Readme

prosemirror-menu

[ WEBSITE | ISSUES | FORUM | GITTER ]

This is a non-core example module for ProseMirror. ProseMirror is a well-behaved rich semantic content editor based on contentEditable, with support for collaborative editing and custom document schemas.

This module defines an abstraction for building a menu for the ProseMirror editor, along with an implementation of a menubar.

Note that this module exists mostly as an example of how you might want to approach adding a menu to ProseMirror, but is not maintained as actively as the core modules related to actual editing. If you want to extend or improve it, the recommended way is to fork it. If you are interested in maintaining a serious menu component for ProseMirror, publish your fork, and if it works for me, I'll gladly deprecate this in favor of your module.

This code is released under an MIT license. There's a forum for general discussion and support requests, and the Github bug tracker is the place to report issues.

Documentation

This module defines a number of building blocks for ProseMirror menus, along with a menu bar implementation.

When using this module, you should make sure its style/menu.css file is loaded into your page.

interface MenuElement

The types defined in this module aren't the only thing you can display in your menu. Anything that conforms to this interface can be put into a menu structure.

  • render(pm: EditorView) → {dom: HTMLElement, update: fn(state: EditorState) → boolean}
    Render the element for display in the menu. Must return a DOM element and a function that can be used to update the element to a new state. The update function must return false if the update hid the entire element.

class MenuItem

implements MenuElementAn icon or label that, when clicked, executes a command.

  • new MenuItem(spec: MenuItemSpec)
    Create a menu item.

  • spec: MenuItemSpec
    The spec used to create this item.

  • render(view: EditorView) → {dom: HTMLElement, update: fn(state: EditorState) → boolean}
    Renders the icon according to its display spec, and adds an event handler which executes the command when the representation is clicked.

interface MenuItemSpec

The configuration object passed to the MenuItem constructor.

  • run(state: EditorState, dispatch: fn(tr: Transaction), view: EditorView, event: Event)
    The function to execute when the menu item is activated.

  • select: ?fn(state: EditorState) → boolean
    Optional function that is used to determine whether the item is appropriate at the moment. Deselected items will be hidden.

  • enable: ?fn(state: EditorState) → boolean
    Function that is used to determine if the item is enabled. If given and returning false, the item will be given a disabled styling.

  • active: ?fn(state: EditorState) → boolean
    A predicate function to determine whether the item is 'active' (for example, the item for toggling the strong mark might be active then the cursor is in strong text).

  • render: ?fn(view: EditorView) → HTMLElement
    A function that renders the item. You must provide either this, icon, or label.

  • icon: ?IconSpec
    Describes an icon to show for this item.

  • label: ?string
    Makes the item show up as a text label. Mostly useful for items wrapped in a drop-down or similar menu. The object should have a label property providing the text to display.

  • title: ?string | fn(state: EditorState) → string
    Defines DOM title (mouseover) text for the item.

  • class: ?string
    Optionally adds a CSS class to the item's DOM representation.

  • css: ?string
    Optionally adds a string of inline CSS to the item's DOM representation.

  • type IconSpec = {path: string, width: number, height: number} | {text: string, css?: ?string} | {dom: Node}
    Specifies an icon. May be either an SVG icon, in which case its path property should be an SVG path spec, and width and height should provide the viewbox in which that path exists. Alternatively, it may have a text property specifying a string of text that makes up the icon, with an optional css property giving additional CSS styling for the text. Or it may contain dom property containing a DOM node.

class Dropdown

implements MenuElementA drop-down menu, displayed as a label with a downwards-pointing triangle to the right of it.

  • new Dropdown(content: readonly MenuElement[] | MenuElement, options: ?Object = {})
    Create a dropdown wrapping the elements.

  • render(view: EditorView) → {dom: HTMLElement, update: fn(state: EditorState) → boolean}
    Render the dropdown menu and sub-items.

class DropdownSubmenu

implements MenuElementRepresents a submenu wrapping a group of elements that start hidden and expand to the right when hovered over or tapped.

  • new DropdownSubmenu(content: readonly MenuElement[] | MenuElement, options: ?Object = {})
    Creates a submenu for the given group of menu elements. The following options are recognized:

  • render(view: EditorView) → {dom: HTMLElement, update: fn(state: EditorState) → boolean}
    Renders the submenu.

  • menuBar(options: Object) → Plugin
    A plugin that will place a menu bar above the editor. Note that this involves wrapping the editor in an additional <div>.

This module exports the following pre-built items or item constructors:

  • joinUpItem: MenuItem
    Menu item for the joinUp command.

  • liftItem: MenuItem
    Menu item for the lift command.

  • selectParentNodeItem: MenuItem
    Menu item for the selectParentNode command.

  • undoItem: MenuItem
    Menu item for the undo command.

  • redoItem: MenuItem
    Menu item for the redo command.

  • wrapItem(nodeType: NodeType, options: Partial & {attrs?: ?Attrs}) → MenuItem
    Build a menu item for wrapping the selection in a given node type. Adds run and select properties to the ones present in options. options.attrs may be an object that provides attributes for the wrapping node.

  • blockTypeItem(nodeType: NodeType, options: Partial & {attrs?: ?Attrs}) → MenuItem
    Build a menu item for changing the type of the textblock around the selection to the given type. Provides run, active, and select properties. Others must be given in options. options.attrs may be an object to provide the attributes for the textblock node.

To construct your own items, these icons may be useful:

  • icons: Object
    A set of basic editor-related icons. Contains the properties join, lift, selectParentNode, undo, redo, strong, em, code, link, bulletList, orderedList, and blockquote, each holding an object that can be used as the icon option to MenuItem.

  • renderGrouped(view: EditorView, content: readonly readonly MenuElement[][]) → {
      dom: DocumentFragment,
      update: fn(state: EditorState) → boolean
    }
    Render the given, possibly nested, array of menu elements into a document fragment, placing separators between them (and ensuring no superfluous separators appear when some of the groups turn out to be empty).