mermaid
Version:
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
8 lines (7 loc) • 5.52 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/utils/subGraphTitleMargins.ts", "../../../src/rendering-util/rendering-elements/nodes.ts"],
"sourcesContent": ["import type { FlowchartDiagramConfig } from '../config.type.js';\n\nexport const getSubGraphTitleMargins = ({\n flowchart,\n}: {\n flowchart: FlowchartDiagramConfig;\n}): {\n subGraphTitleTopMargin: number;\n subGraphTitleBottomMargin: number;\n subGraphTitleTotalMargin: number;\n} => {\n const subGraphTitleTopMargin = flowchart?.subGraphTitleMargin?.top ?? 0;\n const subGraphTitleBottomMargin = flowchart?.subGraphTitleMargin?.bottom ?? 0;\n const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;\n\n return {\n subGraphTitleTopMargin,\n subGraphTitleBottomMargin,\n subGraphTitleTotalMargin,\n };\n};\n", "import { log } from '../../logger.js';\nimport { shapes } from './shapes.js';\nimport type { Node, NonClusterNode, ShapeRenderOptions } from '../types.js';\nimport type { SVGGroup } from '../../mermaid.js';\nimport type { D3Selection } from '../../types.js';\nimport { handleUndefinedAttr } from '../../utils.js';\nimport type { graphlib } from 'dagre-d3-es';\n\ntype ShapeHandler = (typeof shapes)[keyof typeof shapes];\ntype NodeElement = D3Selection<SVGAElement> | Awaited<ReturnType<ShapeHandler>>;\n\nconst nodeElems = new Map<string, NodeElement>();\n\nexport async function insertNode(\n elem: SVGGroup,\n node: NonClusterNode,\n renderOptions: ShapeRenderOptions\n) {\n let newEl: NodeElement | undefined;\n let el;\n\n //special check for rect shape (with or without rounded corners)\n if (node.shape === 'rect') {\n if (node.rx && node.ry) {\n node.shape = 'roundedRect';\n } else {\n node.shape = 'squareRect';\n }\n }\n\n const shapeHandler = node.shape ? shapes[node.shape] : undefined;\n\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n\n if (node.link) {\n // Add link when appropriate\n let target;\n if (renderOptions.config.securityLevel === 'sandbox') {\n target = '_top';\n } else if (node.linkTarget) {\n target = node.linkTarget || '_blank';\n }\n newEl = elem\n .insert<SVGAElement>('svg:a')\n .attr('xlink:href', node.link)\n .attr('target', target ?? null);\n el = await shapeHandler(newEl, node, renderOptions);\n } else {\n el = await shapeHandler(elem, node, renderOptions);\n newEl = el;\n }\n // Add data attributes for neo look support\n newEl.attr('data-look', handleUndefinedAttr(node.look));\n\n if (node.tooltip) {\n el.attr('title', node.tooltip);\n }\n\n nodeElems.set(node.id, newEl);\n\n if (node.haveCallback) {\n newEl.attr('class', newEl.attr('class') + ' clickable');\n }\n return newEl;\n}\n\nexport const setNodeElem = (elem: NodeElement, node: Pick<Node, 'id'>) => {\n nodeElems.set(node.id, elem);\n};\n\nexport const clear = () => {\n nodeElems.clear();\n};\n\nexport const positionNode = (node: ReturnType<graphlib.Graph['node']>) => {\n const el = nodeElems.get(node.id)!;\n log.trace(\n 'Transforming node',\n node.diff,\n node,\n 'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')'\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n 'transform',\n 'translate(' +\n (node.x + diff - node.width / 2) +\n ', ' +\n (node.y - node.height / 2 - padding) +\n ')'\n );\n } else {\n el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n }\n return diff;\n};\n"],
"mappings": "+JAEO,IAAMA,EAA0BC,EAAA,CAAC,CACtC,UAAAC,CACF,IAMK,CACH,IAAMC,EAAyBD,GAAW,qBAAqB,KAAO,EAChEE,EAA4BF,GAAW,qBAAqB,QAAU,EACtEG,EAA2BF,EAAyBC,EAE1D,MAAO,CACL,uBAAAD,EACA,0BAAAC,EACA,yBAAAC,CACF,CACF,EAlBuC,2BCSvC,IAAMC,EAAY,IAAI,IAEtB,eAAsBC,EACpBC,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAGAH,EAAK,QAAU,SACbA,EAAK,IAAMA,EAAK,GAClBA,EAAK,MAAQ,cAEbA,EAAK,MAAQ,cAIjB,IAAMI,EAAeJ,EAAK,MAAQK,EAAOL,EAAK,KAAK,EAAI,OAEvD,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,kBAAkBJ,EAAK,KAAK,6BAA6B,EAG3E,GAAIA,EAAK,KAAM,CAEb,IAAIM,EACAL,EAAc,OAAO,gBAAkB,UACzCK,EAAS,OACAN,EAAK,aACdM,EAASN,EAAK,YAAc,UAE9BE,EAAQH,EACL,OAAoB,OAAO,EAC3B,KAAK,aAAcC,EAAK,IAAI,EAC5B,KAAK,SAAUM,GAAU,IAAI,EAChCH,EAAK,MAAMC,EAAaF,EAAOF,EAAMC,CAAa,CACpD,MACEE,EAAK,MAAMC,EAAaL,EAAMC,EAAMC,CAAa,EACjDC,EAAQC,EAGV,OAAAD,EAAM,KAAK,YAAaK,EAAoBP,EAAK,IAAI,CAAC,EAElDA,EAAK,SACPG,EAAG,KAAK,QAASH,EAAK,OAAO,EAG/BH,EAAU,IAAIG,EAAK,GAAIE,CAAK,EAExBF,EAAK,cACPE,EAAM,KAAK,QAASA,EAAM,KAAK,OAAO,EAAI,YAAY,EAEjDA,CACT,CArDsBM,EAAAV,EAAA,cAuDf,IAAMW,EAAcD,EAAA,CAACT,EAAmBC,IAA2B,CACxEH,EAAU,IAAIG,EAAK,GAAID,CAAI,CAC7B,EAF2B,eAIdW,EAAQF,EAAA,IAAM,CACzBX,EAAU,MAAM,CAClB,EAFqB,SAIRc,EAAeH,EAACR,GAA6C,CACxE,IAAMG,EAAKN,EAAU,IAAIG,EAAK,EAAE,EAChCY,EAAI,MACF,oBACAZ,EAAK,KACLA,EACA,cAAgBA,EAAK,EAAIA,EAAK,MAAQ,EAAI,GAAK,KAAOA,EAAK,MAAQ,EAAI,GACzE,EACA,IAAMa,EAAU,EACVC,EAAOd,EAAK,MAAQ,EAC1B,OAAIA,EAAK,YACPG,EAAG,KACD,YACA,cACGH,EAAK,EAAIc,EAAOd,EAAK,MAAQ,GAC9B,MACCA,EAAK,EAAIA,EAAK,OAAS,EAAIa,GAC5B,GACJ,EAEAV,EAAG,KAAK,YAAa,aAAeH,EAAK,EAAI,KAAOA,EAAK,EAAI,GAAG,EAE3Dc,CACT,EAvB4B",
"names": ["getSubGraphTitleMargins", "__name", "flowchart", "subGraphTitleTopMargin", "subGraphTitleBottomMargin", "subGraphTitleTotalMargin", "nodeElems", "insertNode", "elem", "node", "renderOptions", "newEl", "el", "shapeHandler", "shapes", "target", "handleUndefinedAttr", "__name", "setNodeElem", "clear", "positionNode", "log", "padding", "diff"]
}