Repository: maxGraph/maxGraph
Pull request #714: docs: add more JSDoc categories
Author: login: tbouffard
Labels: name: documentation
description: Improvements or additions to documentation
Created: 2025-03-12T08:34:22Z | Merged: 2025-03-12T13:10:41Z

Apply existing categories to more elements.
Add categories:
- Editor
- GUI
- Style
  JSDoc HTML documentation: include categories in the navigation to ease the organization

Also improve JSDoc in some classes and functions.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Documentation**
  - Enhanced overall documentation across various product components with streamlined descriptions, modernized examples, and improved categorization for easier navigation.
  - Added new category annotations to various classes and functions to improve organization and discoverability.
- **New Features**
  - Introduced an experimental reset capability for translation settings.
- **Type & Styling Improvements**
  - Added new type definitions to support advanced styling options and extend plugin functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/packages/core/src/editor/Editor.ts b/packages/core/src/editor/Editor.ts
index d2b6d52eec..3dbf3e5159 100644
--- a/packages/core/src/editor/Editor.ts
+++ b/packages/core/src/editor/Editor.ts
@@ -391,20 +391,19 @@ import { TranslationsConfig } from '../i18n/config';
  * Fires when the escape key is pressed. The <code>event</code> property
  * contains the key event.
  *
