mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-26 10:49:38 +02:00
Merge branch 'develop' into next
* develop: chore: Update editor.bash to build latest version chore: Build after clone chore: Force install npm to avoid cache. fix: live editor exists error chore: Add netlify.toml chore: Update editor script chore: Add live editor build script for previews docs: Fix sankey demo feat(sankey): Show values (#4674)
This commit is contained in:
@@ -3,20 +3,42 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<title>States Mermaid Quick Test Page</title>
|
<title>Sankey Mermaid Quick Test Page</title>
|
||||||
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
||||||
<style>
|
|
||||||
div.mermaid {
|
|
||||||
/* font-family: 'trebuchet ms', verdana, arial; */
|
|
||||||
font-family: 'Courier New', Courier, monospace !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>Sankey diagram demos</h1>
|
<h1>Sankey diagram demos</h1>
|
||||||
|
<h2>FY20-21 Performance</h2>
|
||||||
|
<pre class="mermaid">
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
sankey:
|
||||||
|
showValues: true
|
||||||
|
prefix: $
|
||||||
|
suffix: B
|
||||||
|
width: 800
|
||||||
|
nodeAlignment: left
|
||||||
|
---
|
||||||
|
sankey-beta
|
||||||
|
Revenue,Expenses,10
|
||||||
|
Revenue,Profit,10
|
||||||
|
Expenses,Manufacturing,5
|
||||||
|
Expenses,Tax,3
|
||||||
|
Expenses,Research,2
|
||||||
|
</pre>
|
||||||
|
|
||||||
<h2>Energy flow</h2>
|
<h2>Energy flow</h2>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
sankey:
|
||||||
|
showValues: false
|
||||||
|
width: 1200
|
||||||
|
height: 600
|
||||||
|
linkColor: gradient
|
||||||
|
nodeAlignment: justify
|
||||||
|
---
|
||||||
sankey-beta
|
sankey-beta
|
||||||
|
|
||||||
Agricultural 'waste',Bio-conversion,124.729
|
Agricultural 'waste',Bio-conversion,124.729
|
||||||
@@ -95,13 +117,7 @@
|
|||||||
theme: 'default',
|
theme: 'default',
|
||||||
logLevel: 3,
|
logLevel: 3,
|
||||||
securityLevel: 'loose',
|
securityLevel: 'loose',
|
||||||
sankey: {
|
startOnLoad: true,
|
||||||
title: 'Hey, this is Sankey-Beta',
|
|
||||||
width: 1200,
|
|
||||||
height: 600,
|
|
||||||
linkColor: 'gradient',
|
|
||||||
nodeAlignment: 'justify',
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
18
netlify.toml
Normal file
18
netlify.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Settings in the [build] context are global and are applied to
|
||||||
|
# all contexts unless otherwise overridden by more specific contexts.
|
||||||
|
[build]
|
||||||
|
# Directory where the build system installs dependencies
|
||||||
|
# and runs your build. Store your package.json, .nvmrc, etc here.
|
||||||
|
# If not set, defaults to the root directory.
|
||||||
|
base = ""
|
||||||
|
|
||||||
|
# Directory that contains the deploy-ready HTML files and
|
||||||
|
# assets generated by the build. This is an absolute path relative
|
||||||
|
# to the base directory, which is the root by default (/).
|
||||||
|
# This sample publishes the directory located at the absolute
|
||||||
|
# path "root/project/build-output"
|
||||||
|
|
||||||
|
publish = "mermaid-live-editor/docs"
|
||||||
|
|
||||||
|
# Default build command.
|
||||||
|
command = "./scripts/editor.bash"
|
@@ -1298,6 +1298,21 @@ export interface SankeyDiagramConfig extends BaseDiagramConfig {
|
|||||||
*/
|
*/
|
||||||
nodeAlignment?: 'left' | 'right' | 'center' | 'justify';
|
nodeAlignment?: 'left' | 'right' | 'center' | 'justify';
|
||||||
useMaxWidth?: boolean;
|
useMaxWidth?: boolean;
|
||||||
|
/**
|
||||||
|
* Toggle to display or hide values along with title.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
showValues?: boolean;
|
||||||
|
/**
|
||||||
|
* The prefix to use for values
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
prefix?: string;
|
||||||
|
/**
|
||||||
|
* The suffix to use for values
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
suffix?: string;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* This interface was referenced by `MermaidConfig`'s JSON-Schema
|
* This interface was referenced by `MermaidConfig`'s JSON-Schema
|
||||||
|
@@ -31,7 +31,7 @@ class SankeyLink {
|
|||||||
/**
|
/**
|
||||||
* @param source - Node where the link starts
|
* @param source - Node where the link starts
|
||||||
* @param target - Node where the link ends
|
* @param target - Node where the link ends
|
||||||
* @param value - number, float or integer, describes the amount to be passed
|
* @param value - Describes the amount to be passed
|
||||||
*/
|
*/
|
||||||
const addLink = (source: SankeyNode, target: SankeyNode, value: number): void => {
|
const addLink = (source: SankeyNode, target: SankeyNode, value: number): void => {
|
||||||
links.push(new SankeyLink(source, target, value));
|
links.push(new SankeyLink(source, target, value));
|
||||||
|
@@ -18,7 +18,7 @@ import {
|
|||||||
} from 'd3-sankey';
|
} from 'd3-sankey';
|
||||||
import { configureSvgSize } from '../../setupGraphViewbox.js';
|
import { configureSvgSize } from '../../setupGraphViewbox.js';
|
||||||
import { Uid } from '../../rendering-util/uid.js';
|
import { Uid } from '../../rendering-util/uid.js';
|
||||||
import type { SankeyLinkColor, SankeyNodeAlignment } from '../../config.type.js';
|
import type { SankeyNodeAlignment } from '../../config.type.js';
|
||||||
|
|
||||||
// Map config options to alignment functions
|
// Map config options to alignment functions
|
||||||
const alignmentsMap: Record<
|
const alignmentsMap: Record<
|
||||||
@@ -62,10 +62,13 @@ export const draw = function (text: string, id: string, _version: string, diagOb
|
|||||||
|
|
||||||
// Establish svg dimensions and get width and height
|
// Establish svg dimensions and get width and height
|
||||||
//
|
//
|
||||||
const width = conf?.width || defaultSankeyConfig.width!;
|
const width = conf?.width ?? defaultSankeyConfig.width!;
|
||||||
const height = conf?.height || defaultSankeyConfig.width!;
|
const height = conf?.height ?? defaultSankeyConfig.width!;
|
||||||
const useMaxWidth = conf?.useMaxWidth || defaultSankeyConfig.useMaxWidth!;
|
const useMaxWidth = conf?.useMaxWidth ?? defaultSankeyConfig.useMaxWidth!;
|
||||||
const nodeAlignment = conf?.nodeAlignment || defaultSankeyConfig.nodeAlignment!;
|
const nodeAlignment = conf?.nodeAlignment ?? defaultSankeyConfig.nodeAlignment!;
|
||||||
|
const prefix = conf?.prefix ?? defaultSankeyConfig.prefix!;
|
||||||
|
const suffix = conf?.suffix ?? defaultSankeyConfig.suffix!;
|
||||||
|
const showValues = conf?.showValues ?? defaultSankeyConfig.showValues!;
|
||||||
|
|
||||||
// FIX: using max width prevents height from being set, is it intended?
|
// FIX: using max width prevents height from being set, is it intended?
|
||||||
// to add height directly one can use `svg.attr('height', height)`
|
// to add height directly one can use `svg.attr('height', height)`
|
||||||
@@ -94,7 +97,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb
|
|||||||
const sankey = d3Sankey()
|
const sankey = d3Sankey()
|
||||||
.nodeId((d: any) => d.id) // we use 'id' property to identify node
|
.nodeId((d: any) => d.id) // we use 'id' property to identify node
|
||||||
.nodeWidth(nodeWidth)
|
.nodeWidth(nodeWidth)
|
||||||
.nodePadding(10)
|
.nodePadding(10 + (showValues ? 15 : 0))
|
||||||
.nodeAlign(nodeAlign)
|
.nodeAlign(nodeAlign)
|
||||||
.extent([
|
.extent([
|
||||||
[0, 0],
|
[0, 0],
|
||||||
@@ -130,6 +133,13 @@ export const draw = function (text: string, id: string, _version: string, diagOb
|
|||||||
.attr('width', (d: any) => d.x1 - d.x0)
|
.attr('width', (d: any) => d.x1 - d.x0)
|
||||||
.attr('fill', (d: any) => colorScheme(d.id));
|
.attr('fill', (d: any) => colorScheme(d.id));
|
||||||
|
|
||||||
|
const getText = ({ id, value }: { id: string; value: number }) => {
|
||||||
|
if (!showValues) {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
return `${id}\n${prefix}${Math.round(value * 100) / 100}${suffix}`;
|
||||||
|
};
|
||||||
|
|
||||||
// Create labels for nodes
|
// Create labels for nodes
|
||||||
svg
|
svg
|
||||||
.append('g')
|
.append('g')
|
||||||
@@ -141,9 +151,9 @@ export const draw = function (text: string, id: string, _version: string, diagOb
|
|||||||
.join('text')
|
.join('text')
|
||||||
.attr('x', (d: any) => (d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6))
|
.attr('x', (d: any) => (d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6))
|
||||||
.attr('y', (d: any) => (d.y1 + d.y0) / 2)
|
.attr('y', (d: any) => (d.y1 + d.y0) / 2)
|
||||||
.attr('dy', '0.35em')
|
.attr('dy', `${showValues ? '0' : '0.35'}em`)
|
||||||
.attr('text-anchor', (d: any) => (d.x0 < width / 2 ? 'start' : 'end'))
|
.attr('text-anchor', (d: any) => (d.x0 < width / 2 ? 'start' : 'end'))
|
||||||
.text((d: any) => d.id);
|
.text(getText);
|
||||||
|
|
||||||
// Creates the paths that represent the links.
|
// Creates the paths that represent the links.
|
||||||
const link = svg
|
const link = svg
|
||||||
|
@@ -1859,6 +1859,20 @@ $defs: # JSON Schema definition (maybe we should move these to a seperate file)
|
|||||||
default: justify
|
default: justify
|
||||||
useMaxWidth:
|
useMaxWidth:
|
||||||
default: false
|
default: false
|
||||||
|
showValues:
|
||||||
|
description: |
|
||||||
|
Toggle to display or hide values along with title.
|
||||||
|
default: true
|
||||||
|
prefix:
|
||||||
|
description: |
|
||||||
|
The prefix to use for values
|
||||||
|
type: string
|
||||||
|
default: ''
|
||||||
|
suffix:
|
||||||
|
description: |
|
||||||
|
The suffix to use for values
|
||||||
|
type: string
|
||||||
|
default: ''
|
||||||
|
|
||||||
FontCalculator:
|
FontCalculator:
|
||||||
title: Font Calculator
|
title: Font Calculator
|
||||||
|
21
scripts/editor.bash
Executable file
21
scripts/editor.bash
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euxo pipefail
|
||||||
|
pnpm build
|
||||||
|
|
||||||
|
# Clone the Mermaid Live Editor repository
|
||||||
|
rm -rf mermaid-live-editor
|
||||||
|
git clone --single-branch https://github.com/mermaid-js/mermaid-live-editor.git
|
||||||
|
|
||||||
|
cd mermaid-live-editor
|
||||||
|
|
||||||
|
# We have to use npm instead of yarn because it causes trouble in netlify
|
||||||
|
# Install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Link local mermaid to live editor
|
||||||
|
npm link ../packages/mermaid
|
||||||
|
|
||||||
|
# Force Build the site
|
||||||
|
npm run build -- --force
|
||||||
|
|
Reference in New Issue
Block a user