{"version":3,"sources":["jsdelivr-header.js","/npm/range-slider-d3@1.0.8/index.js"],"names":[],"mappings":"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","file":"/npm/range-slider-d3@1.0.8/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/range-slider-d3@1.0.8/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","d3 = window.d3||require('d3');\n\nclass RangeSlider {\n  constructor() {\n    const attrs = {\n      id: \"ID\" + Math.floor(Math.random() * 1000000),\n      container: null,\n      svgWidth: 400,\n      svgHeight: 400,\n      marginTop: 10,\n      marginBottom: 0,\n      marginRight: 0,\n      marginLeft: 40,\n      container: \"body\",\n      defaultTextFill: \"#2C3E50\",\n      defaultFont: \"Helvetica\",\n      data: null,\n      accessor: null,\n      aggregator: null,\n      onBrush: (d) => d,\n      yScale: d3.scaleLinear(),\n      yTicks: 4,\n      freezeMin: false,\n      startSelection: 100,\n      svg:null,\n      hideXAxis: false\n    };\n\n\n    this.getChartState = () => attrs;\n\n    Object.keys(attrs).forEach((key) => {\n      //@ts-ignore\n      this[key] = function (_) {\n        var string = `attrs['${key}'] = _`;\n        if (!arguments.length) {\n          return eval(`attrs['${key}'];`);\n        }\n        eval(string);\n        return this;\n      };\n    });\n\n    this.initializeEnterExitUpdatePattern();\n  }\n\n  // Fancy version of d3 join\n  initializeEnterExitUpdatePattern() {\n    d3.selection.prototype.patternify = function (params) {\n      var container = this;\n      var selector = params.selector;\n      var elementTag = params.tag;\n      var data = params.data || [selector];\n\n      // Pattern in action\n      var selection = container.selectAll(\".\" + selector).data(data, (d, i) => {\n        if (typeof d === \"object\") {\n          if (d.id) {\n            return d.id;\n          }\n        }\n        return i;\n      });\n      selection.exit().remove();\n      selection = selection.enter().append(elementTag).merge(selection);\n      selection.attr(\"class\", selector);\n      return selection;\n    };\n  }\n\n  drawChartTemplate() {\n    const attrs = this.getChartState();\n    const calc = attrs.calc;\n\n    //Drawing containers\n    var container = d3.select(attrs.container);\n    var containerRect = container.node().getBoundingClientRect();\n    if (containerRect.width > 0) attrs.svgWidth = containerRect.width;\n\n    //Add svg\n    var svg = container\n      .patternify({\n        tag: \"svg\",\n        selector: \"svg-chart-container\",\n      })\n      .style(\"overflow\", \"visible\")\n      .attr(\"width\", attrs.svgWidth)\n      .attr(\"height\", attrs.svgHeight)\n      .attr(\"font-family\", attrs.defaultFont);\n\n    //Add container g element\n    var chart = svg\n      .patternify({\n        tag: \"g\",\n        selector: \"chart\",\n      })\n      .attr(\n        \"transform\",\n        \"translate(\" + calc.chartLeftMargin + \",\" + calc.chartTopMargin + \")\"\n      );\n\n    // Share chart\n    attrs.chart = chart;\n    attrs.svg = svg;\n  }\n\n  drawBrushHandles() {\n    const attrs = this.getChartState();\n    const brush = attrs.brush;\n    const calc = attrs.calc;\n\n    const handlerWidth = 2,\n      handlerFill = \"#3F434D\",\n      middleHandlerWidth = 10,\n      middleHandlerStroke = \"#D4D7DF\",\n      middleHandlerFill = \"#486878\";\n\n    var handle = brush\n      .patternify({\n        tag: \"g\",\n        selector: \"custom-handle\",\n        data: [\n          {\n            left: true,\n          },\n          {\n            left: false,\n          },\n        ],\n      })\n      .attr(\"cursor\", \"ew-resize\")\n      .attr(\"pointer-events\", \"all\")\n\n\n    handle\n      .patternify({\n        tag: \"rect\",\n        selector: \"custom-handle-rect\",\n        data: (d) => [d],\n      })\n      .attr(\"width\", handlerWidth)\n      .attr(\"height\", calc.chartHeight)\n      .attr(\"fill\", handlerFill)\n      .attr(\"stroke\", handlerFill)\n      .attr(\"y\", -calc.chartHeight / 2)\n      .attr(\"pointer-events\", \"none\");\n\n    handle\n      .patternify({\n        tag: \"rect\",\n        selector: \"custom-handle-rect-middle\",\n        data: (d) => [d],\n      })\n      .attr(\"width\", middleHandlerWidth)\n      .attr(\"height\", 30)\n      .attr(\"fill\", middleHandlerFill)\n      .attr(\"stroke\", middleHandlerStroke)\n      .attr(\"y\", -16)\n      .attr(\"x\", -middleHandlerWidth / 4)\n      .attr(\"pointer-events\", \"none\")\n      .attr(\"rx\", 3);\n\n    handle\n      .patternify({\n        tag: \"rect\",\n        selector: \"custom-handle-rect-line-left\",\n        data: (d) => [d],\n      })\n      .attr(\"width\", 0.7)\n      .attr(\"height\", 20)\n      .attr(\"fill\", middleHandlerStroke)\n      .attr(\"stroke\", middleHandlerStroke)\n      .attr(\"y\", -100 / 6 + 5)\n      .attr(\"x\", -middleHandlerWidth / 4 + 3)\n      .attr(\"pointer-events\", \"none\");\n\n    handle\n      .patternify({\n        tag: \"rect\",\n        selector: \"custom-handle-rect-line-right\",\n        data: (d) => [d],\n      })\n      .attr(\"width\", 0.7)\n      .attr(\"height\", 20)\n      .attr(\"fill\", middleHandlerStroke)\n      .attr(\"stroke\", middleHandlerStroke)\n      .attr(\"y\", -100 / 6 + 5)\n      .attr(\"x\", -middleHandlerWidth / 4 + middleHandlerWidth - 3)\n      .attr(\"pointer-events\", \"none\");\n\n    handle.attr(\"display\", \"none\");\n\n    // Share props\n    attrs.handle = handle\n  }\n\n  createScales() {\n    const attrs = this.getChartState();\n    const dataFinal = attrs.dataFinal;\n    const accessorFunc = attrs.accessorFunc;\n    const isDate = attrs.isDate;\n    const dateScale = attrs.dateScale;\n    const calc = attrs.calc;\n\n    const groupedInitial = this.group(dataFinal)\n      .by((d, i) => {\n        const field = accessorFunc(d);\n        if (isDate) {\n          return Math.round(dateScale(field));\n        }\n        return field;\n      })\n      .orderBy((d) => d.key)\n      .run();\n\n    const grouped = groupedInitial.map((d) =>\n      Object.assign(d, { value: typeof attrs.aggregator == \"function\" ? attrs.aggregator(d) : d.values.length })\n    );\n\n    const values = grouped.map((d) => d.value);\n    const max = d3.max(values);\n    const maxX = grouped[grouped.length - 1].key;\n    const minX = grouped[0].key;\n\n    var minDiff = d3.min(grouped, (d, i, arr) => {\n      if (!i) return Infinity;\n      return d.key - arr[i - 1].key;\n    });\n\n    let eachBarWidth = calc.chartWidth / minDiff / (maxX - minX);\n    if (eachBarWidth > 20) { eachBarWidth = 20; }\n    if (minDiff < 1) { eachBarWidth = eachBarWidth * minDiff; }\n    if (eachBarWidth < 1) { eachBarWidth = 1; }\n\n    const scale = attrs.yScale\n      .domain([calc.minY, max])\n      .range([0, calc.chartHeight - 25]);\n    const scaleY = scale\n      .copy()\n      .domain([max, calc.minY])\n      .range([0, calc.chartHeight - 25]);\n\n    const scaleX = d3\n      .scaleLinear()\n      .domain([minX, maxX])\n      .range([0, calc.chartWidth]);\n\n    attrs.scale = scale;\n    attrs.scaleX = scaleX;\n    attrs.scaleY = scaleY;\n    attrs.max = max;\n    attrs.minX = minX;\n    attrs.maxX = maxX;\n    attrs.grouped = grouped;\n    attrs.eachBarWidth = eachBarWidth;\n    attrs.scale = scale;\n  }\n\n  render() {\n    const that = this;\n    const attrs = this.getChartState();\n\n    //Calculated properties\n    var calc = {\n      id: null,\n      chartTopMargin: null,\n      chartLeftMargin: null,\n      chartWidth: null,\n      chartHeight: null,\n    };\n    calc.id = \"ID\" + Math.floor(Math.random() * 1000000); // id for event handlings\n    calc.chartLeftMargin = attrs.marginLeft;\n    calc.chartTopMargin = attrs.marginTop;\n    calc.chartWidth = attrs.svgWidth - attrs.marginRight - calc.chartLeftMargin;\n    calc.chartHeight = attrs.svgHeight - attrs.marginBottom - calc.chartTopMargin;\n    calc.minY = attrs.yScale ? 0.0001 : 0;\n    attrs.calc = calc;\n\n    var accessorFunc = (d) => d;\n    if (attrs.data[0].value != null) {\n      accessorFunc = (d) => d.value;\n    }\n    if (attrs.accessor && typeof attrs.accessor == \"function\") {\n      accessorFunc = attrs.accessor;\n    }\n    const dataFinal = attrs.data;\n    attrs.accessorFunc = accessorFunc;\n    const isDate = Object.prototype.toString.call(accessorFunc(dataFinal[0])) === \"[object Date]\";\n    attrs.isDate = isDate;\n\n\n    var dateExtent,\n      dateScale,\n      scaleTime,\n      dateRangesCount,\n      dateRanges,\n      scaleTime;\n    if (isDate) {\n      dateExtent = d3.extent(dataFinal.map(accessorFunc));\n      dateRangesCount = Math.round(calc.chartWidth / 5);\n      dateScale = d3.scaleTime().domain(dateExtent).range([0, dateRangesCount]);\n      scaleTime = d3.scaleTime().domain(dateExtent).range([0, calc.chartWidth]);\n      dateRanges = d3\n        .range(dateRangesCount)\n        .map((d) => [dateScale.invert(d), dateScale.invert(d + 1)]);\n    }\n    \n    attrs.dateScale = dateScale;\n    attrs.dataFinal = dataFinal;\n    attrs.scaleTime = scaleTime;\n\n    this.drawChartTemplate();\n    var chart = attrs.chart;\n    var svg = attrs.svg;\n\n    this.createScales();\n    const scaleX = attrs.scaleX;\n    const scaleY = attrs.scaleY;\n    const max = attrs.max;\n    const grouped = attrs.grouped;\n    const eachBarWidth = attrs.eachBarWidth;\n    const scale = attrs.scale;\n\n    var axis = d3.axisBottom(scaleX);\n    if (isDate) {\n      axis = d3.axisBottom(scaleTime);\n    }\n\n    if(attrs.hideXAxis){\n      axis = axis.tickValues([]);\n    }\n\n    const axisY = d3\n      .axisLeft(scaleY)\n      .tickSize(-calc.chartWidth - 20)\n      .ticks(max == 1 ? 1 : attrs.yTicks)\n      .tickFormat(d3.format(\".2s\"));\n\n    const bars = chart\n      .patternify({ tag: \"rect\", selector: \"bar\", data: grouped })\n      .attr(\"class\", \"bar\")\n      .attr(\"pointer-events\", \"none\")\n      .attr(\"width\", eachBarWidth)\n      .attr(\"height\", (d) => scale(d.value))\n      .attr(\"fill\", \"#424853\")\n      .attr(\"y\", (d) => -scale(d.value) + (calc.chartHeight - 25))\n      .attr(\"x\", (d, i) => scaleX(d.key) - eachBarWidth / 2)\n      .attr(\"opacity\", 0.9);\n\n    const xAxisWrapper = chart\n      .patternify({ tag: \"g\", selector: \"x-axis\" })\n      .attr(\"transform\", `translate(${0},${calc.chartHeight - 25})`)\n      .call(axis);\n\n    const yAxisWrapper = chart\n      .patternify({ tag: \"g\", selector: \"y-axis\" })\n      .attr(\"transform\", `translate(${-10},${0})`)\n      .call(axisY);\n\n    const brush = chart.patternify({ tag: \"g\", selector: \"brush\" }).call(\n      d3\n        .brushX()\n        .extent([\n          [0, 0],\n          [calc.chartWidth, calc.chartHeight],\n        ])\n        .on(\"start\", brushStarted)\n        .on(\"end\", brushEnded)\n        .on(\"brush\", brushed)\n    );\n\n    attrs.brush = brush;\n    this.drawBrushHandles();\n    const handle = attrs.handle;\n\n    chart\n      .selectAll(\".selection\")\n      .attr(\"fill-opacity\", 0.1)\n      .attr(\"fill\", \"white\")\n      .attr(\"stroke-opacity\", 0.4);\n\n\n\n    function brushStarted(event) {\n      if (event.selection) {\n        attrs.startSelection = event.selection[0];\n      }\n    }\n\n    function brushEnded(event) {\n      const attrs = that.getChartState();\n      var minX = attrs.minX;\n      var maxX = attrs.maxX;\n\n      if (!event.selection) {\n        handle.attr(\"display\", \"none\");\n\n        output({\n          range: [minX, maxX],\n        });\n        return;\n      }\n      if (event.sourceEvent.type === \"brush\") return;\n\n      var d0 = event.selection.map(scaleX.invert),\n        d1 = d0.map(d3.timeDay.round);\n\n      if (d1[0] >= d1[1]) {\n        d1[0] = d3.timeDay.floor(d0[0]);\n        d1[1] = d3.timeDay.offset(d1[0]);\n      }\n    }\n\n    function brushed(event) {\n      if (event.sourceEvent.type === \"brush\") return;\n      if (attrs.freezeMin) {\n        if (event.selection[0] < attrs.startSelection) {\n          event.selection[1] = Math.min(\n            event.selection[0],\n            event.selection[1]\n          );\n        }\n        if (event.selection[0] >= attrs.startSelection) {\n          event.selection[1] = Math.max(\n            event.selection[0],\n            event.selection[1]\n          );\n        }\n\n        event.selection[0] = 0;\n        d3.select(this).call(event.target.move, event.selection);\n      }\n\n      var d0 = event.selection.map(scaleX.invert);\n      const s = event.selection;\n\n      handle.attr(\"display\", null).attr(\"transform\", function (d, i) {\n        return \"translate(\" + (s[i] - 2) + \",\" + (calc.chartHeight / 2 - 25) + \")\";\n      });\n      output({\n        range: d0,\n      });\n    }\n\n    yAxisWrapper.selectAll(\".domain\").remove();\n    xAxisWrapper.selectAll(\".domain\").attr(\"opacity\", 0.1);\n    xAxisWrapper.selectAll(\"text\").attr(\"fill\", \"#9CA1AE\");\n    yAxisWrapper.selectAll(\"text\").attr(\"fill\", \"#9CA1AE\");\n    svg.selectAll('.selection').attr('transform', 'translate(0,-25)')\n\n    chart\n      .selectAll(\".tick line\")\n      .attr(\"opacity\", 0.1)\n      .attr(\"stroke-dasharray\", \"2 2\");\n\n    function output(value) {\n      const result = value;\n      result.data = getData(result.range);\n      if (isDate) {\n        result.range = value.range.map((d) => dateScale.invert(d));\n      }\n      attrs.onBrush(result);\n    }\n\n    function getData(range) {\n      const dataBars = bars\n        .attr(\"fill\", \"#535966\")\n        .filter((d) => {\n          return d.key >= range[0] && d.key <= range[1];\n        })\n        .attr(\"fill\", \"#72A3B7\")\n        .nodes()\n        .map((d) => d.__data__)\n        .map((d) => d.values)\n        .reduce((a, b) => a.concat(b), []);\n\n      return dataBars;\n    }\n\n    return this;\n  }\n\n  updateData(data) {\n    const attrs = this.getChartState();\n    return this;\n  }\n\n  // Advanced group by func\n  group(arr) {\n    const that = this;\n    const operations = [];\n    const initialData = arr;\n    const resultObj = {};\n    let resultArr;\n    let sort = function (a, b) {\n      return a.values.length < b.values.length ? 1 : -1;\n    };\n\n    // Group by \n    this.group.by = function (groupFuncs) {\n      const length = arguments.length;\n      for (let j = 0; j < initialData.length; j++) {\n        const dataObj = initialData[j];\n        const keys = [];\n        for (let i = 0; i < length; i++) {\n          const key = arguments[i];\n          keys.push(key(dataObj, j));\n        }\n        const strKey = JSON.stringify(keys);\n        if (!resultObj[strKey]) {\n          resultObj[strKey] = [];\n        }\n        resultObj[strKey].push(dataObj);\n      }\n      operations.push(\"by\");\n      return that.group;\n    };\n\n    // Order by func\n    this.group.orderBy = function (func) {\n      sort = function (a, b) {\n        var a = func(a);\n        var b = func(b);\n        if (typeof a === \"string\" || a instanceof String) {\n          return a.localeCompare(b);\n        }\n        return a - b;\n      };\n      operations.push(\"orderBy\");\n      return that.group;\n    };\n\n    // Order by descending func\n    this.group.orderByDescending = function (func) {\n      sort = function (a, b) {\n        var a = func(a);\n        var b = func(b);\n        if (typeof a === \"string\" || a instanceof String) {\n          return a.localeCompare(b);\n        }\n        return b - a;\n      };\n      operations.push(\"orderByDescending\");\n      return that.group;\n    };\n\n    // Custom sort\n    this.group.sort = function (v) {\n      sort = v;\n      operations.push(\"sort\");\n      return that.group;\n    };\n\n    // Run result\n    this.group.run = function () {\n      resultArr = Object.keys(resultObj).map((k) => {\n        const result = {};\n        const keys = JSON.parse(k);\n        if (keys.length == 1) {\n          result.key = keys[0];\n        } else {\n          result.keys = keys;\n        }\n        result.values = resultObj[k];\n        return result;\n      });\n\n      if (sort) {\n        resultArr.sort(sort);\n      }\n      return resultArr;\n    };\n\n    return this.group;\n  };\n}\n\nfunction rangeSlider() {\n  return new RangeSlider();\n}\nrangeSlider.RangeSlider = RangeSlider;\n// Allows for { fastify }\nrangeSlider.rangeSlider = rangeSlider;\n// Allows for strict ES Module support\nrangeSlider.default = rangeSlider;\n// Sets the default export\nmodule.exports = rangeSlider;\n"]}