{"version":3,"sources":["jsdelivr-header.js","/npm/svg-sankey@0.2.0/index.js"],"names":[],"mappings":"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","file":"/npm/svg-sankey@0.2.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/svg-sankey@0.2.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import program from 'commander';\nimport fs from 'fs';\nimport jsdom from 'jsdom';\nimport xmlserializer from 'xmlserializer';\n\nimport {select} from 'd3-selection';\nimport {scaleOrdinal, schemeCategory20} from 'd3-scale';\nimport {format} from 'd3-format';\n\nimport {sankey, sankeyDiagram, sankeyLinkTitle} from 'd3-sankey-diagram';\n\n// diagram\n\nprogram\n  .arguments('<file>')\n  .option('-s, --size <w>,<h>', 'width and height', parseSize)\n  .option('-m, --margins <n>[,...]', '1, 2 or 4 margin values', parseMargins)\n  .option('-p, --position <xattr>,<yattr>', 'node attributes to set positions (manual layout)', parseAttrs)\n  .option('-k, --scale <k>', 'scale (px/value)', Number)\n  .option('--font-size <s>', 'font-size (px/value)', Number)\n  .option('--node-values <fmt>', 'd3 format string to show node values', parseFormat)\n  .action(function(filename) {\n    fs.readFile(filename, 'utf8', function (err, data) {\n      if (err) throw err; // we'll not consider error handling for now\n      const parsedData = JSON.parse(data);\n      const svg = drawDiagram(parsedData);\n      process.stdout.write(svg);\n    });\n  })\n  .parse(process.argv);\n\n\nfunction parseFormat(val) {\n  return format(val)\n}\n\nfunction parseMargins(val) {\n  val = val.split(',').map(x => x.trim()).map(Number);\n  if (val.length === 1) {\n    return {top: val[0], right: val[0], bottom: val[0], left: val[0]};\n  } else if (val.length === 2) {\n    return {top: val[0], right: val[1], bottom: val[0], left: val[1]};\n  } else if (val.length === 4) {\n    return {top: val[0], right: val[1], bottom: val[2], left: val[3]};\n  } else {\n    throw new Error('Expected 1, 2 or 4 numbers');\n  }\n}\n\n\nfunction parseSize(val) {\n  val = val.split(',').map(x => x.trim()).map(Number);\n  if (val.length === 1) {\n    return [val[0], val[0]];\n  } else if (val.length === 2) {\n    return val;\n  } else {\n    throw new Error('Expected 1 or 2');\n  }\n}\n\n\nfunction parseAttrs(val) {\n  val = val.split(',').map(x => x.trim());\n  if (val.length === 2) {\n    return {xattr: val[0], yattr: val[1]};\n  } else {\n    throw new Error('Expected 2 attribute names');\n  }\n}\n\n\nfunction alignLinkTypes(layout, align) {\n  return layout\n    .sourceId(function(d) { return { id: typeof d.source === \"object\" ? d.source.id : d.source,\n                                     port: align ? d.type : null }; })\n    .targetId(function(d) { return { id: typeof d.target === \"object\" ? d.target.id : d.target,\n                                     port: align ? d.type : null }; });\n}\n\nfunction nodeTitle(d) {\n  return d.title !== undefined ? (d.title.label !== undefined ? d.title.label : d.title) : d.id;\n}\n\nfunction linkTypeTitle(d) {\n  return d.title !== undefined ? d.title : d.type;\n}\n\nconst color = scaleOrdinal(schemeCategory20);\nfunction linkColor(d) {\n  return (d.color !== undefined\n          ? d.color\n          : (d.style !== undefined && d.style.color !== undefined\n             ? d.style.color\n             : color(d.type)));\n}\n\nconst fmt = format('.3s');\n\n// const linkTitle = sankeyLinkTitle(nodeTitle, linkTypeTitle, fmt);\nfunction linkTitle(d) {\n  const parts = []\n  const sourceTitle = nodeTitle(d.source)\n  const targetTitle = nodeTitle(d.target)\n  const matTitle = linkTypeTitle(d)\n\n  parts.push(`${sourceTitle} → ${targetTitle}`)\n  if (matTitle) parts.push(matTitle)\n  parts.push(fmt(d.data.value))\n  return parts.join('\\n')\n}\n\nfunction drawDiagram(data) {\n  const width = program.size ? program.size[0] : 800,\n        height = program.size ? program.size[1] : 600;\n\n  const color = scaleOrdinal(schemeCategory20);\n\n  const margins = program.margins || { top: 0, bottom: 0, left: 0, right: 0 };\n\n  const ordering = (data.metadata && data.metadata.layers)\n        ? data.metadata.layers\n        : (data.order && data.order.length ? data.order : null)\n\n  const layout = sankey()\n        .linkValue(function (d) { return d.data.value; })\n        .size([width - margins.left - margins.right, height - margins.top - margins.bottom])\n        .ordering(ordering)\n        .rankSets(data.rankSets);\n\n  if (program.position) {\n    layout.nodePosition(d => [d[program.position.xattr], d[program.position.yattr]]);\n  }\n\n  if (program.scale) {\n    layout.scale(program.scale);\n  }\n\n  const diagram = sankeyDiagram()\n        .nodeTitle(nodeTitle)\n        .nodeValue(program.nodeValues ? (d => program.nodeValues(d.value)) : (d => ''))\n        .linkTitle(linkTitle)\n        .linkColor(linkColor)\n        .linkMinWidth(d => 0.1)\n        .margins(margins)\n        .groups(data.groups || []);\n\n  const document = jsdom.jsdom();\n  const el = select(document).select('body').append('svg');\n\n  el\n    .datum(layout(data))\n    .call(diagram);\n\n  // put default styles inline\n  el\n    .attr('width', width)\n    .attr('height', height)\n    .attr('viewBox', '0 0 ' + width + ' ' + height)\n    .style('font-size', program.fontSize || null)\n    .style('font-family',\n           'Helvetica, Arial, sans-serif');\n\n  el.selectAll('.link')\n    .style('opacity', 0.8);\n\n  el.selectAll('line')\n    .style('stroke', d => d.style === 'process' ? '#888' : '#000')\n    .style('stroke-width', d => d.style === 'process' ? '4px' : '1px');\n\n  el.selectAll('rect')\n    .style('fill', 'none');\n\n  el.selectAll('.group').select('rect')\n    .style('fill', '#eee')\n    .style('stroke', '#bbb')\n    .style('stroke-width', '0.5');\n\n  el.selectAll('.group').select('text')\n    .style('fill', '#999');\n\n  // add background\n  el.insert('rect', ':first-child')\n    .attr('width', width)\n    .attr('height', height)\n    .style('fill', 'white');\n\n  // add title\n  if (data.metadata && data.metadata.title !== undefined) {\n    el.append('text')\n      .attr('x', width - 30)\n      .attr('y', 30)\n      .style('font-size', '200%')\n      .style('text-anchor', 'end')\n      .text(data.metadata.title);\n  }\n\n  // create a file blob of our SVG.\n  const svg = serialize(el.node());\n  return svg;\n}\n\nconst serialize = function(node){\n  return '<?xml version=\"1.0\" standalone=\"no\"?>'\n    + '<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">' +\n    xmlserializer.serializeToString(node);\n};\n"]}