summaryrefslogtreecommitdiff
path: root/themes/blowfish/assets/lib/mermaid/ganttDiagram-2c592def.js.map
blob: 18cecb1545838edc3c7e9e394d580414782b2996 (plain)
1
{"version":3,"file":"ganttDiagram-2c592def.js","sources":["../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/ascending.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/descending.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/bisector.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/number.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/bisect.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/ticks.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/max.js","../../../node_modules/.pnpm/d3-array@3.2.0/node_modules/d3-array/src/min.js","../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js","../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js","../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/math.js","../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/lab.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/hcl.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/nice.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/interval.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/millisecond.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/duration.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/second.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/minute.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/hour.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/day.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/week.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/month.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/year.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/utcMinute.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/utcHour.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/utcDay.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/utcWeek.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/utcMonth.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/utcYear.js","../../../node_modules/.pnpm/d3-time@3.0.0/node_modules/d3-time/src/ticks.js","../../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/locale.js","../../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/defaultLocale.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/time.js","../src/diagrams/gantt/parser/gantt.jison","../../../node_modules/.pnpm/dayjs@1.11.7/node_modules/dayjs/plugin/isoWeek.js","../../../node_modules/.pnpm/dayjs@1.11.7/node_modules/dayjs/plugin/customParseFormat.js","../../../node_modules/.pnpm/dayjs@1.11.7/node_modules/dayjs/plugin/advancedFormat.js","../src/diagrams/gantt/ganttDb.js","../src/diagrams/gantt/ganttRenderer.js","../src/diagrams/gantt/styles.js","../src/diagrams/gantt/ganttDiagram.ts"],"sourcesContent":["export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n    if (r0 * step < start) ++r0;\n    if (r1 * step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) * step;\n  } else {\n    step = -step;\n    let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n    if (r0 / step < start) ++r0;\n    if (r1 / step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport millisecond from \"./millisecond.js\";\nimport second from \"./second.js\";\nimport minute from \"./minute.js\";\nimport hour from \"./hour.js\";\nimport day from \"./day.js\";\nimport {sunday as week} from \"./week.js\";\nimport month from \"./month.js\";\nimport year from \"./year.js\";\nimport utcMinute from \"./utcMinute.js\";\nimport utcHour from \"./utcHour.js\";\nimport utcDay from \"./utcDay.js\";\nimport {utcSunday as utcWeek} from \"./utcWeek.js\";\nimport utcMonth from \"./utcMonth.js\";\nimport utcYear from \"./utcYear.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(year, month, week, day, hour, minute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","/** mermaid\n *  https://mermaidjs.github.io/\n *  (c) 2015 Knut Sveidqvist\n *  MIT license.\n */\n%lex\n\n%options case-insensitive\n\n%x click\n%x href\n%x callbackname\n%x callbackargs\n%x open_directive\n%x type_directive\n%x arg_directive\n%x close_directive\n%x acc_title\n%x acc_descr\n%x acc_descr_multiline\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\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\n\\%\\%(?!\\{)*[^\\n]*                                               /* skip comments */\n[^\\}]\\%\\%*[^\\n]*                                                /* skip comments */\n\\%\\%*[^\\n]*[\\n]*           /* do nothing */\n\n[\\n]+                   return 'NL';\n\\s+                     /* skip whitespace */\n\\#[^\\n]*                /* skip comments */\n\\%%[^\\n]*               /* skip comments */\n\n/*\n---interactivity command---\n'href' adds a link to the specified task. 'href' can only be specified when the\nline was introduced with 'click'.\n'href \"<link>\"' attaches the specified link to the task that was specified by 'click'.\n*/\n\"href\"[\\s]+[\"]          this.begin(\"href\");\n<href>[\"]               this.popState();\n<href>[^\"]*             return 'href';\n\n/*\n---interactivity command---\n'call' adds a callback to the specified task. 'call' can only be specified when\nthe line was introdcued with 'click'.\n'call <callbackname>(<args>)' attaches the function 'callbackname' with the specified\narguments to the task that was specified by 'click'.\nFunction arguments are optional: 'call <callbackname>()' simply executes 'callbackname' without any arguments.\n*/\n\"call\"[\\s]+             this.begin(\"callbackname\");\n<callbackname>\\([\\s]*\\) this.popState();\n<callbackname>\\(        this.popState(); this.begin(\"callbackargs\");\n<callbackname>[^(]*     return 'callbackname';\n<callbackargs>\\)        this.popState();\n<callbackargs>[^)]*     return 'callbackargs';\n\n/*\n'click' is the keyword to introduce a line that contains interactivity commands.\n'click' must be followed by an existing task-id. All commands are attached to\nthat id.\n'click <id>' can be followed by href or call commands in any desired order\n*/\n\"click\"[\\s]+            this.begin(\"click\");\n<click>[\\s\\n]           this.popState();\n<click>[^\\s\\n]*         return 'click';\n\n\"gantt\"                     return 'gantt';\n\"dateFormat\"\\s[^#\\n;]+      return 'dateFormat';\n\"inclusiveEndDates\"         return 'inclusiveEndDates';\n\"topAxis\"                   return 'topAxis';\n\"axisFormat\"\\s[^#\\n;]+      return 'axisFormat';\n\"tickInterval\"\\s[^#\\n;]+    return 'tickInterval';\n\"includes\"\\s[^#\\n;]+        return 'includes';\n\"excludes\"\\s[^#\\n;]+        return 'excludes';\n\"todayMarker\"\\s[^\\n;]+      return 'todayMarker';\n\\d\\d\\d\\d\"-\"\\d\\d\"-\"\\d\\d      return 'date';\n\"title\"\\s[^#\\n;]+           return 'title';\n\"accDescription\"\\s[^#\\n;]+  return 'accDescription'\n\"section\"\\s[^#:\\n;]+        return 'section';\n[^#:\\n;]+                   return 'taskTxt';\n\":\"[^#\\n;]+                 return 'taskData';\n\":\"                         return ':';\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: directive start\n\t| gantt document 'EOF' { return $2; }\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| NL { $$=[];}\n\t| EOF { $$=[];}\n\t;\n\nstatement\n  : dateFormat {yy.setDateFormat($1.substr(11));$$=$1.substr(11);}\n  | inclusiveEndDates {yy.enableInclusiveEndDates();$$=$1.substr(18);}\n  | topAxis {yy.TopAxis();$$=$1.substr(8);}\n  | axisFormat {yy.setAxisFormat($1.substr(11));$$=$1.substr(11);}\n  | tickInterval {yy.setTickInterval($1.substr(13));$$=$1.substr(13);}\n  | excludes {yy.setExcludes($1.substr(9));$$=$1.substr(9);}\n  | includes {yy.setIncludes($1.substr(9));$$=$1.substr(9);}\n  | todayMarker {yy.setTodayMarker($1.substr(12));$$=$1.substr(12);}\n  | title {yy.setDiagramTitle($1.substr(6));$$=$1.substr(6);}\n  | acc_title acc_title_value  { $$=$2.trim();yy.setAccTitle($$); }\n  | acc_descr acc_descr_value  { $$=$2.trim();yy.setAccDescription($$); }\n  | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); }  | section {yy.addSection($1.substr(8));$$=$1.substr(8);}\n  | clickStatement\n  | taskTxt taskData {yy.addTask($1,$2);$$='task';}\n  | directive\n  ;\n\ndirective\n    : openDirective typeDirective closeDirective 'NL'\n    | openDirective typeDirective ':' argDirective closeDirective 'NL'\n    ;\n\n/*\nclick allows any combination of href and call.\n*/\nclickStatement\n    : click callbackname                    {$$ = $1;yy.setClickEvent($1, $2, null);}\n    | click callbackname callbackargs       {$$ = $1;yy.setClickEvent($1, $2, $3);}\n\n    | click callbackname href               {$$ = $1;yy.setClickEvent($1, $2, null);yy.setLink($1,$3);}\n    | click callbackname callbackargs href  {$$ = $1;yy.setClickEvent($1, $2, $3);yy.setLink($1,$4);}\n\n    | click href callbackname               {$$ = $1;yy.setClickEvent($1, $3, null);yy.setLink($1,$2);}\n    | click href callbackname callbackargs  {$$ = $1;yy.setClickEvent($1, $3, $4);yy.setLink($1,$2);}\n\n    | click href                            {$$ = $1;yy.setLink($1, $2);}\n    ;\n\nclickStatementDebug\n    : click callbackname                    {$$=$1 + ' ' + $2;}\n    | click callbackname href               {$$=$1 + ' ' + $2 + ' ' + $3;}\n\n    | click callbackname callbackargs       {$$=$1 + ' ' + $2 + ' ' + $3;}\n    | click callbackname callbackargs href  {$$=$1 + ' ' + $2 + ' ' + $3 + ' ' + $4;}\n\n    | click href callbackname               {$$=$1 + ' ' + $2 + ' ' + $3;}\n    | click href callbackname callbackargs  {$$=$1 + ' ' + $2 + ' ' + $3 + ' ' + $4;}\n\n    | click href                            {$$=$1 + ' ' + $2;}\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', 'gantt'); }\n  ;\n\n%%\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));","import { sanitizeUrl } from '@braintree/sanitize-url';\nimport dayjs from 'dayjs';\nimport dayjsIsoWeek from 'dayjs/plugin/isoWeek.js';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport dayjsAdvancedFormat from 'dayjs/plugin/advancedFormat.js';\nimport { log } from '../../logger';\nimport * as configApi from '../../config';\nimport utils from '../../utils';\nimport mermaidAPI from '../../mermaidAPI';\n\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../../commonDb';\n\ndayjs.extend(dayjsIsoWeek);\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsAdvancedFormat);\n\nlet dateFormat = '';\nlet axisFormat = '';\nlet tickInterval = undefined;\nlet todayMarker = '';\nlet includes = [];\nlet excludes = [];\nlet links = {};\nlet sections = [];\nlet tasks = [];\nlet currentSection = '';\nconst tags = ['active', 'done', 'crit', 'milestone'];\nlet funs = [];\nlet inclusiveEndDates = false;\nlet topAxis = false;\n\n// The serial order of the task in the script\nlet lastOrder = 0;\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nexport const clear = function () {\n  sections = [];\n  tasks = [];\n  currentSection = '';\n  funs = [];\n  taskCnt = 0;\n  lastTask = undefined;\n  lastTaskID = undefined;\n  rawTasks = [];\n  dateFormat = '';\n  axisFormat = '';\n  tickInterval = undefined;\n  todayMarker = '';\n  includes = [];\n  excludes = [];\n  inclusiveEndDates = false;\n  topAxis = false;\n  lastOrder = 0;\n  links = {};\n  commonClear();\n};\n\nexport const setAxisFormat = function (txt) {\n  axisFormat = txt;\n};\n\nexport const getAxisFormat = function () {\n  return axisFormat;\n};\n\nexport const setTickInterval = function (txt) {\n  tickInterval = txt;\n};\n\nexport const getTickInterval = function () {\n  return tickInterval;\n};\n\nexport const setTodayMarker = function (txt) {\n  todayMarker = txt;\n};\n\nexport const getTodayMarker = function () {\n  return todayMarker;\n};\n\nexport const setDateFormat = function (txt) {\n  dateFormat = txt;\n};\n\nexport const enableInclusiveEndDates = function () {\n  inclusiveEndDates = true;\n};\n\nexport const endDatesAreInclusive = function () {\n  return inclusiveEndDates;\n};\n\nexport const enableTopAxis = function () {\n  topAxis = true;\n};\n\nexport const topAxisEnabled = function () {\n  return topAxis;\n};\n\nexport const getDateFormat = function () {\n  return dateFormat;\n};\n\nexport const setIncludes = function (txt) {\n  includes = txt.toLowerCase().split(/[\\s,]+/);\n};\n\nexport const getIncludes = function () {\n  return includes;\n};\nexport const setExcludes = function (txt) {\n  excludes = txt.toLowerCase().split(/[\\s,]+/);\n};\n\nexport const getExcludes = function () {\n  return excludes;\n};\n\nexport const getLinks = function () {\n  return links;\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 allItemsPricessed = compileTasks();\n  const maxDepth = 10;\n  let iterationCount = 0;\n  while (!allItemsPricessed && iterationCount < maxDepth) {\n    allItemsPricessed = compileTasks();\n    iterationCount++;\n  }\n\n  tasks = rawTasks;\n\n  return tasks;\n};\n\nexport const isInvalidDate = function (date, dateFormat, excludes, includes) {\n  if (includes.includes(date.format(dateFormat.trim()))) {\n    return false;\n  }\n  if (date.isoWeekday() >= 6 && excludes.includes('weekends')) {\n    return true;\n  }\n  if (excludes.includes(date.format('dddd').toLowerCase())) {\n    return true;\n  }\n  return excludes.includes(date.format(dateFormat.trim()));\n};\n\n/**\n * TODO: fully document what this function does and what types it accepts\n *\n * @param {object} task - The task to check.\n * @param {string | Date} task.startTime - Might be a `Date` or a `string`.\n * TODO: is this always a Date?\n * @param {string | Date} task.endTime - Might be a `Date` or a `string`.\n * TODO: is this always a Date?\n * @param {string} dateFormat - Dayjs date format string.\n * @param {*} excludes\n * @param {*} includes\n */\nconst checkTaskDates = function (task, dateFormat, excludes, includes) {\n  if (!excludes.length || task.manualEndTime) {\n    return;\n  }\n  let startTime;\n  if (task.startTime instanceof Date) {\n    startTime = dayjs(task.startTime);\n  } else {\n    startTime = dayjs(task.startTime, dateFormat, true);\n  }\n  startTime = startTime.add(1, 'd');\n\n  let originalEndTime;\n  if (task.endTime instanceof Date) {\n    originalEndTime = dayjs(task.endTime);\n  } else {\n    originalEndTime = dayjs(task.endTime, dateFormat, true);\n  }\n  const [fixedEndTime, renderEndTime] = fixTaskDates(\n    startTime,\n    originalEndTime,\n    dateFormat,\n    excludes,\n    includes\n  );\n  task.endTime = fixedEndTime.toDate();\n  task.renderEndTime = renderEndTime;\n};\n\n/**\n * TODO: what does this function do?\n *\n * @param {dayjs.Dayjs} startTime - The start time.\n * @param {dayjs.Dayjs} endTime - The original end time (will return a different end time if it's invalid).\n * @param {string} dateFormat - Dayjs date format string.\n * @param {*} excludes\n * @param {*} includes\n * @returns {[endTime: dayjs.Dayjs, renderEndTime: Date | null]} The new `endTime`, and the end time to render.\n * `renderEndTime` may be `null` if `startTime` is newer than `endTime`.\n */\nconst fixTaskDates = function (startTime, endTime, dateFormat, excludes, includes) {\n  let invalid = false;\n  let renderEndTime = null;\n  while (startTime <= endTime) {\n    if (!invalid) {\n      renderEndTime = endTime.toDate();\n    }\n    invalid = isInvalidDate(startTime, dateFormat, excludes, includes);\n    if (invalid) {\n      endTime = endTime.add(1, 'd');\n    }\n    startTime = startTime.add(1, 'd');\n  }\n  return [endTime, renderEndTime];\n};\n\nconst getStartDate = function (prevTime, dateFormat, str) {\n  str = str.trim();\n\n  // Test for after\n  const re = /^after\\s+([\\d\\w- ]+)/;\n  const afterStatement = re.exec(str.trim());\n\n  if (afterStatement !== null) {\n    // check all after ids and take the latest\n    let latestEndingTask = null;\n    afterStatement[1].split(' ').forEach(function (id) {\n      let task = findTaskById(id);\n      if (task !== undefined) {\n        if (!latestEndingTask) {\n          latestEndingTask = task;\n        } else {\n          if (task.endTime > latestEndingTask.endTime) {\n            latestEndingTask = task;\n          }\n        }\n      }\n    });\n\n    if (!latestEndingTask) {\n      const dt = new Date();\n      dt.setHours(0, 0, 0, 0);\n      return dt;\n    } else {\n      return latestEndingTask.endTime;\n    }\n  }\n\n  // Check for actual date set\n  let mDate = dayjs(str, dateFormat.trim(), true);\n  if (mDate.isValid()) {\n    return mDate.toDate();\n  } else {\n    log.debug('Invalid date:' + str);\n    log.debug('With date format:' + dateFormat.trim());\n    const d = new Date(str);\n    if (d === undefined || isNaN(d.getTime())) {\n      throw new Error('Invalid date:' + str);\n    }\n    return d;\n  }\n};\n\n/**\n * Parse a string into the args for `dayjs.add()`.\n *\n * The string have to be compound by a value and a shorthand duration unit. For example `5d`\n * represents 5 days.\n *\n * Please be aware that 1 day may be 23 or 25 hours, if the user lives in an area\n * that has daylight savings time (or even 23.5/24.5 hours in Lord Howe Island!)\n *\n * Shorthand unit supported are:\n *\n * - `y` for years\n * - `M` for months\n * - `w` for weeks\n * - `d` for days\n * - `h` for hours\n * - `s` for seconds\n * - `ms` for milliseconds\n *\n * @param {string} str - A string representing the duration.\n * @returns {[value: number, unit: dayjs.ManipulateType]} Arguments to pass to `dayjs.add()`\n */\nconst parseDuration = function (str) {\n  const statement = /^(\\d+(?:\\.\\d+)?)([Mdhmswy]|ms)$/.exec(str.trim());\n  if (statement !== null) {\n    return [Number.parseFloat(statement[1]), statement[2]];\n  }\n  // NaN means an invalid duration\n  return [NaN, 'ms'];\n};\n\nconst getEndDate = function (prevTime, dateFormat, str, inclusive = false) {\n  str = str.trim();\n\n  // Check for actual date\n  let mDate = dayjs(str, dateFormat.trim(), true);\n  if (mDate.isValid()) {\n    if (inclusive) {\n      mDate = mDate.add(1, 'd');\n    }\n    return mDate.toDate();\n  }\n\n  let endTime = dayjs(prevTime);\n  const [durationValue, durationUnit] = parseDuration(str);\n  if (!Number.isNaN(durationValue)) {\n    const newEndTime = endTime.add(durationValue, durationUnit);\n    if (newEndTime.isValid()) {\n      endTime = newEndTime;\n    }\n  }\n  return endTime.toDate();\n};\n\nlet taskCnt = 0;\nconst parseId = function (idStr) {\n  if (idStr === undefined) {\n    taskCnt = taskCnt + 1;\n    return 'task' + taskCnt;\n  }\n  return idStr;\n};\n// id, startDate, endDate\n// id, startDate, length\n// id, after x, endDate\n// id, after x, length\n// startDate, endDate\n// startDate, length\n// after x, endDate\n// after x, length\n// endDate\n// length\n\nconst compileData = function (prevTask, dataStr) {\n  let ds;\n\n  if (dataStr.substr(0, 1) === ':') {\n    ds = dataStr.substr(1, dataStr.length);\n  } else {\n    ds = dataStr;\n  }\n\n  const data = ds.split(',');\n\n  const task = {};\n\n  // Get tags like active, done, crit and milestone\n  getTaskTags(data, task, tags);\n\n  for (let i = 0; i < data.length; i++) {\n    data[i] = data[i].trim();\n  }\n\n  let endTimeData = '';\n  switch (data.length) {\n    case 1:\n      task.id = parseId();\n      task.startTime = prevTask.endTime;\n      endTimeData = data[0];\n      break;\n    case 2:\n      task.id = parseId();\n      task.startTime = getStartDate(undefined, dateFormat, data[0]);\n      endTimeData = data[1];\n      break;\n    case 3:\n      task.id = parseId(data[0]);\n      task.startTime = getStartDate(undefined, dateFormat, data[1]);\n      endTimeData = data[2];\n      break;\n    default:\n  }\n\n  if (endTimeData) {\n    task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);\n    task.manualEndTime = dayjs(endTimeData, 'YYYY-MM-DD', true).isValid();\n    checkTaskDates(task, dateFormat, excludes, includes);\n  }\n\n  return task;\n};\n\nconst parseData = function (prevTaskId, dataStr) {\n  let ds;\n  if (dataStr.substr(0, 1) === ':') {\n    ds = dataStr.substr(1, dataStr.length);\n  } else {\n    ds = dataStr;\n  }\n\n  const data = ds.split(',');\n\n  const task = {};\n\n  // Get tags like active, done, crit and milestone\n  getTaskTags(data, task, tags);\n\n  for (let i = 0; i < data.length; i++) {\n    data[i] = data[i].trim();\n  }\n\n  switch (data.length) {\n    case 1:\n      task.id = parseId();\n      task.startTime = {\n        type: 'prevTaskEnd',\n        id: prevTaskId,\n      };\n      task.endTime = {\n        data: data[0],\n      };\n      break;\n    case 2:\n      task.id = parseId();\n      task.startTime = {\n        type: 'getStartDate',\n        startData: data[0],\n      };\n      task.endTime = {\n        data: data[1],\n      };\n      break;\n    case 3:\n      task.id = parseId(data[0]);\n      task.startTime = {\n        type: 'getStartDate',\n        startData: data[1],\n      };\n      task.endTime = {\n        data: data[2],\n      };\n      break;\n    default:\n  }\n\n  return task;\n};\n\nlet lastTask;\nlet lastTaskID;\nlet rawTasks = [];\nconst taskDb = {};\nexport const addTask = function (descr, data) {\n  const rawTask = {\n    section: currentSection,\n    type: currentSection,\n    processed: false,\n    manualEndTime: false,\n    renderEndTime: null,\n    raw: { data: data },\n    task: descr,\n    classes: [],\n  };\n  const taskInfo = parseData(lastTaskID, data);\n  rawTask.raw.startTime = taskInfo.startTime;\n  rawTask.raw.endTime = taskInfo.endTime;\n  rawTask.id = taskInfo.id;\n  rawTask.prevTaskId = lastTaskID;\n  rawTask.active = taskInfo.active;\n  rawTask.done = taskInfo.done;\n  rawTask.crit = taskInfo.crit;\n  rawTask.milestone = taskInfo.milestone;\n  rawTask.order = lastOrder;\n\n  lastOrder++;\n\n  const pos = rawTasks.push(rawTask);\n\n  lastTaskID = rawTask.id;\n  // Store cross ref\n  taskDb[rawTask.id] = pos - 1;\n};\n\nexport const findTaskById = function (id) {\n  const pos = taskDb[id];\n  return rawTasks[pos];\n};\n\nexport const addTaskOrg = function (descr, data) {\n  const newTask = {\n    section: currentSection,\n    type: currentSection,\n    description: descr,\n    task: descr,\n    classes: [],\n  };\n  const taskInfo = compileData(lastTask, data);\n  newTask.startTime = taskInfo.startTime;\n  newTask.endTime = taskInfo.endTime;\n  newTask.id = taskInfo.id;\n  newTask.active = taskInfo.active;\n  newTask.done = taskInfo.done;\n  newTask.crit = taskInfo.crit;\n  newTask.milestone = taskInfo.milestone;\n  lastTask = newTask;\n  tasks.push(newTask);\n};\n\nconst compileTasks = function () {\n  const compileTask = function (pos) {\n    const task = rawTasks[pos];\n    let startTime = '';\n    switch (rawTasks[pos].raw.startTime.type) {\n      case 'prevTaskEnd': {\n        const prevTask = findTaskById(task.prevTaskId);\n        task.startTime = prevTask.endTime;\n        break;\n      }\n      case 'getStartDate':\n        startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData);\n        if (startTime) {\n          rawTasks[pos].startTime = startTime;\n        }\n        break;\n    }\n\n    if (rawTasks[pos].startTime) {\n      rawTasks[pos].endTime = getEndDate(\n        rawTasks[pos].startTime,\n        dateFormat,\n        rawTasks[pos].raw.endTime.data,\n        inclusiveEndDates\n      );\n      if (rawTasks[pos].endTime) {\n        rawTasks[pos].processed = true;\n        rawTasks[pos].manualEndTime = dayjs(\n          rawTasks[pos].raw.endTime.data,\n          'YYYY-MM-DD',\n          true\n        ).isValid();\n        checkTaskDates(rawTasks[pos], dateFormat, excludes, includes);\n      }\n    }\n\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\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids Comma separated list of ids\n * @param _linkStr URL to create a link for\n */\nexport const setLink = function (ids, _linkStr) {\n  let linkStr = _linkStr;\n  if (configApi.getConfig().securityLevel !== 'loose') {\n    linkStr = sanitizeUrl(_linkStr);\n  }\n  ids.split(',').forEach(function (id) {\n    let rawTask = findTaskById(id);\n    if (rawTask !== undefined) {\n      pushFun(id, () => {\n        window.open(linkStr, '_self');\n      });\n      links[id] = linkStr;\n    }\n  });\n  setClass(ids, 'clickable');\n};\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n  ids.split(',').forEach(function (id) {\n    let rawTask = findTaskById(id);\n    if (rawTask !== undefined) {\n      rawTask.classes.push(className);\n    }\n  });\n};\n\nconst setClickFun = function (id, functionName, functionArgs) {\n  if (configApi.getConfig().securityLevel !== 'loose') {\n    return;\n  }\n  if (functionName === undefined) {\n    return;\n  }\n\n  let argList = [];\n  if (typeof functionArgs === 'string') {\n    /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n    argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n    for (let i = 0; i < argList.length; i++) {\n      let item = argList[i].trim();\n      /* Removes all double quotes at the start and end of an argument */\n      /* This preserves all starting and ending whitespace inside */\n      if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n        item = item.substr(1, item.length - 2);\n      }\n      argList[i] = item;\n    }\n  }\n\n  /* if no arguments passed into callback, default to passing in id */\n  if (argList.length === 0) {\n    argList.push(id);\n  }\n\n  let rawTask = findTaskById(id);\n  if (rawTask !== undefined) {\n    pushFun(id, () => {\n      utils.runFunc(functionName, ...argList);\n    });\n  }\n};\n\n/**\n * The callbackFunction is executed in a click event bound to the task with the specified id or the\n * task's assigned text\n *\n * @param id The task's id\n * @param callbackFunction A function to be executed when clicked on the task or the task's text\n */\nconst pushFun = function (id, callbackFunction) {\n  funs.push(\n    function () {\n      // const elem = d3.select(element).select(`[id=\"${id}\"]`)\n      const elem = document.querySelector(`[id=\"${id}\"]`);\n      if (elem !== null) {\n        elem.addEventListener('click', function () {\n          callbackFunction();\n        });\n      }\n    },\n    function () {\n      // const elem = d3.select(element).select(`[id=\"${id}-text\"]`)\n      const elem = document.querySelector(`[id=\"${id}-text\"]`);\n      if (elem !== null) {\n        elem.addEventListener('click', function () {\n          callbackFunction();\n        });\n      }\n    }\n  );\n};\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n  ids.split(',').forEach(function (id) {\n    setClickFun(id, functionName, functionArgs);\n  });\n  setClass(ids, 'clickable');\n};\n\n/**\n * Binds all functions previously added to fun (specified through click) to the element\n *\n * @param element\n */\nexport const bindFunctions = function (element) {\n  funs.forEach(function (fun) {\n    fun(element);\n  });\n};\n\nexport default {\n  parseDirective,\n  getConfig: () => configApi.getConfig().gantt,\n  clear,\n  setDateFormat,\n  getDateFormat,\n  enableInclusiveEndDates,\n  endDatesAreInclusive,\n  enableTopAxis,\n  topAxisEnabled,\n  setAxisFormat,\n  getAxisFormat,\n  setTickInterval,\n  getTickInterval,\n  setTodayMarker,\n  getTodayMarker,\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  setAccDescription,\n  getAccDescription,\n  addSection,\n  getSections,\n  getTasks,\n  addTask,\n  findTaskById,\n  addTaskOrg,\n  setIncludes,\n  getIncludes,\n  setExcludes,\n  getExcludes,\n  setClickEvent,\n  setLink,\n  getLinks,\n  bindFunctions,\n  parseDuration,\n  isInvalidDate,\n};\n\n/**\n * @param data\n * @param task\n * @param tags\n */\nfunction getTaskTags(data, task, tags) {\n  let matchFound = true;\n  while (matchFound) {\n    matchFound = false;\n    tags.forEach(function (t) {\n      const pattern = '^\\\\s*' + t + '\\\\s*$';\n      const regex = new RegExp(pattern);\n      if (data[0].match(regex)) {\n        task[t] = true;\n        data.shift(1);\n        matchFound = true;\n      }\n    });\n  }\n}\n","import dayjs from 'dayjs';\nimport { log } from '../../logger';\nimport {\n  select,\n  scaleTime,\n  min,\n  max,\n  scaleLinear,\n  interpolateHcl,\n  axisBottom,\n  axisTop,\n  timeFormat,\n  timeMinute,\n  timeHour,\n  timeDay,\n  timeWeek,\n  timeMonth,\n} from 'd3';\nimport common from '../common/common';\nimport { getConfig } from '../../config';\nimport { configureSvgSize } from '../../setupGraphViewbox';\n\nexport const setConf = function () {\n  log.debug('Something is calling, setConf, remove the call');\n};\n\nlet w;\nexport const draw = function (text, id, version, diagObj) {\n  const conf = getConfig().gantt;\n  // diagObj.db.clear();\n  // parser.parse(text);\n\n  const securityLevel = getConfig().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      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  const elem = doc.getElementById(id);\n  w = elem.parentElement.offsetWidth;\n\n  if (w === undefined) {\n    w = 1200;\n  }\n\n  if (conf.useWidth !== undefined) {\n    w = conf.useWidth;\n  }\n\n  const taskArray = diagObj.db.getTasks();\n\n  // Set height based on number of tasks\n  const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding;\n\n  // Set viewBox\n  elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n  const svg = root.select(`[id=\"${id}\"]`);\n\n  // Set timescale\n  const timeScale = scaleTime()\n    .domain([\n      min(taskArray, function (d) {\n        return d.startTime;\n      }),\n      max(taskArray, function (d) {\n        return d.endTime;\n      }),\n    ])\n    .rangeRound([0, w - conf.leftPadding - conf.rightPadding]);\n\n  let categories = [];\n\n  for (const element of taskArray) {\n    categories.push(element.type);\n  }\n\n  const catsUnfiltered = categories; // for vert labels\n\n  categories = checkUnique(categories);\n\n  /**\n   * @param a\n   * @param b\n   */\n  function taskCompare(a, b) {\n    const taskA = a.startTime;\n    const taskB = b.startTime;\n    let result = 0;\n    if (taskA > taskB) {\n      result = 1;\n    } else if (taskA < taskB) {\n      result = -1;\n    }\n    return result;\n  }\n\n  // Sort the task array using the above taskCompare() so that\n  // tasks are created based on their order of startTime\n  taskArray.sort(taskCompare);\n\n  makeGant(taskArray, w, h);\n\n  configureSvgSize(svg, h, w, conf.useMaxWidth);\n\n  svg\n    .append('text')\n    .text(diagObj.db.getDiagramTitle())\n    .attr('x', w / 2)\n    .attr('y', conf.titleTopMargin)\n    .attr('class', 'titleText');\n\n  /**\n   * @param tasks\n   * @param pageWidth\n   * @param pageHeight\n   */\n  function makeGant(tasks, pageWidth, pageHeight) {\n    const barHeight = conf.barHeight;\n    const gap = barHeight + conf.barGap;\n    const topPadding = conf.topPadding;\n    const leftPadding = conf.leftPadding;\n\n    const colorScale = scaleLinear()\n      .domain([0, categories.length])\n      .range(['#00B9FA', '#F95002'])\n      .interpolate(interpolateHcl);\n\n    drawExcludeDays(\n      gap,\n      topPadding,\n      leftPadding,\n      pageWidth,\n      pageHeight,\n      tasks,\n      diagObj.db.getExcludes(),\n      diagObj.db.getIncludes()\n    );\n    makeGrid(leftPadding, topPadding, pageWidth, pageHeight);\n    drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight);\n    vertLabels(gap, topPadding, leftPadding, barHeight, colorScale);\n    drawToday(leftPadding, topPadding, pageWidth, pageHeight);\n  }\n\n  /**\n   * @param theArray\n   * @param theGap\n   * @param theTopPad\n   * @param theSidePad\n   * @param theBarHeight\n   * @param theColorScale\n   * @param w\n   */\n  function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w) {\n    // Draw background rects covering the entire width of the graph, these form the section rows.\n    svg\n      .append('g')\n      .selectAll('rect')\n      .data(theArray)\n      .enter()\n      .append('rect')\n      .attr('x', 0)\n      .attr('y', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n        return i * theGap + theTopPad - 2;\n      })\n      .attr('width', function () {\n        return w - conf.rightPadding / 2;\n      })\n      .attr('height', theGap)\n      .attr('class', function (d) {\n        for (const [i, category] of categories.entries()) {\n          if (d.type === category) {\n            return 'section section' + (i % conf.numberSectionStyles);\n          }\n        }\n        return 'section section0';\n      });\n\n    // Draw the rects representing the tasks\n    const rectangles = svg.append('g').selectAll('rect').data(theArray).enter();\n\n    const links = diagObj.db.getLinks();\n\n    // Render the tasks with links\n    // Render the other tasks\n    rectangles\n      .append('rect')\n      .attr('id', function (d) {\n        return d.id;\n      })\n      .attr('rx', 3)\n      .attr('ry', 3)\n      .attr('x', function (d) {\n        if (d.milestone) {\n          return (\n            timeScale(d.startTime) +\n            theSidePad +\n            0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) -\n            0.5 * theBarHeight\n          );\n        }\n        return timeScale(d.startTime) + theSidePad;\n      })\n      .attr('y', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n        return i * theGap + theTopPad;\n      })\n      .attr('width', function (d) {\n        if (d.milestone) {\n          return theBarHeight;\n        }\n        return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);\n      })\n      .attr('height', theBarHeight)\n      .attr('transform-origin', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n\n        return (\n          (\n            timeScale(d.startTime) +\n            theSidePad +\n            0.5 * (timeScale(d.endTime) - timeScale(d.startTime))\n          ).toString() +\n          'px ' +\n          (i * theGap + theTopPad + 0.5 * theBarHeight).toString() +\n          'px'\n        );\n      })\n      .attr('class', function (d) {\n        const res = 'task';\n\n        let classStr = '';\n        if (d.classes.length > 0) {\n          classStr = d.classes.join(' ');\n        }\n\n        let secNum = 0;\n        for (const [i, category] of categories.entries()) {\n          if (d.type === category) {\n            secNum = i % conf.numberSectionStyles;\n          }\n        }\n\n        let taskClass = '';\n        if (d.active) {\n          if (d.crit) {\n            taskClass += ' activeCrit';\n          } else {\n            taskClass = ' active';\n          }\n        } else if (d.done) {\n          if (d.crit) {\n            taskClass = ' doneCrit';\n          } else {\n            taskClass = ' done';\n          }\n        } else {\n          if (d.crit) {\n            taskClass += ' crit';\n          }\n        }\n\n        if (taskClass.length === 0) {\n          taskClass = ' task';\n        }\n\n        if (d.milestone) {\n          taskClass = ' milestone ' + taskClass;\n        }\n\n        taskClass += secNum;\n\n        taskClass += ' ' + classStr;\n\n        return res + taskClass;\n      });\n\n    // Append task labels\n    rectangles\n      .append('text')\n      .attr('id', function (d) {\n        return d.id + '-text';\n      })\n      .text(function (d) {\n        return d.task;\n      })\n      .attr('font-size', conf.fontSize)\n      .attr('x', function (d) {\n        let startX = timeScale(d.startTime);\n        let endX = timeScale(d.renderEndTime || d.endTime);\n        if (d.milestone) {\n          startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n        }\n        if (d.milestone) {\n          endX = startX + theBarHeight;\n        }\n        const textWidth = this.getBBox().width;\n\n        // Check id text width > width of rectangle\n        if (textWidth > endX - startX) {\n          if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n            return startX + theSidePad - 5;\n          } else {\n            return endX + theSidePad + 5;\n          }\n        } else {\n          return (endX - startX) / 2 + startX + theSidePad;\n        }\n      })\n      .attr('y', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n        return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad;\n      })\n      .attr('text-height', theBarHeight)\n      .attr('class', function (d) {\n        const startX = timeScale(d.startTime);\n        let endX = timeScale(d.endTime);\n        if (d.milestone) {\n          endX = startX + theBarHeight;\n        }\n        const textWidth = this.getBBox().width;\n\n        let classStr = '';\n        if (d.classes.length > 0) {\n          classStr = d.classes.join(' ');\n        }\n\n        let secNum = 0;\n        for (const [i, category] of categories.entries()) {\n          if (d.type === category) {\n            secNum = i % conf.numberSectionStyles;\n          }\n        }\n\n        let taskType = '';\n        if (d.active) {\n          if (d.crit) {\n            taskType = 'activeCritText' + secNum;\n          } else {\n            taskType = 'activeText' + secNum;\n          }\n        }\n\n        if (d.done) {\n          if (d.crit) {\n            taskType = taskType + ' doneCritText' + secNum;\n          } else {\n            taskType = taskType + ' doneText' + secNum;\n          }\n        } else {\n          if (d.crit) {\n            taskType = taskType + ' critText' + secNum;\n          }\n        }\n\n        if (d.milestone) {\n          taskType += ' milestoneText';\n        }\n\n        // Check id text width > width of rectangle\n        if (textWidth > endX - startX) {\n          if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n            return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType;\n          } else {\n            return (\n              classStr +\n              ' taskTextOutsideRight taskTextOutside' +\n              secNum +\n              ' ' +\n              taskType +\n              ' width-' +\n              textWidth\n            );\n          }\n        } else {\n          return classStr + ' taskText taskText' + secNum + ' ' + taskType + ' width-' + textWidth;\n        }\n      });\n\n    const securityLevel = getConfig().securityLevel;\n\n    // Wrap the tasks in an a tag for working links without javascript\n    if (securityLevel === 'sandbox') {\n      let sandboxElement;\n      sandboxElement = select('#i' + id);\n      const doc = sandboxElement.nodes()[0].contentDocument;\n\n      rectangles\n        .filter(function (d) {\n          return links[d.id] !== undefined;\n        })\n        .each(function (o) {\n          var taskRect = doc.querySelector('#' + o.id);\n          var taskText = doc.querySelector('#' + o.id + '-text');\n          const oldParent = taskRect.parentNode;\n          var Link = doc.createElement('a');\n          Link.setAttribute('xlink:href', links[o.id]);\n          Link.setAttribute('target', '_top');\n          oldParent.appendChild(Link);\n          Link.appendChild(taskRect);\n          Link.appendChild(taskText);\n        });\n    }\n  }\n  /**\n   * @param theGap\n   * @param theTopPad\n   * @param theSidePad\n   * @param w\n   * @param h\n   * @param tasks\n   * @param excludes\n   * @param includes\n   */\n  function drawExcludeDays(theGap, theTopPad, theSidePad, w, h, tasks, excludes, includes) {\n    const minTime = tasks.reduce(\n      (min, { startTime }) => (min ? Math.min(min, startTime) : startTime),\n      0\n    );\n    const maxTime = tasks.reduce((max, { endTime }) => (max ? Math.max(max, endTime) : endTime), 0);\n    const dateFormat = diagObj.db.getDateFormat();\n    if (!minTime || !maxTime) {\n      return;\n    }\n\n    const excludeRanges = [];\n    let range = null;\n    let d = dayjs(minTime);\n    while (d.valueOf() <= maxTime) {\n      if (diagObj.db.isInvalidDate(d, dateFormat, excludes, includes)) {\n        if (!range) {\n          range = {\n            start: d,\n            end: d,\n          };\n        } else {\n          range.end = d;\n        }\n      } else {\n        if (range) {\n          excludeRanges.push(range);\n          range = null;\n        }\n      }\n      d = d.add(1, 'd');\n    }\n\n    const rectangles = svg.append('g').selectAll('rect').data(excludeRanges).enter();\n\n    rectangles\n      .append('rect')\n      .attr('id', function (d) {\n        return 'exclude-' + d.start.format('YYYY-MM-DD');\n      })\n      .attr('x', function (d) {\n        return timeScale(d.start) + theSidePad;\n      })\n      .attr('y', conf.gridLineStartPadding)\n      .attr('width', function (d) {\n        const renderEnd = d.end.add(1, 'day');\n        return timeScale(renderEnd) - timeScale(d.start);\n      })\n      .attr('height', h - theTopPad - conf.gridLineStartPadding)\n      .attr('transform-origin', function (d, i) {\n        return (\n          (\n            timeScale(d.start) +\n            theSidePad +\n            0.5 * (timeScale(d.end) - timeScale(d.start))\n          ).toString() +\n          'px ' +\n          (i * theGap + 0.5 * h).toString() +\n          'px'\n        );\n      })\n      .attr('class', 'exclude-range');\n  }\n\n  /**\n   * @param theSidePad\n   * @param theTopPad\n   * @param w\n   * @param h\n   */\n  function makeGrid(theSidePad, theTopPad, w, h) {\n    let bottomXAxis = axisBottom(timeScale)\n      .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n      .tickFormat(timeFormat(diagObj.db.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'));\n\n    const reTickInterval = /^([1-9]\\d*)(minute|hour|day|week|month)$/;\n    const resultTickInterval = reTickInterval.exec(\n      diagObj.db.getTickInterval() || conf.tickInterval\n    );\n\n    if (resultTickInterval !== null) {\n      const every = resultTickInterval[1];\n      const interval = resultTickInterval[2];\n      switch (interval) {\n        case 'minute':\n          bottomXAxis.ticks(timeMinute.every(every));\n          break;\n        case 'hour':\n          bottomXAxis.ticks(timeHour.every(every));\n          break;\n        case 'day':\n          bottomXAxis.ticks(timeDay.every(every));\n          break;\n        case 'week':\n          bottomXAxis.ticks(timeWeek.every(every));\n          break;\n        case 'month':\n          bottomXAxis.ticks(timeMonth.every(every));\n          break;\n      }\n    }\n\n    svg\n      .append('g')\n      .attr('class', 'grid')\n      .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')')\n      .call(bottomXAxis)\n      .selectAll('text')\n      .style('text-anchor', 'middle')\n      .attr('fill', '#000')\n      .attr('stroke', 'none')\n      .attr('font-size', 10)\n      .attr('dy', '1em');\n\n    if (diagObj.db.topAxisEnabled() || conf.topAxis) {\n      let topXAxis = axisTop(timeScale)\n        .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n        .tickFormat(timeFormat(diagObj.db.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'));\n\n      if (resultTickInterval !== null) {\n        const every = resultTickInterval[1];\n        const interval = resultTickInterval[2];\n        switch (interval) {\n          case 'minute':\n            topXAxis.ticks(timeMinute.every(every));\n            break;\n          case 'hour':\n            topXAxis.ticks(timeHour.every(every));\n            break;\n          case 'day':\n            topXAxis.ticks(timeDay.every(every));\n            break;\n          case 'week':\n            topXAxis.ticks(timeWeek.every(every));\n            break;\n          case 'month':\n            topXAxis.ticks(timeMonth.every(every));\n            break;\n        }\n      }\n\n      svg\n        .append('g')\n        .attr('class', 'grid')\n        .attr('transform', 'translate(' + theSidePad + ', ' + theTopPad + ')')\n        .call(topXAxis)\n        .selectAll('text')\n        .style('text-anchor', 'middle')\n        .attr('fill', '#000')\n        .attr('stroke', 'none')\n        .attr('font-size', 10);\n      // .attr('dy', '1em');\n    }\n  }\n\n  /**\n   * @param theGap\n   * @param theTopPad\n   */\n  function vertLabels(theGap, theTopPad) {\n    const numOccurances = [];\n    let prevGap = 0;\n\n    for (const [i, category] of categories.entries()) {\n      numOccurances[i] = [category, getCount(category, catsUnfiltered)];\n    }\n\n    svg\n      .append('g') // without doing this, impossible to put grid lines behind text\n      .selectAll('text')\n      .data(numOccurances)\n      .enter()\n      .append(function (d) {\n        const rows = d[0].split(common.lineBreakRegex);\n        const dy = -(rows.length - 1) / 2;\n\n        const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n        svgLabel.setAttribute('dy', dy + 'em');\n\n        for (const [j, row] of rows.entries()) {\n          const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n          tspan.setAttribute('alignment-baseline', 'central');\n          tspan.setAttribute('x', '10');\n          if (j > 0) {\n            tspan.setAttribute('dy', '1em');\n          }\n          tspan.textContent = row;\n          svgLabel.appendChild(tspan);\n        }\n        return svgLabel;\n      })\n      .attr('x', 10)\n      .attr('y', function (d, i) {\n        if (i > 0) {\n          for (let j = 0; j < i; j++) {\n            prevGap += numOccurances[i - 1][1];\n            return (d[1] * theGap) / 2 + prevGap * theGap + theTopPad;\n          }\n        } else {\n          return (d[1] * theGap) / 2 + theTopPad;\n        }\n      })\n      .attr('font-size', conf.sectionFontSize)\n      .attr('font-size', conf.sectionFontSize)\n      .attr('class', function (d) {\n        for (const [i, category] of categories.entries()) {\n          if (d[0] === category) {\n            return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles);\n          }\n        }\n        return 'sectionTitle';\n      });\n  }\n\n  /**\n   * @param theSidePad\n   * @param theTopPad\n   * @param w\n   * @param h\n   */\n  function drawToday(theSidePad, theTopPad, w, h) {\n    const todayMarker = diagObj.db.getTodayMarker();\n    if (todayMarker === 'off') {\n      return;\n    }\n\n    const todayG = svg.append('g').attr('class', 'today');\n    const today = new Date();\n    const todayLine = todayG.append('line');\n\n    todayLine\n      .attr('x1', timeScale(today) + theSidePad)\n      .attr('x2', timeScale(today) + theSidePad)\n      .attr('y1', conf.titleTopMargin)\n      .attr('y2', h - conf.titleTopMargin)\n      .attr('class', 'today');\n\n    if (todayMarker !== '') {\n      todayLine.attr('style', todayMarker.replace(/,/g, ';'));\n    }\n  }\n\n  /**\n   * From this stack exchange question:\n   * http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript\n   *\n   * @param arr\n   */\n  function checkUnique(arr) {\n    const hash = {};\n    const result = [];\n    for (let i = 0, l = arr.length; i < l; ++i) {\n      if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {\n        // it works with objects! in FF, at least\n        hash[arr[i]] = true;\n        result.push(arr[i]);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * From this stack exchange question:\n   * http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array\n   *\n   * @param arr\n   */\n  function getCounts(arr) {\n    let i = arr.length; // const to loop over\n    const obj = {}; // obj to store results\n    while (i) {\n      obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences\n    }\n    return obj;\n  }\n\n  /**\n   * Get specific from everything\n   *\n   * @param word\n   * @param arr\n   */\n  function getCount(word, arr) {\n    return getCounts(arr)[word] || 0;\n  }\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .mermaid-main-font {\n    font-family: \"trebuchet ms\", verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n  .exclude-range {\n    fill: ${options.excludeBkgColor};\n  }\n\n  .section {\n    stroke: none;\n    opacity: 0.2;\n  }\n\n  .section0 {\n    fill: ${options.sectionBkgColor};\n  }\n\n  .section2 {\n    fill: ${options.sectionBkgColor2};\n  }\n\n  .section1,\n  .section3 {\n    fill: ${options.altSectionBkgColor};\n    opacity: 0.2;\n  }\n\n  .sectionTitle0 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle1 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle2 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle3 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle {\n    text-anchor: start;\n    // font-size: ${options.ganttFontSize};\n    // text-height: 14px;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n\n  }\n\n\n  /* Grid and axis */\n\n  .grid .tick {\n    stroke: ${options.gridColor};\n    opacity: 0.8;\n    shape-rendering: crispEdges;\n    text {\n      font-family: ${options.fontFamily};\n      fill: ${options.textColor};\n    }\n  }\n\n  .grid path {\n    stroke-width: 0;\n  }\n\n\n  /* Today line */\n\n  .today {\n    fill: none;\n    stroke: ${options.todayLineColor};\n    stroke-width: 2px;\n  }\n\n\n  /* Task styling */\n\n  /* Default task */\n\n  .task {\n    stroke-width: 2;\n  }\n\n  .taskText {\n    text-anchor: middle;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n\n  // .taskText:not([font-size]) {\n  //   font-size: ${options.ganttFontSize};\n  // }\n\n  .taskTextOutsideRight {\n    fill: ${options.taskTextDarkColor};\n    text-anchor: start;\n    // font-size: ${options.ganttFontSize};\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n\n  }\n\n  .taskTextOutsideLeft {\n    fill: ${options.taskTextDarkColor};\n    text-anchor: end;\n    // font-size: ${options.ganttFontSize};\n  }\n\n  /* Special case clickable */\n  .task.clickable {\n    cursor: pointer;\n  }\n  .taskText.clickable {\n    cursor: pointer;\n    fill: ${options.taskTextClickableColor} !important;\n    font-weight: bold;\n  }\n\n  .taskTextOutsideLeft.clickable {\n    cursor: pointer;\n    fill: ${options.taskTextClickableColor} !important;\n    font-weight: bold;\n  }\n\n  .taskTextOutsideRight.clickable {\n    cursor: pointer;\n    fill: ${options.taskTextClickableColor} !important;\n    font-weight: bold;\n  }\n\n  /* Specific task settings for the sections*/\n\n  .taskText0,\n  .taskText1,\n  .taskText2,\n  .taskText3 {\n    fill: ${options.taskTextColor};\n  }\n\n  .task0,\n  .task1,\n  .task2,\n  .task3 {\n    fill: ${options.taskBkgColor};\n    stroke: ${options.taskBorderColor};\n  }\n\n  .taskTextOutside0,\n  .taskTextOutside2\n  {\n    fill: ${options.taskTextOutsideColor};\n  }\n\n  .taskTextOutside1,\n  .taskTextOutside3 {\n    fill: ${options.taskTextOutsideColor};\n  }\n\n\n  /* Active task */\n\n  .active0,\n  .active1,\n  .active2,\n  .active3 {\n    fill: ${options.activeTaskBkgColor};\n    stroke: ${options.activeTaskBorderColor};\n  }\n\n  .activeText0,\n  .activeText1,\n  .activeText2,\n  .activeText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n\n  /* Completed task */\n\n  .done0,\n  .done1,\n  .done2,\n  .done3 {\n    stroke: ${options.doneTaskBorderColor};\n    fill: ${options.doneTaskBkgColor};\n    stroke-width: 2;\n  }\n\n  .doneText0,\n  .doneText1,\n  .doneText2,\n  .doneText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n\n  /* Tasks on the critical line */\n\n  .crit0,\n  .crit1,\n  .crit2,\n  .crit3 {\n    stroke: ${options.critBorderColor};\n    fill: ${options.critBkgColor};\n    stroke-width: 2;\n  }\n\n  .activeCrit0,\n  .activeCrit1,\n  .activeCrit2,\n  .activeCrit3 {\n    stroke: ${options.critBorderColor};\n    fill: ${options.activeTaskBkgColor};\n    stroke-width: 2;\n  }\n\n  .doneCrit0,\n  .doneCrit1,\n  .doneCrit2,\n  .doneCrit3 {\n    stroke: ${options.critBorderColor};\n    fill: ${options.doneTaskBkgColor};\n    stroke-width: 2;\n    cursor: pointer;\n    shape-rendering: crispEdges;\n  }\n\n  .milestone {\n    transform: rotate(45deg) scale(0.8,0.8);\n  }\n\n  .milestoneText {\n    font-style: italic;\n  }\n  .doneCritText0,\n  .doneCritText1,\n  .doneCritText2,\n  .doneCritText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n  .activeCritText0,\n  .activeCritText1,\n  .activeCritText2,\n  .activeCritText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n  .titleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor}    ;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n`;\n\nexport default getStyles;\n","// @ts-ignore: TODO Fix ts errors\nimport ganttParser from './parser/gantt';\nimport ganttDb from './ganttDb';\nimport ganttRenderer from './ganttRenderer';\nimport ganttStyles from './styles';\nimport { DiagramDefinition } from '../../diagram-api/types';\n\nexport const diagram: DiagramDefinition = {\n  parser: ganttParser,\n  db: ganttDb,\n  renderer: ganttRenderer,\n  styles: ganttStyles,\n};\n"],"names":["ascending","a","b","descending","bisector","f","compare1","compare2","delta","d","x","zero","left","lo","hi","mid","right","center","i","number","ascendingBisect","bisectRight","bisect","e10","e5","e2","ticks","start","stop","count","reverse","n","step","tickIncrement","r0","r1","power","error","tickStep","step0","step1","max","values","valueof","value","index","min","identity$2","top","bottom","epsilon","translateX","translateY","y","scale","offset","entering","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","format","identity","spacing","range","range0","range1","position","selection","path","tick","tickExit","tickEnter","line","text","p","_","axisTop","axisBottom","radians","degrees","K","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","o","Lab","Hcl","hcl2lab","Rgb","rgbConvert","r","rgb2lrgb","g","xyz2lab","z","lab","l","opacity","define","extend","Color","lab2xyz","lrgb2rgb","hclConvert","h","hcl","c","numberArray","t","isNumberArray","genericArray","nb","na","date$1","object","interpolate","constant","color","rgb","string","date","interpolateRound","hue","end","colorHcl","interpolateHcl","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","width","j","length","formatNumerals","numerals","re","formatSpecifier","specifier","match","FormatSpecifier","formatTrim","s","out","i0","i1","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$1","map","prefixes","formatLocale$1","locale","group","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","fill","align","sign","symbol","comma","precision","trim","type","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","e","defaultLocale","definition","formatLocale","precisionFixed","precisionPrefix","precisionRound","constants","unit","normalize","clamper","bimap","domain","d0","d1","polymap","copy","source","target","transformer","interpolateValue","untransform","unknown","clamp","piecewise","output","input","rescale","interpolateNumber","u","continuous","linearish","prestep","maxIter","linear","initRange","nice","interval","x0","x1","newInterval","floori","offseti","field","previous","test","millisecond","millisecond$1","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","utcSecond","minute","timeMinute","hour","timeHour","day","timeDay","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month","timeMonth","year","timeYear","utcMinute","utcMinute$1","utcHour","utcHour$1","utcDay","utcDay$1","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","utcMonth$1","utcYear","utcYear$1","ticker","week","tickIntervals","tickInterval","utcWeek","timeTicks","timeTickInterval","localDate","utcDate","newDate","m","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","pad","pads","newParse","Z","parseSpecifier","timeMonday","parse","numberRe","percentRe","requoteRe","requote","names","name","timeSunday","dISO","timeThursday","dow","UTCdISO","timeFormat","calendar","invert","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","time","timeWeek","timeSecond","parser","v","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer","sharedState","yyloc","ranges","lex","token","state","action","yyval","len","newState","expected","errStr","ch","lines","oldLines","past","next","pre","indexed_rule","backup","tempMatch","rules","condition","yy_","$avoiding_name_collisions","YY_START","Parser","module","this","M","Y","D","dayjs","dayjsIsoWeek","dayjsCustomParseFormat","dayjsAdvancedFormat","dateFormat","axisFormat","todayMarker","includes","excludes","links","sections","tasks","currentSection","tags","funs","inclusiveEndDates","topAxis","lastOrder","parseDirective","statement","mermaidAPI","clear","taskCnt","lastTask","lastTaskID","rawTasks","commonClear","setAxisFormat","txt","getAxisFormat","setTickInterval","getTickInterval","setTodayMarker","getTodayMarker","setDateFormat","enableInclusiveEndDates","endDatesAreInclusive","enableTopAxis","topAxisEnabled","getDateFormat","setIncludes","getIncludes","setExcludes","getExcludes","getLinks","addSection","getSections","getTasks","allItemsPricessed","compileTasks","maxDepth","iterationCount","isInvalidDate","checkTaskDates","task","startTime","originalEndTime","fixedEndTime","renderEndTime","fixTaskDates","endTime","invalid","getStartDate","prevTime","afterStatement","latestEndingTask","id","findTaskById","dt","mDate","log","parseDuration","getEndDate","inclusive","durationValue","durationUnit","newEndTime","parseId","idStr","compileData","prevTask","dataStr","ds","data","getTaskTags","endTimeData","parseData","prevTaskId","taskDb","addTask","descr","rawTask","taskInfo","pos","addTaskOrg","newTask","compileTask","allProcessed","setLink","ids","_linkStr","linkStr","configApi.getConfig","sanitizeUrl","pushFun","setClass","className","setClickFun","functionName","functionArgs","argList","item","utils","callbackFunction","elem","setClickEvent","bindFunctions","element","fun","ganttDb","setAccTitle","getAccTitle","setDiagramTitle","getDiagramTitle","setAccDescription","getAccDescription","matchFound","pattern","regex","setConf","w","draw","version","diagObj","conf","getConfig","securityLevel","sandboxElement","select","root","doc","taskArray","svg","timeScale","scaleTime","categories","catsUnfiltered","checkUnique","taskCompare","taskA","taskB","result","makeGant","configureSvgSize","pageWidth","pageHeight","barHeight","gap","topPadding","leftPadding","colorScale","scaleLinear","drawExcludeDays","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","category","rectangles","res","classStr","secNum","taskClass","startX","endX","textWidth","taskType","taskRect","taskText","oldParent","Link","minTime","maxTime","excludeRanges","renderEnd","bottomXAxis","resultTickInterval","every","topXAxis","numOccurances","prevGap","getCount","rows","common","dy","svgLabel","row","tspan","todayG","today","todayLine","arr","getCounts","obj","word","ganttRenderer","getStyles","options","ganttStyles","diagram","ganttParser"],"mappings":"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"}