diff --git a/demos/xychart.html b/demos/xychart.html index a7bd42614..42992dd25 100644 --- a/demos/xychart.html +++ b/demos/xychart.html @@ -15,6 +15,17 @@

XY Charts demos

+
+    xychart-beta
+    title "Sales Revenue (in $)"
+    x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
+    y-axis "Revenue (in $)" 4000 --> 11000
+    bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
+    line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
+    
+ +
+
     xychart-beta horizontal
     title "Basic xychart"
@@ -24,8 +35,6 @@
     line [23, 46, 75, 43]
     
-
-

XY Charts demos

     xychart-beta
diff --git a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/BaseAxis.ts b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/BaseAxis.ts
index 977bf4e20..7bbaf5749 100644
--- a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/BaseAxis.ts
+++ b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/BaseAxis.ts
@@ -93,7 +93,7 @@ export abstract class BaseAxis implements Axis {
       this.showTick = true;
       availableHeight -= this.axisConfig.tickLength;
     }
-    if (this.axisConfig.showTitle) {
+    if (this.axisConfig.showTitle && this.title) {
       const spaceRequired = this.textDimensionCalculator.getMaxDimension(
         [this.title],
         this.axisConfig.labelFontSize
@@ -126,7 +126,7 @@ export abstract class BaseAxis implements Axis {
       this.showTick = true;
       availableWidth -= this.axisConfig.tickLength;
     }
-    if (this.axisConfig.showTitle) {
+    if (this.axisConfig.showTitle && this.title) {
       const spaceRequired = this.textDimensionCalculator.getMaxDimension(
         [this.title],
         this.axisConfig.labelFontSize
diff --git a/packages/mermaid/src/diagrams/xychart/parser/xychart.jison b/packages/mermaid/src/diagrams/xychart/parser/xychart.jison
index 6c5cb92a9..8666dda3b 100644
--- a/packages/mermaid/src/diagrams/xychart/parser/xychart.jison
+++ b/packages/mermaid/src/diagrams/xychart/parser/xychart.jison
@@ -55,8 +55,8 @@
 [^"]*                             return "STR";
 
 
-"["                                      return 'SQUARE_BRACES_START'
-"]"                                      return 'SQUARE_BRACES_END'
+"["                                       return 'SQUARE_BRACES_START'
+"]"                                       return 'SQUARE_BRACES_END'
 [A-Za-z]+                                 return 'ALPHA';
 ":"                                       return 'COLON';
 \+                                        return 'PLUS';
@@ -117,8 +117,13 @@ commaSeparatedNumbers
 
 parseXAxis
   : text                                                          {yy.setXAxisTitle($text);}
-  | text bandData                                                 {yy.setXAxisTitle($text); yy.setXAxisBand($bandData);}
-  | text NUMBER_WITH_DECIMAL ARROW_DELIMITER NUMBER_WITH_DECIMAL  {yy.setXAxisTitle($text); yy.setXAxisRangeData(Number($NUMBER_WITH_DECIMAL1), Number($NUMBER_WITH_DECIMAL2));}
+  | text xAxisData                                                {yy.setXAxisTitle($text);}
+  | xAxisData                                                     {yy.setXAxisTitle({type: 'text', text: ''});}
+  ;
+
+xAxisData
+  : bandData                                                 {yy.setXAxisBand($bandData);}
+  | NUMBER_WITH_DECIMAL ARROW_DELIMITER NUMBER_WITH_DECIMAL  {yy.setXAxisRangeData(Number($NUMBER_WITH_DECIMAL1), Number($NUMBER_WITH_DECIMAL2));}
   ;
 
 bandData
@@ -131,8 +136,13 @@ commaSeparatedTexts
   ;
 
 parseYAxis
-  : text  {yy.setYAxisTitle($text);}
-  | text NUMBER_WITH_DECIMAL ARROW_DELIMITER NUMBER_WITH_DECIMAL  {yy.setYAxisTitle($text); yy.setYAxisRangeData(Number($NUMBER_WITH_DECIMAL1), Number($NUMBER_WITH_DECIMAL2));}
+  : text                                                      {yy.setYAxisTitle($text);}
+  | text yAxisData                                            {yy.setYAxisTitle($text);}
+  | yAxisData                                                 {yy.setYAxisTitle({type: "text", text: ""});}
+  ;
+
+yAxisData
+  : NUMBER_WITH_DECIMAL ARROW_DELIMITER NUMBER_WITH_DECIMAL  {yy.setYAxisRangeData(Number($NUMBER_WITH_DECIMAL1), Number($NUMBER_WITH_DECIMAL2));}
   ;
 
 eol
diff --git a/packages/mermaid/src/diagrams/xychart/parser/xychart.jison.spec.ts b/packages/mermaid/src/diagrams/xychart/parser/xychart.jison.spec.ts
index 09a62d8bd..6ccc06c58 100644
--- a/packages/mermaid/src/diagrams/xychart/parser/xychart.jison.spec.ts
+++ b/packages/mermaid/src/diagrams/xychart/parser/xychart.jison.spec.ts
@@ -128,6 +128,16 @@ describe('Testing xychart jison file', () => {
     expect(mockDB.setXAxisRangeData).toHaveBeenCalledWith(45.5, 0.34);
   });
 
+  it('parse x-axis without axisname and range data', () => {
+    const str = 'xychart-beta \nx-axis   45.5   -->   1.34   \n';
+    expect(parserFnConstructor(str)).not.toThrow();
+    expect(mockDB.setXAxisTitle).toHaveBeenCalledWith({
+      text: '',
+      type: 'text',
+    });
+    expect(mockDB.setXAxisRangeData).toHaveBeenCalledWith(45.5, 1.34);
+  });
+
   it('parse x-axis with axis name and category data', () => {
     const str = 'xychart-beta \nx-axis xAxisName    [  "cat1"  ,   cat2a  ]   \n   ';
     expect(parserFnConstructor(str)).not.toThrow();
@@ -144,6 +154,22 @@ describe('Testing xychart jison file', () => {
     ]);
   });
 
+  it('parse x-axis without axisname and category data', () => {
+    const str = 'xychart-beta \nx-axis    [  "cat1"  ,   cat2a  ]   \n   ';
+    expect(parserFnConstructor(str)).not.toThrow();
+    expect(mockDB.setXAxisTitle).toHaveBeenCalledWith({
+      text: '',
+      type: 'text',
+    });
+    expect(mockDB.setXAxisBand).toHaveBeenCalledWith([
+      {
+        text: 'cat1',
+        type: 'text',
+      },
+      { text: 'cat2a', type: 'text' },
+    ]);
+  });
+
   it('parse x-axis throw error if unbalanced bracket', () => {
     let str = 'xychart-beta \nx-axis xAxisName    [  "cat1"  [   cat2a  ]   \n   ';
     expect(parserFnConstructor(str)).toThrow();
@@ -218,6 +244,12 @@ describe('Testing xychart jison file', () => {
     expect(mockDB.setYAxisTitle).toHaveBeenCalledWith({ text: 'yAxisName', type: 'text' });
     expect(mockDB.setYAxisRangeData).toHaveBeenCalledWith(45.5, 33);
   });
+  it('parse y-axis without axisname with range data', () => {
+    const str = 'xychart-beta \ny-axis    45.5   -->   33   \n';
+    expect(parserFnConstructor(str)).not.toThrow();
+    expect(mockDB.setYAxisTitle).toHaveBeenCalledWith({ text: '', type: 'text' });
+    expect(mockDB.setYAxisRangeData).toHaveBeenCalledWith(45.5, 33);
+  });
   it('parse y-axis with axis name with range data with only decimal part', () => {
     const str = 'xychart-beta \ny-axis yAxisName    45.5   -->   .33   \n';
     expect(parserFnConstructor(str)).not.toThrow();