summaryrefslogtreecommitdiff
path: root/themes/blowfish/assets/lib/mermaid/timeline-definition-274a7ee6.js.map
blob: 58b99019158860c6d30b1e4ec7c2836021a0b636 (plain)
1
{"version":3,"file":"timeline-definition-274a7ee6.js","sources":["../src/diagrams/timeline/parser/timeline.jison","../src/diagrams/timeline/timelineDb.js","../src/diagrams/timeline/svgDraw.js","../src/diagrams/timeline/timelineRenderer.ts","../src/diagrams/timeline/styles.js","../src/diagrams/timeline/timeline-definition.ts"],"sourcesContent":["/** mermaid\n *  https://mermaidjs.github.io/\n *  (c) 2023 Knut Sveidqvist\n *  MIT license.\n */\n%lex\n%options case-insensitive\n%x acc_title\n%x acc_descr\n%x acc_descr_multiline\n\n// Directive states\n%x open_directive type_directive arg_directive\n\n\n%%\n\n\\%\\%\\{                                                          { this.begin('open_directive'); return 'open_directive'; }\n<open_directive>((?:(?!\\}\\%\\%)[^:.])*)                          { this.begin('type_directive'); return 'type_directive'; }\n<type_directive>\":\"                                             { this.popState(); this.begin('arg_directive'); return ':'; }\n<type_directive,arg_directive>\\}\\%\\%                            { this.popState(); this.popState(); return 'close_directive'; }\n<arg_directive>((?:(?!\\}\\%\\%).|\\n)*)                            return 'arg_directive';\n\\%%(?!\\{)[^\\n]*                                                 /* skip comments */\n[^\\}]\\%\\%[^\\n]*                                                 /* skip comments */\n[\\n]+                   return 'NEWLINE';\n\\s+                     /* skip whitespace */\n\\#[^\\n]*                /* skip comments */\n\n\"timeline\"               return 'timeline';\n\"title\"\\s[^#\\n;]+       return 'title';\naccTitle\\s*\":\"\\s*                                               { this.begin(\"acc_title\");return 'acc_title'; }\n<acc_title>(?!\\n|;|#)*[^\\n]*                                    { this.popState(); return \"acc_title_value\"; }\naccDescr\\s*\":\"\\s*                                               { this.begin(\"acc_descr\");return 'acc_descr'; }\n<acc_descr>(?!\\n|;|#)*[^\\n]*                                    { this.popState(); return \"acc_descr_value\"; }\naccDescr\\s*\"{\"\\s*                                { this.begin(\"acc_descr_multiline\");}\n<acc_descr_multiline>[\\}]                       { this.popState(); }\n<acc_descr_multiline>[^\\}]*                     return \"acc_descr_multiline_value\";\n\"section\"\\s[^#:\\n;]+    return 'section';\n\n// event starting with \"==>\" keyword\n\":\"\\s[^#:\\n;]+        return 'event';\n[^#:\\n;]+               return 'period';\n\n\n<<EOF>>                 return 'EOF';\n.                       return 'INVALID';\n\n/lex\n\n%left '^'\n\n%start start\n\n%% /* language grammar */\n\nstart\n\t: timeline document 'EOF' { return $2; }\n\t| directive start\n\t;\n\ndocument\n\t: /* empty */ { $$ = [] }\n\t| document line {$1.push($2);$$ = $1}\n\t;\n\nline\n\t: SPACE statement { $$ = $2 }\n\t| statement { $$ = $1 }\n\t| NEWLINE { $$=[];}\n\t| EOF { $$=[];}\n\t;\n\ndirective\n  : openDirective typeDirective closeDirective 'NEWLINE'\n  | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE'\n  ;\n\nstatement\n  : title {yy.getCommonDb().setDiagramTitle($1.substr(6));$$=$1.substr(6);}\n  | acc_title acc_title_value  { $$=$2.trim();yy.getCommonDb().setAccTitle($$); }\n  | acc_descr acc_descr_value  { $$=$2.trim();yy.getCommonDb().setAccDescription($$); }\n  | acc_descr_multiline_value { $$=$1.trim();yy.getCommonDb().setAccDescription($$); }\n  | section {yy.addSection($1.substr(8));$$=$1.substr(8);}\n  | period_statement\n  | event_statement\n  | directive\n  ;\nperiod_statement\n  : period {yy.addTask($1,0,'');$$=$1;}\n;\nevent_statement\n  : event {yy.addEvent($1.substr(2));$$=$1;}\n;\n\n\nopenDirective\n  : open_directive { yy.parseDirective('%%{', 'open_directive'); }\n  ;\n\ntypeDirective\n  : type_directive { yy.parseDirective($1, 'type_directive'); }\n  ;\n\nargDirective\n  : arg_directive { $1 = $1.trim().replace(/'/g, '\"'); yy.parseDirective($1, 'arg_directive'); }\n  ;\n\ncloseDirective\n  : close_directive { yy.parseDirective('}%%', 'close_directive', 'timeline'); }\n  ;\n\n%%\n","import { parseDirective as _parseDirective } from '../../directiveUtils';\nimport * as commonDb from '../../commonDb';\nlet currentSection = '';\nlet currentTaskId = 0;\n\nconst sections = [];\nconst tasks = [];\nconst rawTasks = [];\n\nexport const getCommonDb = () => commonDb;\n\nexport const parseDirective = (statement, context, type) => {\n  _parseDirective(this, statement, context, type);\n};\n\nexport const clear = function () {\n  sections.length = 0;\n  tasks.length = 0;\n  currentSection = '';\n  rawTasks.length = 0;\n  commonDb.clear();\n};\n\nexport const addSection = function (txt) {\n  currentSection = txt;\n  sections.push(txt);\n};\n\nexport const getSections = function () {\n  return sections;\n};\n\nexport const getTasks = function () {\n  let allItemsProcessed = compileTasks();\n  const maxDepth = 100;\n  let iterationCount = 0;\n  while (!allItemsProcessed && iterationCount < maxDepth) {\n    allItemsProcessed = compileTasks();\n    iterationCount++;\n  }\n\n  tasks.push(...rawTasks);\n\n  return tasks;\n};\n\nexport const addTask = function (period, length, event) {\n  const rawTask = {\n    id: currentTaskId++,\n    section: currentSection,\n    type: currentSection,\n    task: period,\n    score: length ? length : 0,\n    //if event is defined, then add it the events array\n    events: event ? [event] : [],\n  };\n  rawTasks.push(rawTask);\n};\n\nexport const addEvent = function (event) {\n  // fetch current task with currnetTaskId\n  const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1);\n  //add event to the events array\n  currentTask.events.push(event);\n};\n\nexport const addTaskOrg = function (descr) {\n  const newTask = {\n    section: currentSection,\n    type: currentSection,\n    description: descr,\n    task: descr,\n    classes: [],\n  };\n  tasks.push(newTask);\n};\n\n/**\n * Compiles the raw tasks into a list of tasks with events\n * @returns {boolean} true if all items are processed\n * @private\n * @memberof timelineDb\n */\nconst compileTasks = function () {\n  const compileTask = function (pos) {\n    return rawTasks[pos].processed;\n  };\n\n  let allProcessed = true;\n  for (const [i, rawTask] of rawTasks.entries()) {\n    compileTask(i);\n\n    allProcessed = allProcessed && rawTask.processed;\n  }\n  return allProcessed;\n};\n\nexport default {\n  clear,\n  getCommonDb,\n  addSection,\n  getSections,\n  getTasks,\n  addTask,\n  addTaskOrg,\n  addEvent,\n  parseDirective,\n};\n","import { arc as d3arc, select } from 'd3';\nconst MAX_SECTIONS = 12;\n\nexport const drawRect = function (elem, rectData) {\n  const rectElem = elem.append('rect');\n  rectElem.attr('x', rectData.x);\n  rectElem.attr('y', rectData.y);\n  rectElem.attr('fill', rectData.fill);\n  rectElem.attr('stroke', rectData.stroke);\n  rectElem.attr('width', rectData.width);\n  rectElem.attr('height', rectData.height);\n  rectElem.attr('rx', rectData.rx);\n  rectElem.attr('ry', rectData.ry);\n\n  if (rectData.class !== undefined) {\n    rectElem.attr('class', rectData.class);\n  }\n\n  return rectElem;\n};\n\nexport const drawFace = function (element, faceData) {\n  const radius = 15;\n  const circleElement = element\n    .append('circle')\n    .attr('cx', faceData.cx)\n    .attr('cy', faceData.cy)\n    .attr('class', 'face')\n    .attr('r', radius)\n    .attr('stroke-width', 2)\n    .attr('overflow', 'visible');\n\n  const face = element.append('g');\n\n  //left eye\n  face\n    .append('circle')\n    .attr('cx', faceData.cx - radius / 3)\n    .attr('cy', faceData.cy - radius / 3)\n    .attr('r', 1.5)\n    .attr('stroke-width', 2)\n    .attr('fill', '#666')\n    .attr('stroke', '#666');\n\n  //right eye\n  face\n    .append('circle')\n    .attr('cx', faceData.cx + radius / 3)\n    .attr('cy', faceData.cy - radius / 3)\n    .attr('r', 1.5)\n    .attr('stroke-width', 2)\n    .attr('fill', '#666')\n    .attr('stroke', '#666');\n\n  /** @param {any} face */\n  function smile(face) {\n    const arc = d3arc()\n      .startAngle(Math.PI / 2)\n      .endAngle(3 * (Math.PI / 2))\n      .innerRadius(radius / 2)\n      .outerRadius(radius / 2.2);\n    //mouth\n    face\n      .append('path')\n      .attr('class', 'mouth')\n      .attr('d', arc)\n      .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 2) + ')');\n  }\n\n  /** @param {any} face */\n  function sad(face) {\n    const arc = d3arc()\n      .startAngle((3 * Math.PI) / 2)\n      .endAngle(5 * (Math.PI / 2))\n      .innerRadius(radius / 2)\n      .outerRadius(radius / 2.2);\n    //mouth\n    face\n      .append('path')\n      .attr('class', 'mouth')\n      .attr('d', arc)\n      .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 7) + ')');\n  }\n\n  /** @param {any} face */\n  function ambivalent(face) {\n    face\n      .append('line')\n      .attr('class', 'mouth')\n      .attr('stroke', 2)\n      .attr('x1', faceData.cx - 5)\n      .attr('y1', faceData.cy + 7)\n      .attr('x2', faceData.cx + 5)\n      .attr('y2', faceData.cy + 7)\n      .attr('class', 'mouth')\n      .attr('stroke-width', '1px')\n      .attr('stroke', '#666');\n  }\n\n  if (faceData.score > 3) {\n    smile(face);\n  } else if (faceData.score < 3) {\n    sad(face);\n  } else {\n    ambivalent(face);\n  }\n\n  return circleElement;\n};\n\nexport const drawCircle = function (element, circleData) {\n  const circleElement = element.append('circle');\n  circleElement.attr('cx', circleData.cx);\n  circleElement.attr('cy', circleData.cy);\n  circleElement.attr('class', 'actor-' + circleData.pos);\n  circleElement.attr('fill', circleData.fill);\n  circleElement.attr('stroke', circleData.stroke);\n  circleElement.attr('r', circleData.r);\n\n  if (circleElement.class !== undefined) {\n    circleElement.attr('class', circleElement.class);\n  }\n\n  if (circleData.title !== undefined) {\n    circleElement.append('title').text(circleData.title);\n  }\n\n  return circleElement;\n};\n\nexport const drawText = function (elem, textData) {\n  // Remove and ignore br:s\n  const nText = textData.text.replace(/<br\\s*\\/?>/gi, ' ');\n\n  const textElem = elem.append('text');\n  textElem.attr('x', textData.x);\n  textElem.attr('y', textData.y);\n  textElem.attr('class', 'legend');\n\n  textElem.style('text-anchor', textData.anchor);\n\n  if (textData.class !== undefined) {\n    textElem.attr('class', textData.class);\n  }\n\n  const span = textElem.append('tspan');\n  span.attr('x', textData.x + textData.textMargin * 2);\n  span.text(nText);\n\n  return textElem;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n  /**\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} cut\n   */\n  function genPoints(x, y, width, height, cut) {\n    return (\n      x +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      (y + height - cut) +\n      ' ' +\n      (x + width - cut * 1.2) +\n      ',' +\n      (y + height) +\n      ' ' +\n      x +\n      ',' +\n      (y + height)\n    );\n  }\n  const polygon = elem.append('polygon');\n  polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n  polygon.attr('class', 'labelBox');\n\n  txtObject.y = txtObject.y + txtObject.labelMargin;\n  txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n  drawText(elem, txtObject);\n};\n\nexport const drawSection = function (elem, section, conf) {\n  const g = elem.append('g');\n\n  const rect = getNoteRect();\n  rect.x = section.x;\n  rect.y = section.y;\n  rect.fill = section.fill;\n  rect.width = conf.width;\n  rect.height = conf.height;\n  rect.class = 'journey-section section-type-' + section.num;\n  rect.rx = 3;\n  rect.ry = 3;\n  drawRect(g, rect);\n\n  _drawTextCandidateFunc(conf)(\n    section.text,\n    g,\n    rect.x,\n    rect.y,\n    rect.width,\n    rect.height,\n    { class: 'journey-section section-type-' + section.num },\n    conf,\n    section.colour\n  );\n};\n\nlet taskCount = -1;\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem The HTML element\n * @param {any} task The task to render\n * @param {any} conf The global configuration\n */\nexport const drawTask = function (elem, task, conf) {\n  const center = task.x + conf.width / 2;\n  const g = elem.append('g');\n  taskCount++;\n  const maxHeight = 300 + 5 * 30;\n  g.append('line')\n    .attr('id', 'task' + taskCount)\n    .attr('x1', center)\n    .attr('y1', task.y)\n    .attr('x2', center)\n    .attr('y2', maxHeight)\n    .attr('class', 'task-line')\n    .attr('stroke-width', '1px')\n    .attr('stroke-dasharray', '4 2')\n    .attr('stroke', '#666');\n\n  drawFace(g, {\n    cx: center,\n    cy: 300 + (5 - task.score) * 30,\n    score: task.score,\n  });\n\n  const rect = getNoteRect();\n  rect.x = task.x;\n  rect.y = task.y;\n  rect.fill = task.fill;\n  rect.width = conf.width;\n  rect.height = conf.height;\n  rect.class = 'task task-type-' + task.num;\n  rect.rx = 3;\n  rect.ry = 3;\n  drawRect(g, rect);\n\n  let xPos = task.x + 14;\n  // task.people.forEach((person) => {\n  //   const colour = task.actors[person].color;\n\n  //   const circle = {\n  //     cx: xPos,\n  //     cy: task.y,\n  //     r: 7,\n  //     fill: colour,\n  //     stroke: '#000',\n  //     title: person,\n  //     pos: task.actors[person].position,\n  //   };\n\n  //   drawCircle(g, circle);\n  //   xPos += 10;\n  // });\n\n  _drawTextCandidateFunc(conf)(\n    task.task,\n    g,\n    rect.x,\n    rect.y,\n    rect.width,\n    rect.height,\n    { class: 'task' },\n    conf,\n    task.colour\n  );\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem The html element\n * @param {any} bounds The bounds of the drawing\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n  const rectElem = drawRect(elem, {\n    x: bounds.startx,\n    y: bounds.starty,\n    width: bounds.stopx - bounds.startx,\n    height: bounds.stopy - bounds.starty,\n    fill: bounds.fill,\n    class: 'rect',\n  });\n  rectElem.lower();\n};\n\nexport const getTextObj = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: undefined,\n    'text-anchor': 'start',\n    width: 100,\n    height: 100,\n    textMargin: 0,\n    rx: 0,\n    ry: 0,\n  };\n};\n\nexport const getNoteRect = function () {\n  return {\n    x: 0,\n    y: 0,\n    width: 100,\n    anchor: 'start',\n    height: 100,\n    rx: 0,\n    ry: 0,\n  };\n};\n\nconst _drawTextCandidateFunc = (function () {\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} colour\n   */\n  function byText(content, g, x, y, width, height, textAttrs, colour) {\n    const text = g\n      .append('text')\n      .attr('x', x + width / 2)\n      .attr('y', y + height / 2 + 5)\n      .style('font-color', colour)\n      .style('text-anchor', 'middle')\n      .text(content);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   * @param {any} colour\n   */\n  function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) {\n    const { taskFontSize, taskFontFamily } = conf;\n\n    const lines = content.split(/<br\\s*\\/?>/gi);\n    for (let i = 0; i < lines.length; i++) {\n      const dy = i * taskFontSize - (taskFontSize * (lines.length - 1)) / 2;\n      const text = g\n        .append('text')\n        .attr('x', x + width / 2)\n        .attr('y', y)\n        .attr('fill', colour)\n        .style('text-anchor', 'middle')\n        .style('font-size', taskFontSize)\n        .style('font-family', taskFontFamily);\n      text\n        .append('tspan')\n        .attr('x', x + width / 2)\n        .attr('dy', dy)\n        .text(lines[i]);\n\n      text\n        .attr('y', y + height / 2.0)\n        .attr('dominant-baseline', 'central')\n        .attr('alignment-baseline', 'central');\n\n      _setTextAttrs(text, textAttrs);\n    }\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byFo(content, g, x, y, width, height, textAttrs, conf) {\n    const body = g.append('switch');\n    const f = body\n      .append('foreignObject')\n      .attr('x', x)\n      .attr('y', y)\n      .attr('width', width)\n      .attr('height', height)\n      .attr('position', 'fixed');\n\n    const text = f\n      .append('xhtml:div')\n      .style('display', 'table')\n      .style('height', '100%')\n      .style('width', '100%');\n\n    text\n      .append('div')\n      .attr('class', 'label')\n      .style('display', 'table-cell')\n      .style('text-align', 'center')\n      .style('vertical-align', 'middle')\n      .text(content);\n\n    byTspan(content, body, x, y, width, height, textAttrs, conf);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} toText\n   * @param {any} fromTextAttrsDict\n   */\n  function _setTextAttrs(toText, fromTextAttrsDict) {\n    for (const key in fromTextAttrsDict) {\n      if (key in fromTextAttrsDict) {\n        // noinspection JSUnfilteredForInLoop\n        toText.attr(key, fromTextAttrsDict[key]);\n      }\n    }\n  }\n\n  return function (conf) {\n    return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n  };\n})();\n\nconst initGraphics = function (graphics) {\n  graphics\n    .append('defs')\n    .append('marker')\n    .attr('id', 'arrowhead')\n    .attr('refX', 5)\n    .attr('refY', 2)\n    .attr('markerWidth', 6)\n    .attr('markerHeight', 4)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead\n};\n\n/**\n * @param {string} text The text to be wrapped\n * @param {number} width The max width of the text\n */\nfunction wrap(text, width) {\n  text.each(function () {\n    var text = select(this),\n      words = text\n        .text()\n        .split(/(\\s+|<br>)/)\n        .reverse(),\n      word,\n      line = [],\n      lineHeight = 1.1, // ems\n      y = text.attr('y'),\n      dy = parseFloat(text.attr('dy')),\n      tspan = text\n        .text(null)\n        .append('tspan')\n        .attr('x', 0)\n        .attr('y', y)\n        .attr('dy', dy + 'em');\n    for (let j = 0; j < words.length; j++) {\n      word = words[words.length - 1 - j];\n      line.push(word);\n      tspan.text(line.join(' ').trim());\n      if (tspan.node().getComputedTextLength() > width || word === '<br>') {\n        line.pop();\n        tspan.text(line.join(' ').trim());\n        if (word === '<br>') {\n          line = [''];\n        } else {\n          line = [word];\n        }\n\n        tspan = text\n          .append('tspan')\n          .attr('x', 0)\n          .attr('y', y)\n          .attr('dy', lineHeight + 'em')\n          .text(word);\n      }\n    }\n  });\n}\n\nexport const drawNode = function (elem, node, fullSection, conf) {\n  const section = (fullSection % MAX_SECTIONS) - 1;\n  const nodeElem = elem.append('g');\n  node.section = section;\n  nodeElem.attr(\n    'class',\n    (node.class ? node.class + ' ' : '') + 'timeline-node ' + ('section-' + section)\n  );\n  const bkgElem = nodeElem.append('g');\n\n  // Create the wrapped text element\n  const textElem = nodeElem.append('g');\n\n  const txt = textElem\n    .append('text')\n    .text(node.descr)\n    .attr('dy', '1em')\n    .attr('alignment-baseline', 'middle')\n    .attr('dominant-baseline', 'middle')\n    .attr('text-anchor', 'middle')\n    .call(wrap, node.width);\n  const bbox = txt.node().getBBox();\n  const fontSize =\n    conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace('px', '') : conf.fontSize;\n  node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n  node.height = Math.max(node.height, node.maxHeight);\n  node.width = node.width + 2 * node.padding;\n\n  textElem.attr('transform', 'translate(' + node.width / 2 + ', ' + node.padding / 2 + ')');\n\n  // Create the background element\n  defaultBkg(bkgElem, node, section, conf);\n\n  return node;\n};\n\nexport const getVirtualNodeHeight = function (elem, node, conf) {\n  const textElem = elem.append('g');\n  const txt = textElem\n    .append('text')\n    .text(node.descr)\n    .attr('dy', '1em')\n    .attr('alignment-baseline', 'middle')\n    .attr('dominant-baseline', 'middle')\n    .attr('text-anchor', 'middle')\n    .call(wrap, node.width);\n  const bbox = txt.node().getBBox();\n  const fontSize =\n    conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace('px', '') : conf.fontSize;\n  textElem.remove();\n  return bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n};\n\nconst defaultBkg = function (elem, node, section) {\n  const rd = 5;\n  elem\n    .append('path')\n    .attr('id', 'node-' + node.id)\n    .attr('class', 'node-bkg node-' + node.type)\n    .attr(\n      'd',\n      `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${\n        node.width - 2 * rd\n      } q5,0 5,5 v${node.height - rd} H0 Z`\n    );\n\n  elem\n    .append('line')\n    .attr('class', 'node-line-' + section)\n    .attr('x1', 0)\n    .attr('y1', node.height)\n    .attr('x2', node.width)\n    .attr('y2', node.height);\n};\n\nexport default {\n  drawRect,\n  drawCircle,\n  drawSection,\n  drawText,\n  drawLabel,\n  drawTask,\n  drawBackgroundRect,\n  getTextObj,\n  getNoteRect,\n  initGraphics,\n  drawNode,\n  getVirtualNodeHeight,\n};\n","// @ts-ignore - db not typed yet\nimport { select, Selection } from 'd3';\nimport svgDraw from './svgDraw';\nimport { log } from '../../logger';\nimport { getConfig } from '../../config';\nimport { setupGraphViewbox } from '../../setupGraphViewbox';\nimport { Diagram } from '../../Diagram';\nimport { MermaidConfig } from '../../config.type';\n\ninterface Block<TDesc, TSection> {\n  number: number;\n  descr: TDesc;\n  section: TSection;\n  width: number;\n  padding: number;\n  maxHeight: number;\n}\n\ninterface TimelineTask {\n  id: number;\n  section: string;\n  type: string;\n  task: string;\n  score: number;\n  events: string[];\n}\nexport const draw = function (text: string, id: string, version: string, diagObj: Diagram) {\n  //1. Fetch the configuration\n  const conf = getConfig();\n  // @ts-expect-error - wrong config?\n  const LEFT_MARGIN = conf.leftMargin ?? 50;\n\n  //2. Clear the diagram db before parsing\n  diagObj.db.clear?.();\n\n  //3. Parse the diagram text\n  diagObj.parser.parse(text + '\\n');\n\n  log.debug('timeline', diagObj.db);\n\n  const securityLevel = conf.securityLevel;\n  // Handle root and Document for when rendering in sandbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? // @ts-ignore d3 types are wrong\n        select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n\n  // @ts-ignore d3 types are wrong\n  const svg = root.select('#' + id);\n\n  svg.append('g');\n\n  //4. Fetch the diagram data\n  // @ts-expect-error - db not typed yet\n  const tasks: TimelineTask[] = diagObj.db.getTasks();\n  // @ts-expect-error - db not typed yet\n  const title = diagObj.db.getCommonDb().getDiagramTitle();\n  log.debug('task', tasks);\n\n  //5. Initialize the diagram\n  svgDraw.initGraphics(svg);\n\n  // fetch Sections\n  // @ts-expect-error - db not typed yet\n  const sections: string[] = diagObj.db.getSections();\n  log.debug('sections', sections);\n\n  let maxSectionHeight = 0;\n  let maxTaskHeight = 0;\n  //let sectionBeginX = 0;\n  let depthY = 0;\n  let sectionBeginY = 0;\n  let masterX = 50 + LEFT_MARGIN;\n  //sectionBeginX = masterX;\n  let masterY = 50;\n  sectionBeginY = 50;\n  //draw sections\n  let sectionNumber = 0;\n  let hasSections = true;\n\n  //Calculate the max height of the sections\n  sections.forEach(function (section: string) {\n    const sectionNode: Block<string, number> = {\n      number: sectionNumber,\n      descr: section,\n      section: sectionNumber,\n      width: 150,\n      padding: 20,\n      maxHeight: maxSectionHeight,\n    };\n    const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf);\n    log.debug('sectionHeight before draw', sectionHeight);\n    maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20);\n  });\n\n  //tasks length and maxEventCount\n  let maxEventCount = 0;\n  let maxEventLineLength = 0;\n  log.debug('tasks.length', tasks.length);\n  //calculate max task height\n  // for loop till tasks.length\n\n  for (const [i, task] of tasks.entries()) {\n    const taskNode: Block<TimelineTask, string> = {\n      number: i,\n      descr: task,\n      section: task.section,\n      width: 150,\n      padding: 20,\n      maxHeight: maxTaskHeight,\n    };\n    const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf);\n    log.debug('taskHeight before draw', taskHeight);\n    maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20);\n\n    //calculate maxEventCount\n    maxEventCount = Math.max(maxEventCount, task.events.length);\n    //calculate maxEventLineLength\n    let maxEventLineLengthTemp = 0;\n    for (let j = 0; j < task.events.length; j++) {\n      const event = task.events[j];\n      const eventNode = {\n        descr: event,\n        section: task.section,\n        number: task.section,\n        width: 150,\n        padding: 20,\n        maxHeight: 50,\n      };\n      maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf);\n    }\n    maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp);\n  }\n\n  log.debug('maxSectionHeight before draw', maxSectionHeight);\n  log.debug('maxTaskHeight before draw', maxTaskHeight);\n\n  if (sections && sections.length > 0) {\n    sections.forEach((section) => {\n      //filter task where tasks.section == section\n      const tasksForSection = tasks.filter((task) => task.section === section);\n\n      const sectionNode: Block<string, number> = {\n        number: sectionNumber,\n        descr: section,\n        section: sectionNumber,\n        width: 200 * Math.max(tasksForSection.length, 1) - 50,\n        padding: 20,\n        maxHeight: maxSectionHeight,\n      };\n      log.debug('sectionNode', sectionNode);\n      const sectionNodeWrapper = svg.append('g');\n      const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf);\n      log.debug('sectionNode output', node);\n\n      sectionNodeWrapper.attr('transform', `translate(${masterX}, ${sectionBeginY})`);\n\n      masterY += maxSectionHeight + 50;\n\n      //draw tasks for this section\n      if (tasksForSection.length > 0) {\n        drawTasks(\n          svg,\n          tasksForSection,\n          sectionNumber,\n          masterX,\n          masterY,\n          maxTaskHeight,\n          conf,\n          maxEventCount,\n          maxEventLineLength,\n          maxSectionHeight,\n          false\n        );\n      }\n      // todo replace with total width of section and its tasks\n      masterX += 200 * Math.max(tasksForSection.length, 1);\n\n      masterY = sectionBeginY;\n      sectionNumber++;\n    });\n  } else {\n    //draw tasks\n    hasSections = false;\n    drawTasks(\n      svg,\n      tasks,\n      sectionNumber,\n      masterX,\n      masterY,\n      maxTaskHeight,\n      conf,\n      maxEventCount,\n      maxEventLineLength,\n      maxSectionHeight,\n      true\n    );\n  }\n\n  // Get BBox of the diagram\n  const box = svg.node().getBBox();\n  log.debug('bounds', box);\n\n  if (title) {\n    svg\n      .append('text')\n      .text(title)\n      .attr('x', box.width / 2 - LEFT_MARGIN)\n      .attr('font-size', '4ex')\n      .attr('font-weight', 'bold')\n      .attr('y', 20);\n  }\n  //5. Draw the diagram\n  depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100;\n\n  const lineWrapper = svg.append('g').attr('class', 'lineWrapper');\n  // Draw activity line\n  lineWrapper\n    .append('line')\n    .attr('x1', LEFT_MARGIN)\n    .attr('y1', depthY) // One section head + one task + margins\n    .attr('x2', box.width + 3 * LEFT_MARGIN) // Subtract stroke width so arrow point is retained\n    .attr('y2', depthY)\n    .attr('stroke-width', 4)\n    .attr('stroke', 'black')\n    .attr('marker-end', 'url(#arrowhead)');\n\n  // Setup the view box and size of the svg element\n  setupGraphViewbox(\n    undefined,\n    svg,\n    conf.timeline?.padding ?? 50,\n    conf.timeline?.useMaxWidth ?? false\n  );\n\n  // addSVGAccessibilityFields(diagObj.db, diagram, id);\n};\n\nexport const drawTasks = function (\n  diagram: Selection<SVGElement, unknown, null, undefined>,\n  tasks: TimelineTask[],\n  sectionColor: number,\n  masterX: number,\n  masterY: number,\n  maxTaskHeight: number,\n  conf: MermaidConfig,\n  maxEventCount: number,\n  maxEventLineLength: number,\n  maxSectionHeight: number,\n  isWithoutSections: boolean\n) {\n  // Draw the tasks\n  for (const task of tasks) {\n    // create node from task\n    const taskNode = {\n      descr: task.task,\n      section: sectionColor,\n      number: sectionColor,\n      width: 150,\n      padding: 20,\n      maxHeight: maxTaskHeight,\n    };\n\n    log.debug('taskNode', taskNode);\n    // create task wrapper\n\n    const taskWrapper = diagram.append('g').attr('class', 'taskWrapper');\n    const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf);\n    const taskHeight = node.height;\n    //log task height\n    log.debug('taskHeight after draw', taskHeight);\n    taskWrapper.attr('transform', `translate(${masterX}, ${masterY})`);\n\n    // update max task height\n    maxTaskHeight = Math.max(maxTaskHeight, taskHeight);\n\n    // if task has events, draw them\n    if (task.events) {\n      // draw a line between the task and the events\n      const lineWrapper = diagram.append('g').attr('class', 'lineWrapper');\n      let lineLength = maxTaskHeight;\n      //add margin to task\n      masterY += 100;\n      lineLength =\n        lineLength + drawEvents(diagram, task.events, sectionColor, masterX, masterY, conf);\n      masterY -= 100;\n\n      lineWrapper\n        .append('line')\n        .attr('x1', masterX + 190 / 2)\n        .attr('y1', masterY + maxTaskHeight) // One section head + one task + margins\n        .attr('x2', masterX + 190 / 2) // Subtract stroke width so arrow point is retained\n        .attr(\n          'y2',\n          masterY +\n            maxTaskHeight +\n            (isWithoutSections ? maxTaskHeight : maxSectionHeight) +\n            maxEventLineLength +\n            120\n        )\n        .attr('stroke-width', 2)\n        .attr('stroke', 'black')\n        .attr('marker-end', 'url(#arrowhead)')\n        .attr('stroke-dasharray', '5,5');\n    }\n\n    masterX = masterX + 200;\n    if (isWithoutSections && !conf.timeline?.disableMulticolor) {\n      sectionColor++;\n    }\n  }\n\n  // reset Y coordinate for next section\n  masterY = masterY - 10;\n};\n\nexport const drawEvents = function (\n  diagram: Selection<SVGElement, unknown, null, undefined>,\n  events: string[],\n  sectionColor: number,\n  masterX: number,\n  masterY: number,\n  conf: MermaidConfig\n) {\n  let maxEventHeight = 0;\n  const eventBeginY = masterY;\n  masterY = masterY + 100;\n  // Draw the events\n  for (const event of events) {\n    // create node from event\n    const eventNode: Block<string, number> = {\n      descr: event,\n      section: sectionColor,\n      number: sectionColor,\n      width: 150,\n      padding: 20,\n      maxHeight: 50,\n    };\n\n    //log task node\n    log.debug('eventNode', eventNode);\n    // create event wrapper\n    const eventWrapper = diagram.append('g').attr('class', 'eventWrapper');\n    const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf);\n    const eventHeight = node.height;\n    maxEventHeight = maxEventHeight + eventHeight;\n    eventWrapper.attr('transform', `translate(${masterX}, ${masterY})`);\n    masterY = masterY + 10 + eventHeight;\n  }\n  // set masterY back to eventBeginY\n  masterY = eventBeginY;\n  return maxEventHeight;\n};\n\nexport default {\n  setConf: () => {\n    // no-op\n  },\n  draw,\n};\n","import { darken, lighten, isDark } from 'khroma';\n\nconst genSections = (options) => {\n  let sections = '';\n\n  for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n    options['lineColor' + i] = options['lineColor' + i] || options['cScaleInv' + i];\n    if (isDark(options['lineColor' + i])) {\n      options['lineColor' + i] = lighten(options['lineColor' + i], 20);\n    } else {\n      options['lineColor' + i] = darken(options['lineColor' + i], 20);\n    }\n  }\n\n  for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n    const sw = '' + (17 - 3 * i);\n    sections += `\n    .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${\n      i - 1\n    } path  {\n      fill: ${options['cScale' + i]};\n    }\n    .section-${i - 1} text {\n     fill: ${options['cScaleLabel' + i]};\n    }\n    .node-icon-${i - 1} {\n      font-size: 40px;\n      color: ${options['cScaleLabel' + i]};\n    }\n    .section-edge-${i - 1}{\n      stroke: ${options['cScale' + i]};\n    }\n    .edge-depth-${i - 1}{\n      stroke-width: ${sw};\n    }\n    .section-${i - 1} line {\n      stroke: ${options['cScaleInv' + i]} ;\n      stroke-width: 3;\n    }\n\n    .lineWrapper line{\n      stroke: ${options['cScaleLabel' + i]} ;\n    }\n\n    .disabled, .disabled circle, .disabled text {\n      fill: lightgray;\n    }\n    .disabled text {\n      fill: #efefef;\n    }\n    `;\n  }\n  return sections;\n};\n\nconst getStyles = (options) =>\n  `\n  .edge {\n    stroke-width: 3;\n  }\n  ${genSections(options)}\n  .section-root rect, .section-root path, .section-root circle  {\n    fill: ${options.git0};\n  }\n  .section-root text {\n    fill: ${options.gitBranchLabel0};\n  }\n  .icon-container {\n    height:100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n  }\n  .edge {\n    fill: none;\n  }\n  .eventWrapper  {\n   filter: brightness(120%);\n  }\n`;\nexport default getStyles;\n","// @ts-ignore: TODO Fix ts errors\nimport parser from './parser/timeline.jison';\nimport * as db from './timelineDb';\nimport renderer from './timelineRenderer';\nimport styles from './styles';\n\nexport const diagram = {\n  db,\n  renderer,\n  parser,\n  styles,\n};\n"],"names":["parser","o","v","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer","sharedState","k","yyloc","ranges","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","ch","lines","oldLines","n","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","i","condition","yy_","$avoiding_name_collisions","YY_START","Parser","currentSection","currentTaskId","sections","tasks","rawTasks","getCommonDb","commonDb","parseDirective","statement","context","type","_parseDirective","this","clear","commonDb.clear","addSection","txt","getSections","getTasks","allItemsProcessed","compileTasks","maxDepth","iterationCount","addTask","period","length","event","rawTask","addEvent","task","addTaskOrg","descr","newTask","compileTask","pos","allProcessed","timelineDb","MAX_SECTIONS","drawRect","elem","rectData","rectElem","drawFace","element","faceData","circleElement","face","smile","arc","d3arc","sad","ambivalent","drawCircle","circleData","drawText","textData","nText","textElem","span","drawLabel","txtObject","genPoints","x","y","width","height","cut","polygon","drawSection","section","conf","g","rect","getNoteRect","_drawTextCandidateFunc","taskCount","drawTask","center","maxHeight","drawBackgroundRect","bounds","getTextObj","byText","content","textAttrs","colour","text","_setTextAttrs","byTspan","taskFontSize","taskFontFamily","dy","byFo","body","toText","fromTextAttrsDict","key","initGraphics","graphics","wrap","select","words","word","line","lineHeight","tspan","j","drawNode","node","fullSection","nodeElem","bkgElem","bbox","fontSize","defaultBkg","getVirtualNodeHeight","svgDraw","draw","id","version","diagObj","getConfig","LEFT_MARGIN","_b","_a","log","securityLevel","sandboxElement","svg","title","maxSectionHeight","maxTaskHeight","depthY","sectionBeginY","masterX","masterY","sectionNumber","hasSections","sectionNode","sectionHeight","maxEventCount","maxEventLineLength","taskNode","taskHeight","maxEventLineLengthTemp","eventNode","tasksForSection","sectionNodeWrapper","drawTasks","box","setupGraphViewbox","_c","_d","diagram","sectionColor","isWithoutSections","taskWrapper","lineWrapper","lineLength","drawEvents","events","maxEventHeight","eventBeginY","eventWrapper","eventHeight","renderer","genSections","options","isDark","lighten","darken","sw","getStyles","styles","db"],"mappings":"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"}