diff --git a/cypress/integration/rendering/pie.spec.js b/cypress/integration/rendering/pie.spec.js index da236ee01..a40890fc5 100644 --- a/cypress/integration/rendering/pie.spec.js +++ b/cypress/integration/rendering/pie.spec.js @@ -84,7 +84,7 @@ describe('Pie Chart', () => { "Ice-Hockey" : 80 "Football" : 90 `, - { pie: { outerBorderWidth: 5 } } + { theme: 'base', themeVariables: { pieOuterStrokeWidth: '5px' } } ); cy.get('.pieOuterCircle').should((circle) => { const strokeWidth = parseFloat(circle.attr('stroke-width')); diff --git a/demos/pie.html b/demos/pie.html index 8cc49272c..467b0d1f3 100644 --- a/demos/pie.html +++ b/demos/pie.html @@ -26,7 +26,7 @@
- %%{init: {"pie": {"textPosition": 0.8, "outerBorderWidth": 5}} }%% + %%{init: {"pie": {"textPosition": 0.9}, "themeVariables": {"pieOuterStrokeWidth": "5px"}} }%% pie title Key elements in Product X accTitle: Key elements in Product X diff --git a/docs/config/setup/modules/defaultConfig.md b/docs/config/setup/modules/defaultConfig.md index 354286758..3b2e33842 100644 --- a/docs/config/setup/modules/defaultConfig.md +++ b/docs/config/setup/modules/defaultConfig.md @@ -14,7 +14,7 @@ #### Defined in -[defaultConfig.ts:2102](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L2102) +[defaultConfig.ts:2093](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L2093) --- diff --git a/docs/config/theming.md b/docs/config/theming.md index 014ac1374..580afb488 100644 --- a/docs/config/theming.md +++ b/docs/config/theming.md @@ -261,6 +261,34 @@ The theming engine will only recognize hex colors and not color names. So, the v | activationBkgColor | secondaryColor | Activation Background Color | | sequenceNumberColor | calculated from lineColor | Sequence Number Color | +## Pie Diagram Variables + +| Variable | Default value | Description | +| ------------------- | ------------------------------ | ------------------------------------------ | +| pie1 | primaryColor | Fill for 1st section in pie diagram | +| pie2 | secondaryColor | Fill for 2nd section in pie diagram | +| pie3 | calculated from tertiary | Fill for 3rd section in pie diagram | +| pie4 | calculated from primaryColor | Fill for 4th section in pie diagram | +| pie5 | calculated from secondaryColor | Fill for 5th section in pie diagram | +| pie6 | calculated from tertiaryColor | Fill for 6th section in pie diagram | +| pie7 | calculated from primaryColor | Fill for 7th section in pie diagram | +| pie8 | calculated from primaryColor | Fill for 8th section in pie diagram | +| pie9 | calculated from primaryColor | Fill for 9th section in pie diagram | +| pie10 | calculated from primaryColor | Fill for 10th section in pie diagram | +| pie11 | calculated from primaryColor | Fill for 11th section in pie diagram | +| pie12 | calculated from primaryColor | Fill for 12th section in pie diagram | +| pieTitleTextSize | 25px | Title text size | +| pieTitleTextColor | taskTextDarkColor | Title text color | +| pieSectionTextSize | 17px | Text size of individual section labels | +| pieSectionTextColor | textColor | Text color of individual section labels | +| pieLegendTextSize | 17px | Text size of labels in diagram legend | +| pieLegendTextColor | taskTextDarkColor | Text color of labels in diagram legend | +| pieStrokeColor | black | Border color of individual pie sections | +| pieStrokeWidth | 2px | Border width of individual pie sections | +| pieOuterStrokeWidth | 2px | Border width of pie diagram's outer circle | +| pieOuterStrokeColor | black | Border color of pie diagram's outer circle | +| pieOpacity | 0.7 | Opacity of individual pie sections | + ## State Colors | Variable | Default value | Description | diff --git a/docs/syntax/pie.md b/docs/syntax/pie.md index 73bd66220..8b1de3856 100644 --- a/docs/syntax/pie.md +++ b/docs/syntax/pie.md @@ -48,7 +48,7 @@ Drawing a pie chart is really simple in mermaid. ## Example ```mermaid-example -%%{init: {"pie": {"textPosition": 0.8, "outerBorderWidth": 5}} }%% +%%{init: {"pie": {"textPosition": 0.5}, "themeVariables": {"pieOuterStrokeWidth": "5px"}} }%% pie showData title Key elements in Product X "Calcium" : 42.96 @@ -58,7 +58,7 @@ pie showData ``` ```mermaid -%%{init: {"pie": {"textPosition": 0.8, "outerBorderWidth": 5}} }%% +%%{init: {"pie": {"textPosition": 0.5}, "themeVariables": {"pieOuterStrokeWidth": "5px"}} }%% pie showData title Key elements in Product X "Calcium" : 42.96 @@ -71,7 +71,6 @@ pie showData Possible pie diagram configuration parameters: -| Parameter | Description | Default value | -| ------------------ | ------------------------------------------------------------------------------------------------------------ | ------------- | -| `outerBorderWidth` | The border width of the pie diagram's outside circle | `2` | -| `textPosition` | The axial position of the pie slice labels, from 0.0 at the center to 1.0 at the outside edge of the circle. | `0.5` | +| Parameter | Description | Default value | +| -------------- | ------------------------------------------------------------------------------------------------------------ | ------------- | +| `textPosition` | The axial position of the pie slice labels, from 0.0 at the center to 1.0 at the outside edge of the circle. | `0.75` | diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index 13df21eaa..beed194e4 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -223,7 +223,6 @@ export interface MindmapDiagramConfig extends BaseDiagramConfig { } export interface PieDiagramConfig extends BaseDiagramConfig { - outerBorderWidth?: number; textPosition?: number; } diff --git a/packages/mermaid/src/defaultConfig.ts b/packages/mermaid/src/defaultConfig.ts index ecc7b54a5..666efc364 100644 --- a/packages/mermaid/src/defaultConfig.ts +++ b/packages/mermaid/src/defaultConfig.ts @@ -1248,23 +1248,14 @@ const config: Partial= { */ useMaxWidth: true, - /** - * | Parameter | Description | Type | Required | Values | - * | ---------------- | ------------------------------------------ | ------- | -------- | ------------------ | - * | outerBorderWidth | Border width of the diagram's outer circle | Integer | Optional | Any Positive Value | - * - * **Notes:** Default value: 2 - */ - outerBorderWidth: 2, - /** * | Parameter | Description | Type | Required | Values | * | ------------ | -------------------------------------------------------------------------------- | ------- | -------- | ------------------- | * | textPosition | Axial position of slice's label from zero at the center to 1 at the outside edge | Number | Optional | Decimal from 0 to 1 | * - * **Notes:** Default value: 0.5 + * **Notes:** Default value: 0.75 */ - textPosition: 0.5, + textPosition: 0.75, }, /** The object containing configurations specific for req diagrams */ diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.js b/packages/mermaid/src/diagrams/pie/pieRenderer.js index df1e3cf99..9b25f5f43 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.js +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.js @@ -3,6 +3,7 @@ import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; import { log } from '../../logger'; import { configureSvgSize } from '../../setupGraphViewbox'; import * as configApi from '../../config'; +import { parseFontSize } from '../../utils'; let conf = configApi.getConfig(); @@ -88,8 +89,9 @@ export const draw = (txt, id, _version, diagObj) => { themeVariables.pie12, ]; - const textPosition = conf.pie?.textPosition ?? 0.5; - const outerBorderWidth = conf.pie?.outerBorderWidth ?? 2; + const textPosition = conf.pie?.textPosition ?? 0.75; + let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); + outerStrokeWidth ??= 2; // Set the color scale var color = scaleOrdinal().range(myGeneratedColors); @@ -122,8 +124,7 @@ export const draw = (txt, id, _version, diagObj) => { .append('circle') .attr('cx', 0) .attr('cy', 0) - .attr('r', radius + outerBorderWidth / 2) - .attr('stroke-width', outerBorderWidth) + .attr('r', radius + outerStrokeWidth / 2) .attr('class', 'pieOuterCircle'); // Build the pie chart: each part of the pie is a path that we build using the arc function. diff --git a/packages/mermaid/src/diagrams/pie/styles.js b/packages/mermaid/src/diagrams/pie/styles.js index 0bf6fb0b6..6f0f60006 100644 --- a/packages/mermaid/src/diagrams/pie/styles.js +++ b/packages/mermaid/src/diagrams/pie/styles.js @@ -7,6 +7,7 @@ const getStyles = (options) => } .pieOuterCircle{ stroke: ${options.pieOuterStrokeColor}; + stroke-width: ${options.pieOuterStrokeWidth}; fill: none; } .pieTitleText { diff --git a/packages/mermaid/src/docs/config/theming.md b/packages/mermaid/src/docs/config/theming.md index da021f7f8..0e4571d15 100644 --- a/packages/mermaid/src/docs/config/theming.md +++ b/packages/mermaid/src/docs/config/theming.md @@ -183,6 +183,34 @@ The theming engine will only recognize hex colors and not color names. So, the v | activationBkgColor | secondaryColor | Activation Background Color | | sequenceNumberColor | calculated from lineColor | Sequence Number Color | +## Pie Diagram Variables + +| Variable | Default value | Description | +| ------------------- | ------------------------------ | ------------------------------------------ | +| pie1 | primaryColor | Fill for 1st section in pie diagram | +| pie2 | secondaryColor | Fill for 2nd section in pie diagram | +| pie3 | calculated from tertiary | Fill for 3rd section in pie diagram | +| pie4 | calculated from primaryColor | Fill for 4th section in pie diagram | +| pie5 | calculated from secondaryColor | Fill for 5th section in pie diagram | +| pie6 | calculated from tertiaryColor | Fill for 6th section in pie diagram | +| pie7 | calculated from primaryColor | Fill for 7th section in pie diagram | +| pie8 | calculated from primaryColor | Fill for 8th section in pie diagram | +| pie9 | calculated from primaryColor | Fill for 9th section in pie diagram | +| pie10 | calculated from primaryColor | Fill for 10th section in pie diagram | +| pie11 | calculated from primaryColor | Fill for 11th section in pie diagram | +| pie12 | calculated from primaryColor | Fill for 12th section in pie diagram | +| pieTitleTextSize | 25px | Title text size | +| pieTitleTextColor | taskTextDarkColor | Title text color | +| pieSectionTextSize | 17px | Text size of individual section labels | +| pieSectionTextColor | textColor | Text color of individual section labels | +| pieLegendTextSize | 17px | Text size of labels in diagram legend | +| pieLegendTextColor | taskTextDarkColor | Text color of labels in diagram legend | +| pieStrokeColor | black | Border color of individual pie sections | +| pieStrokeWidth | 2px | Border width of individual pie sections | +| pieOuterStrokeWidth | 2px | Border width of pie diagram's outer circle | +| pieOuterStrokeColor | black | Border color of pie diagram's outer circle | +| pieOpacity | 0.7 | Opacity of individual pie sections | + ## State Colors | Variable | Default value | Description | diff --git a/packages/mermaid/src/docs/syntax/pie.md b/packages/mermaid/src/docs/syntax/pie.md index a18161c3f..81ec720c4 100644 --- a/packages/mermaid/src/docs/syntax/pie.md +++ b/packages/mermaid/src/docs/syntax/pie.md @@ -35,7 +35,7 @@ Drawing a pie chart is really simple in mermaid. ## Example ```mermaid-example -%%{init: {"pie": {"textPosition": 0.8, "outerBorderWidth": 5}} }%% +%%{init: {"pie": {"textPosition": 0.5}, "themeVariables": {"pieOuterStrokeWidth": "5px"}} }%% pie showData title Key elements in Product X "Calcium" : 42.96 @@ -48,7 +48,6 @@ pie showData Possible pie diagram configuration parameters: -| Parameter | Description | Default value | -| ------------------ | ------------------------------------------------------------------------------------------------------------ | ------------- | -| `outerBorderWidth` | The border width of the pie diagram's outside circle | `2` | -| `textPosition` | The axial position of the pie slice labels, from 0.0 at the center to 1.0 at the outside edge of the circle. | `0.5` | +| Parameter | Description | Default value | +| -------------- | ------------------------------------------------------------------------------------------------------------ | ------------- | +| `textPosition` | The axial position of the pie slice labels, from 0.0 at the center to 1.0 at the outside edge of the circle. | `0.75` | diff --git a/packages/mermaid/src/themes/theme-base.js b/packages/mermaid/src/themes/theme-base.js index be3583220..fff03ff14 100644 --- a/packages/mermaid/src/themes/theme-base.js +++ b/packages/mermaid/src/themes/theme-base.js @@ -212,6 +212,7 @@ class Theme { this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth ?? '2px'; this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; this.pieOpacity = this.pieOpacity || '0.7'; diff --git a/packages/mermaid/src/themes/theme-dark.js b/packages/mermaid/src/themes/theme-dark.js index 68eeee238..b77f0e569 100644 --- a/packages/mermaid/src/themes/theme-dark.js +++ b/packages/mermaid/src/themes/theme-dark.js @@ -222,6 +222,7 @@ class Theme { this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth ?? '2px'; this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; this.pieOpacity = this.pieOpacity || '0.7'; diff --git a/packages/mermaid/src/themes/theme-default.js b/packages/mermaid/src/themes/theme-default.js index b4ed3129e..74b972edc 100644 --- a/packages/mermaid/src/themes/theme-default.js +++ b/packages/mermaid/src/themes/theme-default.js @@ -244,6 +244,7 @@ class Theme { this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth ?? '2px'; this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; this.pieOpacity = this.pieOpacity || '0.7'; diff --git a/packages/mermaid/src/themes/theme-forest.js b/packages/mermaid/src/themes/theme-forest.js index 722a25cab..d0e1565de 100644 --- a/packages/mermaid/src/themes/theme-forest.js +++ b/packages/mermaid/src/themes/theme-forest.js @@ -213,6 +213,7 @@ class Theme { this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth ?? '2px'; this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; this.pieOpacity = this.pieOpacity || '0.7'; diff --git a/packages/mermaid/src/themes/theme-neutral.js b/packages/mermaid/src/themes/theme-neutral.js index 9217fa266..34bf5e0da 100644 --- a/packages/mermaid/src/themes/theme-neutral.js +++ b/packages/mermaid/src/themes/theme-neutral.js @@ -243,6 +243,7 @@ class Theme { this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; this.pieStrokeColor = this.pieStrokeColor || 'black'; this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth ?? '2px'; this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; this.pieOpacity = this.pieOpacity || '0.7';