- * ### Constructor: Editor
- *
- * Constructs a new editor. This function invokes the {@link onInit} callback
- * upon completion.
- *
- * ```javascript
- * var config = mxUtils.load('config/diagrameditor.xml').getDocumentElement();
- * var editor = new Editor(config);
- * ```
- *
- * @class Editor
- * @extends EventSource
+ * @category Editor
  */
 export class Editor extends EventSource {
+  /**
+   * Constructs a new editor. This function invokes the {@link onInit} callback upon completion.
+   *
+   * ```javascript
+   * const config = load('config/diagram-editor.xml').getDocumentElement();
+   * const editor = new Editor(config);
+   * ```
+   *
+   * @param config The configuration element that contains the editor configuration.
+   */
   constructor(config: Element) {
     super();
 
diff --git a/packages/core/src/editor/EditorKeyHandler.ts b/packages/core/src/editor/EditorKeyHandler.ts
index 8b234faafd..154745068d 100644
--- a/packages/core/src/editor/EditorKeyHandler.ts
+++ b/packages/core/src/editor/EditorKeyHandler.ts
@@ -22,21 +22,28 @@ import KeyHandler from '../view/handler/KeyHandler';
 import Editor from './Editor';
 
 /**
- * Binds keycodes to action names in an editor.  This aggregates an internal {@link handler} and extends the implementation of {@link KeyHandler.escape} to not only cancel the editing, but also hide the properties dialog and fire an <Editor.escape> event via {@link editor}.  An instance of this class is created by {@link Editor} and stored in {@link Editor.keyHandler}.
+ * Binds keycodes to action names in an editor.
  *
- * @Example
+ * This aggregates an internal {@link handler} and extends the implementation of {@link KeyHandler.escape} to not only cancel the editing,
+ * but also hide the properties dialog and fire an {@link InternalEvent.ESCAPE} event via {@link editor}.
+ *
+ * An instance of this class is created by {@link Editor} and stored in {@link Editor.keyHandler}.
+ *
+ * ### Example
  * Bind the delete key to the delete action in an existing editor.
  * ```javascript
- * var keyHandler = new EditorKeyHandler(editor);
+ * const keyHandler = new EditorKeyHandler(editor);
  * keyHandler.bindAction(46, 'delete');
  * ```
  *
- * @Codec
- * This class uses the {@link DefaultKeyHandlerCodec} to read configuration data into an existing instance.  See {@link DefaultKeyHandlerCodec} for a description of the configuration format.
+ * ### Codec
+ * This class uses the {@link EditorKeyHandlerCodec} to read configuration data into an existing instance.  See {@link EditorKeyHandlerCodec} for a description of the configuration format.
  *
- * @Keycodes
+ * ### Keycodes
  * See {@link KeyHandler}.
  * An {@link InternalEvent.ESCAPE} event is fired via the editor if the escape key is pressed.
+ *
+ * @category Editor
  */
 export class EditorKeyHandler {
   constructor(editor: Editor | null = null) {
diff --git a/packages/core/src/editor/EditorPopupMenu.ts b/packages/core/src/editor/EditorPopupMenu.ts
index f1b4044e19..5a855e6ad2 100644
--- a/packages/core/src/editor/EditorPopupMenu.ts
+++ b/packages/core/src/editor/EditorPopupMenu.ts
@@ -25,11 +25,18 @@ import Editor from './Editor';
 import { PopupMenuItem } from '../types';
 
 /**
- * Creates popupmenus for mouse events.  This object holds an XML node which is a description of the popup menu to be created.  In {@link createMenu}, the configuration is applied to the context and the resulting menu items are added to the menu dynamically.  See {@link createMenu} for a description of the configuration format.
- * This class does not create the DOM nodes required for the popup menu, it only parses an XML description to invoke the respective methods on an {@link mxPopupMenu} each time the menu is displayed.
+ * Creates popupmenus for mouse events.
  *
- * @Codec
- * This class uses the {@link DefaultPopupMenuCodec} to read configuration data into an existing instance, however, the actual parsing is done by this class during program execution, so the format is described below.
+ * This object holds an XML node which is a description of the popup menu to be created.
+ * In {@link createMenu}, the configuration is applied to the context and the resulting menu items are added to the menu dynamically.
+ * See {@link createMenu} for a description of the configuration format.
+ *
+ * This class does not create the DOM nodes required for the popup menu, it only parses an XML description to invoke the respective methods on an {@link MaxPopupMenu} each time the menu is displayed.
+ *
+ * ### Codec
+ * This class uses the {@link EditorPopupMenuCodec} to read configuration data into an existing instance, however, the actual parsing is done by this class during program execution, so the format is described below.
+ *
+ * @category Editor
  */
 export class EditorPopupMenu {
   constructor(config: Element | null = null) {
diff --git a/packages/core/src/editor/EditorToolbar.ts b/packages/core/src/editor/EditorToolbar.ts
index 46296abaa3..ae7830a6e8 100644
--- a/packages/core/src/editor/EditorToolbar.ts
+++ b/packages/core/src/editor/EditorToolbar.ts
@@ -30,28 +30,31 @@ import EventObject from '../view/event/EventObject';
 import type { DropHandler } from '../view/other/DragSource';
 
 /**
- * Toolbar for the editor. This modifies the state of the graph
- * or inserts new cells upon mouse clicks.
+ * Toolbar for the editor.
  *
- * @Example:
+ * This modifies the state of the graph or inserts new cells upon mouse clicks.
+ *
+ * ### Example
  *
  * Create a toolbar with a button to copy the selection into the clipboard,
  * and a combo box with one action to paste the selection from the clipboard
  * into the graph.
  *
  * ```
- * var toolbar = new EditorToolbar(container, editor);
+ * const toolbar = new EditorToolbar(container, editor);
  * toolbar.addItem('Copy', null, 'copy');
  *
- * var combo = toolbar.addActionCombo('More actions...');
+ * const combo = toolbar.addActionCombo('More actions...');
  * toolbar.addActionOption(combo, 'Paste', 'paste');
  * ```
  *
- * @Codec:
+ * ### Codec
  *
  * This class uses the {@link DefaultToolbarCodec} to read configuration
  * data into an existing instance. See {@link DefaultToolbarCodec} for a
  * description of the configuration format.
+ *
+ * @category Editor
  */
 export class EditorToolbar {
   constructor(container: HTMLElement | null = null, editor: Editor | null = null) {
@@ -116,7 +119,7 @@ export class EditorToolbar {
         }
       );
 
-      // Resets the selected tool after a doubleclick or escape keystroke
+      // Resets the selected tool after a double click or escape keystroke
       this.resetHandler = () => {
         if (this.toolbar != null) {
           this.toolbar.resetMode(true);
diff --git a/packages/core/src/gui/MaxForm.ts b/packages/core/src/gui/MaxForm.ts
index 220e78e237..c0532c05ab 100644
--- a/packages/core/src/gui/MaxForm.ts
+++ b/packages/core/src/gui/MaxForm.ts
@@ -24,7 +24,7 @@ import Translations from '../i18n/Translations';
 /**
  * A simple class for creating HTML forms.
  *
- * @class MaxForm
+ * @category GUI
  */
 class MaxForm {
   constructor(className: string) {
diff --git a/packages/core/src/gui/MaxLog.ts b/packages/core/src/gui/MaxLog.ts
index 9437e3f3bc..c4e12f59cc 100644
--- a/packages/core/src/gui/MaxLog.ts
+++ b/packages/core/src/gui/MaxLog.ts
@@ -28,6 +28,9 @@ import { VERSION } from '../util/Constants';
 
 /**
  * A singleton class that implements a simple console.
+ *
+ * @category GUI
+ * @category Logging
  */
 class MaxLog {
   static textarea: HTMLTextAreaElement | null = null;
diff --git a/packages/core/src/gui/MaxLogAsLogger.ts b/packages/core/src/gui/MaxLogAsLogger.ts
index fa5ad647f4..9ad9e3d80f 100644
--- a/packages/core/src/gui/MaxLogAsLogger.ts
+++ b/packages/core/src/gui/MaxLogAsLogger.ts
@@ -24,6 +24,7 @@ import MaxLog from './MaxLog';
  *
  * @experimental subject to change or removal. The logging system may be modified in the future without prior notice.
  * @since 0.11.0
+ * @category GUI
  * @category Logging
  */
 export class MaxLogAsLogger implements Logger {
diff --git a/packages/core/src/gui/MaxPopupMenu.ts b/packages/core/src/gui/MaxPopupMenu.ts
index efae69e4db..ecee8fa269 100644
--- a/packages/core/src/gui/MaxPopupMenu.ts
+++ b/packages/core/src/gui/MaxPopupMenu.ts
@@ -47,6 +47,8 @@ import type { PopupMenuItem } from '../types';
  * ### `InternalEvent.SHOW`
  *
  * Fires after the menu has been shown in {@link popup}.
+ *
+ * @category GUI
  */
 class MaxPopupMenu extends EventSource {
   constructor(
diff --git a/packages/core/src/gui/MaxToolbar.ts b/packages/core/src/gui/MaxToolbar.ts
index c3c591a161..b3cbc8ec0b 100644
--- a/packages/core/src/gui/MaxToolbar.ts
+++ b/packages/core/src/gui/MaxToolbar.ts
@@ -43,6 +43,7 @@ export interface HTMLImageElementWithProps extends HTMLImageElement {
  * Fires when an item was selected in the toolbar. The EventObject {@link InternalEvent.function}
  * property contains the function that was selected in {@link selectMode}.
  *
+ * @category GUI
  */
 class MaxToolbar extends EventSource {
   constructor(container: HTMLElement) {
diff --git a/packages/core/src/gui/MaxWindow.ts b/packages/core/src/gui/MaxWindow.ts
index c840b2c5c4..8159c2bf8d 100644
--- a/packages/core/src/gui/MaxWindow.ts
+++ b/packages/core/src/gui/MaxWindow.ts
@@ -176,8 +176,7 @@ let activeWindow: MaxWindow | null = null;
  *
  * Fires before the window is destroyed. This event has no properties.
  *
- * @class MaxWindow
- * @extends EventSource
+ * @category GUI
  */
 class MaxWindow extends EventSource {
   constructor(
diff --git a/packages/core/src/i18n/Translations.ts b/packages/core/src/i18n/Translations.ts
index 17996ad427..b0a30c178c 100644
--- a/packages/core/src/i18n/Translations.ts
+++ b/packages/core/src/i18n/Translations.ts
@@ -72,6 +72,8 @@ import { TranslationsConfig } from './config';
  * ## Loading default resources
  *
  * Call {@link loadResources} to load the default resources file for both {@link Graph} and {@link Editor}.
+ *
+ * @category I18n
  */
 class Translations {
   /*
diff --git a/packages/core/src/i18n/config.ts b/packages/core/src/i18n/config.ts
index 9279b347b7..5329c11a59 100644
--- a/packages/core/src/i18n/config.ts
+++ b/packages/core/src/i18n/config.ts
@@ -37,12 +37,25 @@ const values: TranslationsConfigValuesType = {
 const originalValues: TranslationsConfigValuesType = {};
 shallowCopy(values, originalValues);
 
+/**
+ * Resets {@link TranslationsConfig} to default values.
+ *
+ * @experimental Subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
+ * @since 0.16.0
+ * @category Configuration
+ * @category I18n
+ */
 export const resetTranslationsConfig = (): void => {
   shallowCopy(originalValues, values);
 };
 
 /**
  * Global configuration for {@link Translations}.
+ *
+ * @experimental subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
+ * @since 0.16.0
+ * @category Configuration
+ * @category I18n
  */
 export const TranslationsConfig = {
   /**
diff --git a/packages/core/src/serialization/register-model-codecs.ts b/packages/core/src/serialization/register-model-codecs.ts
index 4005239e3b..e0809d9634 100644
--- a/packages/core/src/serialization/register-model-codecs.ts
+++ b/packages/core/src/serialization/register-model-codecs.ts
@@ -40,6 +40,7 @@ let isModelCodecsRegistered = false;
  *              if they have never been registered before.
  * @since 0.10.0
  * @category Configuration
+ * @category Serialization with Codecs
  */
 export const registerModelCodecs = (force = false) => {
   if (!isModelCodecsRegistered || force) {
diff --git a/packages/core/src/serialization/register-other-codecs.ts b/packages/core/src/serialization/register-other-codecs.ts
index 821b84cd72..40f1e65d4e 100644
--- a/packages/core/src/serialization/register-other-codecs.ts
+++ b/packages/core/src/serialization/register-other-codecs.ts
@@ -67,6 +67,7 @@ let isCoreCodecsRegistered = false;
  *              if they have never been registered before.
  * @since 0.6.0
  * @category Configuration
+ * @category Serialization with Codecs
  */
 export const registerCoreCodecs = (force = false) => {
   if (!isCoreCodecsRegistered || force) {
@@ -91,6 +92,7 @@ let isEditorCodecsRegistered = false;
  *              if they have never been registered before.
  * @since 0.6.0
  * @category Configuration
+ * @category Serialization with Codecs
  */
 export const registerEditorCodecs = (force = false) => {
   if (!isEditorCodecsRegistered || force) {
@@ -112,6 +114,7 @@ export const registerEditorCodecs = (force = false) => {
  *              if they have never been registered before.
  * @since 0.6.0
  * @category Configuration
+ * @category Serialization with Codecs
  */
 export const registerAllCodecs = (force = false) => {
   registerCoreCodecs(force);
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index b83c628789..1b4b34665d 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -35,10 +35,12 @@ export type UndoableChange = {
   redo?: () => void;
 };
 
+/** @category Style */
 export type StyleValue = string | number;
 
 export type Properties = Record<string, any>;
 
+/** @category Style */
 export type CellStyle = CellStateStyle & {
   /**
    * Names of styles used to fill properties before applying the specific properties defined in {@link CellStateStyle}.
@@ -66,6 +68,7 @@ export type CellStyle = CellStateStyle & {
   ignoreDefaultStyle?: boolean;
 };
 
+/** @category Style */
 export type CellStateStyle = {
   /**
    * This specifies if {@link arcSize} for rectangles is absolute or relative.
@@ -871,14 +874,19 @@ export type CellStateStyle = {
   whiteSpace?: WhiteSpaceValue;
 };
 
+/** @category Style */
 export type NumericCellStateStyleKeys = NonNullable<
   {
     [k in keyof CellStateStyle]: CellStateStyle[k] extends number | undefined ? k : never;
   }[keyof CellStateStyle]
 >;
 
+/** @category Style */
 export type ColorValue = string;
-/** Color values and special placeholders used to resolve colors (see {@link CellRenderer.resolveColor}) for style properties. */
+/**
+ * Color values and special placeholders used to resolve colors (see {@link CellRenderer.resolveColor}) for style properties.
+ * @category Style
+ */
 export type SpecialStyleColorValue =
   | 'indicated'
   | 'inherit'
@@ -886,14 +894,21 @@ export type SpecialStyleColorValue =
   | 'swimlane'
   | (string & {});
 
+/** @category Style */
 export type DirectionValue = 'north' | 'south' | 'east' | 'west';
+/** @category Style */
 export type TextDirectionValue = '' | 'ltr' | 'rtl' | 'auto';
+/** @category Style */
 export type AlignValue = 'left' | 'center' | 'right';
+/** @category Style */
 export type VAlignValue = 'top' | 'middle' | 'bottom';
+/** @category Style */
 export type OverflowValue = 'fill' | 'width' | 'auto' | 'hidden' | 'scroll' | 'visible';
+/** @category Style */
 export type WhiteSpaceValue = 'normal' | 'wrap' | 'nowrap' | 'pre';
 /**
  * Names used to register the edge markers provided out-of-the-box by maxGraph with {@link MarkerShape.addMarker}.
+ * @category Style
  */
 export type ArrowValue =
   | 'none'
@@ -909,11 +924,13 @@ export type ArrowValue =
 
 /**
  * {@link ArrowValue} with support for extensions.
+ * @category Style
  */
 export type StyleArrowValue = ArrowValue | (string & {});
 
 /**
  * Names used to register the shapes provided out-of-the-box by maxGraph with {@link CellRenderer.registerShape}.
+ * @category Style
  */
 export type ShapeValue =
   | 'rectangle'
@@ -935,6 +952,7 @@ export type ShapeValue =
 
 /**
  * {@link ShapeValue} with support for extensions.
+ * @category Style
  */
 export type StyleShapeValue = ShapeValue | (string & {});
 
@@ -1067,11 +1085,13 @@ export type VertexParameters = {
   y?: number;
 };
 
+/** @category Plugin */
 export interface GraphPluginConstructor {
-  new (graph: Graph): GraphPlugin;
   pluginId: string;
+  new (graph: Graph): GraphPlugin;
 }
 
+/** @category Plugin */
 export interface GraphPlugin {
   onDestroy: () => void;
 }
@@ -1179,6 +1199,9 @@ export type PerimeterValue =
  * @param target {@link CellState} that represents the target terminal.
  * @param points List of relative control points.
  * @param result Array of {@link Point} that represent the actual points of the edge.
+ *
+ * @since 0.8.0
+ * @category EdgeStyle
  */
 export type EdgeStyleFunction = (
   state: CellState,
@@ -1191,6 +1214,7 @@ export type EdgeStyleFunction = (
 /**
  * Names used to register the edge styles (a.k.a. connectors) provided out-of-the-box by maxGraph with {@link StyleRegistry.putValue}.
  * @since 0.14.0
+ * @category EdgeStyle
  */
 export type EdgeStyleValue =
   | 'elbowEdgeStyle'
@@ -1205,6 +1229,7 @@ export type EdgeStyleValue =
 /**
  * {@link EdgeStyleValue} with support for extensions and {@link EdgeStyleFunction}.
  * @since 0.14.0
+ * @category EdgeStyle
  */
 export type StyleEdgeStyleValue =
   | EdgeStyleFunction
@@ -1214,6 +1239,7 @@ export type StyleEdgeStyleValue =
 
 /**
  * @since 0.11.0
+ * @category Style
  */
 export type MarkerFactoryFunction = (
   canvas: AbstractCanvas2D,
diff --git a/packages/core/src/util/MaxXmlRequest.ts b/packages/core/src/util/MaxXmlRequest.ts
index 350a7399d8..36446da376 100644
--- a/packages/core/src/util/MaxXmlRequest.ts
+++ b/packages/core/src/util/MaxXmlRequest.ts
@@ -219,7 +219,7 @@ class MaxXmlRequest {
   }
 
   /**
-   * Returns the status as a number, eg. 404 for "Not found" or 200 for "OK".
+   * Returns the status as a number, e.g. 404 for "Not found" or 200 for "OK".
    * Note: The NS_ERROR_NOT_AVAILABLE for invalid responses cannot be caught.
    */
   getStatus(): number {
@@ -240,13 +240,12 @@ class MaxXmlRequest {
   }
 
   /**
-   * Send the <request> to the target URL using the specified functions to
-   * process the response asychronously.
+   * Send the {@link request} to the target URL using the specified functions to process the response asynchronously.
    *
-   * Note: Due to technical limitations, onerror is currently ignored.
+   * Note: Due to technical limitations, `onerror` is currently ignored.
    *
    * @param onload Function to be invoked if a successful response was received.
-   * @param onerror Function to be called on any error. Unused in this implementation, intended for overriden function.
+   * @param onerror Function to be called on any error. Unused in this implementation, intended for overridden function.
    * @param timeout Optional timeout in ms before calling ontimeout.
    * @param ontimeout Optional function to execute on timeout.
    */
@@ -518,18 +517,16 @@ export const getAll = (
 };
 
 /**
- * Posts the specified params to the given URL *asynchronously* and invokes
- * the given functions depending on the request status. Returns the
- * <MaxXmlRequest> in use. Both functions take the <MaxXmlRequest> as the
- * only parameter. Make sure to use encodeURIComponent for the parameter
- * values.
+ * Posts the specified params to the given URL *asynchronously* and invokes the given functions depending on the request status.
+ * Returns the {@link MaxXmlRequest} in use.
+ * Both functions take the {@link MaxXmlRequest} as the only parameter.
+ * Make sure to use encodeURIComponent for the parameter values.
  *
  * Example:
  *
  * ```javascript
- * mxUtils.post(url, 'key=value', (req)=>
- * {
- *   mxUtils.alert('Ready: '+req.isReady()+' Status: '+req.getStatus());
+ * post(url, 'key=value', (req) => {
+ *   alert('Ready: ' + req.isReady() + ' Status: ' + req.getStatus());
  *  // Process req.getDocumentElement() using DOM API if OK...
  * });
  * ```
diff --git a/packages/core/src/view/cell/register-shapes.ts b/packages/core/src/view/cell/register-shapes.ts
index 4ab8056cf3..6ffd68221e 100644
--- a/packages/core/src/view/cell/register-shapes.ts
+++ b/packages/core/src/view/cell/register-shapes.ts
@@ -39,7 +39,9 @@ let isDefaultElementsRegistered = false;
 /**
  * Add default shapes into `CellRenderer` shapes.
  *
+ * @private
  * @category Configuration
+ * @category Style
  */
 export function registerDefaultShapes() {
   if (!isDefaultElementsRegistered) {
diff --git a/packages/core/src/view/geometry/edge/MarkerShape.ts b/packages/core/src/view/geometry/edge/MarkerShape.ts
index 25fffef3ba..aba3eb0eb9 100644
--- a/packages/core/src/view/geometry/edge/MarkerShape.ts
+++ b/packages/core/src/view/geometry/edge/MarkerShape.ts
@@ -253,7 +253,9 @@ function diamond(
 
 let isDefaultMarkersRegistered = false;
 /**
+ * @private
  * @category Configuration
+ * @category Style
  */
 export const registerDefaultEdgeMarkers = (): void => {
   if (!isDefaultMarkersRegistered) {
diff --git a/packages/core/src/view/style/EdgeStyle.ts b/packages/core/src/view/style/EdgeStyle.ts
index 9ad87865a8..a2b70b33ca 100644
--- a/packages/core/src/view/style/EdgeStyle.ts
+++ b/packages/core/src/view/style/EdgeStyle.ts
@@ -78,6 +78,8 @@ import { TopToBottom as TopToBottomFunction } from './edge/TopToBottom';
  * ```javascript
  * style.edgeStyle = EdgeStyle.MyStyle;
  * ```
+ *
+ * @category EdgeStyle
  */
 class EdgeStyle {
   /**
diff --git a/packages/core/src/view/style/StyleRegistry.ts b/packages/core/src/view/style/StyleRegistry.ts
index 0e1100e6fe..d9dde198e6 100644
--- a/packages/core/src/view/style/StyleRegistry.ts
+++ b/packages/core/src/view/style/StyleRegistry.ts
@@ -17,8 +17,11 @@ limitations under the License.
 */
 
 /**
- * Singleton class that acts as a global converter from string to object values
- * in a style. This is currently only used to perimeters and edge styles.
+ * Singleton class that acts as a global converter from string to object values in a style.
+ *
+ * This is currently only used for handling perimeters and edge styles.
+ *
+ * @category Style
  */
 class StyleRegistry {
   /**
diff --git a/packages/core/src/view/style/Stylesheet.ts b/packages/core/src/view/style/Stylesheet.ts
index 65a4345285..7e4e2b387f 100644
--- a/packages/core/src/view/style/Stylesheet.ts
+++ b/packages/core/src/view/style/Stylesheet.ts
@@ -43,6 +43,8 @@ import type { CellStateStyle, CellStyle } from '../../types';
  * const defaultEdgeStyle = stylesheet.getDefaultEdgeStyle();
  * defaultEdgeStyle.edgeStyle = EdgeStyle.EntityRelation;
  * ```
+ *
+ * @category Style
  */
 export class Stylesheet {
   constructor() {
diff --git a/packages/core/src/view/style/config.ts b/packages/core/src/view/style/config.ts
index 915a395311..568c99018e 100644
--- a/packages/core/src/view/style/config.ts
+++ b/packages/core/src/view/style/config.ts
@@ -24,6 +24,7 @@ import type { DirectionValue } from '../../types';
  * @experimental subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
  * @since 0.15.0
  * @category Configuration
+ * @category EdgeStyle
  */
 export const EntityRelationConnectorConfig = {
   /**
@@ -40,6 +41,7 @@ export const EntityRelationConnectorConfig = {
  * @experimental Subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
  * @since 0.15.0
  * @category Configuration
+ * @category EdgeStyle
  */
 export const resetEntityRelationConnectorConfig = (): void => {
   // implement the reset manually as there are a few properties for now
@@ -52,6 +54,7 @@ export const resetEntityRelationConnectorConfig = (): void => {
  * @experimental subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
  * @since 0.16.0
  * @category Configuration
+ * @category EdgeStyle
  */
 export const OrthogonalConnectorConfig = {
   /**
@@ -78,6 +81,7 @@ const originalOrthogonalConnectorConfig = { ...OrthogonalConnectorConfig };
  * @experimental Subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
  * @since 0.16.0
  * @category Configuration
+ * @category EdgeStyle
  */
 export const resetOrthogonalConnectorConfig = (): void => {
   shallowCopy(originalOrthogonalConnectorConfig, OrthogonalConnectorConfig);
@@ -119,6 +123,7 @@ export type ManhattanConnectorConfigType = {
  * @experimental subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
  * @since 0.16.0
  * @category Configuration
+ * @category EdgeStyle
  */
 export const ManhattanConnectorConfig: ManhattanConnectorConfigType = {
   maxAllowedDirectionChange: 90,
@@ -136,6 +141,7 @@ shallowCopy(ManhattanConnectorConfig, originalManhattanConnectorConfig);
  * @experimental Subject to change or removal. maxGraph's global configuration may be modified in the future without prior notice.
  * @since 0.16.0
  * @category Configuration
+ * @category EdgeStyle
  */
 export const resetManhattanConnectorConfig = (): void => {
   shallowCopy(originalManhattanConnectorConfig, ManhattanConnectorConfig);
diff --git a/packages/core/src/view/style/register.ts b/packages/core/src/view/style/register.ts
index 9d25672f02..9ae164caff 100644
--- a/packages/core/src/view/style/register.ts
+++ b/packages/core/src/view/style/register.ts
@@ -24,7 +24,9 @@ let isDefaultsRegistered = false;
 /**
  * Register style elements for "EdgeStyle" and "Perimeters".
  *
+ * @private
  * @category Configuration
+ * @category Style
  */
 export const registerDefaultStyleElements = (): void => {
   if (!isDefaultsRegistered) {
diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json
index c7a1f90ad1..12d7040eb2 100644
--- a/packages/core/tsconfig.json
+++ b/packages/core/tsconfig.json
@@ -15,22 +15,28 @@
   "typedocOptions": {
     "out": "build/api",
     "readme": "none",
+    "excludeInternal": true,
     "excludeExternals": true,
     "excludePrivate": true,
     "categoryOrder": [
       "Configuration",
-      "Logging",
       "Edge Shapes",
       "Vertex Shapes",
+      "EdgeStyle",
+      "Editor",
+      "GUI",
+      "I18n",
       "Layout",
+      "Logging",
       "Perimeter",
       "Plugin",
       "Serialization with Codecs",
+      "Style",
       "*"
     ],
     "categorizeByGroup": false,
     "navigation": {
-      "includeCategories": false, // not enough categories to warrant this
+      "includeCategories": true, // not enough categories to warrant this
     },
   }
 }


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (3)</summary><blockquote>

<details>
<summary>packages/core/src/gui/MaxLogAsLogger.ts (1)</summary><blockquote>

`27-29`: **JSDoc Category Addition: GUI and Logging**  
The addition of `@category GUI` and `@category Logging` clarifies the categorization of the `MaxLogAsLogger` class. Please verify that the use of multiple categories here is intentional and that the generated documentation will display them as expected.

</blockquote></details>
<details>
<summary>packages/core/src/view/cell/register-shapes.ts (1)</summary><blockquote>

`42-45`: **JSDoc Update: Added Versioning and Dual Categories**  
The inclusion of `@since 0.8.0` along with both `@category Configuration` and `@category Style` helps clarify the function’s version history and its dual role in configuration and styling. Please confirm that dual categorization meets your documentation standards.

</blockquote></details>
<details>
<summary>packages/core/src/view/style/StyleRegistry.ts (1)</summary><blockquote>

`20-22`: **Suggestion: Verify Terminology in Description**  
The phrase “used to perimeters and edge styles” appears ambiguous. Consider revising it for clarity (e.g., “used for handling perimeters and edge styles”) if that better reflects the intended functionality.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between b22b07440e4f52be34f53d0133511a740947377e and 54f6c7938eaab737cfa3de22dd88a34a9a140f91.

</details>

<details>
<summary>📒 Files selected for processing (24)</summary>

* `packages/core/src/editor/Editor.ts` (1 hunks)
* `packages/core/src/editor/EditorKeyHandler.ts` (1 hunks)
* `packages/core/src/editor/EditorPopupMenu.ts` (1 hunks)
* `packages/core/src/editor/EditorToolbar.ts` (2 hunks)
* `packages/core/src/gui/MaxForm.ts` (1 hunks)
* `packages/core/src/gui/MaxLog.ts` (1 hunks)
* `packages/core/src/gui/MaxLogAsLogger.ts` (1 hunks)
* `packages/core/src/gui/MaxPopupMenu.ts` (1 hunks)
* `packages/core/src/gui/MaxToolbar.ts` (1 hunks)
* `packages/core/src/gui/MaxWindow.ts` (1 hunks)
* `packages/core/src/i18n/Translations.ts` (1 hunks)
* `packages/core/src/i18n/config.ts` (1 hunks)
* `packages/core/src/serialization/register-model-codecs.ts` (1 hunks)
* `packages/core/src/serialization/register-other-codecs.ts` (3 hunks)
* `packages/core/src/types.ts` (10 hunks)
* `packages/core/src/util/MaxXmlRequest.ts` (3 hunks)
* `packages/core/src/view/cell/register-shapes.ts` (1 hunks)
* `packages/core/src/view/geometry/edge/MarkerShape.ts` (1 hunks)
* `packages/core/src/view/style/EdgeStyle.ts` (1 hunks)
* `packages/core/src/view/style/StyleRegistry.ts` (1 hunks)
* `packages/core/src/view/style/Stylesheet.ts` (1 hunks)
* `packages/core/src/view/style/config.ts` (6 hunks)
* `packages/core/src/view/style/register.ts` (1 hunks)
* `packages/core/tsconfig.json` (1 hunks)

</details>

<details>
<summary>🔇 Additional comments (53)</summary><blockquote>

<details>
<summary>packages/core/src/util/MaxXmlRequest.ts (3)</summary>

`222-225`: **Improved Documentation for getStatus Method**  
The updated JSDoc for `getStatus` now correctly uses "e.g." instead of "eg." and clearly explains the expected numeric status codes. This change enhances both grammatical correctness and clarity.

---

`242-249`: **Clarified JSDoc for send Method**  
The revised documentation for the `send` method now explicitly notes that the `onerror` parameter is ignored (due to technical limitations) and that it is intended for override. This additional clarification improves the reader’s understanding of the method’s behavior.

---

`519-524`: **Enhanced JSDoc for post Function**  
The updated JSDoc for the `post` function now cleanly explains that the parameters will be posted asynchronously and emphasizes the need to use `encodeURIComponent` for parameter values. This clear description will help maintain consistency across documentation and assists developers in correct usage.

</details>
<details>
<summary>packages/core/src/view/geometry/edge/MarkerShape.ts (1)</summary>

`256-258`: **Documentation improvement: Added style category**

Good addition of `@since 0.11.0` and `@category Style` tags to properly categorize the `registerDefaultEdgeMarkers` function. This enhancement improves documentation organization and aligns with the PR objectives.

</details>
<details>
<summary>packages/core/src/view/style/register.ts (1)</summary>

`27-29`: **Documentation improvement: Added style category and version information**

The addition of `@since 0.8.0` and `@category Style` tags to the `registerDefaultStyleElements` function enhances the documentation by providing version information and proper categorization, which aligns perfectly with the PR objectives.

</details>
<details>
<summary>packages/core/src/serialization/register-model-codecs.ts (1)</summary>

`43-43`: **Documentation improvement: Added serialization category**

Good addition of the `@category Serialization with Codecs` tag to properly categorize the `registerModelCodecs` function. This enhancement improves the organization of documentation and helps users better understand the purpose of this function.

</details>
<details>
<summary>packages/core/src/view/style/config.ts (6)</summary>

`27-27`: **Documentation improvement: Added EdgeStyle category**

Good addition of the `@category EdgeStyle` tag to enhance the categorization of the `EntityRelationConnectorConfig` configuration object.

---

`44-44`: **Documentation improvement: Added EdgeStyle category**

Good addition of the `@category EdgeStyle` tag to enhance the categorization of the `resetEntityRelationConnectorConfig` function.

---

`57-57`: **Documentation improvement: Added EdgeStyle category**

Good addition of the `@category EdgeStyle` tag to enhance the categorization of the `OrthogonalConnectorConfig` configuration object.

---

`84-84`: **Documentation improvement: Added EdgeStyle category**

Good addition of the `@category EdgeStyle` tag to enhance the categorization of the `resetOrthogonalConnectorConfig` function.

---

`126-126`: **Documentation improvement: Added EdgeStyle category**

Good addition of the `@category EdgeStyle` tag to enhance the categorization of the `ManhattanConnectorConfig` configuration object.

---

`144-144`: **Documentation improvement: Added EdgeStyle category**

Good addition of the `@category EdgeStyle` tag to enhance the categorization of the `resetManhattanConnectorConfig` function.

</details>
<details>
<summary>packages/core/src/view/style/EdgeStyle.ts (1)</summary>

`81-83`: **JSDoc Category Added for EdgeStyle**  
The documentation now includes the `@category EdgeStyle` tag, which improves the organization and discoverability of this class in the generated docs. This change is straightforward and aligns well with the new documentation standards.

</details>
<details>
<summary>packages/core/src/gui/MaxPopupMenu.ts (1)</summary>

`50-52`: **JSDoc Enhancement for GUI Components**  
The inclusion of the `@category GUI` tag in the JSDoc comment clarifies that `MaxPopupMenu` is part of the GUI layer. This helps in better categorizing documentation without affecting functionality.

</details>
<details>
<summary>packages/core/src/gui/MaxLog.ts (1)</summary>

`31-33`: **Enhanced JSDoc with Multiple Categories**  
The addition of both `@category GUI` and `@category Logging` tags to the `MaxLog` class refines its classification. This dual categorization neatly indicates that the class plays a role in both GUI-related operations and logging functionality.

</details>
<details>
<summary>packages/core/src/view/style/Stylesheet.ts (1)</summary>

`46-48`: **Added JSDoc Category for Styling**  
The new `@category Style` tag in the documentation for the `Stylesheet` class helps in grouping style-related functionalities. This update should enhance navigation in the generated documentation and follows the documentation consistency improvements seen across the codebase.

</details>
<details>
<summary>packages/core/src/gui/MaxToolbar.ts (1)</summary>

`46-47`: **JSDoc Categorization Update for GUI Components**  
Adding the `@category GUI` tag to the `MaxToolbar` class documentation is a clear improvement, making it easier for developers to locate and understand GUI-related components in the codebase.

</details>
<details>
<summary>packages/core/src/i18n/Translations.ts (1)</summary>

`75-77`: **JSDoc Category Addition: I18n**  
Adding the `@category I18n` tag organizes the `Translations` class under internationalization, which aligns well with the overall documentation improvements.

</details>
<details>
<summary>packages/core/src/gui/MaxForm.ts (1)</summary>

`27-27`: **JSDoc Update: Categorization as GUI**  
The updated JSDoc for the `MaxForm` class now includes the `@category GUI` annotation, which improves the clarity and navigability of the documentation for GUI-related components.

</details>
<details>
<summary>packages/core/src/view/style/StyleRegistry.ts (1)</summary>

`19-25`: **JSDoc Enhancement: Improved Formatting and Category Inclusion**  
The restructuring of the documentation comment—with the consolidation of the description and the insertion of the `@category Style` tag—greatly improves clarity and consistency.

</details>
<details>
<summary>packages/core/src/gui/MaxWindow.ts (1)</summary>

`179-179`: **Good addition of category tag for improved documentation organization.**

Adding the `@category GUI` tag to the MaxWindow class helps organize the documentation and makes it easier to navigate related components.

</details>
<details>
<summary>packages/core/src/serialization/register-other-codecs.ts (3)</summary>

`70-70`: **Documentation enhancement with new category tag.**

Adding the `@category Serialization with Codecs` tag to the `registerCoreCodecs` function improves documentation organization while maintaining the existing `@category Configuration` tag.

---

`95-95`: **Documentation enhancement with new category tag.**

Adding the `@category Serialization with Codecs` tag to the `registerEditorCodecs` function improves documentation organization while maintaining the existing `@category Configuration` tag.

---

`117-117`: **Documentation enhancement with new category tag.**

Adding the `@category Serialization with Codecs` tag to the `registerAllCodecs` function improves documentation organization while maintaining the existing `@category Configuration` tag.

</details>
<details>
<summary>packages/core/src/i18n/config.ts (2)</summary>

`40-50`: **Good addition of a utility function to reset translations configuration.**

The new `resetTranslationsConfig` function with proper JSDoc documentation provides a convenient way to reset translations to default values. The experimental tag is appropriate since this is related to global configuration that may change in the future.

---

`54-58`: **Enhanced documentation for TranslationsConfig.**

The updated JSDoc for TranslationsConfig now properly indicates its experimental status and adds the I18n category tag, providing better documentation organization.

</details>
<details>
<summary>packages/core/src/editor/EditorToolbar.ts (4)</summary>

`33-37`: **Improved class documentation formatting and clarity.**

The description has been concisely updated to "Toolbar for the editor" with proper markdown formatting using "### Example" which aligns with modern documentation standards.

---

`44-47`: **Updated example code to use modern JavaScript conventions.**

Good update from `var` to `const` in the example code, which follows modern JavaScript best practices.

---

`57-57`: **Added category tag for better documentation organization.**

The addition of `@category Editor` helps with documentation organization and makes related components easier to find.

---

`122-122`: **Improved readability in comment.**

Changed "doubleclick" to "double click" for better readability and consistency with other documentation.

</details>
<details>
<summary>packages/core/src/editor/Editor.ts (2)</summary>

`394-394`: **Documentation improvement with category addition**

The addition of the `@category Editor` tag enhances the code's documentation by properly categorizing this class in the generated documentation. This aligns with the PR objective of adding JSDoc categories.

---

`397-406`: **Improved constructor documentation with modern JavaScript syntax**

The updated constructor documentation is more concise and uses modern ES6 syntax with `const` instead of `var`. The parameter description has also been added for better clarity.

</details>
<details>
<summary>packages/core/src/editor/EditorKeyHandler.ts (1)</summary>

`25-46`: **Improved class documentation with better structure and modern syntax**

The documentation has been significantly improved with:
1. More concise first line description
2. Better explanation of class functionality
3. Improved section headers using markdown syntax (### Example, ### Codec, ### Keycodes)
4. Updated code example to use modern ES6 syntax with `const`
5. Added `@category Editor` tag for proper categorization

These changes align with the PR objective to enhance JSDoc documentation and apply consistent categorization.

</details>
<details>
<summary>packages/core/src/editor/EditorPopupMenu.ts (1)</summary>

`28-39`: **Enhanced documentation with improved structure and categorization**

The class documentation has been restructured with:
1. More concise first line description
2. Better organized explanations with separate paragraphs
3. Updated class reference from mxPopupMenu to MaxPopupMenu
4. Improved section header format with markdown syntax (### Codec)
5. Added `@category Editor` tag for proper categorization

These changes contribute to better documentation readability and organization, aligning with the PR objectives.

</details>
<details>
<summary>packages/core/tsconfig.json (3)</summary>

`18-18`: **Added excludeInternal option for TypeDoc**

Adding `"excludeInternal": true` will ensure that internal symbols are excluded from the generated documentation, creating cleaner and more focused API documentation for users.

---

`25-30`: **Added new JSDoc categories to TypeDoc configuration**

The addition of new categories ("EdgeStyle", "Editor", "GUI", "I18n", "Style") and reorganization of existing ones supports the PR objective of adding more JSDoc categories for better documentation organization.



Also applies to: 34-34

---

`39-39`: **Enabled categories in TypeDoc navigation**

Changing `includeCategories` from `false` to `true` ensures that the newly defined categories will be included in the navigation structure of the generated documentation. This improves documentation browsing and organization.

</details>
<details>
<summary>packages/core/src/types.ts (16)</summary>

`38-39`: **LGTM! Good documentation enhancement.**

Adding the `@category Style` tag to `StyleValue` type helps organize your JSDoc documentation better.

---

`43-69`: **LGTM! Appropriate categorization for `CellStyle`.**

The `@category Style` tag is correctly added to the `CellStyle` type, enhancing documentation organization.

---

`71-875`: **LGTM! Good documentation organization.**

Adding the `@category Style` tag to the extensive `CellStateStyle` type helps with JSDoc categorization.

---

`877-882`: **LGTM! Appropriate categorization.**

The `@category Style` tag is correctly added to the `NumericCellStateStyleKeys` type.

---

`884-885`: **LGTM! Consistent categorization.**

The `@category Style` tag is appropriately added to the `ColorValue` type.

---

`886-889`: **LGTM! Enhanced documentation for `SpecialStyleColorValue`.**

Improved JSDoc comment with the `@category Style` tag for better organization.

---

`897-908`: **LGTM! Consistent categorization for style-related types.**

The `@category Style` tags are appropriately added to all style value types, maintaining consistency.

---

`911-911`: **LGTM! Appropriate categorization for `ArrowValue`.**

The `@category Style` tag is correctly added to the arrow-related type.

---

`927-927`: **LGTM! Consistent categorization.**

The `@category Style` tag is appropriately added to the `StyleArrowValue` type.

---

`933-933`: **LGTM! Appropriate categorization for `ShapeValue`.**

The `@category Style` tag is correctly added to the shapes-related type.

---

`955-955`: **LGTM! Consistent categorization.**

The `@category Style` tag is appropriately added to the `StyleShapeValue` type.

---

`1202-1204`: **LGTM! Added version information and categorization.**

The `@since 0.8.0` and `@category EdgeStyle` tags provide valuable metadata for the `EdgeStyleFunction` type.

---

`1217-1217`: **LGTM! Appropriate categorization for `EdgeStyleValue`.**

The `@category EdgeStyle` tag is correctly added to the edge style-related type.

---

`1232-1232`: **LGTM! Consistent categorization.**

The `@category EdgeStyle` tag is appropriately added to the `StyleEdgeStyleValue` type.

---

`1242-1242`: **LGTM! Appropriate categorization for `MarkerFactoryFunction`.**

The `@category Style` tag is correctly added to the marker-related function type.

---

`1088-1097`: <details>
<summary>✅ Verification successful</summary>

**Added new `onDestroy` method to `GraphPlugin` interface.**

The `GraphPlugin` interface has been enhanced with an `onDestroy` method, which will require implementations to handle plugin cleanup. Make sure all existing plugin implementations are updated to include this method.

Both interfaces are correctly categorized with `@category Plugin` tags.


---

🏁 Script executed:

```shell
#!/bin/bash
# Check for existing plugin implementations that might need updates
echo "Searching for GraphPlugin implementations that need to be updated with onDestroy method:"
rg "class .+ implements GraphPlugin" -g "*.ts"
```

Length of output: 1116

---

I'll run a further check to verify if the implementations of `GraphPlugin` include an `onDestroy` method.

---

🏁 Script executed:

```shell
#!/bin/bash
echo "Checking for onDestroy definitions in files implementing GraphPlugin..."
rg -n "onDestroy" packages/core/src/view/handler/*.ts
```

Length of output: 2343

---



</details>

**Update Verified: GraphPlugin `onDestroy` Implementations**

The new `onDestroy` method has been correctly added to the `GraphPlugin` interface, and our search confirms that all core classes implementing `GraphPlugin` (e.g., RubberBandHandler, TooltipHandler, PanningHandler, SelectionHandler, PopupMenuHandler, SelectionCellsHandler, ConnectionHandler, and CellEditorHandler) now include an implementation of `onDestroy`. The categorization with `@category Plugin` remains intact.

No further changes are needed for this update. Please ensure that any non-core or future plugin implementations also adhere to this updated cleanup contract.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-12T09:22:50Z
user: login: tbouffard
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-12T11:05:07Z
user: login: tbouffard
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-12T11:31:11Z

Review comments:
diff_hunk: @@ -17,8 +17,11 @@ limitations under the License.
 */
 
 /**
- * Singleton class that acts as a global converter from string to object values
- * in a style. This is currently only used to perimeters and edge styles.
+ * Singleton class that acts as a global converter from string to object values in a style.
+ *
+ * This is currently only used to perimeters and edge styles.
path: packages/core/src/view/style/StyleRegistry.ts
user: login: tbouffard
body: **suggestion:** 
```suggestion
 * This is currently only used for handling perimeters and edge styles.
```
created_at: 2025-03-12T11:05:07Z
author_association: MEMBER
diff_hunk: @@ -39,7 +39,9 @@ let isDefaultElementsRegistered = false;
 /**
  * Add default shapes into `CellRenderer` shapes.
  *
+ * @since 0.8.0
path: packages/core/src/view/cell/register-shapes.ts
user: login: tbouffard
body: **suggestion:** not exported in the root index.ts
```suggestion
 * @private
```
created_at: 2025-03-12T11:27:25Z
author_association: MEMBER
diff_hunk: @@ -253,7 +253,9 @@ function diamond(
 
 let isDefaultMarkersRegistered = false;
 /**
+ * @since 0.11.0
path: packages/core/src/view/geometry/edge/MarkerShape.ts
user: login: tbouffard
body: **suggestion:** not exported in the root index.ts
```suggestion
 * @private
```
created_at: 2025-03-12T11:28:05Z
author_association: MEMBER
diff_hunk: @@ -24,7 +24,9 @@ let isDefaultsRegistered = false;
 /**
  * Register style elements for "EdgeStyle" and "Perimeters".
  *
+ * @since 0.8.0
path: packages/core/src/view/style/register.ts
user: login: tbouffard
body: **suggestion:** not exported in the root index.ts
```suggestion
 * @private
```
created_at: 2025-03-12T11:30:58Z
author_association: MEMBER

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-03-12T08:34:31Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

This pull request makes extensive updates to documentation comments and JSDoc annotations across many modules in the codebase. The changes reformat descriptions, update example code to modern JavaScript conventions (using `const`), and add new category tags (e.g., Editor, GUI, I18n, Serialization with Codecs, Style, EdgeStyle). A new experimental function is added to reset translation configurations, and the TypeDoc options in the tsconfig have been revised. No functional or control-flow changes have been introduced.

## Changes

| File(s) | Change Summary |
|---------|----------------|
| `packages/core/src/editor/{Editor, EditorKeyHandler, EditorPopupMenu, EditorToolbar}.ts` | Updated documentation comments and examples (using `const`) with streamlined descriptions and added/updated `@category Editor` annotations; no functional changes. |
| `packages/core/src/gui/{MaxForm, MaxLog, MaxLogAsLogger, MaxPopupMenu, MaxToolbar, MaxWindow}.ts` | Revised JSDoc comments by replacing legacy tags with `@category GUI`, reformatting examples, and adding logging-relevant category annotations; documentation-only updates. |
| `packages/core/src/i18n/{Translations.ts, config.ts}` | Added `@category I18n` annotations and updated documentation comments; introduced a new experimental function `resetTranslationsConfig` to reset translation configuration values. |
| `packages/core/src/serialization/{register-model-codecs, register-other-codecs}.ts` | Added `@category Serialization with Codecs` annotations to the documentation of codec registration functions. |
| `packages/core/src/types.ts` | Introduced several new type definitions related to styling and plugin interfaces and updated existing types with annotations such as `@category Style` and `@category EdgeStyle`. |
| `packages/core/src/util/MaxXmlRequest.ts` | Improved documentation by correcting typographical errors and updating links and formatting in code examples without affecting functionality. |
| `packages/core/src/view/{cell/register-shapes.ts, geometry/edge/MarkerShape.ts, style/(EdgeStyle.ts, StyleRegistry.ts, Stylesheet.ts, config.ts, register.ts)}` | Enhanced documentation across shape registration and styling modules by adding `@since` and appropriate `@category` annotations; comments were restructured for clarity. |
| `packages/core/tsconfig.json` | Revised TypeDoc options: added `"excludeInternal": true`, updated the `categoryOrder` array with new categories (EdgeStyle, Editor, GUI, I18n, Style), and enabled category navigation by switching `"includeCategories"` to true. |

## Possibly related PRs

- maxGraph/maxGraph#618: The changes in the main PR, which focus on updating documentation comments for the `Editor` class, are related to the retrieved PR that also emphasizes information regarding the `Editor` class in the context of migrating the mxGraph tutorial.

<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between f979eada3d6793149be4a13872ff2d6bc2f36c2e and c4f49a4aa779ccbc0d40ae70d8228fa76d357342.

</details>

<details>
<summary>📒 Files selected for processing (3)</summary>

* `packages/core/src/view/cell/register-shapes.ts` (1 hunks)
* `packages/core/src/view/geometry/edge/MarkerShape.ts` (1 hunks)
* `packages/core/src/view/style/register.ts` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (3)</summary>

* packages/core/src/view/cell/register-shapes.ts
* packages/core/src/view/geometry/edge/MarkerShape.ts
* packages/core/src/view/style/register.ts

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=maxGraph/maxGraph&utm_content=714):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-03-12T11:33:27Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=maxGraph_maxGraph&pullRequest=714) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=maxGraph_maxGraph&pullRequest=714&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=maxGraph_maxGraph&pullRequest=714&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=maxGraph_maxGraph&pullRequest=714&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=maxGraph_maxGraph&pullRequest=714&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=maxGraph_maxGraph&pullRequest=714&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=maxGraph_maxGraph&pullRequest=714)


author_association: NONE