From bfea287b44383b623dab3a47f7342846835e6312 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Thu, 17 Oct 2024 08:55:42 -0700 Subject: [PATCH] Register and update classBox shape --- .../mermaid/src/diagrams/class/shapeUtil.ts | 3 ++ .../rendering-elements/shapes.ts | 9 +++++ .../rendering-elements/shapes/classBox.ts | 40 ++++++++++++++++--- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/diagrams/class/shapeUtil.ts b/packages/mermaid/src/diagrams/class/shapeUtil.ts index fa4895a6e..69ee6a3e0 100644 --- a/packages/mermaid/src/diagrams/class/shapeUtil.ts +++ b/packages/mermaid/src/diagrams/class/shapeUtil.ts @@ -54,6 +54,9 @@ export const textHelper = async ( yOffset += height + TEXT_PADDING; } membersGroupHeight = membersGroup.node().getBBox().height; + if (membersGroupHeight <= 0) { + membersGroupHeight = GAP / 2; + } methodsGroup = shapeSvg.insert('g').attr('class', 'methods-group text'); let methodsYOffset = 0; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts index b336fc823..cdfcacb4a 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts @@ -55,6 +55,7 @@ import { triangle } from './shapes/triangle.js'; import { waveEdgedRectangle } from './shapes/waveEdgedRectangle.js'; import { waveRectangle } from './shapes/waveRectangle.js'; import { windowPane } from './shapes/windowPane.js'; +import { classBox } from './shapes/classBox.js'; // eslint-disable-next-line @typescript-eslint/no-explicit-any type ShapeHandler = (parent: any, node: Node, options: ShapeRenderOptions) => unknown; @@ -442,6 +443,14 @@ export const shapesDefs: ShapeDefinition[] = [ aliases: ['lined-document'], handler: linedWaveEdgedRect, }, + { + semanticName: 'Class Box', + name: 'Class Box', + shortName: 'classBox', + description: 'Class Box', + aliases: ['class-box'], + handler: classBox, + }, ]; const generateShapeMap = () => { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts index c9f4a4106..77a334f54 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts @@ -49,16 +49,33 @@ export const classBox = async (parent: SVGAElement, node: Node): Promise 0 && classNode.methods.length === 0) { + h += GAP * 2; + } const x = -w / 2; const y = -h / 2; // Create and center rectangle const roughRect = rc.rectangle( x - PADDING, - y - PADDING - (renderExtraBox ? PADDING : 0), + y - + PADDING - + (renderExtraBox + ? PADDING + : classNode.members.length === 0 && classNode.methods.length === 0 + ? -PADDING / 2 + : 0), w + 2 * PADDING, - h + 2 * PADDING + (renderExtraBox ? PADDING * 2 : 0), + h + + 2 * PADDING + + (renderExtraBox + ? PADDING * 2 + : classNode.members.length === 0 && classNode.methods.length === 0 + ? -PADDING + : 0), options ); @@ -83,7 +100,20 @@ export const classBox = async (parent: SVGAElement, node: Node): Promise 0 && classNode.methods.length > 0) { + if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) { const roughLine = rc.line( rectBBox.x, annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING,