import * as khroma from 'khroma'; /** Returns the styles given options */ export interface BlockChartStyleOptions { arrowheadColor: string; border2: string; clusterBkg: string; clusterBorder: string; edgeLabelBackground: string; fontFamily: string; lineColor: string; mainBkg: string; nodeBorder: string; nodeTextColor: string; tertiaryColor: string; textColor: string; titleColor: string; } const fade = (color: string, opacity: number) => { // @ts-ignore TODO: incorrect types from khroma const channel = khroma.channel; const r = channel(color, 'r'); const g = channel(color, 'g'); const b = channel(color, 'b'); // @ts-ignore incorrect types from khroma return khroma.rgba(r, g, b, opacity); }; const getStyles = (options: BlockChartStyleOptions) => `.label { font-family: ${options.fontFamily}; color: ${options.nodeTextColor || options.textColor}; } .cluster-label text { fill: ${options.titleColor}; } .cluster-label span,p { color: ${options.titleColor}; } .label text,span,p { fill: ${options.nodeTextColor || options.textColor}; color: ${options.nodeTextColor || options.textColor}; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: 1px; } .flowchart-label text { text-anchor: middle; } // .flowchart-label .text-outer-tspan { // text-anchor: middle; // } // .flowchart-label .text-inner-tspan { // text-anchor: start; // } .node .label { text-align: center; } .node.clickable { cursor: pointer; } .arrowheadPath { fill: ${options.arrowheadColor}; } .edgePath .path { stroke: ${options.lineColor}; stroke-width: 2.0px; } .flowchart-link { stroke: ${options.lineColor}; fill: none; } .edgeLabel { background-color: ${options.edgeLabelBackground}; rect { opacity: 0.5; background-color: ${options.edgeLabelBackground}; fill: ${options.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { background-color: ${fade(options.edgeLabelBackground, 0.5)}; // background-color: } .node .cluster { // fill: ${fade(options.mainBkg, 0.5)}; fill: ${fade(options.clusterBkg, 0.5)}; stroke: ${fade(options.clusterBorder, 0.2)}; box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; stroke-width: 1px; } .cluster text { fill: ${options.titleColor}; } .cluster span,p { color: ${options.titleColor}; } /* .cluster div { color: ${options.titleColor}; } */ div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options.fontFamily}; font-size: 12px; background: ${options.tertiaryColor}; border: 1px solid ${options.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .flowchartTitleText { text-anchor: middle; font-size: 18px; fill: ${options.textColor}; } `; export default getStyles;