Source: editor.jsdoc

/**
 * Custom options available when constructing a new {@link wcPlay} instance.
 * @typedef {Object} wcPlayEditor~Options
 * @property {Boolean} [readOnly=false] - If true, the script will not be editable.
 * @property {Boolean} [playable=true] - Whether the script can be played using the live debugger.
 * @property {wcPlayEditor~CategoryOptions} [category] - Options that determine what categories appear in the palette. By default, all categories are visible.
 */

/**
 * Category display options.
 * @typedef {Object} wcPlayEditor~CategoryOptions
 * @property {String[]} items - A list of categories to show in the palette.
 * @property {Boolean} isBlacklist - If true, the items list will be treated as a blacklist of categories to hide.
 */

/**
 * The 2D bounds of a rectangle.
 * @typedef {Object} wcPlayEditor~Rect
 * @property {Number} top
 * @property {Number} left
 * @property {Number} width
 * @property {Number} height
 */

/**
 * Bounding information for links on a node.
 * @typedef {Object} wcPlayEditor~BoundingData
 * @property {wcPlayEditor~Rect} rect - The bounding rectangle.
 * @property {wcPlay~Coordinates} point - The anchor point where lines will attach to this link.
 * @property {String} name - The name of the bounded object.
 */

/**
 * Data associated with a drawn node.
 * @typedef {Object} wcPlayEditor~DrawNodeData
 * @property {wcNode} node - The node instance.
 * @property {wcPlayEditor~Rect} rect - Bounding rectangle of the node (not including links that stick out).
 * @property {wcPlayEditor~BoundingData[]} entryBounds - Bounding data of entry links.
 * @property {wcPlayEditor~BoundingData[]} exitBounds - Bounding data of exit links.
 * @property {wcPlayEditor~BoundingData[]} inputBounds - Bounding data of property input links.
 * @property {wcPlayEditor~BoundingData[]} outputBounds - Bounding data of property output links.
 * @property {wcPlayEditor~BoundingData[]} valueBounds - Bounding data of property value text.
 * @property {wcPlayEditor~BoundingData[]} initialBounds - Bounding data of property initial value text.
 */

/**
 * On click handler for menu and toolbar options.
 * @callback wcPlayEditor~OnMenuActivated
 * @param {Object} event - The mouse click event object.
 * @param {wcPlayEditor} editor - The instance of the editor invoking the menu option.
 * @param {wcPlay} engine - The instance of the script engine being viewed by the editor.
 */

/**
 * A callback that retrieves the icon class for a menu option.
 * @function wcPlayEditor~MenuIconFunc
 * @param {wcPlayEditor} editor - The instance of the editor invoking the menu option.
 * @param {wcPlay} engine - The instance of the script engine being viewed by the editor.
 */

/**
 * A callback that retrieves the description string for a menu option.
 * @function wcPlayEditor~MenuDescriptionFunc
 * @param {wcPlayEditor} editor - The instance of the editor invoking the menu option.
 * @param {wcPlay} engine - The instance of the script engine being viewed by the editor.
 */

/**
 * Custom options for a menu option.
 * @typedef {Object} wcPlayEditor~MenuOptions
 * @property {String|wcPlayEditor~MenuIconFunc} [icon] - A classname to apply as an icon for the option.  If this is a function, it will be called during the update call and should return the icon class.
 * @property {String} [description|wcPlayEditor~MenuDescriptionFunc] - The description to show as a tooltip for this option.
 * @property {Number} [itemIndex] - An insertion index to insert the item within the menu category, default is to append to the end.
 * @property {Number} [categoryIndex] - If this creates a new category, it will be inserted at this index in the top level menu.
 * @property {Boolean} [toolbarIndex] - If supplied, creates a toolbar button for this option and inserts it in the tab bar at the specified index. -1 will append it to the end.
 * @property {String} [hotkeys] - A string that describes hotkeys for your control, the format is 'Ctrl+Z' or 'Alt+Shift+L,Shift+L' for multiple.
 * @property {Function} [condition] - A function to call during the update to determine if the menu option should be enabled or disabled. Return false to disable the option.
 * @param {wcPlayEditor~OnMenuActivated} onActivated - A handler to call when the option is activated.
 */