{"version":3,"sources":["jsdelivr-header.js","/npm/chartjs-plugin-funnel-labels@1.0.4/chartjs-plugin-funnel-labels.js"],"names":[],"mappings":"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","file":"/npm/chartjs-plugin-funnel-labels@1.0.4/chartjs-plugin-funnel-labels.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/chartjs-plugin-funnel-labels@1.0.4/chartjs-plugin-funnel-labels.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","Chart.plugins.register({\n\n\tlabel_options: {\n\t\tenabled: false,\n\t\tfont_style: \"normal\",\n\t\tfont_family: \"Arial\",\n\t\tfont_color: \"white\",\n\t\tbackground_color: \"#FFBA4B\",\n\t\trectangle_width_scale_factor: 5,\n\t\tshow_zeros: true,\n\t\tdecimals: 1,\n\t\tmin_width_upper_label: 150,\n\t\tallow_upper_label: true,\n\t\tforce_upper_label: false,\n\t\tborder_color: \"#FFBA4B\",\n\t\tborder_colors: [],\n\t\tsub_text: null,\n\t\tsub_text_style: \"normal\",\n\t\ttext_align: \"center\",\n\t\tlabel_centered: true\n\t},\n\n\tdraw_left_label: function(chart, text, x_previous, x_current, y_current, labelIndex) {\n\t\tvar ctx = chart.ctx;\n\t\tvar available_width = x_current - x_previous;\n\n\t\tvar rectangle_width = available_width / this.get_option(chart, \"rectangle_width_scale_factor\");\n\t\tvar triangle_width = rectangle_width / 3;\n\n\t\tvar font_size = rectangle_width / 3;\n\t\tvar padding_x = text.length * 3;\n\t\tvar padding_y = rectangle_width / 4;\n\n\t\tctx.font = Chart.helpers.fontString(font_size, this.get_option(chart, \"font_style\"), this.get_option(chart, \"font_family\"));\n\t\tctx.textBaseline = \"top\";\n\t\tctx.textAlign = this.get_option(chart, \"text_align\");\n\n\t\tvar common_height = font_size + padding_y * 2;\n\t\tvar x_rectangle = x_previous + (available_width / 2) - ((rectangle_width + triangle_width) / 2);\n\t\tvar y_rectangle = y_current - common_height / 2;\n\n\t\t// Min y position\n\t\tif (y_rectangle + common_height >= chart.chart.chartArea.bottom) {\n\t\t\ty_rectangle = chart.chart.chartArea.bottom - common_height - 5;\n\t\t}\n\n\t\t// Arrow (triangle)\n\t\tvar x_triangle = x_rectangle + padding_x / 2 + rectangle_width - 1;\n\t\tvar y_triangle = y_rectangle;\n\n\t\tctx.save();\n\n\t\t// draw the box\n\t\tctx.fillStyle = this.get_option(chart, \"background_color\");\n\t\tctx.fillRect(x_rectangle - padding_x / 2,\n\t\t\t\t\ty_rectangle,\n\t\t\t\t\trectangle_width + padding_x,\n\t\t\t\t\tcommon_height);\n\n\t\t// determine border color - ALLOWS GRADIENT!\n\t\tvar borderColors = this.get_option(chart, \"border_colors\");\n\t\tif(borderColors.length > 1 && borderColors[labelIndex]) {\n\t\t\t// render gradient\n\t\t\tvar borderGradient = ctx.createLinearGradient(x_rectangle, 0, x_rectangle + rectangle_width + triangle_width, 0);\n\t\t\tborderGradient.addColorStop(\"0\", borderColors[labelIndex - 1]);\n\t\t\tborderGradient.addColorStop(\"1\", borderColors[labelIndex]);\n\t\t\tctx.strokeStyle = borderGradient;\n\t\t} else if(borderColors.length === 1) {\n\t\t\tctx.strokeStyle = borderColors[0];\n\t\t} else {\n\t\t\t// render borderColor\n\t\t\tctx.strokeStyle = this.get_option(chart, \"border_color\");\n\t\t}\n\t\tctx.strokeRect(x_rectangle - padding_x / 2,\n\t\t\t\t\t\ty_rectangle,\n\t\t\t\t\t\trectangle_width + padding_x,\n\t\t\t\t\t\tcommon_height);\n\n\t\t//draw the triangle\n\t\tctx.beginPath();\n\t\tctx.lineWidth = 2;\n\t\tctx.moveTo(x_triangle, y_triangle);\n\t\tctx.lineTo(x_triangle + triangle_width, y_triangle + common_height / 2);\n\t\tctx.lineTo(x_triangle, y_triangle + common_height);\n\t\tctx.stroke();\n\t\tctx.fill();\n\n\t\t// draw the text\n\t\tctx.fillStyle = this.get_option(chart, \"font_color\");\n\t\t// Calculate position of texts\n\t\tvar subText = this.get_option(chart, \"sub_text\");\n\n\t\tvar textXPosition;\n\t\tswitch(this.get_option(chart, \"text_align\")) {\n\t\t\tcase \"center\":\n\t\t\t\ttextXPosition = x_rectangle + rectangle_width / 2;\n\t\t\t\tbreak;\n\t\t\tcase \"right\" :\n\t\t\t\ttextXPosition = x_rectangle - rectangle_width / 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\ttextXPosition = x_rectangle;\n\t\t\t\tbreak;\n\t\t}\n\t\tif(subText) {\n\t\t\tvar subTextSize = rectangle_width / 5;\n\t\t\tctx.fillText(text, textXPosition, y_rectangle + common_height / 2 - font_size / 2 - subTextSize / 2);\n\t\t\tctx.font = Chart.helpers.fontString(subTextSize, this.get_option(chart, \"sub_text_style\"), this.get_option(chart, \"font_family\"));\n\t\t\tctx.fillText(subText, textXPosition, y_rectangle + common_height / 2 + subTextSize / 3);\n\t\t} else {\n\t\t\tctx.fillText(text, textXPosition, y_rectangle + common_height / 2 - font_size / 2);\n\t\t}\n\n\t\tctx.restore();\n\n\t},\n\n\tdraw_upper_label: function(chart, width_current, text, tooltip_position) {\n\t\tvar ctx = chart.ctx;\n\n\t\tvar rectangle_width = width_current / 2;\n\t\tvar font_size = rectangle_width / 3;\n\t\tvar padding_x = text.length * 3;\n\t\tvar padding_y = rectangle_width / 5;\n\n\t\tctx.font = Chart.helpers.fontString(font_size, this.get_option(chart, \"font_style\"), this.get_option(chart, \"font_family\"));\n\t\tctx.textBaseline = \"top\";\n\t\tctx.textAlign = \"center\";\n\n\t\tvar common_height = font_size + padding_y * 2;\n\t\tvar margin_bottom = common_height / 4;\n\n\t\tctx.save();\n\n\t\t// draw the box\n\t\tctx.fillStyle = this.get_option(chart, \"background_color\");\n\t\tctx.fillRect(tooltip_position.x - rectangle_width / 2 - padding_x / 2,\n\t\t\t\t\ttooltip_position.y - common_height - margin_bottom,\n\t\t\t\t\trectangle_width + padding_x,\n\t\t\t\t\tcommon_height);\n\n\t\t// draw the text\n\t\tctx.fillStyle = this.get_option(chart, \"font_color\");\n\t\tctx.fillText(text, tooltip_position.x, tooltip_position.y - font_size - padding_y - margin_bottom);\n\n\t\tctx.restore();\n\n\t},\n\n\tcalculate_single_label: function(chart, text, element_current, element_previous, labelIndex) {\n\n\t\tvar x_previous = element_previous.getCenterPoint().x + element_previous._view.width/2;\n\t\tvar x_current = element_current.getCenterPoint().x - element_current._view.width/2;\n\n\t\tif (x_current - x_previous > this.get_option(chart, \"min_width_upper_label\") && !this.get_option(chart, \"force_upper_label\")) {\n      var y_label_position = this.get_option(chart, \"label_centered\") ? element_current.getCenterPoint().y : element_current.getCenterPoint().y - element_current.height() / 2;\n\t\t\tthis.draw_left_label(chart, text, x_previous, x_current, y_label_position, labelIndex);\n\t\t} else if (this.get_option(chart, \"force_upper_label\") || this.get_option(chart, \"allow_upper_label\")) {\n\t\t\tthis.draw_upper_label(chart, element_current._view.width, text, element_current.tooltipPosition());\n\t\t}\n\n\t},\n\n\tcalculate_labels: function(chart) {\n\n\t\tvar that = this;\n\n\t\tif (chart.data.datasets.length > 0) {\n\t\t\tvar meta = chart.getDatasetMeta(0);\n\n\t\t\tif (!meta.hidden && chart.data.datasets.length == 1) {\n\n\t\t\t\tvar decimals = 1;\n\t\t\t\tvar tmp = this.get_option(chart, \"decimals\");\n\t\t\t\tif (tmp > 0) {\n\t\t\t\t\twhile (tmp > 0) {\n\t\t\t\t\t\tdecimals *= 10;\n\t\t\t\t\t\t--tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar element_previous;\n\t\t\t\tmeta.data.forEach(function(element, index) {\n\n\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\tvar previous_value = chart.data.datasets[0].data[index - 1];\n\n\t\t\t\t\t\tif (previous_value != 0) {\n\t\t\t\t\t\t\tvar value = Math.round( (chart.data.datasets[0].data[index] * 100 / previous_value) * decimals ) / decimals;\n\t\t\t\t\t\t\tif (value > 0 || that.get_option(chart, \"show_zeros\")) {\n\t\t\t\t\t\t\t\tthat.calculate_single_label(chart, value + \"%\", element, element_previous, index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telement_previous = element;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t},\n\n\tget_option: function(chart, option) {\n\t\tif (typeof(this.label_options[option]) != \"undefined\") {\n\t\t\tif ( (typeof(chart.options.funnel_labels) != \"undefined\") && (typeof(chart.options.funnel_labels[option]) != \"undefined\") ) {\n\t\t\t\toption_value = chart.options.funnel_labels[option];\n\t\t\t} else {\n\t\t\t\toption_value = this.label_options[option];\n\t\t\t}\n\t\t} else option_value = \"\";\n\n\t\treturn option_value;\n\t},\n\n\tafterInit: function(chart) {\n\n\t},\n\n\tafterDatasetsDraw: function(chart, easing) {\n\t\t// To only draw at the end of animation, check for easing === 1\n\t\tif (this.get_option(chart, \"enabled\")) {\n\t\t\tthis.calculate_labels(chart);\n\t\t}\n\t},\n\n\tresize: function(chart) {\n\t\tif (this.get_option(chart, \"enabled\")) {\n\t\t\tthis.calculate_labels(chart);\n\t\t}\n\t}\n});\n"]}