@dpuse/dpuse-tool-highcharts-visualiser 0.0.79 → 0.0.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AnimationUtilities-Bby2idBR.js → AnimationUtilities-CJw-tdb_.js} +74 -83
- package/dist/AnimationUtilities-CJw-tdb_.js.map +1 -0
- package/dist/BorderRadius-CqHYi9va.js +135 -0
- package/dist/BorderRadius-CqHYi9va.js.map +1 -0
- package/dist/CenteredUtilities-BTUT7_Ld.js +1316 -0
- package/dist/CenteredUtilities-BTUT7_Ld.js.map +1 -0
- package/dist/{SVGElement-BmvC_qu3.js → SVGElement-uTuGcjav.js} +101 -103
- package/dist/SVGElement-uTuGcjav.js.map +1 -0
- package/dist/SeriesRegistry-CXsAINSj.js +376 -0
- package/dist/SeriesRegistry-CXsAINSj.js.map +1 -0
- package/dist/{TextPath-DK4Jkzd7.js → TextPath-Coabnrz0.js} +32 -34
- package/dist/{TextPath-DK4Jkzd7.js.map → TextPath-Coabnrz0.js.map} +1 -1
- package/dist/{dependency-wheel.src-BHmwx9rW.js → dependency-wheel.src-ByNiAiZS.js} +26 -27
- package/dist/dependency-wheel.src-ByNiAiZS.js.map +1 -0
- package/dist/dpuse-tool-highcharts-visualiser.es.js +2437 -2415
- package/dist/dpuse-tool-highcharts-visualiser.es.js.map +1 -1
- package/dist/highchartsMoreCustom-Cm6MkFMu.js +1178 -0
- package/dist/highchartsMoreCustom-Cm6MkFMu.js.map +1 -0
- package/dist/{pattern-fill.src-BPmr3DQg.js → pattern-fill.src-CGZp553r.js} +30 -32
- package/dist/{pattern-fill.src-BPmr3DQg.js.map → pattern-fill.src-CGZp553r.js.map} +1 -1
- package/dist/{sankey.src-DocCurOx.js → sankey.src-Buj1zAlU.js} +115 -117
- package/dist/sankey.src-Buj1zAlU.js.map +1 -0
- package/dist/{streamgraph.src-Bn6PY8Fd.js → streamgraph.src-DjMW1U2g.js} +4 -6
- package/dist/{streamgraph.src-Bn6PY8Fd.js.map → streamgraph.src-DjMW1U2g.js.map} +1 -1
- package/package.json +12 -12
- package/dist/AnimationUtilities-Bby2idBR.js.map +0 -1
- package/dist/BorderRadius-2zMZW_aK.js +0 -1445
- package/dist/BorderRadius-2zMZW_aK.js.map +0 -1
- package/dist/SVGElement-BmvC_qu3.js.map +0 -1
- package/dist/SeriesRegistry-0cj0ZJqn.js +0 -374
- package/dist/SeriesRegistry-0cj0ZJqn.js.map +0 -1
- package/dist/dependency-wheel.src-BHmwx9rW.js.map +0 -1
- package/dist/highchartsMoreCustom-CcpfmVny.js +0 -1110
- package/dist/highchartsMoreCustom-CcpfmVny.js.map +0 -1
- package/dist/sankey.src-DocCurOx.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { K as e, O as t, Q as n, W as r, c as i, h as a, k as o, lt as s, st as c, t as l, tt as u, w as d } from "./AnimationUtilities-CJw-tdb_.js";
|
|
2
2
|
//#region node_modules/highcharts/es-modules/Extensions/PatternFill.js
|
|
3
|
-
var { getOptions: f } =
|
|
4
|
-
function m(t, n
|
|
5
|
-
let
|
|
6
|
-
|
|
3
|
+
var { getOptions: f } = i, p = h();
|
|
4
|
+
function m(e, t, n) {
|
|
5
|
+
let r = t.prototype.pointClass, i = r.prototype;
|
|
6
|
+
i.calculatePatternDimensions || (a(e, "endResize", v), a(e, "redraw", y), o(i, { calculatePatternDimensions: C }), a(r, "afterInit", b), a(t, "render", S), c(t.prototype, "getColor", T), a(t, "afterRender", E), a(t, "mapZoomComplete", E), o(n.prototype, { addPattern: w }), a(n, "complexColor", x));
|
|
7
7
|
}
|
|
8
8
|
function h() {
|
|
9
9
|
let e = [], t = f().colors, n = 0;
|
|
@@ -35,14 +35,14 @@ function h() {
|
|
|
35
35
|
});
|
|
36
36
|
return e;
|
|
37
37
|
}
|
|
38
|
-
function g(
|
|
39
|
-
let
|
|
38
|
+
function g(t, n) {
|
|
39
|
+
let r = e({}, t), i = n.getBBox ? n.getBBox() : {
|
|
40
40
|
x: 0,
|
|
41
41
|
y: 0,
|
|
42
42
|
width: 32,
|
|
43
43
|
height: 32
|
|
44
44
|
};
|
|
45
|
-
return
|
|
45
|
+
return r._x = i.x, r._y = i.y, r;
|
|
46
46
|
}
|
|
47
47
|
function _(e, t) {
|
|
48
48
|
let n = JSON.stringify(e), r = n.length || 0, i = 0, a = 0, o, s;
|
|
@@ -64,30 +64,30 @@ function v() {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
function y() {
|
|
67
|
-
let e = {},
|
|
67
|
+
let e = {}, n = this.renderer, r = (n.defIds || []).filter((e) => e.indexOf && e.indexOf("highcharts-pattern-") === 0);
|
|
68
68
|
if (r.length) {
|
|
69
|
-
[].forEach.call(this.renderTo.querySelectorAll("[color^=\"url(\"], [fill^=\"url(\"], [stroke^=\"url(\"]"), (
|
|
70
|
-
let r =
|
|
69
|
+
[].forEach.call(this.renderTo.querySelectorAll("[color^=\"url(\"], [fill^=\"url(\"], [stroke^=\"url(\"]"), (t) => {
|
|
70
|
+
let r = t.getAttribute("fill") || t.getAttribute("color") || t.getAttribute("stroke");
|
|
71
71
|
if (r) {
|
|
72
|
-
let
|
|
73
|
-
e[
|
|
72
|
+
let t = r.replace(n.url, "").replace("url(#", "").replace(")", "");
|
|
73
|
+
e[t] = !0;
|
|
74
74
|
}
|
|
75
75
|
});
|
|
76
|
-
for (let i of r) e[i] || (n
|
|
76
|
+
for (let i of r) e[i] || (t(n.defIds, i), n.patternElements[i] && (n.patternElements[i].destroy(), delete n.patternElements[i]));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
function b() {
|
|
80
|
-
let
|
|
81
|
-
|
|
80
|
+
let t = this, n = t.options.color;
|
|
81
|
+
n && (n.pattern || n.patternIndex !== void 0) && (typeof n.pattern?.path == "string" && (n.pattern.path = { d: n.pattern.path }), t.color = t.options.color = e(t.series.options.color, n));
|
|
82
82
|
}
|
|
83
|
-
function x(
|
|
84
|
-
let
|
|
85
|
-
if (
|
|
83
|
+
function x(t) {
|
|
84
|
+
let r = t.args[0], i = t.args[1], a = t.args[2], o = this.chartIndex || 0, s = r.pattern, c = "var(--highcharts-neutral-color-80)";
|
|
85
|
+
if (r.patternIndex !== void 0 && p && (s = p[r.patternIndex]), !s) return !0;
|
|
86
86
|
if (s.image || typeof s.path == "string" || s.path && s.path.d) {
|
|
87
|
-
let
|
|
88
|
-
|
|
87
|
+
let t = a.parentNode && a.parentNode.getAttribute("class");
|
|
88
|
+
t &&= t.indexOf("highcharts-legend") > -1, (s._width === "defer" || s._height === "defer") && C.call({ graphic: { element: a } }, s), (t || !s.id || s.anchorToPoint) && (s = e({}, s), s.anchorToPoint && (s = g(s, a)), s.id = "highcharts-pattern-" + o + "-" + _(s) + _(s, !0) + (s.anchorToPoint ? "-anchored" : "")), this.addPattern(s, !this.forExport && n(s.animation, this.globalAnimation, { duration: 100 })), c = `url(${this.url}#${s.id + (this.forExport ? "-export" : "")})`;
|
|
89
89
|
} else c = s.color || c;
|
|
90
|
-
return
|
|
90
|
+
return a.setAttribute(i, c), r.toString = function() {
|
|
91
91
|
return c;
|
|
92
92
|
}, !1;
|
|
93
93
|
}
|
|
@@ -112,24 +112,24 @@ function C(e) {
|
|
|
112
112
|
}
|
|
113
113
|
e.anchorToPoint ? (e._x = 0, e._y = 0, e.width || (e._width = t.width), e.height || (e._height = t.height)) : (e.width || (e._x = e.x || 0, e._x += t.x - Math.round(t.aspectWidth ? Math.abs(t.aspectWidth - t.width) / 2 : 0)), e.height || (e._y = e.y || 0, e._y += t.y - Math.round(t.aspectHeight ? Math.abs(t.aspectHeight - t.height) / 2 : 0)));
|
|
114
114
|
}
|
|
115
|
-
function w(e,
|
|
116
|
-
let
|
|
115
|
+
function w(e, t) {
|
|
116
|
+
let i = n(t, !0), a = l(i), o = e.color || "var(--highcharts-neutral-color-80)", s = e.height || (typeof e._height == "number" ? e._height : 0) || 32, c = e.width || (typeof e._width == "number" ? e._width : 0) || 32, d = e.anchorToPoint ? "userSpaceOnUse" : e.patternContentUnits || "userSpaceOnUse", f = (e) => this.rect(0, 0, c, s).attr({ fill: e }).add(_), p, m = e.id, h;
|
|
117
117
|
if (m || (this.idCounter = this.idCounter || 0, m = "highcharts-pattern-" + this.idCounter + "-" + (this.chartIndex || 0), ++this.idCounter), this.forExport && (m += "-export"), this.defIds = this.defIds || [], this.defIds.indexOf(m) > -1) return;
|
|
118
118
|
this.defIds.push(m);
|
|
119
119
|
let g = {
|
|
120
120
|
id: m,
|
|
121
121
|
patternUnits: "userSpaceOnUse",
|
|
122
122
|
patternContentUnits: d,
|
|
123
|
-
width:
|
|
124
|
-
height:
|
|
123
|
+
width: c,
|
|
124
|
+
height: s,
|
|
125
125
|
x: e._x || e.x || 0,
|
|
126
126
|
y: e._y || e.y || 0
|
|
127
127
|
};
|
|
128
128
|
e._inverted && (g.patternTransform = "scale(1, -1)", e.patternTransform && (e.patternTransform += " scale(1, -1)")), e.patternTransform && (g.patternTransform = e.patternTransform);
|
|
129
129
|
let _ = this.createElement("pattern").attr(g).add(this.defs);
|
|
130
|
-
return _.id = m, e.path ? (h =
|
|
131
|
-
this.animate({ opacity:
|
|
132
|
-
}).attr({ opacity: 0 }).add(_) : this.image(e.image, 0, 0,
|
|
130
|
+
return _.id = m, e.path ? (h = r(e.path) ? e.path : { d: e.path }, e.backgroundColor && f(e.backgroundColor), p = { d: h.d }, this.styledMode || (p.stroke = h.stroke || o, p["stroke-width"] = n(h.strokeWidth, 2), p.fill = h.fill || "none"), h.transform && (p.transform = h.transform), this.createElement("path").attr(p).add(_), _.color = o) : e.image && (i ? this.image(e.image, 0, 0, c, s, function() {
|
|
131
|
+
this.animate({ opacity: n(e.opacity, 1) }, a), u(this.element, "load");
|
|
132
|
+
}).attr({ opacity: 0 }).add(_) : this.image(e.image, 0, 0, c, s).add(_)), !(e.image && i) && e.opacity !== void 0 && [].forEach.call(_.element.childNodes, (t) => {
|
|
133
133
|
t.setAttribute("opacity", e.opacity);
|
|
134
134
|
}), this.patternElements = this.patternElements || {}, this.patternElements[m] = _, _;
|
|
135
135
|
}
|
|
@@ -162,8 +162,6 @@ function E() {
|
|
|
162
162
|
}
|
|
163
163
|
//#endregion
|
|
164
164
|
//#region node_modules/highcharts/es-modules/masters/modules/pattern-fill.src.js
|
|
165
|
-
var D =
|
|
165
|
+
var D = s;
|
|
166
166
|
D.patterns = p, m(D.Chart, D.Series, D.SVGRenderer);
|
|
167
167
|
//#endregion
|
|
168
|
-
|
|
169
|
-
//# sourceMappingURL=pattern-fill.src-BPmr3DQg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-fill.src-BPmr3DQg.js","names":["D","Highcharts"],"sources":["../node_modules/highcharts/es-modules/Extensions/PatternFill.js","../node_modules/highcharts/es-modules/masters/modules/pattern-fill.src.js"],"sourcesContent":["/* *\n *\n * Module for using patterns or images as point fills.\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi, Øystein Moseng\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport { animObject } from '../Core/Animation/AnimationUtilities.js';\nimport D from '../Core/Defaults.js';\nconst { getOptions } = D;\nimport { addEvent, defined, erase, extend, isObject, merge, pick, removeEvent, wrap } from '../Shared/Utilities.js';\n/* *\n *\n * Constants\n *\n * */\n/** @internal */\nexport const patterns = createPatterns();\n/* *\n *\n * Functions\n *\n * */\n/** @internal */\nexport function composePatternFill(ChartClass, SeriesClass, SVGRendererClass) {\n const PointClass = SeriesClass.prototype.pointClass, pointProto = PointClass.prototype;\n if (!pointProto.calculatePatternDimensions) {\n addEvent(ChartClass, 'endResize', onChartEndResize);\n addEvent(ChartClass, 'redraw', onChartRedraw);\n extend(pointProto, {\n calculatePatternDimensions: pointCalculatePatternDimensions\n });\n addEvent(PointClass, 'afterInit', onPointAfterInit);\n addEvent(SeriesClass, 'render', onSeriesRender);\n wrap(SeriesClass.prototype, 'getColor', wrapSeriesGetColor);\n // Pattern scale corrections\n addEvent(SeriesClass, 'afterRender', onPatternScaleCorrection);\n addEvent(SeriesClass, 'mapZoomComplete', onPatternScaleCorrection);\n extend(SVGRendererClass.prototype, {\n addPattern: rendererAddPattern\n });\n addEvent(SVGRendererClass, 'complexColor', onRendererComplexColor);\n }\n}\n/**\n * Add the predefined patterns.\n * @internal\n */\nfunction createPatterns() {\n const patterns = [], colors = getOptions().colors;\n // Start with subtle patterns\n let i = 0;\n for (const pattern of [\n 'M 0 0 L 5 5 M 4.5 -0.5 L 5.5 0.5 M -0.5 4.5 L 0.5 5.5',\n 'M 0 5 L 5 0 M -0.5 0.5 L 0.5 -0.5 M 4.5 5.5 L 5.5 4.5',\n 'M 2 0 L 2 5 M 4 0 L 4 5',\n 'M 0 2 L 5 2 M 0 4 L 5 4',\n 'M 0 1.5 L 2.5 1.5 L 2.5 0 M 2.5 5 L 2.5 3.5 L 5 3.5'\n ]) {\n patterns.push({\n path: pattern,\n color: colors[i++],\n width: 5,\n height: 5,\n patternTransform: 'scale(1.4 1.4)'\n });\n }\n // Then add the more drastic ones\n i = 5;\n for (const pattern of [\n 'M 0 0 L 5 10 L 10 0',\n 'M 3 3 L 8 3 L 8 8 L 3 8 Z',\n 'M 5 5 m -4 0 a 4 4 0 1 1 8 0 a 4 4 0 1 1 -8 0',\n 'M 0 0 L 10 10 M 9 -1 L 11 1 M -1 9 L 1 11',\n 'M 0 10 L 10 0 M -1 1 L 1 -1 M 9 11 L 11 9'\n ]) {\n patterns.push({\n path: pattern,\n color: colors[i++],\n width: 10,\n height: 10\n });\n }\n return patterns;\n}\n/**\n * Create an anchored pattern instance for a specific point.\n * @private\n */\nfunction createAnchoredPattern(pattern, element) {\n const anchoredPattern = merge({}, pattern);\n // Get point's bounding box for anchoring\n const bbox = element.getBBox ? element.getBBox() : {\n x: 0, y: 0, width: 32, height: 32\n };\n // Position pattern at point's origin so each point has its own\n // pattern instance starting from its top-left corner\n anchoredPattern._x = bbox.x;\n anchoredPattern._y = bbox.y;\n return anchoredPattern;\n}\n/**\n * Utility function to compute a hash value from an object. Modified Java\n * String.hashCode implementation in JS. Use the preSeed parameter to add an\n * additional seeding step.\n *\n * @internal\n * @function hashFromObject\n *\n * @param {Object} obj\n * The javascript object to compute the hash from.\n *\n * @param {boolean} [preSeed=false]\n * Add an optional preSeed stage.\n *\n * @return {string}\n * The computed hash.\n */\nfunction hashFromObject(obj, preSeed) {\n const str = JSON.stringify(obj), strLen = str.length || 0;\n let hash = 0, i = 0, char, seedStep;\n if (preSeed) {\n seedStep = Math.max(Math.floor(strLen / 500), 1);\n for (let a = 0; a < strLen; a += seedStep) {\n hash += str.charCodeAt(a);\n }\n hash = hash & hash;\n }\n for (; i < strLen; ++i) {\n char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(16).replace('-', '1');\n}\n/**\n * When animation is used, we have to recalculate pattern dimensions after\n * resize, as the bounding boxes are not available until then.\n * @internal\n */\nfunction onChartEndResize() {\n if (this.renderer &&\n (this.renderer.defIds || []).filter((id) => (id &&\n id.indexOf &&\n id.indexOf('highcharts-pattern-') === 0)).length) {\n // We have non-default patterns to fix. Find them by looping through\n // all points.\n for (const series of this.series) {\n if (series.visible) {\n for (const point of series.points) {\n const colorOptions = point.options && point.options.color;\n if (colorOptions &&\n colorOptions.pattern) {\n colorOptions.pattern\n ._width = 'defer';\n colorOptions.pattern\n ._height = 'defer';\n }\n }\n }\n }\n // Redraw without animation\n this.redraw(false);\n }\n}\n/**\n * Add a garbage collector to delete old patterns with autogenerated hashes that\n * are no longer being referenced.\n * @internal\n */\nfunction onChartRedraw() {\n const usedIds = {}, renderer = this.renderer, \n // Get the autocomputed patterns - these are the ones we might delete\n patterns = (renderer.defIds || []).filter((pattern) => (pattern.indexOf &&\n pattern.indexOf('highcharts-pattern-') === 0));\n if (patterns.length) {\n // Look through the DOM for usage of the patterns. This can be points,\n // series, tooltips etc.\n [].forEach.call(this.renderTo.querySelectorAll('[color^=\"url(\"], [fill^=\"url(\"], [stroke^=\"url(\"]'), (node) => {\n const id = node.getAttribute('fill') ||\n node.getAttribute('color') ||\n node.getAttribute('stroke');\n if (id) {\n const sanitizedId = id\n .replace(renderer.url, '')\n .replace('url(#', '')\n .replace(')', '');\n usedIds[sanitizedId] = true;\n }\n });\n // Loop through the patterns that exist and see if they are used\n for (const id of patterns) {\n if (!usedIds[id]) {\n // Remove id from used id list\n erase(renderer.defIds, id);\n // Remove pattern element\n if (renderer.patternElements[id]) {\n renderer.patternElements[id].destroy();\n delete renderer.patternElements[id];\n }\n }\n }\n }\n}\n/**\n * Merge series color options to points.\n * @internal\n */\nfunction onPointAfterInit() {\n const point = this, colorOptions = (point.options.color);\n // Only do this if we have defined a specific color on this point. Otherwise\n // we will end up trying to re-add the series color for each point.\n if (colorOptions &&\n (colorOptions.pattern ||\n colorOptions.patternIndex !== void 0)) {\n // Move path definition to object, allows for merge with series path\n // definition\n if (typeof colorOptions.pattern?.path === 'string') {\n colorOptions.pattern.path = {\n d: colorOptions.pattern.path\n };\n }\n // Merge with series options\n point.color = point.options.color = merge(point.series.options.color, colorOptions);\n }\n}\n/**\n * Add functionality to SVG renderer to handle patterns as complex colors.\n * @internal\n */\nfunction onRendererComplexColor(args) {\n const color = args.args[0], prop = args.args[1], element = args.args[2], chartIndex = (this.chartIndex || 0);\n let pattern = color.pattern, value = 'var(--highcharts-neutral-color-80)';\n // Handle patternIndex\n if (typeof color.patternIndex !== 'undefined' && patterns) {\n pattern = patterns[color.patternIndex];\n }\n // Skip and call default if there is no pattern\n if (!pattern) {\n return true;\n }\n // We have a pattern.\n if (pattern.image ||\n typeof pattern.path === 'string' ||\n pattern.path && pattern.path.d) {\n // Real pattern. Add it and set the color value to be a reference.\n // Force Hash-based IDs for legend items, as they are drawn before\n // point render, meaning they are drawn before autocalculated image\n // width/heights. We don't want them to highjack the width/height for\n // this ID if it is defined by users.\n let forceHashId = element.parentNode &&\n element.parentNode.getAttribute('class');\n forceHashId = forceHashId &&\n forceHashId.indexOf('highcharts-legend') > -1;\n // If we don't have a width/height yet, handle it. Try faking a point\n // and running the algorithm again.\n if (pattern._width === 'defer' || pattern._height === 'defer') {\n pointCalculatePatternDimensions.call({ graphic: { element: element } }, pattern);\n }\n // If we don't have an explicit ID, compute a hash from the\n // definition and use that as the ID. This ensures that points with\n // the same pattern definition reuse existing pattern elements by\n // default. We combine two hashes, the second with an additional\n // preSeed algorithm, to minimize collision probability.\n if (forceHashId || !pattern.id || pattern.anchorToPoint) {\n // Make a copy so we don't accidentally edit options when setting ID\n pattern = merge({}, pattern);\n // Handle anchored patterns - include the point's\n // position in the pattern before hashing, so each\n // point gets a unique ID.\n if (pattern.anchorToPoint) {\n pattern = createAnchoredPattern(pattern, element);\n }\n pattern.id = 'highcharts-pattern-' + chartIndex + '-' +\n hashFromObject(pattern) + hashFromObject(pattern, true) +\n (pattern.anchorToPoint ? '-anchored' : '');\n }\n // Add it. This function does nothing if an element with this ID\n // already exists.\n this.addPattern(pattern, !this.forExport && pick(pattern.animation, this.globalAnimation, { duration: 100 }));\n value = `url(${this.url}#${pattern.id + (this.forExport ? '-export' : '')})`;\n }\n else {\n // Not a full pattern definition, just add color\n value = pattern.color || value;\n }\n // Set the fill/stroke prop on the element\n element.setAttribute(prop, value);\n // Allow the color to be concatenated into tooltips formatters etc.\n color.toString = function () {\n return value;\n };\n // Skip default handler\n return false;\n}\n/**\n * Calculate pattern dimensions on points that have their own pattern.\n * @internal\n */\nfunction onSeriesRender() {\n const isResizing = this.chart.isResizing;\n if (this.isDirtyData || isResizing || !this.chart.hasRendered) {\n for (const point of this.points) {\n const colorOptions = point.options && point.options.color;\n if (colorOptions &&\n colorOptions.pattern) {\n // For most points we want to recalculate the dimensions on\n // render, where we have the shape args and bbox. But if we\n // are resizing and don't have the shape args, defer it, since\n // the bounding box is still not resized.\n if (isResizing &&\n !(point.shapeArgs &&\n point.shapeArgs.width &&\n point.shapeArgs.height)) {\n colorOptions\n .pattern._width = 'defer';\n colorOptions\n .pattern._height = 'defer';\n }\n else {\n point.calculatePatternDimensions(colorOptions.pattern);\n }\n }\n }\n }\n}\n/**\n * Set dimensions on pattern from point. This function will set internal\n * pattern._width/_height properties if width and height are not both already\n * set. We only do this on image patterns. The _width/_height properties are set\n * to the size of the bounding box of the point, optionally taking aspect ratio\n * into account. If only one of width or height are supplied as options, the\n * undefined option is calculated as above.\n *\n * @internal\n * @function Highcharts.Point#calculatePatternDimensions\n *\n * @param {Highcharts.PatternOptionsObject} pattern\n * The pattern to set dimensions on.\n *\n * @return {void}\n *\n * @requires modules/pattern-fill\n */\nfunction pointCalculatePatternDimensions(pattern) {\n if (pattern.width && pattern.height && !pattern.anchorToPoint) {\n return;\n }\n const bBox = this.graphic && (this.graphic.getBBox &&\n this.graphic.getBBox(true) ||\n this.graphic.element &&\n this.graphic.element.getBBox()) || {}, shapeArgs = this.shapeArgs;\n // Prefer using shapeArgs, as it is animation agnostic\n if (shapeArgs) {\n bBox.width = shapeArgs.width || bBox.width;\n bBox.height = shapeArgs.height || bBox.height;\n bBox.x = shapeArgs.x || bBox.x;\n bBox.y = shapeArgs.y || bBox.y;\n }\n // For images we stretch to bounding box\n if (pattern.image) {\n // If we do not have a bounding box at this point, simply add a defer\n // key and pick this up in the fillSetter handler, where the bounding\n // box should exist.\n if (!bBox.width || !bBox.height) {\n pattern._width = 'defer';\n pattern._height = 'defer';\n // Mark the pattern to be flipped later if upside down (#16810)\n const scaleY = this.series.chart.mapView &&\n this.series.chart.mapView.getSVGTransform().scaleY;\n if (defined(scaleY) && scaleY < 0) {\n pattern._inverted = true;\n }\n return;\n }\n // Handle aspect ratio filling\n if (pattern.aspectRatio) {\n bBox.aspectRatio = bBox.width / bBox.height;\n if (pattern.aspectRatio > bBox.aspectRatio) {\n // Height of bBox will determine width\n bBox.aspectWidth = bBox.height * pattern.aspectRatio;\n }\n else {\n // Width of bBox will determine height\n bBox.aspectHeight = bBox.width / pattern.aspectRatio;\n }\n }\n // We set the width/height on internal properties to differentiate\n // between the options set by a user and by this function.\n pattern._width = pattern.width ||\n Math.ceil(bBox.aspectWidth || bBox.width);\n pattern._height = pattern.height ||\n Math.ceil(bBox.aspectHeight || bBox.height);\n }\n // Handle anchored patterns\n if (pattern.anchorToPoint) {\n // For anchored patterns, always position at origin of the point\n pattern._x = 0;\n pattern._y = 0;\n // Ensure pattern dimensions match the point if not explicitly set\n if (!pattern.width) {\n pattern._width = bBox.width;\n }\n if (!pattern.height) {\n pattern._height = bBox.height;\n }\n }\n else {\n // Original logic for global patterns\n // Set x/y accordingly, centering if using aspect ratio, otherwise\n // adjusting so bounding box corner is 0,0 of pattern.\n if (!pattern.width) {\n pattern._x = pattern.x || 0;\n pattern._x += bBox.x - Math.round(bBox.aspectWidth ?\n Math.abs(bBox.aspectWidth - bBox.width) / 2 :\n 0);\n }\n if (!pattern.height) {\n pattern._y = pattern.y || 0;\n pattern._y += bBox.y - Math.round(bBox.aspectHeight ?\n Math.abs(bBox.aspectHeight - bBox.height) / 2 :\n 0);\n }\n }\n}\n/**\n * Add a pattern to the renderer.\n *\n * @internal\n * @function Highcharts.SVGRenderer#addPattern\n *\n * @param {Highcharts.PatternOptionsObject} options\n * The pattern options.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * The animation options.\n *\n * @return {Highcharts.SVGElement|undefined}\n * The added pattern. Undefined if the pattern already exists.\n *\n * @requires modules/pattern-fill\n */\nfunction rendererAddPattern(options, animation) {\n const animate = pick(animation, true), animationOptions = animObject(animate), color = options.color ||\n 'var(--highcharts-neutral-color-80)', defaultSize = 32, height = options.height ||\n (typeof options._height === 'number' ? options._height : 0) ||\n defaultSize, width = options.width ||\n (typeof options._width === 'number' ? options._width : 0) ||\n defaultSize, patternContentUnits = options.anchorToPoint ?\n 'userSpaceOnUse' :\n (options.patternContentUnits || 'userSpaceOnUse');\n const rect = (fill) => this\n .rect(0, 0, width, height)\n .attr({ fill })\n .add(pattern);\n let attribs, id = options.id, path;\n if (!id) {\n this.idCounter = this.idCounter || 0;\n id = ('highcharts-pattern-' +\n this.idCounter +\n '-' +\n (this.chartIndex || 0));\n ++this.idCounter;\n }\n if (this.forExport) {\n id += '-export';\n }\n // Do nothing if ID already exists\n this.defIds = this.defIds || [];\n if (this.defIds.indexOf(id) > -1) {\n return;\n }\n // Store ID in list to avoid duplicates\n this.defIds.push(id);\n // Calculate pattern element attributes\n const attrs = {\n id: id,\n patternUnits: 'userSpaceOnUse',\n patternContentUnits: patternContentUnits,\n width: width,\n height: height,\n x: options._x || options.x || 0,\n y: options._y || options.y || 0\n };\n if (options._inverted) {\n attrs.patternTransform = 'scale(1, -1)'; // (#16810)\n if (options.patternTransform) {\n options.patternTransform += ' scale(1, -1)';\n }\n }\n if (options.patternTransform) {\n attrs.patternTransform = options.patternTransform;\n }\n const pattern = this.createElement('pattern').attr(attrs).add(this.defs);\n // Set id on the SVGRenderer object\n pattern.id = id;\n // Use an SVG path for the pattern\n if (options.path) {\n path = isObject(options.path) ?\n options.path :\n { d: options.path };\n // The background\n if (options.backgroundColor) {\n rect(options.backgroundColor);\n }\n // The pattern\n attribs = {\n 'd': path.d\n };\n if (!this.styledMode) {\n attribs.stroke = path.stroke || color;\n attribs['stroke-width'] = pick(path.strokeWidth, 2);\n attribs.fill = path.fill || 'none';\n }\n if (path.transform) {\n attribs.transform = path.transform;\n }\n this.createElement('path').attr(attribs).add(pattern);\n pattern.color = color;\n // Image pattern\n }\n else if (options.image) {\n if (animate) {\n this.image(options.image, 0, 0, width, height, function () {\n // Onload\n this.animate({\n opacity: pick(options.opacity, 1)\n }, animationOptions);\n removeEvent(this.element, 'load');\n }).attr({ opacity: 0 }).add(pattern);\n }\n else {\n this.image(options.image, 0, 0, width, height).add(pattern);\n }\n }\n // For non-animated patterns, set opacity now\n if (!(options.image && animate) && typeof options.opacity !== 'undefined') {\n [].forEach.call(pattern.element.childNodes, (child) => {\n child.setAttribute('opacity', options.opacity);\n });\n }\n // Store for future reference\n this.patternElements = this.patternElements || {};\n this.patternElements[id] = pattern;\n return pattern;\n}\n/**\n * Make sure we have a series color.\n * @internal\n */\nfunction wrapSeriesGetColor(proceed) {\n const oldColor = this.options.color;\n // Temporarily remove color options to get defaults\n if (oldColor &&\n oldColor.pattern &&\n !oldColor.pattern.color) {\n delete this.options.color;\n // Get default\n proceed.apply(this, [].slice.call(arguments, 1));\n // Replace with old, but add default color\n oldColor.pattern.color =\n this.color;\n this.color = this.options.color = oldColor;\n }\n else {\n // We have a color, no need to do anything special\n proceed.apply(this, [].slice.call(arguments, 1));\n }\n}\n/**\n * Scale patterns inversely to the series it's used in.\n * Maintains a visual (1,1) scale regardless of size.\n * @internal\n */\nfunction onPatternScaleCorrection() {\n const series = this;\n // If not a series used in a map chart, skip it.\n if (!series.chart?.mapView) {\n return;\n }\n const chart = series.chart, renderer = chart.renderer, patterns = renderer.patternElements;\n // Only scale if we have patterns to scale.\n if (renderer.defIds?.length && patterns) {\n // Filter for points which have patterns that don't use images assigned\n // and has a group scale available.\n series.points.filter(function (p) {\n const point = p;\n // No graphic we can fetch id from, filter out this point.\n if (!point.graphic) {\n return false;\n }\n return (point.graphic.element.hasAttribute('fill') ||\n point.graphic.element.hasAttribute('color') ||\n point.graphic.element.hasAttribute('stroke')) &&\n !point.options.color?.pattern?.image &&\n !!point.group?.scaleX &&\n !!point.group?.scaleY;\n })\n // Map up pattern id's and their scales.\n .map(function (p) {\n const point = p;\n // Parse the id from the graphic element of the point.\n const id = (point.graphic?.element.getAttribute('fill') ||\n point.graphic?.element.getAttribute('color') ||\n point.graphic?.element.getAttribute('stroke') || '')\n .replace(renderer.url, '')\n .replace('url(#', '')\n .replace(')', '');\n return {\n id,\n x: point.group?.scaleX || 1,\n y: point.group?.scaleY || 1\n };\n })\n // Filter out colors and other non-patterns, as well as duplicates.\n .filter(function (pointInfo, index, arr) {\n return pointInfo.id !== '' &&\n pointInfo.id.indexOf('highcharts-pattern-') !== -1 &&\n !arr.some(function (otherInfo, otherIndex) {\n return otherInfo.id === pointInfo.id && otherIndex < index;\n });\n })\n .forEach(function (pointInfo) {\n const id = pointInfo.id;\n patterns[id].scaleX = 1 / pointInfo.x;\n patterns[id].scaleY = 1 / pointInfo.y;\n patterns[id].updateTransform('patternTransform');\n });\n }\n}\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Pattern options\n *\n * @interface Highcharts.PatternOptionsObject\n */ /**\n* When true, the pattern is anchored to each individual point rather than\n* using a global pattern grid. This ensures consistent pattern rendering\n* across points of different sizes and improves accessibility for narrow\n* columns. Defaults to false for backward compatibility.\n*\n* @sample highcharts/series/pattern-fill-anchor-to-point/\n* Compare shared vs anchored pattern positioning\n* @name Highcharts.PatternOptionsObject#anchorToPoint\n* @type {boolean|undefined}\n* @since 12.6.0\n* @default false\n*/ /**\n* Background color for the pattern if a `path` is set (not images).\n* @name Highcharts.PatternOptionsObject#backgroundColor\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* URL to an image to use as the pattern.\n* @name Highcharts.PatternOptionsObject#image\n* @type {string|undefined}\n*/ /**\n* Width of the pattern. For images this is automatically set to the width of\n* the element bounding box if not supplied. For non-image patterns the default\n* is 32px. Note that automatic resizing of image patterns to fill a bounding\n* box dynamically is only supported for patterns with an automatically\n* calculated ID.\n* @name Highcharts.PatternOptionsObject#width\n* @type {number|undefined}\n*/ /**\n* Analogous to pattern.width.\n* @name Highcharts.PatternOptionsObject#height\n* @type {number|undefined}\n*/ /**\n* For automatically calculated width and height on images, it is possible to\n* set an aspect ratio. The image will be zoomed to fill the bounding box,\n* maintaining the aspect ratio defined.\n* @name Highcharts.PatternOptionsObject#aspectRatio\n* @type {number|undefined}\n*/ /**\n* Horizontal offset of the pattern.\n* @name Highcharts.PatternOptionsObject#x\n* @type {number|undefined}\n* @default 0\n*/ /**\n* Vertical offset of the pattern.\n* @name Highcharts.PatternOptionsObject#y\n* @type {number|undefined}\n* @default 0\n*/ /**\n* Either an SVG path as string, or an object. As an object, supply the path\n* string in the `path.d` property. Other supported properties are standard SVG\n* attributes like `path.stroke` and `path.fill`. If a path is supplied for the\n* pattern, the `image` property is ignored.\n* @name Highcharts.PatternOptionsObject#path\n* @type {string|Highcharts.SVGAttributes|undefined}\n*/ /**\n* SVG `patternTransform` to apply to the entire pattern.\n* @name Highcharts.PatternOptionsObject#patternTransform\n* @type {string|undefined}\n* @see [patternTransform demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/series/pattern-fill-transform)\n*/ /**\n* Pattern color, used as default path stroke.\n* @name Highcharts.PatternOptionsObject#color\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* Opacity of the pattern as a float value from 0 to 1.\n* @name Highcharts.PatternOptionsObject#opacity\n* @type {number|undefined}\n*/ /**\n* ID to assign to the pattern. This is automatically computed if not added, and\n* identical patterns are reused. To refer to an existing pattern for a\n* Highcharts color, use `color: \"url(#pattern-id)\"`.\n* @name Highcharts.PatternOptionsObject#id\n* @type {string|undefined}\n*/\n/**\n * Holds a pattern definition.\n *\n * @sample highcharts/series/pattern-fill-area/\n * Define a custom path pattern\n * @sample highcharts/series/pattern-fill-pie/\n * Default patterns and a custom image pattern\n * @sample maps/demo/pattern-fill-map/\n * Custom images on map\n *\n * @example\n * // Pattern used as a color option\n * color: {\n * pattern: {\n * path: {\n * d: 'M 3 3 L 8 3 L 8 8 Z',\n * fill: '#102045'\n * },\n * width: 12,\n * height: 12,\n * color: '#907000',\n * opacity: 0.5\n * }\n * }\n *\n * @interface Highcharts.PatternObject\n */ /**\n* Pattern options\n* @name Highcharts.PatternObject#pattern\n* @type {Highcharts.PatternOptionsObject}\n*/ /**\n* Animation options for the image pattern loading.\n* @name Highcharts.PatternObject#animation\n* @type {boolean|Partial<Highcharts.AnimationOptionsObject>|undefined}\n*/ /**\n* Optionally an index referencing which pattern to use. Highcharts adds\n* 10 default patterns to the `Highcharts.patterns` array. Additional\n* pattern definitions can be pushed to this array if desired. This option\n* is an index into this array.\n* @name Highcharts.PatternObject#patternIndex\n* @type {number|undefined}\n*/\n''; // Keeps doclets above in transpiled file\n","// SPDX-License-Identifier: LicenseRef-Highcharts\n/**\n * @license Highcharts JS v13.0.0 (2026-06-11)\n * @module highcharts/modules/pattern-fill\n * @requires highcharts\n *\n * Module for adding patterns and images as point fills.\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi, Øystein Moseng\n *\n * A commercial license may be required depending on use,\n * see www.highcharts.com/license\n */\n'use strict';\nimport Highcharts from '../../Core/Globals.js';\nimport { composePatternFill, patterns } from '../../Extensions/PatternFill.js';\nconst G = Highcharts;\nG.patterns = patterns;\ncomposePatternFill(G.Chart, G.Series, G.SVGRenderer);\nexport default Highcharts;\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pattern-fill.src-CGZp553r.js","names":["D","Highcharts"],"sources":["../node_modules/highcharts/es-modules/Extensions/PatternFill.js","../node_modules/highcharts/es-modules/masters/modules/pattern-fill.src.js"],"sourcesContent":["/* *\n *\n * Module for using patterns or images as point fills.\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi, Øystein Moseng\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport { animObject } from '../Core/Animation/AnimationUtilities.js';\nimport D from '../Core/Defaults.js';\nconst { getOptions } = D;\nimport { addEvent, defined, erase, extend, isObject, merge, pick, removeEvent, wrap } from '../Shared/Utilities.js';\n/* *\n *\n * Constants\n *\n * */\n/** @internal */\nexport const patterns = createPatterns();\n/* *\n *\n * Functions\n *\n * */\n/** @internal */\nexport function composePatternFill(ChartClass, SeriesClass, SVGRendererClass) {\n const PointClass = SeriesClass.prototype.pointClass, pointProto = PointClass.prototype;\n if (!pointProto.calculatePatternDimensions) {\n addEvent(ChartClass, 'endResize', onChartEndResize);\n addEvent(ChartClass, 'redraw', onChartRedraw);\n extend(pointProto, {\n calculatePatternDimensions: pointCalculatePatternDimensions\n });\n addEvent(PointClass, 'afterInit', onPointAfterInit);\n addEvent(SeriesClass, 'render', onSeriesRender);\n wrap(SeriesClass.prototype, 'getColor', wrapSeriesGetColor);\n // Pattern scale corrections\n addEvent(SeriesClass, 'afterRender', onPatternScaleCorrection);\n addEvent(SeriesClass, 'mapZoomComplete', onPatternScaleCorrection);\n extend(SVGRendererClass.prototype, {\n addPattern: rendererAddPattern\n });\n addEvent(SVGRendererClass, 'complexColor', onRendererComplexColor);\n }\n}\n/**\n * Add the predefined patterns.\n * @internal\n */\nfunction createPatterns() {\n const patterns = [], colors = getOptions().colors;\n // Start with subtle patterns\n let i = 0;\n for (const pattern of [\n 'M 0 0 L 5 5 M 4.5 -0.5 L 5.5 0.5 M -0.5 4.5 L 0.5 5.5',\n 'M 0 5 L 5 0 M -0.5 0.5 L 0.5 -0.5 M 4.5 5.5 L 5.5 4.5',\n 'M 2 0 L 2 5 M 4 0 L 4 5',\n 'M 0 2 L 5 2 M 0 4 L 5 4',\n 'M 0 1.5 L 2.5 1.5 L 2.5 0 M 2.5 5 L 2.5 3.5 L 5 3.5'\n ]) {\n patterns.push({\n path: pattern,\n color: colors[i++],\n width: 5,\n height: 5,\n patternTransform: 'scale(1.4 1.4)'\n });\n }\n // Then add the more drastic ones\n i = 5;\n for (const pattern of [\n 'M 0 0 L 5 10 L 10 0',\n 'M 3 3 L 8 3 L 8 8 L 3 8 Z',\n 'M 5 5 m -4 0 a 4 4 0 1 1 8 0 a 4 4 0 1 1 -8 0',\n 'M 0 0 L 10 10 M 9 -1 L 11 1 M -1 9 L 1 11',\n 'M 0 10 L 10 0 M -1 1 L 1 -1 M 9 11 L 11 9'\n ]) {\n patterns.push({\n path: pattern,\n color: colors[i++],\n width: 10,\n height: 10\n });\n }\n return patterns;\n}\n/**\n * Create an anchored pattern instance for a specific point.\n * @private\n */\nfunction createAnchoredPattern(pattern, element) {\n const anchoredPattern = merge({}, pattern);\n // Get point's bounding box for anchoring\n const bbox = element.getBBox ? element.getBBox() : {\n x: 0, y: 0, width: 32, height: 32\n };\n // Position pattern at point's origin so each point has its own\n // pattern instance starting from its top-left corner\n anchoredPattern._x = bbox.x;\n anchoredPattern._y = bbox.y;\n return anchoredPattern;\n}\n/**\n * Utility function to compute a hash value from an object. Modified Java\n * String.hashCode implementation in JS. Use the preSeed parameter to add an\n * additional seeding step.\n *\n * @internal\n * @function hashFromObject\n *\n * @param {Object} obj\n * The javascript object to compute the hash from.\n *\n * @param {boolean} [preSeed=false]\n * Add an optional preSeed stage.\n *\n * @return {string}\n * The computed hash.\n */\nfunction hashFromObject(obj, preSeed) {\n const str = JSON.stringify(obj), strLen = str.length || 0;\n let hash = 0, i = 0, char, seedStep;\n if (preSeed) {\n seedStep = Math.max(Math.floor(strLen / 500), 1);\n for (let a = 0; a < strLen; a += seedStep) {\n hash += str.charCodeAt(a);\n }\n hash = hash & hash;\n }\n for (; i < strLen; ++i) {\n char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(16).replace('-', '1');\n}\n/**\n * When animation is used, we have to recalculate pattern dimensions after\n * resize, as the bounding boxes are not available until then.\n * @internal\n */\nfunction onChartEndResize() {\n if (this.renderer &&\n (this.renderer.defIds || []).filter((id) => (id &&\n id.indexOf &&\n id.indexOf('highcharts-pattern-') === 0)).length) {\n // We have non-default patterns to fix. Find them by looping through\n // all points.\n for (const series of this.series) {\n if (series.visible) {\n for (const point of series.points) {\n const colorOptions = point.options && point.options.color;\n if (colorOptions &&\n colorOptions.pattern) {\n colorOptions.pattern\n ._width = 'defer';\n colorOptions.pattern\n ._height = 'defer';\n }\n }\n }\n }\n // Redraw without animation\n this.redraw(false);\n }\n}\n/**\n * Add a garbage collector to delete old patterns with autogenerated hashes that\n * are no longer being referenced.\n * @internal\n */\nfunction onChartRedraw() {\n const usedIds = {}, renderer = this.renderer, \n // Get the autocomputed patterns - these are the ones we might delete\n patterns = (renderer.defIds || []).filter((pattern) => (pattern.indexOf &&\n pattern.indexOf('highcharts-pattern-') === 0));\n if (patterns.length) {\n // Look through the DOM for usage of the patterns. This can be points,\n // series, tooltips etc.\n [].forEach.call(this.renderTo.querySelectorAll('[color^=\"url(\"], [fill^=\"url(\"], [stroke^=\"url(\"]'), (node) => {\n const id = node.getAttribute('fill') ||\n node.getAttribute('color') ||\n node.getAttribute('stroke');\n if (id) {\n const sanitizedId = id\n .replace(renderer.url, '')\n .replace('url(#', '')\n .replace(')', '');\n usedIds[sanitizedId] = true;\n }\n });\n // Loop through the patterns that exist and see if they are used\n for (const id of patterns) {\n if (!usedIds[id]) {\n // Remove id from used id list\n erase(renderer.defIds, id);\n // Remove pattern element\n if (renderer.patternElements[id]) {\n renderer.patternElements[id].destroy();\n delete renderer.patternElements[id];\n }\n }\n }\n }\n}\n/**\n * Merge series color options to points.\n * @internal\n */\nfunction onPointAfterInit() {\n const point = this, colorOptions = (point.options.color);\n // Only do this if we have defined a specific color on this point. Otherwise\n // we will end up trying to re-add the series color for each point.\n if (colorOptions &&\n (colorOptions.pattern ||\n colorOptions.patternIndex !== void 0)) {\n // Move path definition to object, allows for merge with series path\n // definition\n if (typeof colorOptions.pattern?.path === 'string') {\n colorOptions.pattern.path = {\n d: colorOptions.pattern.path\n };\n }\n // Merge with series options\n point.color = point.options.color = merge(point.series.options.color, colorOptions);\n }\n}\n/**\n * Add functionality to SVG renderer to handle patterns as complex colors.\n * @internal\n */\nfunction onRendererComplexColor(args) {\n const color = args.args[0], prop = args.args[1], element = args.args[2], chartIndex = (this.chartIndex || 0);\n let pattern = color.pattern, value = 'var(--highcharts-neutral-color-80)';\n // Handle patternIndex\n if (typeof color.patternIndex !== 'undefined' && patterns) {\n pattern = patterns[color.patternIndex];\n }\n // Skip and call default if there is no pattern\n if (!pattern) {\n return true;\n }\n // We have a pattern.\n if (pattern.image ||\n typeof pattern.path === 'string' ||\n pattern.path && pattern.path.d) {\n // Real pattern. Add it and set the color value to be a reference.\n // Force Hash-based IDs for legend items, as they are drawn before\n // point render, meaning they are drawn before autocalculated image\n // width/heights. We don't want them to highjack the width/height for\n // this ID if it is defined by users.\n let forceHashId = element.parentNode &&\n element.parentNode.getAttribute('class');\n forceHashId = forceHashId &&\n forceHashId.indexOf('highcharts-legend') > -1;\n // If we don't have a width/height yet, handle it. Try faking a point\n // and running the algorithm again.\n if (pattern._width === 'defer' || pattern._height === 'defer') {\n pointCalculatePatternDimensions.call({ graphic: { element: element } }, pattern);\n }\n // If we don't have an explicit ID, compute a hash from the\n // definition and use that as the ID. This ensures that points with\n // the same pattern definition reuse existing pattern elements by\n // default. We combine two hashes, the second with an additional\n // preSeed algorithm, to minimize collision probability.\n if (forceHashId || !pattern.id || pattern.anchorToPoint) {\n // Make a copy so we don't accidentally edit options when setting ID\n pattern = merge({}, pattern);\n // Handle anchored patterns - include the point's\n // position in the pattern before hashing, so each\n // point gets a unique ID.\n if (pattern.anchorToPoint) {\n pattern = createAnchoredPattern(pattern, element);\n }\n pattern.id = 'highcharts-pattern-' + chartIndex + '-' +\n hashFromObject(pattern) + hashFromObject(pattern, true) +\n (pattern.anchorToPoint ? '-anchored' : '');\n }\n // Add it. This function does nothing if an element with this ID\n // already exists.\n this.addPattern(pattern, !this.forExport && pick(pattern.animation, this.globalAnimation, { duration: 100 }));\n value = `url(${this.url}#${pattern.id + (this.forExport ? '-export' : '')})`;\n }\n else {\n // Not a full pattern definition, just add color\n value = pattern.color || value;\n }\n // Set the fill/stroke prop on the element\n element.setAttribute(prop, value);\n // Allow the color to be concatenated into tooltips formatters etc.\n color.toString = function () {\n return value;\n };\n // Skip default handler\n return false;\n}\n/**\n * Calculate pattern dimensions on points that have their own pattern.\n * @internal\n */\nfunction onSeriesRender() {\n const isResizing = this.chart.isResizing;\n if (this.isDirtyData || isResizing || !this.chart.hasRendered) {\n for (const point of this.points) {\n const colorOptions = point.options && point.options.color;\n if (colorOptions &&\n colorOptions.pattern) {\n // For most points we want to recalculate the dimensions on\n // render, where we have the shape args and bbox. But if we\n // are resizing and don't have the shape args, defer it, since\n // the bounding box is still not resized.\n if (isResizing &&\n !(point.shapeArgs &&\n point.shapeArgs.width &&\n point.shapeArgs.height)) {\n colorOptions\n .pattern._width = 'defer';\n colorOptions\n .pattern._height = 'defer';\n }\n else {\n point.calculatePatternDimensions(colorOptions.pattern);\n }\n }\n }\n }\n}\n/**\n * Set dimensions on pattern from point. This function will set internal\n * pattern._width/_height properties if width and height are not both already\n * set. We only do this on image patterns. The _width/_height properties are set\n * to the size of the bounding box of the point, optionally taking aspect ratio\n * into account. If only one of width or height are supplied as options, the\n * undefined option is calculated as above.\n *\n * @internal\n * @function Highcharts.Point#calculatePatternDimensions\n *\n * @param {Highcharts.PatternOptionsObject} pattern\n * The pattern to set dimensions on.\n *\n * @return {void}\n *\n * @requires modules/pattern-fill\n */\nfunction pointCalculatePatternDimensions(pattern) {\n if (pattern.width && pattern.height && !pattern.anchorToPoint) {\n return;\n }\n const bBox = this.graphic && (this.graphic.getBBox &&\n this.graphic.getBBox(true) ||\n this.graphic.element &&\n this.graphic.element.getBBox()) || {}, shapeArgs = this.shapeArgs;\n // Prefer using shapeArgs, as it is animation agnostic\n if (shapeArgs) {\n bBox.width = shapeArgs.width || bBox.width;\n bBox.height = shapeArgs.height || bBox.height;\n bBox.x = shapeArgs.x || bBox.x;\n bBox.y = shapeArgs.y || bBox.y;\n }\n // For images we stretch to bounding box\n if (pattern.image) {\n // If we do not have a bounding box at this point, simply add a defer\n // key and pick this up in the fillSetter handler, where the bounding\n // box should exist.\n if (!bBox.width || !bBox.height) {\n pattern._width = 'defer';\n pattern._height = 'defer';\n // Mark the pattern to be flipped later if upside down (#16810)\n const scaleY = this.series.chart.mapView &&\n this.series.chart.mapView.getSVGTransform().scaleY;\n if (defined(scaleY) && scaleY < 0) {\n pattern._inverted = true;\n }\n return;\n }\n // Handle aspect ratio filling\n if (pattern.aspectRatio) {\n bBox.aspectRatio = bBox.width / bBox.height;\n if (pattern.aspectRatio > bBox.aspectRatio) {\n // Height of bBox will determine width\n bBox.aspectWidth = bBox.height * pattern.aspectRatio;\n }\n else {\n // Width of bBox will determine height\n bBox.aspectHeight = bBox.width / pattern.aspectRatio;\n }\n }\n // We set the width/height on internal properties to differentiate\n // between the options set by a user and by this function.\n pattern._width = pattern.width ||\n Math.ceil(bBox.aspectWidth || bBox.width);\n pattern._height = pattern.height ||\n Math.ceil(bBox.aspectHeight || bBox.height);\n }\n // Handle anchored patterns\n if (pattern.anchorToPoint) {\n // For anchored patterns, always position at origin of the point\n pattern._x = 0;\n pattern._y = 0;\n // Ensure pattern dimensions match the point if not explicitly set\n if (!pattern.width) {\n pattern._width = bBox.width;\n }\n if (!pattern.height) {\n pattern._height = bBox.height;\n }\n }\n else {\n // Original logic for global patterns\n // Set x/y accordingly, centering if using aspect ratio, otherwise\n // adjusting so bounding box corner is 0,0 of pattern.\n if (!pattern.width) {\n pattern._x = pattern.x || 0;\n pattern._x += bBox.x - Math.round(bBox.aspectWidth ?\n Math.abs(bBox.aspectWidth - bBox.width) / 2 :\n 0);\n }\n if (!pattern.height) {\n pattern._y = pattern.y || 0;\n pattern._y += bBox.y - Math.round(bBox.aspectHeight ?\n Math.abs(bBox.aspectHeight - bBox.height) / 2 :\n 0);\n }\n }\n}\n/**\n * Add a pattern to the renderer.\n *\n * @internal\n * @function Highcharts.SVGRenderer#addPattern\n *\n * @param {Highcharts.PatternOptionsObject} options\n * The pattern options.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * The animation options.\n *\n * @return {Highcharts.SVGElement|undefined}\n * The added pattern. Undefined if the pattern already exists.\n *\n * @requires modules/pattern-fill\n */\nfunction rendererAddPattern(options, animation) {\n const animate = pick(animation, true), animationOptions = animObject(animate), color = options.color ||\n 'var(--highcharts-neutral-color-80)', defaultSize = 32, height = options.height ||\n (typeof options._height === 'number' ? options._height : 0) ||\n defaultSize, width = options.width ||\n (typeof options._width === 'number' ? options._width : 0) ||\n defaultSize, patternContentUnits = options.anchorToPoint ?\n 'userSpaceOnUse' :\n (options.patternContentUnits || 'userSpaceOnUse');\n const rect = (fill) => this\n .rect(0, 0, width, height)\n .attr({ fill })\n .add(pattern);\n let attribs, id = options.id, path;\n if (!id) {\n this.idCounter = this.idCounter || 0;\n id = ('highcharts-pattern-' +\n this.idCounter +\n '-' +\n (this.chartIndex || 0));\n ++this.idCounter;\n }\n if (this.forExport) {\n id += '-export';\n }\n // Do nothing if ID already exists\n this.defIds = this.defIds || [];\n if (this.defIds.indexOf(id) > -1) {\n return;\n }\n // Store ID in list to avoid duplicates\n this.defIds.push(id);\n // Calculate pattern element attributes\n const attrs = {\n id: id,\n patternUnits: 'userSpaceOnUse',\n patternContentUnits: patternContentUnits,\n width: width,\n height: height,\n x: options._x || options.x || 0,\n y: options._y || options.y || 0\n };\n if (options._inverted) {\n attrs.patternTransform = 'scale(1, -1)'; // (#16810)\n if (options.patternTransform) {\n options.patternTransform += ' scale(1, -1)';\n }\n }\n if (options.patternTransform) {\n attrs.patternTransform = options.patternTransform;\n }\n const pattern = this.createElement('pattern').attr(attrs).add(this.defs);\n // Set id on the SVGRenderer object\n pattern.id = id;\n // Use an SVG path for the pattern\n if (options.path) {\n path = isObject(options.path) ?\n options.path :\n { d: options.path };\n // The background\n if (options.backgroundColor) {\n rect(options.backgroundColor);\n }\n // The pattern\n attribs = {\n 'd': path.d\n };\n if (!this.styledMode) {\n attribs.stroke = path.stroke || color;\n attribs['stroke-width'] = pick(path.strokeWidth, 2);\n attribs.fill = path.fill || 'none';\n }\n if (path.transform) {\n attribs.transform = path.transform;\n }\n this.createElement('path').attr(attribs).add(pattern);\n pattern.color = color;\n // Image pattern\n }\n else if (options.image) {\n if (animate) {\n this.image(options.image, 0, 0, width, height, function () {\n // Onload\n this.animate({\n opacity: pick(options.opacity, 1)\n }, animationOptions);\n removeEvent(this.element, 'load');\n }).attr({ opacity: 0 }).add(pattern);\n }\n else {\n this.image(options.image, 0, 0, width, height).add(pattern);\n }\n }\n // For non-animated patterns, set opacity now\n if (!(options.image && animate) && typeof options.opacity !== 'undefined') {\n [].forEach.call(pattern.element.childNodes, (child) => {\n child.setAttribute('opacity', options.opacity);\n });\n }\n // Store for future reference\n this.patternElements = this.patternElements || {};\n this.patternElements[id] = pattern;\n return pattern;\n}\n/**\n * Make sure we have a series color.\n * @internal\n */\nfunction wrapSeriesGetColor(proceed) {\n const oldColor = this.options.color;\n // Temporarily remove color options to get defaults\n if (oldColor &&\n oldColor.pattern &&\n !oldColor.pattern.color) {\n delete this.options.color;\n // Get default\n proceed.apply(this, [].slice.call(arguments, 1));\n // Replace with old, but add default color\n oldColor.pattern.color =\n this.color;\n this.color = this.options.color = oldColor;\n }\n else {\n // We have a color, no need to do anything special\n proceed.apply(this, [].slice.call(arguments, 1));\n }\n}\n/**\n * Scale patterns inversely to the series it's used in.\n * Maintains a visual (1,1) scale regardless of size.\n * @internal\n */\nfunction onPatternScaleCorrection() {\n const series = this;\n // If not a series used in a map chart, skip it.\n if (!series.chart?.mapView) {\n return;\n }\n const chart = series.chart, renderer = chart.renderer, patterns = renderer.patternElements;\n // Only scale if we have patterns to scale.\n if (renderer.defIds?.length && patterns) {\n // Filter for points which have patterns that don't use images assigned\n // and has a group scale available.\n series.points.filter(function (p) {\n const point = p;\n // No graphic we can fetch id from, filter out this point.\n if (!point.graphic) {\n return false;\n }\n return (point.graphic.element.hasAttribute('fill') ||\n point.graphic.element.hasAttribute('color') ||\n point.graphic.element.hasAttribute('stroke')) &&\n !point.options.color?.pattern?.image &&\n !!point.group?.scaleX &&\n !!point.group?.scaleY;\n })\n // Map up pattern id's and their scales.\n .map(function (p) {\n const point = p;\n // Parse the id from the graphic element of the point.\n const id = (point.graphic?.element.getAttribute('fill') ||\n point.graphic?.element.getAttribute('color') ||\n point.graphic?.element.getAttribute('stroke') || '')\n .replace(renderer.url, '')\n .replace('url(#', '')\n .replace(')', '');\n return {\n id,\n x: point.group?.scaleX || 1,\n y: point.group?.scaleY || 1\n };\n })\n // Filter out colors and other non-patterns, as well as duplicates.\n .filter(function (pointInfo, index, arr) {\n return pointInfo.id !== '' &&\n pointInfo.id.indexOf('highcharts-pattern-') !== -1 &&\n !arr.some(function (otherInfo, otherIndex) {\n return otherInfo.id === pointInfo.id && otherIndex < index;\n });\n })\n .forEach(function (pointInfo) {\n const id = pointInfo.id;\n patterns[id].scaleX = 1 / pointInfo.x;\n patterns[id].scaleY = 1 / pointInfo.y;\n patterns[id].updateTransform('patternTransform');\n });\n }\n}\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Pattern options\n *\n * @interface Highcharts.PatternOptionsObject\n */ /**\n* When true, the pattern is anchored to each individual point rather than\n* using a global pattern grid. This ensures consistent pattern rendering\n* across points of different sizes and improves accessibility for narrow\n* columns. Defaults to false for backward compatibility.\n*\n* @sample highcharts/series/pattern-fill-anchor-to-point/\n* Compare shared vs anchored pattern positioning\n* @name Highcharts.PatternOptionsObject#anchorToPoint\n* @type {boolean|undefined}\n* @since 12.6.0\n* @default false\n*/ /**\n* Background color for the pattern if a `path` is set (not images).\n* @name Highcharts.PatternOptionsObject#backgroundColor\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* URL to an image to use as the pattern.\n* @name Highcharts.PatternOptionsObject#image\n* @type {string|undefined}\n*/ /**\n* Width of the pattern. For images this is automatically set to the width of\n* the element bounding box if not supplied. For non-image patterns the default\n* is 32px. Note that automatic resizing of image patterns to fill a bounding\n* box dynamically is only supported for patterns with an automatically\n* calculated ID.\n* @name Highcharts.PatternOptionsObject#width\n* @type {number|undefined}\n*/ /**\n* Analogous to pattern.width.\n* @name Highcharts.PatternOptionsObject#height\n* @type {number|undefined}\n*/ /**\n* For automatically calculated width and height on images, it is possible to\n* set an aspect ratio. The image will be zoomed to fill the bounding box,\n* maintaining the aspect ratio defined.\n* @name Highcharts.PatternOptionsObject#aspectRatio\n* @type {number|undefined}\n*/ /**\n* Horizontal offset of the pattern.\n* @name Highcharts.PatternOptionsObject#x\n* @type {number|undefined}\n* @default 0\n*/ /**\n* Vertical offset of the pattern.\n* @name Highcharts.PatternOptionsObject#y\n* @type {number|undefined}\n* @default 0\n*/ /**\n* Either an SVG path as string, or an object. As an object, supply the path\n* string in the `path.d` property. Other supported properties are standard SVG\n* attributes like `path.stroke` and `path.fill`. If a path is supplied for the\n* pattern, the `image` property is ignored.\n* @name Highcharts.PatternOptionsObject#path\n* @type {string|Highcharts.SVGAttributes|undefined}\n*/ /**\n* SVG `patternTransform` to apply to the entire pattern.\n* @name Highcharts.PatternOptionsObject#patternTransform\n* @type {string|undefined}\n* @see [patternTransform demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/series/pattern-fill-transform)\n*/ /**\n* Pattern color, used as default path stroke.\n* @name Highcharts.PatternOptionsObject#color\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* Opacity of the pattern as a float value from 0 to 1.\n* @name Highcharts.PatternOptionsObject#opacity\n* @type {number|undefined}\n*/ /**\n* ID to assign to the pattern. This is automatically computed if not added, and\n* identical patterns are reused. To refer to an existing pattern for a\n* Highcharts color, use `color: \"url(#pattern-id)\"`.\n* @name Highcharts.PatternOptionsObject#id\n* @type {string|undefined}\n*/\n/**\n * Holds a pattern definition.\n *\n * @sample highcharts/series/pattern-fill-area/\n * Define a custom path pattern\n * @sample highcharts/series/pattern-fill-pie/\n * Default patterns and a custom image pattern\n * @sample maps/demo/pattern-fill-map/\n * Custom images on map\n *\n * @example\n * // Pattern used as a color option\n * color: {\n * pattern: {\n * path: {\n * d: 'M 3 3 L 8 3 L 8 8 Z',\n * fill: '#102045'\n * },\n * width: 12,\n * height: 12,\n * color: '#907000',\n * opacity: 0.5\n * }\n * }\n *\n * @interface Highcharts.PatternObject\n */ /**\n* Pattern options\n* @name Highcharts.PatternObject#pattern\n* @type {Highcharts.PatternOptionsObject}\n*/ /**\n* Animation options for the image pattern loading.\n* @name Highcharts.PatternObject#animation\n* @type {boolean|Partial<Highcharts.AnimationOptionsObject>|undefined}\n*/ /**\n* Optionally an index referencing which pattern to use. Highcharts adds\n* 10 default patterns to the `Highcharts.patterns` array. Additional\n* pattern definitions can be pushed to this array if desired. This option\n* is an index into this array.\n* @name Highcharts.PatternObject#patternIndex\n* @type {number|undefined}\n*/\n''; // Keeps doclets above in transpiled file\n","// SPDX-License-Identifier: LicenseRef-Highcharts\n/**\n * @license Highcharts JS v13.0.1 (2026-08-17)\n * @module highcharts/modules/pattern-fill\n * @requires highcharts\n *\n * Module for adding patterns and images as point fills.\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi, Øystein Moseng\n *\n * A commercial license may be required depending on use,\n * see www.highcharts.com/license\n */\n'use strict';\nimport Highcharts from '../../Core/Globals.js';\nimport { composePatternFill, patterns } from '../../Extensions/PatternFill.js';\nconst G = Highcharts;\nG.patterns = patterns;\ncomposePatternFill(G.Chart, G.Series, G.SVGRenderer);\nexport default Highcharts;\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|