diff --git a/packages/mermaid/src/diagrams/quadrant-chart/parser/quadrant.jison.spec.ts b/packages/mermaid/src/diagrams/quadrant-chart/parser/quadrant.jison.spec.ts index 6ec2ddafb..e59cc0fe2 100644 --- a/packages/mermaid/src/diagrams/quadrant-chart/parser/quadrant.jison.spec.ts +++ b/packages/mermaid/src/diagrams/quadrant-chart/parser/quadrant.jison.spec.ts @@ -2,6 +2,7 @@ import { parser } from './quadrant.jison'; import type { Mock } from 'vitest'; import { vi } from 'vitest'; +import { addClass } from '../../flowchart/flowDb.js'; const parserFnConstructor = (str: string) => { return () => { @@ -20,6 +21,7 @@ const mockDB: Record> = { setYAxisBottomText: vi.fn(), setDiagramTitle: vi.fn(), addPoint: vi.fn(), + addClass: vi.fn(), }; function clearMocks() { @@ -423,4 +425,13 @@ describe('Testing quadrantChart jison file', () => { ['stroke-width: 10px'] ); }); + + it('should be able to handle constructor as a className', () => { + const str = `quadrantChart + classDef constructor fill:#ff0000 + Microsoft:::constructor: [0.75, 0.75] + `; + expect(parserFnConstructor(str)).not.toThrow(); + expect(mockDB.addClass).toHaveBeenCalledWith('constructor', ['fill:#ff0000']); + }); }); diff --git a/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts b/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts index 173b4c078..f1507a1b9 100644 --- a/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts +++ b/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts @@ -127,7 +127,7 @@ export class QuadrantBuilder { private config: QuadrantBuilderConfig; private themeConfig: QuadrantBuilderThemeConfig; private data: QuadrantBuilderData; - private classes: Record = {}; + private classes: Map = new Map(); constructor() { this.config = this.getDefaultConfig(); @@ -202,7 +202,7 @@ export class QuadrantBuilder { this.config = this.getDefaultConfig(); this.themeConfig = this.getDefaultThemeConfig(); this.data = this.getDefaultData(); - this.classes = {}; + this.classes = new Map(); log.info('clear called'); } @@ -215,7 +215,7 @@ export class QuadrantBuilder { } addClass(className: string, styles: StylesObject) { - this.classes[className] = styles; + this.classes.set(className, styles); } setConfig(config: Partial) { @@ -486,7 +486,7 @@ export class QuadrantBuilder { .range([quadrantHeight + quadrantTop, quadrantTop]); const points: QuadrantPointType[] = this.data.points.map((point) => { - const classStyles = this.classes[point.className as keyof typeof this.classes]; + const classStyles = this.classes.get(point.className!); if (classStyles) { point = { ...classStyles, ...point }; }