@equinor/esv-intersection 3.1.9 → 4.0.0

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.
Files changed (41) hide show
  1. package/dist/datautils/schematicShapeGenerator.d.ts +5 -5
  2. package/dist/datautils/schematicShapeGenerator.d.ts.map +1 -1
  3. package/dist/index.cjs +2 -2
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.mjs +1386 -1381
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/index.umd.js +2 -2
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts +2 -3
  10. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts.map +1 -1
  11. package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts.map +1 -1
  12. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts +3 -4
  13. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts.map +1 -1
  14. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts +4 -4
  15. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts.map +1 -1
  16. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts +3 -4
  17. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts.map +1 -1
  18. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts +4 -4
  19. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts.map +1 -1
  20. package/dist/layers/GeomodelLayerV2.d.ts.map +1 -1
  21. package/dist/layers/SchematicLayer.d.ts +6 -6
  22. package/dist/layers/SchematicLayer.d.ts.map +1 -1
  23. package/dist/layers/base/PixiLayer.d.ts +7 -8
  24. package/dist/layers/base/PixiLayer.d.ts.map +1 -1
  25. package/dist/utils/vectorUtils.d.ts +6 -6
  26. package/dist/utils/vectorUtils.d.ts.map +1 -1
  27. package/dist/vendor/pixi-dashed-line/index.d.ts +13 -13
  28. package/dist/vendor/pixi-dashed-line/index.d.ts.map +1 -1
  29. package/package.json +3 -3
  30. package/src/datautils/schematicShapeGenerator.ts +23 -21
  31. package/src/layers/CustomDisplayObjects/ComplexRope.ts +10 -13
  32. package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +9 -8
  33. package/src/layers/CustomDisplayObjects/FixedWidthSimpleRope.ts +11 -14
  34. package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +13 -12
  35. package/src/layers/CustomDisplayObjects/UniformTextureStretchRope.ts +11 -16
  36. package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +11 -11
  37. package/src/layers/GeomodelLayerV2.ts +4 -5
  38. package/src/layers/SchematicLayer.ts +42 -31
  39. package/src/layers/base/PixiLayer.ts +11 -38
  40. package/src/utils/vectorUtils.ts +6 -6
  41. package/src/vendor/pixi-dashed-line/index.ts +33 -32
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../node_modules/d3-axis/src/identity.js","../node_modules/d3-axis/src/axis.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/sum.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/quantize.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../src/components/axis.ts","../node_modules/@equinor/videx-math/dist/index.esm.js","../node_modules/@equinor/videx-linear-algebra/dist/index.esm.js","../node_modules/@equinor/videx-vector2/dist/index.esm.js","../node_modules/curve-interpolator/dist/index.esm.js","../src/utils/root-finder.ts","../src/utils/arc-length.ts","../src/utils/binary-search.ts","../src/control/ExtendedCurveInterpolator.ts","../src/control/IntersectionReferenceSystem.ts","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../src/control/ZoomPanHandler.ts","../src/layers/base/Layer.ts","../src/constants.ts","../src/layers/base/CanvasLayer.ts","../src/layers/base/HTMLLayer.ts","../src/layers/base/SVGLayer.ts","../src/layers/base/PixiLayer.ts","../src/layers/schematicInterfaces.ts","../src/utils/text.ts","../src/layers/CalloutCanvasLayer.ts","../src/utils/color.ts","../src/layers/GeomodelCanvasLayer.ts","../src/datautils/findsample.ts","../src/datautils/picks.ts","../src/datautils/colortable.ts","../src/datautils/seismicimage.ts","../src/datautils/surfacedata.ts","../src/datautils/trajectory.ts","../src/layers/GeomodelLabelsLayer.ts","../src/layers/GeomodelLayerV2.ts","../src/layers/GridLayer.ts","../src/layers/ImageCanvasLayer.ts","../src/vendor/pixi-dashed-line/index.ts","../src/utils/vectorUtils.ts","../src/datautils/schematicShapeGenerator.ts","../src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts","../src/layers/CustomDisplayObjects/ComplexRope.ts","../src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts","../src/layers/CustomDisplayObjects/FixedWidthSimpleRope.ts","../src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts","../src/layers/CustomDisplayObjects/UniformTextureStretchRope.ts","../src/layers/SchematicLayer.ts","../src/layers/SeismicCanvasLayer.ts","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/bundle.js","../node_modules/d3-shape/src/curve/cardinal.js","../node_modules/d3-shape/src/curve/catmullRom.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../src/layers/WellborePathLayer.ts","../src/layers/ReferenceLineLayer.ts","../src/control/LayerManager.ts","../src/control/overlay.ts","../src/control/MainController.ts"],"sourcesContent":["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 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","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(value);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\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 sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\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","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\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 number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\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","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\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","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","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","import { axisRight, axisBottom } from 'd3-axis';\nimport { Selection } from 'd3-selection';\nimport { ScaleLinear, scaleLinear } from 'd3-scale';\nimport { OnResizeEvent, OnRescaleEvent } from '../interfaces';\n\nexport type Options = {\n offsetX: number;\n offsetY: number;\n visible: boolean;\n};\n\nexport class Axis {\n private mainGroup: Selection<SVGSVGElement, unknown, null, undefined>;\n private _scaleX: ScaleLinear<number, number>;\n private _scaleY: ScaleLinear<number, number>;\n private _showLabels = true;\n private _labelXDesc: string;\n private _labelYDesc: string;\n private _unitOfMeasure: string;\n private _offsetX = 0;\n private _offsetY = 0;\n private _flipX = false;\n private _flipY = false;\n private visible = true;\n\n constructor(mainGroup: Axis['mainGroup'], showLabels = true, labelXDesc: string, labelYDesc: string, unitOfMeasure: string, options?: Options) {\n this.mainGroup = mainGroup;\n this._showLabels = showLabels;\n this._labelXDesc = labelXDesc;\n this._labelYDesc = labelYDesc;\n this._unitOfMeasure = unitOfMeasure;\n if (options && options.offsetX) {\n this._offsetX = options.offsetX;\n }\n if (options && options.offsetX) {\n this._offsetY = options.offsetY;\n }\n if (options && options.visible) {\n this.visible = options.visible;\n }\n this.mainGroup.style('pointer-events', 'none');\n\n this._scaleX = scaleLinear().domain([0, 1]).range([0, 1]);\n this._scaleY = scaleLinear().domain([0, 1]).range([0, 1]);\n }\n\n private renderLabelx(): Selection<SVGTextElement, unknown, null, undefined> {\n const { _labelXDesc: labelXDesc, _unitOfMeasure: unitOfMeasure, _showLabels, _scaleX: scaleX } = this;\n const [, width] = scaleX.range();\n const gx = this.renderGx();\n\n let labelx: Selection<SVGTextElement, unknown, null, undefined> = gx.select('text.axis-labelx');\n if (_showLabels) {\n if (labelx.empty()) {\n labelx = gx\n .append('text')\n .attr('class', 'axis-labelx')\n .attr('fill', 'rgba(0,0,0,0.3)')\n .style('text-anchor', 'middle')\n .style('font-weight', '800')\n .style('font-size', '10px')\n .text(`${labelXDesc} (${unitOfMeasure})`);\n }\n } else {\n labelx.remove();\n }\n labelx.attr('transform', `translate(${width! / 2},-4)`);\n return labelx;\n }\n\n private renderLabely(): Selection<SVGTextElement, unknown, null, undefined> {\n const { _labelYDesc: labelYDesc, _unitOfMeasure: unitOfMeasure, _showLabels, _scaleY } = this;\n const [, height] = _scaleY.range();\n const gy = this.renderGy();\n\n let labely: Selection<SVGTextElement, unknown, null, undefined> = gy.select('text.axis-labely');\n if (_showLabels) {\n if (labely.empty()) {\n labely = gy\n .append('text')\n .attr('class', 'axis-labely')\n .attr('fill', 'rgba(0,0,0,0.3)')\n .style('text-anchor', 'middle')\n .style('font-weight', '800')\n .style('font-size', '10px')\n .text(`${labelYDesc} (${unitOfMeasure})`);\n }\n labely.attr('transform', `translate(-10,${height! / 2})rotate(90)`);\n } else {\n labely.remove();\n }\n return labely;\n }\n\n private renderGy(): Selection<SVGGElement, unknown, null, undefined> {\n const { _scaleX, _scaleY } = this;\n const yAxis = axisRight(_scaleY) as (selection: Selection<SVGGElement, unknown, null, undefined>, ...args: unknown[]) => void;\n const [, width] = _scaleX.range();\n const gy = this.createOrGet('y-axis');\n gy.call(yAxis);\n gy.attr('transform', `translate(${width},0)`);\n\n return gy;\n }\n\n private renderGx(): Selection<SVGGElement, unknown, null, undefined> {\n const { _scaleX, _scaleY } = this;\n const xAxis = axisBottom(_scaleX) as (selection: Selection<SVGGElement, unknown, null, undefined>, ...args: unknown[]) => void;\n const [, height] = _scaleY.range();\n\n const gx = this.createOrGet('x-axis');\n gx.attr('transform', `translate(0 ${height})`);\n gx.call(xAxis);\n return gx;\n }\n\n private createOrGet = (name: string): Selection<SVGGElement, unknown, null, undefined> => {\n const { mainGroup } = this;\n let res: Selection<SVGGElement, unknown, null, undefined> = mainGroup.select(`g.${name}`);\n if (res.empty()) {\n res = mainGroup.append('g').attr('class', name);\n }\n return res;\n };\n\n render(): void {\n this.renderLabelx();\n this.renderLabely();\n }\n\n onResize(event: OnResizeEvent): void {\n this.mainGroup.attr('height', `${event.height}px`).attr('width', `${event.width}px`);\n }\n\n onRescale(event: OnRescaleEvent): void {\n const { _scaleX, _scaleY, offsetX, offsetY } = this;\n const { xScale, yScale } = event;\n const xBounds = xScale.domain() as [number, number];\n const yBounds = yScale.domain() as [number, number];\n\n const xRange = xScale.range();\n const yRange = yScale.range();\n\n _scaleX.domain([xBounds[0] - offsetX, xBounds[1] - offsetX]).range(xRange);\n _scaleY.domain([yBounds[0] - offsetY, yBounds[1] - offsetY]).range(yRange);\n this.flipX(this._flipX);\n this.flipY(this._flipY);\n\n if (this.visible) {\n this.render();\n }\n }\n\n show(): Axis {\n this.visible = true;\n this.mainGroup.attr('visibility', 'visible');\n this.render();\n return this;\n }\n\n hide(): Axis {\n this.visible = false;\n this.mainGroup.attr('visibility', 'hidden');\n return this;\n }\n\n flipX(flipX: boolean): Axis {\n this._flipX = flipX;\n const domain = this._scaleX.domain() as [number, number];\n const flip = flipX ? -1 : 1;\n this._scaleX.domain([flip * domain[0], flip * domain[1]]);\n return this;\n }\n\n flipY(flipY: boolean): Axis {\n this._flipY = flipY;\n const domain = this._scaleY.domain() as [number, number];\n const flip = flipY ? -1 : 1;\n this._scaleY.domain([flip * domain[0], flip * domain[1]]);\n return this;\n }\n\n showLabels(): Axis {\n this._showLabels = true;\n this.render();\n return this;\n }\n\n hideLabels(): Axis {\n this._showLabels = false;\n this.render();\n return this;\n }\n\n setLabelX(label: string): Axis {\n this._labelXDesc = label;\n return this;\n }\n\n setLabelY(label: string): Axis {\n this._labelYDesc = label;\n return this;\n }\n\n setUnitOfMeasure(uom: string): Axis {\n this._unitOfMeasure = uom;\n return this;\n }\n\n setLabels(labelX: string, labelY: string, unitOfMeasure: string): Axis {\n this._labelXDesc = labelX;\n this._labelYDesc = labelY;\n this._unitOfMeasure = unitOfMeasure;\n return this;\n }\n\n get offsetX(): number {\n return this._offsetX;\n }\n\n set offsetX(offset: number) {\n this._offsetX = offset;\n }\n\n get offsetY(): number {\n return this._offsetY;\n }\n\n set offsetY(offset: number) {\n this._offsetY = offset;\n }\n\n get scaleX(): ScaleLinear<number, number> {\n return this._scaleX.copy();\n }\n\n get scaleY(): ScaleLinear<number, number> {\n return this._scaleY.copy();\n }\n}\n","const RAD2DEG=180/Math.PI,DEG2RAD=Math.PI/180,TAU=2*Math.PI;function clamp(value,min=0,max=1){return value<min?min:value>max?max:value}function step(edge,x){return x>=edge?1:0}function smoothstep(edge0,edge1,x){const t=clamp((x-edge0)/(edge1-edge0));return t*t*(3-2*t)}function lerp(a,b,t){const m=clamp(t,0,1);return a*(1-m)+b*m}function inverseLerp(a,b,value){return clamp((value-a)/(b-a),0,1)}function round(value,digits=1){const f=Math.pow(10,digits);return Math.round(value*f)/f}function radians(deg){return deg*DEG2RAD}function degrees(rad){return rad*RAD2DEG}function nrad(rad){const v=rad%TAU;return v<0?v+TAU:v}function seq(start,end,steps){const target=new Array(steps),incr=(end-start)/(steps-1);target[0]=start;for(let i=1;i<steps-1;i++)target[i]=start+i*incr;return target[steps-1]=end,target}function seqI(steps){const target=new Array(steps),incr=1/(steps-1);target[0]=0;for(let i=1;i<steps-1;i++)target[i]=i*incr;return target[steps-1]=1,target}function min(a,...b){let min;if(Array.isArray(a)){min=a[0];for(let i=1;i<a.length;i++)a[i]<min&&(min=a[i])}else{min=a;for(let i=0;i<b.length;i++)b[i]<min&&(min=b[i])}return min}function max(a,...b){let max;if(Array.isArray(a)){max=a[0];for(let i=1;i<a.length;i++)a[i]>max&&(max=a[i])}else{max=a;for(let i=0;i<b.length;i++)b[i]>max&&(max=b[i])}return max}function extent(a,...b){let min,max;if(Array.isArray(a)){min=max=a[0];for(let i=1;i<a.length;i++)a[i]<min&&(min=a[i]),a[i]>max&&(max=a[i])}else{min=max=a;for(let i=0;i<b.length;i++)b[i]<min&&(min=b[i]),b[i]>max&&(max=b[i])}return[min,max]}function mean(a,...b){let sum=0;if(Array.isArray(a)){for(let i=0;i<a.length;i++)sum+=a[i];return sum/a.length}for(let i=0;i<b.length;i++)sum+=b[i];return(sum+a)/(b.length+1)}export{clamp,degrees,extent,inverseLerp,lerp,max,mean,min,nrad,radians,round,seq,seqI,smoothstep,step};\n","import{clamp as clamp$1,step as step$1}from\"@equinor/videx-math\";function copy(source,target){for(var i=0;i<source.length;i++)target[i]=source[i];return target}function add(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]+b[i];return target}function addAll(vectors,target){void 0===target&&(target=vectors[0]),copy(vectors[0],target);for(var m=1;m<vectors.length;m++)for(var n=0;n<target.length;n++)target[n]+=vectors[m][n];return target}function sub(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]-b[i];return target}function subAll(a,vectors,target){void 0===target&&(target=a),copy(a,target);for(var m=0;m<vectors.length;m++)for(var n=0;n<target.length;n++)target[n]-=vectors[m][n];return target}function scale(a,factor,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]*factor;return target}function sumsqr(a){for(var sum=0,i=0;i<a.length;i++)sum+=Math.pow(a[i],2);return sum}function magnitude(a){var sq=sumsqr(a);return 0===sq?sq:Math.sqrt(sq)}function normalize(a,target){void 0===target&&(target=a);var len=magnitude(a);return 0===len?fill(0,target):scale(a,1/len,target)}function fill(value,target){for(var i=0;i<target.length;i++)target[i]=value;return target}function dir(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=b[i]-a[i];return target}function dist(a,b){for(var sq=0,i=0;i<a.length;i++)sq+=Math.pow(b[i]-a[i],2);return 0===sq?sq:Math.sqrt(sq)}function dot(a,b){for(var sum=0,i=0;i<a.length;i++)sum+=a[i]*b[i];return sum}function cross(a,b,target){void 0===target&&(target=a);var y=a[2]*b[0]-a[0]*b[2],z=a[0]*b[1]-a[1]*b[0];return target[0]=a[1]*b[2]-a[2]*b[1],target[1]=y,target[2]=z,target}function triple(a,b,c){return dot(a,cross(b,c))}function clamp(a,min,max,target){void 0===min&&(min=0),void 0===max&&(max=1),void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=clamp$1(a[i],min,max);return target}function step(edges,x,target){void 0===target&&(target=edges);for(var i=0;i<edges.length;i++)target[i]=step$1(edges[i],x);return target}function mix(a,b,t,target){void 0===target&&(target=a);for(var n=clamp$1(t,0,1),m=1-n,i=0;i<a.length;i++)target[i]=a[i]*m+b[i]*n;return target}function modify(a,modifier,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=modifier(a[i],i);return target}function isZeroVector(a,epsilon){void 0===epsilon&&(epsilon=0),void 0===epsilon&&(epsilon=0);for(var i=0;i<a.length;i++)if(Math.abs(a[i])>epsilon)return!1;return!0}function reverse(vector){for(var temp,tempIdx,end=vector.length-1,i=0;i<Math.ceil(end/2);i++)temp=vector[tempIdx=end-i],vector[tempIdx]=vector[i],vector[i]=temp;return vector}function flatten(vectors){for(var output=[],m=0;m<vectors.length;m++)for(var n=0;n<vectors[m].length;n++)output.push(vectors[m][n]);return output}function reshape(array,dimensions){for(var output=[],i=0;i<array.length;i+=dimensions){for(var vector=new Array(dimensions),n=0;n<dimensions;n++)vector[n]=array[i+n];output.push(vector)}return output}function isPointInTriangle(p,a,b,c,inwardAdjustment){void 0===inwardAdjustment&&(inwardAdjustment=1e-6);var centerX=.33333*(a[0]+b[0]+c[0]),centerY=.33333*(a[1]+b[1]+c[1]),adjPx=p[0]+(centerX-p[0])*inwardAdjustment,adjPy=p[1]+(centerY-p[1])*inwardAdjustment,APx=adjPx-a[0],APy=adjPy-a[1],leftOfAB=(b[0]-a[0])*APy-(b[1]-a[1])*APx>0;return leftOfAB!==(c[0]-a[0])*APy-(c[1]-a[1])*APx>0&&leftOfAB===(c[0]-b[0])*(adjPy-b[1])-(c[1]-b[1])*(adjPx-b[0])>0}function isPointInTriangleArray(p,triangle,tolerance){return void 0===tolerance&&(tolerance=1e-4),isPointInTriangle(p,triangle[0],triangle[1],triangle[2],tolerance)}export{add,addAll,clamp,copy,cross,dir,dist,dot,fill,flatten,isPointInTriangle,isPointInTriangleArray,isZeroVector,magnitude,mix,modify,normalize,reshape,reverse,scale,step,sub,subAll,sumsqr,triple};\n","import{add,sub,scale,magnitude,normalize,dist,dot,mix,isZeroVector,modify}from\"@equinor/videx-linear-algebra\";var RAD2DEG=180/Math.PI,DEG2RAD=Math.PI/180;function rotate(v,rad,target){var cr=Math.cos(rad),sr=Math.sin(rad),x=v[0];return target[0]=cr*x-sr*v[1],target[1]=sr*x+cr*v[1],target}function angleRight(v){return Math.atan2(v[1],v[0])}function signedAngle(a,b){var phi=Math.atan2(b[1],b[0])-Math.atan2(a[1],a[0]);return phi>Math.PI?phi-=2*Math.PI:phi<=-Math.PI&&(phi+=2*Math.PI),phi}var Vector2=function(){function Vector2(a){for(var b=[],_i=1;_i<arguments.length;_i++)b[_i-1]=arguments[_i];this.isMutating=!1,this.length=2,\"number\"==typeof a?\"number\"==typeof b[0]?(this[0]=a,this[1]=b[0]):(this[0]=a,this[1]=a):\"x\"in a&&\"y\"in a?(this[0]=a.x,this[1]=a.y):(this[0]=a[0],this[1]=a[1])}return Object.defineProperty(Vector2.prototype,\"x\",{get:function(){return this[0]},set:function(value){this[0]=value},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"y\",{get:function(){return this[1]},set:function(value){this[1]=value},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"magnitude\",{get:function(){return magnitude(this)},set:function(val){var len=magnitude(this);scale(this,val/len,this)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"mutable\",{get:function(){return this.isMutating=!0,this},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"immutable\",{get:function(){return this.isMutating=!1,this},enumerable:!1,configurable:!0}),Vector2.prototype.set=function(a,b){return\"number\"==typeof a?\"number\"==typeof b?(this[0]=a,this[1]=b):(this[0]=a,this[1]=a):(this[0]=a[0],this[1]=a[1]),this},Vector2.prototype.add=function(a,b){return void 0===b&&(b=0),\"number\"==typeof a?this.isMutating?add(this,[a,b]):add(this.clone(),[a,b]):this.isMutating?add(this,a):add(this.clone(),a)},Vector2.add=function(a,b){var output=new Vector2(a);return add(output,b)},Vector2.prototype.sub=function(a,b){return void 0===b&&(b=0),\"number\"==typeof a?this.isMutating?sub(this,[a,b]):sub(this.clone(),[a,b]):this.isMutating?sub(this,a):sub(this.clone(),a)},Vector2.sub=function(a,b){var output=new Vector2(a);return sub(output,b)},Vector2.prototype.subFrom=function(a,b){return void 0===b&&(b=0),\"number\"==typeof a?this.isMutating?(this[0]=a-this[0],this[1]=b-this[1],this):new Vector2(a-this[0],b-this[1]):this.isMutating?(this[0]=a[0]-this[0],this[1]=a[1]-this[1],this):new Vector2(a[0]-this[0],a[1]-this[1])},Vector2.divide=function(v,n){var output=new Vector2(v);return scale(output,1/n)},Vector2.multiply=function(v,n){var output=new Vector2(v);return scale(output,n)},Vector2.prototype.scale=function(n){return scale(this,n,this.isMutating?this:Vector2.zero)},Vector2.prototype.rescale=function(n){var len=magnitude(this);return len<=0?this.isMutating?this:Vector2.zero:scale(this,n/len,this.isMutating?this:Vector2.zero)},Vector2.prototype.clampMagnitude=function(n){var len=magnitude(this);return len>n?scale(this,n/len,this.isMutating?this:Vector2.zero):this.isMutating?this:this.clone()},Vector2.prototype.rotate=function(rad){return rotate(this,rad,this.isMutating?this:Vector2.zero)},Vector2.prototype.rotateDeg=function(deg){return rotate(this,deg*DEG2RAD,this.isMutating?this:Vector2.zero)},Vector2.prototype.rotate90=function(){return v=this,target=this.isMutating?this:Vector2.zero,x=v[0],target[0]=-v[1],target[1]=x,target;var v,target,x},Vector2.prototype.rotate180=function(){return v=this,(target=this.isMutating?this:Vector2.zero)[0]=-v[0],target[1]=-v[1],target;var v,target},Vector2.prototype.rotate270=function(){return v=this,target=this.isMutating?this:Vector2.zero,x=v[0],target[0]=v[1],target[1]=-x,target;var v,target,x},Vector2.prototype.normalize=function(){return normalize(this)},Vector2.prototype.normalized=function(){return normalize(this,Vector2.zero)},Vector2.distance=function(a,b){return dist(a,b)},Vector2.dot=function(a,b){return dot(a,b)},Vector2.cross=function(a,b){return function(a,b){return a[0]*b[1]-a[1]*b[0]}(a,b)},Vector2.angleRight=function(v){return angleRight(v)},Vector2.angleRightDeg=function(v){return angleRight(v)*RAD2DEG},Vector2.angle=function(a,b){return Math.abs(signedAngle(a,b))},Vector2.angleDeg=function(a,b){return Math.abs(signedAngle(a,b))*RAD2DEG},Vector2.signedAngle=function(a,b){return signedAngle(a,b)},Vector2.signedAngleDeg=function(a,b){return signedAngle(a,b)*RAD2DEG},Vector2.lerp=function(a,b,t){var output=new Vector2(a);return mix(output,b,t)},Vector2.lerpRot=function(a,b,t){return function(a,b,n,target){return void 0===target&&(target=a),rotate(a,n*signedAngle(a,b),target)}(a,b,t,Vector2.zero)},Vector2.prototype.clone=function(){return new Vector2(this[0],this[1])},Vector2.equals=function(a,b,epsilon){return void 0===epsilon&&(epsilon=0),!(Math.abs(a[0]-b[0])>epsilon)&&!(Math.abs(a[1]-b[1])>epsilon)},Vector2.prototype.equals=function(vector,epsilon){return void 0===epsilon&&(epsilon=0),Vector2.equals(this,vector,epsilon)},Vector2.isZeroVector=function(vector,epsilon){return void 0===epsilon&&(epsilon=0),isZeroVector(vector,epsilon)},Vector2.prototype.isZeroVector=function(epsilon){return void 0===epsilon&&(epsilon=0),isZeroVector(this,epsilon)},Vector2.prototype.toArray=function(){return[this[0],this[1]]},Vector2.prototype.modify=function(modifier){return modify(this,modifier)},Vector2.prototype[Symbol.iterator]=function(){var _this=this,i=0;return{next:function(){switch(i++){case 0:return{value:_this[0],done:!1};case 1:return{value:_this[1],done:!1};default:return{value:-1,done:!0}}}}},Object.defineProperty(Vector2,\"zero\",{get:function(){return new Vector2(0,0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"one\",{get:function(){return new Vector2(1,1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"positiveInfinity\",{get:function(){return new Vector2(1/0,1/0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"negativeInfinity\",{get:function(){return new Vector2(-1/0,-1/0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"up\",{get:function(){return new Vector2(0,1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"right\",{get:function(){return new Vector2(1,0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"down\",{get:function(){return new Vector2(0,-1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"left\",{get:function(){return new Vector2(-1,0)},enumerable:!1,configurable:!0}),Vector2}();export{Vector2 as default};\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar extendStatics=function(d,b){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)b.hasOwnProperty(p)&&(d[p]=b[p])},extendStatics(d,b)};function __extends(d,b){function __(){this.constructor=d}extendStatics(d,b),d.prototype=null===b?Object.create(b):(__.prototype=b.prototype,new __)}var __assign=function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++)for(var p in s=arguments[i])Object.prototype.hasOwnProperty.call(s,p)&&(t[p]=s[p]);return t},__assign.apply(this,arguments)};function extrapolateControlPoint(u,v){for(var e=new Array(u.length),i=0;i<u.length;i++)e[i]=2*u[i]-v[i];return e}function getControlPoints(idx,points,closed){var p0,p1,p2,p3,maxIndex=points.length-1;if(closed)p0=points[idx-1<0?maxIndex:idx-1],p1=points[idx%points.length],p2=points[(idx+1)%points.length],p3=points[(idx+2)%points.length];else{if(idx===maxIndex)throw Error(\"There is no spline segment at this index for a closed curve!\");p1=points[idx],p2=points[idx+1],p0=idx>0?points[idx-1]:extrapolateControlPoint(p1,p2),p3=idx<maxIndex-1?points[idx+2]:extrapolateControlPoint(p2,p1)}return[p0,p1,p2,p3]}function getSegmentIndexAndT(ct,points,closed){void 0===closed&&(closed=!1);var nPoints=closed?points.length:points.length-1;if(1===ct)return{index:nPoints-1,weight:1};var p=nPoints*ct,index=Math.floor(p);return{index:index,weight:p-index}}function fill(v,val){for(var i=0;i<v.length;i++)v[i]=val;return v}function map(v,func){for(var i=0;i<v.length;i++)v[i]=func(v[i],i);return v}function reduce(v,func,r){void 0===r&&(r=0);for(var i=0;i<v.length;i++)r=func(r,v[i],i);return r}function copyValues(source,target){target=target||new Array(source.length);for(var i=0;i<source.length;i++)target[i]=source[i];return target}function simplify2d(inputArr,maxOffset,maxDistance){var _a;if(void 0===maxOffset&&(maxOffset=.001),void 0===maxDistance&&(maxDistance=10),inputArr.length<=4)return inputArr;for(var _b=inputArr[0],o0=_b[0],o1=_b[1],arr=inputArr.map((function(d){return[d[0]-o0,d[1]-o1]})),_c=arr[0],a0=_c[0],a1=_c[1],sim=[inputArr[0]],i=1;i+1<arr.length;i++){var _d=arr[i],t0=_d[0],t1=_d[1],_e=arr[i+1],b0=_e[0],b1=_e[1];if(b0-t0!=0||b1-t1!=0){var proximity=Math.abs(a0*b1-a1*b0+b0*t1-b1*t0+a1*t0-a0*t1)/Math.sqrt(Math.pow(b0-a0,2)+Math.pow(b1-a1,2)),dir=[a0-t0,a1-t1],len=Math.sqrt(Math.pow(dir[0],2)+Math.pow(dir[1],2));(proximity>maxOffset||len>=maxDistance)&&(sim.push([t0+o0,t1+o1]),a0=(_a=[t0,t1])[0],a1=_a[1])}}var last=arr[arr.length-1];return sim.push([last[0]+o0,last[1]+o1]),sim}function clamp(value,min,max){return void 0===min&&(min=0),void 0===max&&(max=1),value<min?min:value>max?max:value}function binarySearch(targetValue,accumulatedValues){var min=accumulatedValues[0];if(targetValue>=accumulatedValues[accumulatedValues.length-1])return accumulatedValues.length-1;if(targetValue<=min)return 0;for(var left=0,right=accumulatedValues.length-1;left<=right;){var mid=Math.floor((left+right)/2),lMid=accumulatedValues[mid];if(lMid<targetValue)left=mid+1;else{if(!(lMid>targetValue))return mid;right=mid-1}}return Math.max(0,right)}var EPS=Math.pow(2,-42);function cuberoot(x){var y=Math.pow(Math.abs(x),1/3);return x<0?-y:y}function getQuadRoots(a,b,c){if(Math.abs(a)<EPS)return Math.abs(b)<EPS?[]:[-c/b];var D=b*b-4*a*c;return Math.abs(D)<EPS?[-b/(2*a)]:D>0?[(-b+Math.sqrt(D))/(2*a),(-b-Math.sqrt(D))/(2*a)]:[]}function getCubicRoots(a,b,c,d){if(Math.abs(a)<EPS)return getQuadRoots(b,c,d);var roots,p=(3*a*c-b*b)/(3*a*a),q=(2*b*b*b-9*a*b*c+27*a*a*d)/(27*a*a*a);if(Math.abs(p)<EPS)roots=[cuberoot(-q)];else if(Math.abs(q)<EPS)roots=[0].concat(p<0?[Math.sqrt(-p),-Math.sqrt(-p)]:[]);else{var D=q*q/4+p*p*p/27;if(Math.abs(D)<EPS)roots=[-1.5*q/p,3*q/p];else if(D>0){roots=[(u=cuberoot(-q/2-Math.sqrt(D)))-p/(3*u)]}else{var u=2*Math.sqrt(-p/3),t=Math.acos(3*q/p/u)/3,k=2*Math.PI/3;roots=[u*Math.cos(t),u*Math.cos(t-k),u*Math.cos(t-2*k)]}}for(var i=0;i<roots.length;i++)roots[i]-=b/(3*a);return roots}function dot(v1,v2){if(v1.length!==v2.length)throw Error(\"Vectors must be of equal length!\");for(var p=0,k=0;k<v1.length;k++)p+=v1[k]*v2[k];return p}function cross(v1,v2,target){if(!(v1.length>3)){target=target||new Array(3);var ax=v1[0],ay=v1[1],az=v1[2]||0,bx=v2[0],by=v2[1],bz=v2[2]||0;return target[0]=ay*bz-az*by,target[1]=az*bx-ax*bz,target[2]=ax*by-ay*bx,target}}function add(v1,v2,target){target=target||new Array(v1.length);for(var k=0;k<v1.length;k++)target[k]=v1[k]+v2[k];return target}function sub(v1,v2,target){target=target||new Array(v1.length);for(var k=0;k<v1.length;k++)target[k]=v1[k]-v2[k];return target}function sumOfSquares(v1,v2){for(var sumOfSquares=0,i=0;i<v1.length;i++)sumOfSquares+=(v1[i]-v2[i])*(v1[i]-v2[i]);return sumOfSquares}function magnitude(v){for(var sumOfSquares=0,i=0;i<v.length;i++)sumOfSquares+=v[i]*v[i];return Math.sqrt(sumOfSquares)}function distance(p1,p2){var sqrs=sumOfSquares(p1,p2);return 0===sqrs?0:Math.sqrt(sqrs)}function normalize(v,target){var u=target?copyValues(v,target):v,squared=reduce(u,(function(s,c){return s+Math.pow(c,2)})),l=Math.sqrt(squared);return 0===l?fill(u,0):map(u,(function(c){return c/l}))}function orthogonal(v,target){if(v.length>2)throw Error(\"Only supported for 2d vectors\");var u=target?copyValues(v,target):v,x=-u[1];return u[1]=u[0],u[0]=x,u}function rotate2d(vector,angle,anchor,target){void 0===angle&&(angle=0),void 0===anchor&&(anchor=[0,0]);var c=Math.cos(angle),s=Math.sin(angle),vx=vector[0]-anchor[0],vy=vector[1]-anchor[1];return(target=target||vector)[0]=vx*c-vy*s+anchor[0],target[1]=vx*s+vy*c+anchor[1],target}function rotate3d(vector,axis,angle,target){void 0===axis&&(axis=[0,1,0]),void 0===angle&&(angle=0);var c=Math.cos(angle),s=Math.sin(angle),t=1-c,vx=vector[0],vy=vector[1],vz=vector[2],ax=axis[0],ay=axis[1],az=axis[2],tx=t*ax,ty=t*ay;return(target=target||vector)[0]=(tx*ax+c)*vx+(tx*ay-s*az)*vy+(tx*az+s*ay)*vz,target[1]=(tx*ay+s*az)*vx+(ty*ay+c)*vy+(ty*az-s*ax)*vz,target[2]=(tx*az-s*ay)*vx+(ty*az+s*ax)*vy+(t*az*az+c)*vz,target}function calcKnotSequence(p0,p1,p2,p3,alpha){if(void 0===alpha&&(alpha=0),0===alpha)return[0,1,2,3];var deltaT=function(u,v){return Math.pow(sumOfSquares(u,v),.5*alpha)},t1=deltaT(p1,p0),t2=deltaT(p2,p1)+t1;return[0,t1,t2,deltaT(p3,p2)+t2]}function calculateCoefficients(p0,p1,p2,p3,options){for(var tension=Number.isFinite(options.tension)?options.tension:.5,alpha=Number.isFinite(options.alpha)?options.alpha:null,knotSequence=alpha>0?calcKnotSequence(p0,p1,p2,p3,alpha):null,coefficientsList=new Array(p0.length),k=0;k<p0.length;k++){var u=0,v=0,v0=p0[k],v1=p1[k],v2=p2[k],v3=p3[k];if(knotSequence){var t0=knotSequence[0],t1=knotSequence[1],t2=knotSequence[2],t3=knotSequence[3];t1-t2!=0&&(t0-t1!=0&&t0-t2!=0&&(u=(1-tension)*(t2-t1)*((v0-v1)/(t0-t1)-(v0-v2)/(t0-t2)+(v1-v2)/(t1-t2))),t1-t3!=0&&t2-t3!=0&&(v=(1-tension)*(t2-t1)*((v1-v2)/(t1-t2)-(v1-v3)/(t1-t3)+(v2-v3)/(t2-t3))))}else u=(1-tension)*(v2-v0)*.5,v=(1-tension)*(v3-v1)*.5;var a=2*v1-2*v2+u+v,b=-3*v1+3*v2-2*u-v,c=u,d=v1;coefficientsList[k]=[a,b,c,d]}return coefficientsList}function valueAtT(t,coefficients){var t2=t*t,t3=t*t2;return coefficients[0]*t3+coefficients[1]*t2+coefficients[2]*t+coefficients[3]}function derivativeAtT(t,coefficients){var t2=t*t;return 3*coefficients[0]*t2+2*coefficients[1]*t+coefficients[2]}function secondDerivativeAtT(t,coefficients){return 6*coefficients[0]*t+2*coefficients[1]}function findRootsOfT(lookup,coefficients){var a=coefficients[0],b=coefficients[1],c=coefficients[2],x=coefficients[3]-lookup;return 0===a&&0===b&&0===c&&0===x?[0]:getCubicRoots(a,b,c,x).filter((function(t){return t>-EPS&&t<=1+EPS})).map((function(t){return clamp(t,0,1)}))}function evaluateForT(func,t,coefficients,target){void 0===target&&(target=null),target=target||new Array(coefficients.length);for(var k=0;k<coefficients.length;k++)target[k]=func(t,coefficients[k]);return target}var AbstractCurveMapper=function(){function AbstractCurveMapper(onInvalidateCache){void 0===onInvalidateCache&&(onInvalidateCache=null),this._alpha=0,this._tension=.5,this._closed=!1,this._onInvalidateCache=null,this._onInvalidateCache=onInvalidateCache,this._cache={arcLengths:null,coefficients:null}}return AbstractCurveMapper.prototype._invalidateCache=function(){this.points&&(this._cache={arcLengths:null,coefficients:null},this._onInvalidateCache&&this._onInvalidateCache())},Object.defineProperty(AbstractCurveMapper.prototype,\"alpha\",{get:function(){return this._alpha},set:function(alpha){Number.isFinite(alpha)&&alpha!==this._alpha&&(this._invalidateCache(),this._alpha=alpha)},enumerable:!1,configurable:!0}),Object.defineProperty(AbstractCurveMapper.prototype,\"tension\",{get:function(){return this._tension},set:function(tension){Number.isFinite(tension)&&tension!==this._tension&&(this._invalidateCache(),this._tension=tension)},enumerable:!1,configurable:!0}),Object.defineProperty(AbstractCurveMapper.prototype,\"points\",{get:function(){return this._points},set:function(points){if(!points||points.length<2)throw Error(\"At least 2 control points are required!\");this._points=points,this._invalidateCache()},enumerable:!1,configurable:!0}),Object.defineProperty(AbstractCurveMapper.prototype,\"closed\",{get:function(){return this._closed},set:function(closed){closed=!!closed,this._closed!==closed&&(this._invalidateCache(),this._closed=closed)},enumerable:!1,configurable:!0}),AbstractCurveMapper.prototype.reset=function(){this._invalidateCache()},AbstractCurveMapper.prototype.evaluateForT=function(func,t,target){var _a=getSegmentIndexAndT(t,this.points,this.closed),index=_a.index;return evaluateForT(func,_a.weight,this.getCoefficients(index),target)},AbstractCurveMapper.prototype.getCoefficients=function(idx){if(this.points){if(this._cache.coefficients||(this._cache.coefficients=new Map),!this._cache.coefficients.has(idx)){var _a=getControlPoints(idx,this.points,this.closed),coefficients=calculateCoefficients(_a[0],_a[1],_a[2],_a[3],{tension:this.tension,alpha:this.alpha});this._cache.coefficients.set(idx,coefficients)}return this._cache.coefficients.get(idx)}},AbstractCurveMapper}(),SegmentedCurveMapper=function(_super){function SegmentedCurveMapper(subDivisions,onInvalidateCache){void 0===subDivisions&&(subDivisions=300),void 0===onInvalidateCache&&(onInvalidateCache=null);var _this=_super.call(this,onInvalidateCache)||this;return _this._subDivisions=subDivisions,_this}return __extends(SegmentedCurveMapper,_super),Object.defineProperty(SegmentedCurveMapper.prototype,\"arcLengths\",{get:function(){return this._cache.arcLengths||(this._cache.arcLengths=this.computeArcLengths()),this._cache.arcLengths},enumerable:!1,configurable:!0}),SegmentedCurveMapper.prototype._invalidateCache=function(){_super.prototype._invalidateCache.call(this),this._cache.arcLengths=null},SegmentedCurveMapper.prototype.computeArcLengths=function(){var current,lengths=[],last=this.evaluateForT(valueAtT,0),sum=0;lengths.push(0);for(var p=1;p<=this._subDivisions;p++)sum+=distance(current=this.evaluateForT(valueAtT,p/this._subDivisions),last),lengths.push(sum),last=current;return lengths},SegmentedCurveMapper.prototype.lengthAt=function(u){var arcLengths=this.arcLengths;return u*arcLengths[arcLengths.length-1]},SegmentedCurveMapper.prototype.getT=function(u){var arcLengths=this.arcLengths,il=arcLengths.length,targetArcLength=u*arcLengths[il-1],i=binarySearch(targetArcLength,arcLengths);if(arcLengths[i]===targetArcLength)return i/(il-1);var lengthBefore=arcLengths[i];return(i+(targetArcLength-lengthBefore)/(arcLengths[i+1]-lengthBefore))/(il-1)},SegmentedCurveMapper.prototype.getU=function(t){if(0===t)return 0;if(1===t)return 1;var arcLengths=this.arcLengths,al=arcLengths.length-1,totalLength=arcLengths[al],tIdx=t*al,subIdx=Math.floor(tIdx),l1=arcLengths[subIdx];if(tIdx===subIdx)return l1/totalLength;var t0=subIdx/al;return(l1+distance(this.evaluateForT(valueAtT,t0),this.evaluateForT(valueAtT,t)))/totalLength},SegmentedCurveMapper}(AbstractCurveMapper),lut=[[[-.906179845938664,.23692688505618908],[-.5384693101056831,.47862867049936647],[0,.5688888888888889],[.5384693101056831,.47862867049936647],[.906179845938664,.23692688505618908]],[[-.932469514203152,.17132449237917036],[-.6612093864662645,.3607615730481386],[-.2386191860831969,.46791393457269104],[.2386191860831969,.46791393457269104],[.6612093864662645,.3607615730481386],[.932469514203152,.17132449237917036]],[[-.9491079123427585,.1294849661688697],[-.7415311855993945,.27970539148927664],[-.4058451513773972,.3818300505051189],[0,.4179591836734694],[.4058451513773972,.3818300505051189],[.7415311855993945,.27970539148927664],[.9491079123427585,.1294849661688697]],[[-.9602898564975363,.10122853629037626],[-.7966664774136267,.22238103445337448],[-.525532409916329,.31370664587788727],[-.1834346424956498,.362683783378362],[.1834346424956498,.362683783378362],[.525532409916329,.31370664587788727],[.7966664774136267,.22238103445337448],[.9602898564975363,.10122853629037626]],[[-.9681602395076261,.08127438836157441],[-.8360311073266358,.1806481606948574],[-.6133714327005904,.26061069640293544],[-.3242534234038089,.31234707704000286],[0,.3302393550012598],[.3242534234038089,.31234707704000286],[.6133714327005904,.26061069640293544],[.8360311073266358,.1806481606948574],[.9681602395076261,.08127438836157441]],[[-.9739065285171717,.06667134430868814],[-.8650633666889845,.1494513491505806],[-.6794095682990244,.21908636251598204],[-.4333953941292472,.26926671930999635],[-.14887433898163122,.29552422471475287],[.14887433898163122,.29552422471475287],[.4333953941292472,.26926671930999635],[.6794095682990244,.21908636251598204],[.8650633666889845,.1494513491505806],[.9739065285171717,.06667134430868814]],[[-.978228658146056,.0556685671161736],[-.887062599768095,.125580369464904],[-.730152005574049,.186290210927734],[-.519096129206811,.23319376459199],[-.269543155952344,.262804544510246],[0,.2729250867779],[.269543155952344,.262804544510246],[.519096129206811,.23319376459199],[.730152005574049,.186290210927734],[.887062599768095,.125580369464904],[.978228658146056,.0556685671161736]],[[-.981560634246719,.0471753363865118],[-.904117256370474,.106939325995318],[-.769902674194304,.160078328543346],[-.587317954286617,.203167426723065],[-.36783149899818,.233492536538354],[-.125233408511468,.249147045813402],[.125233408511468,.249147045813402],[.36783149899818,.233492536538354],[.587317954286617,.203167426723065],[.769902674194304,.160078328543346],[.904117256370474,.106939325995318],[.981560634246719,.0471753363865118]],[[-.984183054718588,.0404840047653158],[-.917598399222977,.0921214998377284],[-.801578090733309,.138873510219787],[-.64234933944034,.178145980761945],[-.448492751036446,.207816047536888],[-.230458315955134,.226283180262897],[0,.232551553230873],[.230458315955134,.226283180262897],[.448492751036446,.207816047536888],[.64234933944034,.178145980761945],[.801578090733309,.138873510219787],[.917598399222977,.0921214998377284],[.984183054718588,.0404840047653158]],[[-.986283808696812,.0351194603317518],[-.928434883663573,.0801580871597602],[-.827201315069764,.121518570687903],[-.687292904811685,.157203167158193],[-.515248636358154,.185538397477937],[-.319112368927889,.205198463721295],[-.108054948707343,.215263853463157],[.108054948707343,.215263853463157],[.319112368927889,.205198463721295],[.515248636358154,.185538397477937],[.687292904811685,.157203167158193],[.827201315069764,.121518570687903],[.928434883663573,.0801580871597602],[.986283808696812,.0351194603317518]],[[-.987992518020485,.0307532419961172],[-.937273392400705,.0703660474881081],[-.848206583410427,.107159220467171],[-.72441773136017,.139570677926154],[-.570972172608538,.166269205816993],[-.394151347077563,.186161000015562],[-.201194093997434,.198431485327111],[0,.202578241925561],[.201194093997434,.198431485327111],[.394151347077563,.186161000015562],[.570972172608538,.166269205816993],[.72441773136017,.139570677926154],[.848206583410427,.107159220467171],[.937273392400705,.0703660474881081],[.987992518020485,.0307532419961172]],[[-.989400934991649,.027152459411754],[-.944575023073232,.0622535239386478],[-.865631202387831,.0951585116824927],[-.755404408355003,.124628971255533],[-.617876244402643,.149595988816576],[-.458016777657227,.169156519395002],[-.281603550779258,.182603415044923],[-.0950125098376374,.189450610455068],[.0950125098376374,.189450610455068],[.281603550779258,.182603415044923],[.458016777657227,.169156519395002],[.617876244402643,.149595988816576],[.755404408355003,.124628971255533],[.865631202387831,.0951585116824927],[.944575023073232,.0622535239386478],[.989400934991649,.027152459411754]],[[-.990575475314417,.0241483028685479],[-.950675521768767,.0554595293739872],[-.880239153726985,.0850361483171791],[-.781514003896801,.111883847193403],[-.65767115921669,.135136368468525],[-.512690537086476,.15404576107681],[-.351231763453876,.16800410215645],[-.178484181495847,.176562705366992],[0,.179446470356206],[.178484181495847,.176562705366992],[.351231763453876,.16800410215645],[.512690537086476,.15404576107681],[.65767115921669,.135136368468525],[.781514003896801,.111883847193403],[.880239153726985,.0850361483171791],[.950675521768767,.0554595293739872],[.990575475314417,.0241483028685479]],[[-.99156516842093,.0216160135264833],[-.955823949571397,.0497145488949698],[-.892602466497555,.076425730254889],[-.803704958972523,.100942044106287],[-.691687043060353,.122555206711478],[-.559770831073947,.14064291467065],[-.411751161462842,.154684675126265],[-.251886225691505,.164276483745832],[-.0847750130417353,.169142382963143],[.0847750130417353,.169142382963143],[.251886225691505,.164276483745832],[.411751161462842,.154684675126265],[.559770831073947,.14064291467065],[.691687043060353,.122555206711478],[.803704958972523,.100942044106287],[.892602466497555,.076425730254889],[.955823949571397,.0497145488949697],[.99156516842093,.0216160135264833]],[[-.992406843843584,.0194617882297264],[-.96020815213483,.0448142267656996],[-.903155903614817,.0690445427376412],[-.822714656537142,.0914900216224499],[-.720966177335229,.111566645547333],[-.600545304661681,.128753962539336],[-.46457074137596,.142606702173606],[-.316564099963629,.152766042065859],[-.160358645640225,.158968843393954],[0,.161054449848783],[.160358645640225,.158968843393954],[.316564099963629,.152766042065859],[.46457074137596,.142606702173606],[.600545304661681,.128753962539336],[.720966177335229,.111566645547333],[.822714656537142,.0914900216224499],[.903155903614817,.0690445427376412],[.96020815213483,.0448142267656996],[.992406843843584,.0194617882297264]],[[-.993128599185094,.0176140071391521],[-.963971927277913,.0406014298003869],[-.912234428251325,.062672048334109],[-.839116971822218,.0832767415767047],[-.74633190646015,.10193011981724],[-.636053680726515,.118194531961518],[-.510867001950827,.131688638449176],[-.373706088715419,.142096109318382],[-.227785851141645,.149172986472603],[-.0765265211334973,.152753387130725],[.0765265211334973,.152753387130725],[.227785851141645,.149172986472603],[.373706088715419,.142096109318382],[.510867001950827,.131688638449176],[.636053680726515,.118194531961518],[.74633190646015,.10193011981724],[.839116971822218,.0832767415767047],[.912234428251325,.062672048334109],[.963971927277913,.0406014298003869],[.993128599185094,.0176140071391521]],[[-.993752170620389,.0160172282577743],[-.967226838566306,.0369537897708524],[-.9200993341504,.0571344254268572],[-.853363364583317,.0761001136283793],[-.768439963475677,.0934444234560338],[-.667138804197412,.108797299167148],[-.551618835887219,.121831416053728],[-.424342120207438,.132268938633337],[-.288021316802401,.139887394791073],[-.145561854160895,.14452440398997],[0,.14608113364969],[.145561854160895,.14452440398997],[.288021316802401,.139887394791073],[.424342120207438,.132268938633337],[.551618835887219,.121831416053728],[.667138804197412,.108797299167148],[.768439963475677,.0934444234560338],[.853363364583317,.0761001136283793],[.9200993341504,.0571344254268572],[.967226838566306,.0369537897708524],[.993752170620389,.0160172282577743]],[[-.994294585482399,.0146279952982722],[-.970060497835428,.0337749015848141],[-.926956772187174,.0522933351526832],[-.8658125777203,.0697964684245204],[-.787816805979208,.0859416062170677],[-.694487263186682,.10041414444288],[-.587640403506911,.112932296080539],[-.469355837986757,.123252376810512],[-.341935820892084,.131173504787062],[-.207860426688221,.136541498346015],[-.0697392733197222,.139251872855631],[.0697392733197222,.139251872855631],[.207860426688221,.136541498346015],[.341935820892084,.131173504787062],[.469355837986757,.123252376810512],[.587640403506911,.112932296080539],[.694487263186682,.10041414444288],[.787816805979208,.0859416062170677],[.8658125777203,.0697964684245204],[.926956772187174,.0522933351526832],[.970060497835428,.0337749015848141],[.994294585482399,.0146279952982722]],[[-.994769334997552,.0134118594871417],[-.972542471218115,.0309880058569794],[-.932971086826016,.0480376717310846],[-.876752358270441,.0642324214085258],[-.804888401618839,.0792814117767189],[-.71866136313195,.0929157660600351],[-.619609875763646,.104892091464541],[-.509501477846007,.114996640222411],[-.39030103803029,.123049084306729],[-.264135680970344,.128905722188082],[-.133256824298466,.132462039404696],[0,.133654572186106],[.133256824298466,.132462039404696],[.264135680970344,.128905722188082],[.39030103803029,.123049084306729],[.509501477846007,.114996640222411],[.619609875763646,.104892091464541],[.71866136313195,.0929157660600351],[.804888401618839,.0792814117767189],[.876752358270441,.0642324214085258],[.932971086826016,.0480376717310846],[.972542471218115,.0309880058569794],[.994769334997552,.0134118594871417]],[[-.995187219997021,.0123412297999872],[-.974728555971309,.0285313886289336],[-.938274552002732,.0442774388174198],[-.886415527004401,.0592985849154367],[-.820001985973902,.0733464814110803],[-.740124191578554,.0861901615319532],[-.648093651936975,.0976186521041138],[-.545421471388839,.107444270115965],[-.433793507626045,.115505668053725],[-.315042679696163,.121670472927803],[-.191118867473616,.125837456346828],[-.0640568928626056,.127938195346752],[.0640568928626056,.127938195346752],[.191118867473616,.125837456346828],[.315042679696163,.121670472927803],[.433793507626045,.115505668053725],[.545421471388839,.107444270115965],[.648093651936975,.0976186521041138],[.740124191578554,.0861901615319532],[.820001985973902,.0733464814110803],[.886415527004401,.0592985849154367],[.938274552002732,.0442774388174198],[.974728555971309,.0285313886289336],[.995187219997021,.0123412297999872]],[[-.995556969790498,.0113937985010262],[-.976663921459517,.0263549866150321],[-.942974571228974,.0409391567013063],[-.894991997878275,.0549046959758351],[-.833442628760834,.0680383338123569],[-.759259263037357,.080140700335001],[-.673566368473468,.0910282619829636],[-.577662930241222,.10053594906705],[-.473002731445714,.108519624474263],[-.361172305809387,.114858259145711],[-.243866883720988,.119455763535784],[-.12286469261071,.12224244299031],[0,.123176053726715],[.12286469261071,.12224244299031],[.243866883720988,.119455763535784],[.361172305809387,.114858259145711],[.473002731445714,.108519624474263],[.577662930241222,.10053594906705],[.673566368473468,.0910282619829636],[.759259263037357,.080140700335001],[.833442628760834,.0680383338123569],[.894991997878275,.0549046959758351],[.942974571228974,.0409391567013063],[.976663921459517,.0263549866150321],[.995556969790498,.0113937985010262]],[[-.995885701145616,.010551372617343],[-.97838544595647,.0244178510926319],[-.947159066661714,.0379623832943627],[-.902637861984307,.0509758252971478],[-.845445942788498,.0632740463295748],[-.776385948820678,.0746841497656597],[-.696427260419957,.0850458943134852],[-.606692293017618,.0942138003559141],[-.508440714824505,.102059161094425],[-.403051755123486,.108471840528576],[-.292004839485956,.113361816546319],[-.17685882035689,.116660443485296],[-.0592300934293132,.118321415279262],[.0592300934293132,.118321415279262],[.17685882035689,.116660443485296],[.292004839485956,.113361816546319],[.403051755123486,.108471840528576],[.508440714824505,.102059161094425],[.606692293017618,.0942138003559141],[.696427260419957,.0850458943134852],[.776385948820678,.0746841497656597],[.845445942788498,.0632740463295748],[.902637861984307,.0509758252971478],[.947159066661714,.0379623832943627],[.97838544595647,.0244178510926319],[.995885701145616,.010551372617343]],[[-.996179262888988,.00979899605129436],[-.979923475961501,.0226862315961806],[-.950900557814705,.0352970537574197],[-.909482320677491,.047449412520615],[-.856207908018294,.0589835368598335],[-.791771639070508,.0697488237662455],[-.717013473739423,.0796048677730577],[-.632907971946495,.0884231585437569],[-.540551564579456,.0960887273700285],[-.441148251750026,.102501637817745],[-.335993903638508,.107578285788533],[-.226459365439536,.111252488356845],[-.113972585609529,.113476346108965],[0,.114220867378956],[.113972585609529,.113476346108965],[.226459365439536,.111252488356845],[.335993903638508,.107578285788533],[.441148251750026,.102501637817745],[.540551564579456,.0960887273700285],[.632907971946495,.0884231585437569],[.717013473739423,.0796048677730577],[.791771639070508,.0697488237662455],[.856207908018294,.0589835368598336],[.909482320677491,.047449412520615],[.950900557814705,.0352970537574197],[.979923475961501,.0226862315961806],[.996179262888988,.00979899605129436]],[[-.996442497573954,.00912428259309452],[-.981303165370872,.0211321125927712],[-.954259280628938,.0329014277823043],[-.915633026392132,.0442729347590042],[-.865892522574395,.0551073456757167],[-.805641370917179,.0652729239669995],[-.735610878013631,.0746462142345687],[-.656651094038864,.0831134172289012],[-.569720471811401,.0905717443930328],[-.475874224955118,.0969306579979299],[-.376251516089078,.10211296757806],[-.272061627635178,.106055765922846],[-.16456928213338,.108711192258294],[-.0550792898840342,.110047013016475],[.0550792898840342,.110047013016475],[.16456928213338,.108711192258294],[.272061627635178,.106055765922846],[.376251516089078,.10211296757806],[.475874224955118,.0969306579979299],[.569720471811401,.0905717443930328],[.656651094038864,.0831134172289012],[.735610878013631,.0746462142345687],[.805641370917179,.0652729239669995],[.865892522574395,.0551073456757167],[.915633026392132,.0442729347590042],[.954259280628938,.0329014277823043],[.981303165370872,.0211321125927712],[.996442497573954,.00912428259309452]],[[-.996679442260596,.00851690387874641],[-.982545505261413,.0197320850561227],[-.957285595778087,.0307404922020936],[-.921180232953058,.0414020625186828],[-.874637804920102,.0515948269024979],[-.818185487615252,.0612030906570791],[-.752462851734477,.0701179332550512],[-.678214537602686,.0782383271357637],[-.596281797138227,.0854722573661725],[-.507592955124227,.0917377571392587],[-.413152888174008,.0969638340944086],[-.314031637867639,.101091273759914],[-.211352286166001,.104073310077729],[-.106278230132679,.10587615509732],[0,.106479381718314],[.106278230132679,.10587615509732],[.211352286166001,.104073310077729],[.314031637867639,.101091273759914],[.413152888174008,.0969638340944086],[.507592955124227,.0917377571392587],[.596281797138227,.0854722573661725],[.678214537602686,.0782383271357637],[.752462851734477,.0701179332550512],[.818185487615252,.0612030906570791],[.874637804920102,.0515948269024979],[.921180232953058,.0414020625186828],[.957285595778087,.0307404922020936],[.982545505261413,.0197320850561227],[.996679442260596,.00851690387874641]],[[-.996893484074649,.0079681924961666],[-.983668123279747,.0184664683110909],[-.960021864968307,.0287847078833233],[-.926200047429274,.038799192569627],[-.882560535792052,.048402672830594],[-.829565762382768,.057493156217619],[-.767777432104826,.0659742298821805],[-.697850494793315,.0737559747377052],[-.620526182989242,.0807558952294202],[-.536624148142019,.0868997872010829],[-.447033769538089,.0921225222377861],[-.352704725530878,.0963687371746442],[-.254636926167889,.0995934205867952],[-.153869913608583,.101762389748405],[-.0514718425553176,.102852652893558],[.0514718425553176,.102852652893558],[.153869913608583,.101762389748405],[.254636926167889,.0995934205867952],[.352704725530878,.0963687371746442],[.447033769538089,.0921225222377861],[.536624148142019,.0868997872010829],[.620526182989242,.0807558952294202],[.697850494793315,.0737559747377052],[.767777432104826,.0659742298821805],[.829565762382768,.057493156217619],[.882560535792052,.048402672830594],[.926200047429274,.038799192569627],[.960021864968307,.0287847078833233],[.983668123279747,.0184664683110909],[.996893484074649,.0079681924961666]]],maxOrder=lut.length+5;var NumericalCurveMapper=function(_super){function NumericalCurveMapper(nQuadraturePoints,nInverseSamples,onInvalidateCache){void 0===nQuadraturePoints&&(nQuadraturePoints=24),void 0===nInverseSamples&&(nInverseSamples=21);var _this=_super.call(this,onInvalidateCache)||this;return _this._nSamples=21,_this._gauss=function(order){if(order<5||order>maxOrder)throw Error(\"Order for Gaussian Quadrature must be in the range of \".concat(5,\" and \").concat(maxOrder,\".\"));return lut[order-5]}(nQuadraturePoints),_this._nSamples=nInverseSamples,_this}return __extends(NumericalCurveMapper,_super),NumericalCurveMapper.prototype._invalidateCache=function(){_super.prototype._invalidateCache.call(this),this._cache.arcLengths=null,this._cache.samples=null},Object.defineProperty(NumericalCurveMapper.prototype,\"arcLengths\",{get:function(){return this._cache.arcLengths||(this._cache.arcLengths=this.computeArcLengths()),this._cache.arcLengths},enumerable:!1,configurable:!0}),NumericalCurveMapper.prototype.getSamples=function(idx){if(this.points){if(this._cache.samples||(this._cache.samples=new Map),!this._cache.samples.has(idx)){for(var samples=this._nSamples,lengths=[],slopes=[],coefficients=this.getCoefficients(idx),i=0;i<samples;++i){var ti=i/(samples-1);lengths.push(this.computeArcLength(idx,0,ti));var dtln=magnitude(evaluateForT(derivativeAtT,ti,coefficients)),slope=0===dtln?0:1/dtln;this.tension>.95&&(slope=clamp(slope,-1,1)),slopes.push(slope)}var nCoeff=samples-1,dis=[],cis=[],li_prev=lengths[0],tdi_prev=slopes[0],step=1/nCoeff;for(i=0;i<nCoeff;++i){var li=li_prev,lDiff=(li_prev=lengths[i+1])-li,tdi=tdi_prev,tdi_next=slopes[i+1];tdi_prev=tdi_next;var si=step/lDiff,di=(tdi+tdi_next-2*si)/(lDiff*lDiff),ci=(3*si-2*tdi-tdi_next)/lDiff;dis.push(di),cis.push(ci)}this._cache.samples.set(idx,[lengths,slopes,cis,dis])}return this._cache.samples.get(idx)}},NumericalCurveMapper.prototype.computeArcLength=function(index,t0,t1){if(void 0===t0&&(t0=0),void 0===t1&&(t1=1),t0===t1)return 0;for(var coefficients=this.getCoefficients(index),z=.5*(t1-t0),sum=0,i=0;i<this._gauss.length;i++){var _a=this._gauss[i],T=_a[0];sum+=_a[1]*magnitude(evaluateForT(derivativeAtT,z*T+z+t0,coefficients))}return z*sum},NumericalCurveMapper.prototype.computeArcLengths=function(){if(this.points){var lengths=[];lengths.push(0);for(var nPoints=this.closed?this.points.length:this.points.length-1,tl=0,i=0;i<nPoints;i++){tl+=this.computeArcLength(i),lengths.push(tl)}return lengths}},NumericalCurveMapper.prototype.inverse=function(idx,len){var step=1/(this._nSamples-1),_a=this.getSamples(idx),lengths=_a[0],slopes=_a[1],cis=_a[2],dis=_a[3];if(len>=lengths[lengths.length-1])return 1;if(len<=0)return 0;var i=Math.max(0,binarySearch(len,lengths)),ti=i*step;if(lengths[i]===len)return ti;var tdi=slopes[i],di=dis[i],ci=cis[i],ld=len-lengths[i];return((di*ld+ci)*ld+tdi)*ld+ti},NumericalCurveMapper.prototype.lengthAt=function(u){return u*this.arcLengths[this.arcLengths.length-1]},NumericalCurveMapper.prototype.getT=function(u){var arcLengths=this.arcLengths,il=arcLengths.length,targetArcLength=u*arcLengths[il-1],i=binarySearch(targetArcLength,arcLengths),ti=i/(il-1);if(arcLengths[i]===targetArcLength)return ti;var len=targetArcLength-arcLengths[i];return(i+this.inverse(i,len))/(il-1)},NumericalCurveMapper.prototype.getU=function(t){if(0===t)return 0;if(1===t)return 1;var arcLengths=this.arcLengths,al=arcLengths.length-1,totalLength=arcLengths[al],tIdx=t*al,subIdx=Math.floor(tIdx),l1=arcLengths[subIdx];if(tIdx===subIdx)return l1/totalLength;var t0=tIdx-subIdx;return(l1+this.computeArcLength(subIdx,0,t0))/totalLength},NumericalCurveMapper}(AbstractCurveMapper),CurveInterpolator=function(){function CurveInterpolator(points,options){void 0===options&&(options={});var _this=this;this._cache=new Map;var curveMapper=(options=__assign({tension:.5,alpha:0,closed:!1},options)).arcDivisions?new SegmentedCurveMapper(options.arcDivisions,(function(){return _this._invalidateCache()})):new NumericalCurveMapper(options.numericalApproximationOrder,options.numericalInverseSamples,(function(){return _this._invalidateCache()}));curveMapper.alpha=options.alpha,curveMapper.tension=options.tension,curveMapper.closed=options.closed,curveMapper.points=points,this._lmargin=options.lmargin||1-curveMapper.tension,this._curveMapper=curveMapper}return CurveInterpolator.prototype.getTimeFromPosition=function(position,clampInput){return void 0===clampInput&&(clampInput=!1),this._curveMapper.getT(clampInput?clamp(position,0,1):position)},CurveInterpolator.prototype.getPositionFromTime=function(t,clampInput){return void 0===clampInput&&(clampInput=!1),this._curveMapper.getU(clampInput?clamp(t,0,1):t)},CurveInterpolator.prototype.getPositionFromLength=function(length,clampInput){void 0===clampInput&&(clampInput=!1);var l=clampInput?clamp(length,0,this.length):length;return this._curveMapper.getU(l/this.length)},CurveInterpolator.prototype.getLengthAt=function(position,clampInput){return void 0===position&&(position=1),void 0===clampInput&&(clampInput=!1),this._curveMapper.lengthAt(clampInput?clamp(position,0,1):position)},CurveInterpolator.prototype.getTimeAtKnot=function(index){if(index<0||index>this.points.length-1)throw Error(\"Invalid index!\");return 0===index?0:this.closed||index!==this.points.length-1?index/(this.closed?this.points.length:this.points.length-1):1},CurveInterpolator.prototype.getPositionAtKnot=function(index){return this.getPositionFromTime(this.getTimeAtKnot(index))},CurveInterpolator.prototype.getPointAtTime=function(t,target){return 0===(t=clamp(t,0,1))?copyValues(this.points[0],target):1===t?copyValues(this.closed?this.points[0]:this.points[this.points.length-1],target):this._curveMapper.evaluateForT(valueAtT,t,target)},CurveInterpolator.prototype.getPointAt=function(position,target){return this.getPointAtTime(this.getTimeFromPosition(position),target)},CurveInterpolator.prototype.getTangentAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this.getTangentAtTime(t,target)},CurveInterpolator.prototype.getTangentAtTime=function(t,target){return normalize(this._curveMapper.evaluateForT(derivativeAtT,t,target))},CurveInterpolator.prototype.getNormalAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this.getNormalAtTime(t,target)},CurveInterpolator.prototype.getNormalAtTime=function(t,target){var dt=normalize(this._curveMapper.evaluateForT(derivativeAtT,t));if(!(dt.length<2||dt.length>3)){var normal=target||new Array(dt.length);if(2===dt.length)return normal[0]=-dt[1],normal[1]=dt[0],normal;var ddt=normalize(this._curveMapper.evaluateForT(secondDerivativeAtT,t));return normalize(cross(cross(dt,ddt),dt),normal)}},CurveInterpolator.prototype.getFrenetFrames=function(segments,from,to){if(void 0===from&&(from=0),void 0===to&&(to=1),!(from<0||to>1||to<from)){for(var tangents=new Array(segments+1),normals=new Array(segments+1),i=0;i<=segments;i++){var u=0===from&&1===to?i/segments:from+i/segments*(to-from);tangents[i]=this.getTangentAt(u)}if(2===this.dim){for(i=0;i<tangents.length;i++)normals[i]=[-tangents[i][1],tangents[i][0]];return{tangents:tangents,normals:normals}}if(3===this.dim){var binormals=new Array(segments+1),normal=void 0,min=Number.MAX_VALUE,tx=Math.abs(tangents[0][0]),ty=Math.abs(tangents[0][1]);tx<=min&&(min=tx,normal=[1,0,0]),ty<=min&&(min=ty,normal=[0,1,0]),Math.abs(tangents[0][2])<=min&&(normal=[0,0,1]);var vec=normalize(cross(tangents[0],normal));normals[0]=cross(tangents[0],vec),binormals[0]=cross(tangents[0],normals[0]);for(i=1;i<=segments;i++){if(vec=cross(tangents[i-1],tangents[i]),normals[i]=copyValues(normals[i-1]),magnitude(vec)>EPS){normalize(vec);var theta=Math.acos(clamp(dot(tangents[i-1],tangents[i]),-1,1));rotate3d(normals[i-1],vec,theta,normals[i])}binormals[i]=cross(tangents[i],normals[i])}if(!0===this.closed){theta=Math.acos(clamp(dot(normals[0],normals[segments]),-1,1))/segments;dot(tangents[0],cross(normals[0],normals[segments]))>0&&(theta=-theta);for(i=1;i<=segments;i++)rotate3d(normals[i],tangents[i],theta*i,normals[i]),binormals[i]=cross(tangents[i],normals[i])}return{tangents:tangents,normals:normals,binormals:binormals}}}},CurveInterpolator.prototype.getCurvatureAt=function(position){var t=clamp(this.getTimeFromPosition(position),0,1);return this.getCurvatureAtTime(t)},CurveInterpolator.prototype.getCurvatureAtTime=function(t){var dt=this._curveMapper.evaluateForT(derivativeAtT,t),ddt=this._curveMapper.evaluateForT(secondDerivativeAtT,t),tangent=normalize(dt,[]),curvature=0,direction=void 0;if(2===dt.length){if(0!==(denominator=Math.pow(dt[0]*dt[0]+dt[1]*dt[1],1.5))){var signedCurvature=(dt[0]*ddt[1]-dt[1]*ddt[0])/denominator;direction=signedCurvature<0?[tangent[1],-tangent[0]]:[-tangent[1],tangent[0]],curvature=Math.abs(signedCurvature)}}else if(3===dt.length){var a=magnitude(dt),cp=cross(dt,ddt);direction=normalize(cross(cp,dt)),0!==a&&(curvature=magnitude(cp)/Math.pow(a,3))}else{a=magnitude(dt);var b=magnitude(ddt),denominator=Math.pow(a,3),dotProduct=dot(dt,ddt);0!==denominator&&(curvature=Math.sqrt(Math.pow(a,2)*Math.pow(b,2)-Math.pow(dotProduct,2))/denominator)}return{curvature:curvature,radius:0!==curvature?1/curvature:0,tangent:tangent,direction:direction}},CurveInterpolator.prototype.getDerivativeAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this._curveMapper.evaluateForT(derivativeAtT,t,target)},CurveInterpolator.prototype.getSecondDerivativeAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this._curveMapper.evaluateForT(secondDerivativeAtT,t,target)},CurveInterpolator.prototype.getBoundingBox=function(from,to){if(void 0===from&&(from=0),void 0===to&&(to=1),0===from&&1===to&&this._cache.has(\"bbox\"))return this._cache.get(\"bbox\");for(var min=[],max=[],t0=this.getTimeFromPosition(from),t1=this.getTimeFromPosition(to),start=this.getPointAtTime(t0),end=this.getPointAtTime(t1),nPoints=this.closed?this.points.length:this.points.length-1,i0=Math.floor(nPoints*t0),i1=Math.ceil(nPoints*t1),c=0;c<start.length;c++)min[c]=Math.min(start[c],end[c]),max[c]=Math.max(start[c],end[c]);for(var _loop_1=function(i){var p2=getControlPoints(i-1,this_1.points,this_1.closed)[2];if(i<i1)for(var c=0;c<p2.length;c++)p2[c]<min[c]&&(min[c]=p2[c]),p2[c]>max[c]&&(max[c]=p2[c]);if(this_1.tension<1){var w0_1=nPoints*t0-(i-1),w1_1=nPoints*t1-(i-1),valid=function(t){return t>-EPS&&t<=1+EPS&&(i-1!==i0||t>w0_1)&&(i!==i1||t<w1_1)},coefficients_1=this_1._curveMapper.getCoefficients(i-1),_loop_2=function(c){var _b=coefficients_1[c];getQuadRoots(3*_b[0],2*_b[1],_b[2]).filter(valid).forEach((function(t){var v=valueAtT(t,coefficients_1[c]);v<min[c]&&(min[c]=v),v>max[c]&&(max[c]=v)}))};for(c=0;c<coefficients_1.length;c++)_loop_2(c)}},this_1=this,i=i0+1;i<=i1;i++)_loop_1(i);var bbox={min:min,max:max};return 0===from&&1===to&&this._cache.set(\"bbox\",bbox),bbox},CurveInterpolator.prototype.getPoints=function(segments,returnType,from,to){if(void 0===segments&&(segments=100),void 0===from&&(from=0),void 0===to&&(to=1),!segments||segments<=0)throw Error(\"Invalid arguments passed to getPoints(). You must specify at least 1 sample/segment.\");if(!(from<0||to>1||to<from)){for(var pts=[],d=0;d<=segments;d++){var u=0===from&&1===to?d/segments:from+d/segments*(to-from);pts.push(this.getPointAt(u,returnType&&new returnType))}return pts}},CurveInterpolator.prototype.getNearestPosition=function(point,threshold,samples){var _this=this;if(void 0===threshold&&(threshold=1e-5),threshold<=0||!Number.isFinite(threshold))throw Error(\"Invalid threshold. Must be a number greater than zero!\");samples=samples||10*this.points.length-1;var pu=new Array(point.length),minDist=1/0,minU=0,lut=this.createLookupTable((function(u){return _this.getPointAt(u)}),samples,{cacheKey:\"lut_nearest_\".concat(samples)});Array.from(lut.keys()).forEach((function(key){var c=lut.get(key),dist=distance(point,c);if(dist<minDist)return minDist=dist,minU=key,!0}));for(var minT=this.getTimeFromPosition(minU),bisect=function(t){if(t>=0&&t<=1){_this.getPointAtTime(t,pu);var dist=distance(point,pu);if(dist<minDist)return minDist=dist,minT=t,!0}},step=.005;step>threshold;)bisect(minT-step)||bisect(minT+step)||(step/=2);return{u:minU=this._curveMapper.getU(minT),distance:minDist,point:pu}},CurveInterpolator.prototype.getIntersects=function(v,axis,max,margin){var _this=this;void 0===axis&&(axis=0),void 0===max&&(max=0),void 0===margin&&(margin=this._lmargin);var solutions=this.getIntersectsAsTime(v,axis,max,margin).map((function(t){return _this.getPointAtTime(t)}));return 1===Math.abs(max)?1===solutions.length?solutions[0]:null:solutions},CurveInterpolator.prototype.getIntersectsAsPositions=function(v,axis,max,margin){var _this=this;return void 0===axis&&(axis=0),void 0===max&&(max=0),void 0===margin&&(margin=this._lmargin),this.getIntersectsAsTime(v,axis,max,margin).map((function(t){return _this.getPositionFromTime(t)}))},CurveInterpolator.prototype.getIntersectsAsTime=function(v,axis,max,margin){void 0===axis&&(axis=0),void 0===max&&(max=0),void 0===margin&&(margin=this._lmargin);for(var k=axis,solutions=new Set,nPoints=this.closed?this.points.length:this.points.length-1,i=0;i<nPoints&&(0===max||solutions.size<Math.abs(max));i+=1){var idx=max<0?nPoints-(i+1):i,_a=getControlPoints(idx,this.points,this.closed),p1=_a[1],p2=_a[2],coefficients=this._curveMapper.getCoefficients(idx),vmin=void 0,vmax=void 0;if(p1[k]<p2[k]?(vmin=p1[k],vmax=p2[k]):(vmin=p2[k],vmax=p1[k]),v-margin<=vmax&&v+margin>=vmin){var ts=findRootsOfT(v,coefficients[k]);max<0?ts.sort((function(a,b){return b-a})):max>=0&&ts.sort((function(a,b){return a-b}));for(var j=0;j<ts.length;j++){var nt=(ts[j]+idx)/nPoints;if(solutions.add(nt),0!==max&&solutions.size===Math.abs(max))break}}}return Array.from(solutions)},CurveInterpolator.prototype.createLookupTable=function(func,samples,options){if(!samples||samples<=1)throw Error(\"Invalid arguments passed to createLookupTable(). You must specify at least 2 samples.\");var _a=__assign({from:0,to:1,cacheForceUpdate:!1},options),from=_a.from,to=_a.to,cacheKey=_a.cacheKey,cacheForceUpdate=_a.cacheForceUpdate;if(!(from<0||to>1||to<from)){var lut=null;if(cacheKey&&!cacheForceUpdate&&this._cache.has(cacheKey))cacheKey&&this._cache.has(cacheKey)&&(lut=this._cache.get(cacheKey));else{lut=new Map;for(var d=0;d<samples;d++){var u=0===from&&1===to?d/(samples-1):from+d/(samples-1)*(to-from),value=func(u);lut.set(u,value)}cacheKey&&this._cache.set(cacheKey,lut)}return lut}},CurveInterpolator.prototype.forEach=function(func,samples,from,to){var _this=this;void 0===from&&(from=0),void 0===to&&(to=1);var positions=[];if(Number.isFinite(samples)){var nSamples=samples;if(nSamples<=1)throw Error(\"Invalid arguments passed to forEach(). You must specify at least 2 samples.\");for(var i=0;i<nSamples;i++){var u=0===from&&1===to?i/(nSamples-1):from+i/(nSamples-1)*(to-from);positions.push(u)}}else Array.isArray(samples)&&(positions=samples);var prev=null;positions.forEach((function(u,i){if(!Number.isFinite(u)||u<0||u>1)throw Error(\"Invalid position (u) for sample in forEach!\");var t=_this.getTimeFromPosition(u),current=func({u:u,t:t,i:i,prev:prev});prev={u:u,t:t,i:i,value:current}}))},CurveInterpolator.prototype.map=function(func,samples,from,to){var _this=this;void 0===from&&(from=0),void 0===to&&(to=1);var positions=[];if(Number.isFinite(samples)){var nSamples=samples;if(nSamples<=1)throw Error(\"Invalid arguments passed to map(). You must specify at least 2 samples.\");for(var i=0;i<nSamples;i++){var u=0===from&&1===to?i/(nSamples-1):from+i/(nSamples-1)*(to-from);positions.push(u)}}else Array.isArray(samples)&&(positions=samples);var prev=null;return positions.map((function(u,i){if(!Number.isFinite(u)||u<0||u>1)throw Error(\"Invalid position (u) for sample in map()!\");var t=_this.getTimeFromPosition(u),current=func({u:u,t:t,i:i,prev:prev});return prev={u:u,t:t,i:i,value:current},current}))},CurveInterpolator.prototype.reduce=function(func,initialValue,samples,from,to){var _this=this;void 0===from&&(from=0),void 0===to&&(to=1);var positions=[];if(Number.isFinite(samples)){var nSamples=samples;if(nSamples<=1)throw Error(\"Invalid arguments passed to map(). You must specify at least 2 samples.\");for(var i=0;i<nSamples;i++){var u=0===from&&1===to?i/(nSamples-1):from+i/(nSamples-1)*(to-from);positions.push(u)}}else Array.isArray(samples)&&(positions=samples);return positions.reduce((function(acc,u,i){if(!Number.isFinite(u)||u<0||u>1)throw Error(\"Invalid position (u) for sample in map()!\");var t=_this.getTimeFromPosition(u);return func({acc:acc,u:u,t:t,i:i})}),initialValue)},CurveInterpolator.prototype._invalidateCache=function(){return this._cache=new Map,this},CurveInterpolator.prototype.reset=function(){this._curveMapper.reset()},Object.defineProperty(CurveInterpolator.prototype,\"points\",{get:function(){return this._curveMapper.points},set:function(pts){this._curveMapper.points=pts},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"tension\",{get:function(){return this._curveMapper.tension},set:function(t){this._curveMapper.tension=t},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"alpha\",{get:function(){return this._curveMapper.alpha},set:function(a){this._curveMapper.alpha=a},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"closed\",{get:function(){return this._curveMapper.closed},set:function(isClosed){this._curveMapper.closed=isClosed},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"length\",{get:function(){return this._curveMapper.lengthAt(1)},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"minX\",{get:function(){return this.getBoundingBox().min[0]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"maxX\",{get:function(){return this.getBoundingBox().max[0]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"minY\",{get:function(){return this.getBoundingBox().min[1]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"maxY\",{get:function(){return this.getBoundingBox().max[1]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"minZ\",{get:function(){return this.getBoundingBox().min[2]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"maxZ\",{get:function(){return this.getBoundingBox().max[2]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"dim\",{get:function(){var _a;return(null===(_a=this.points[0])||void 0===_a?void 0:_a.length)||void 0},enumerable:!1,configurable:!0}),CurveInterpolator}(),Point=function(){function Point(x,y,z,w){void 0===x&&(x=0),void 0===y&&(y=0),void 0===z&&(z=null),void 0===w&&(w=null),this.x=x,this.y=y,this.z=z,this.w=w}return Object.defineProperty(Point.prototype,0,{get:function(){return this.x},set:function(x){this.x=x},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,1,{get:function(){return this.y},set:function(y){this.y=y},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,2,{get:function(){return this.z},set:function(z){this.z=z},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,3,{get:function(){return this.w},set:function(w){this.w=w},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,\"length\",{get:function(){return Number.isFinite(this.w)?4:Number.isFinite(this.z)?3:2},enumerable:!1,configurable:!0}),Point}();export{CurveInterpolator,EPS,SegmentedCurveMapper as LinearCurveMapper,NumericalCurveMapper,Point,add,binarySearch,calcKnotSequence,calculateCoefficients,clamp,copyValues,cross,derivativeAtT,distance,dot,evaluateForT,extrapolateControlPoint,fill,findRootsOfT,getControlPoints,getCubicRoots,getQuadRoots,getSegmentIndexAndT,magnitude,map,normalize,orthogonal,reduce,rotate2d,rotate3d,secondDerivativeAtT,simplify2d,sub,sumOfSquares,valueAtT};\n","import { clamp } from '@equinor/videx-math';\n\ntype fx = (n: number) => number;\n\n/*\n * Methods for finding root of a function\n */\nexport class RootFinder {\n /**\n * Find root using newthons method\n * @param {Number} func f(x)\n * @param {Number} precision Accuracy of result\n * @param {Number} maxIterations Max number of iterations to use\n * @param {Number} start Starting position\n * @param {Number} minLimit Min limit of result\n * @param {Number} maxLimit Max limit of result\n */\n static newton(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number | undefined {\n const h = 0.0001;\n let t = start;\n for (let i = 0; i < maxIterations; i++) {\n const v = func(t);\n if (Math.abs(v) < precision) {\n return clamp(t, minLimit, maxLimit);\n }\n const d = (func(t + h) - v) / h;\n t = t - v / d;\n }\n return undefined;\n }\n\n /**\n * Find root using bisect method\n * @param {Number} func f(x)\n * @param {Number} precision Accuracy of result\n * @param {Number} maxIterations Max number of iterations to use\n * @param {Number} start Starting position\n * @param {Number} minLimit Min limit of result\n * @param {Number} maxLimit Max limit of result\n */\n static bisect(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {\n let tl = minLimit;\n let th = maxLimit;\n let t = start;\n let v;\n let i;\n for (i = 0; i < maxIterations; i++) {\n v = func(t);\n if (Math.abs(v) < precision) {\n return t;\n }\n if (v < 0) {\n th = t;\n } else {\n tl = t;\n }\n t = (th + tl) / 2;\n }\n return t;\n }\n\n /**\n * Find root by trying available methods\n * @param {Number} func f(x)\n * @param {Number} precision Accuracy of result\n * @param {Number} maxIterations Max number of iterations to use\n * @param {Number} start Starting position\n * @param {Number} minLimit Min limit of result\n * @param {Number} maxLimit Max limit of result\n */\n static findRoot(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {\n let t = RootFinder.newton(func, precision, maxIterations, start);\n if (t == null) {\n t = RootFinder.bisect(func, precision, maxIterations, start, minLimit, maxLimit);\n }\n return t;\n }\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { Vector } from 'curve-interpolator/dist/src/core/interfaces';\n\ntype fx = (n: number) => Vector;\n\n/*\n * Methods for calculating length of a curve\n */\nexport class ArcLength {\n /**\n * Calculate using an adaptive bisect method\n * @param {Number} func Curve function returning [x,y]\n * @param {Number} minLimit Min limit\n * @param {Number} maxLimit Max limit\n * @param {Number} tolerance Result tolerance\n * @param {Number} minDepth Min recursive depth before accepting solution\n * @param {Number} maxDepth Max recursive depth\n */\n static bisect(func: fx, minLimit = 0, maxLimit = 1, tolerance = 0.005, minDepth = 4, maxDepth = 10): number {\n const calcRec = (a: number, b: number, aVal: number[], bVal: number[], span: number, tolerance: number, depth = 0): number => {\n const mid = (a + b) / 2;\n const midVal = func(mid) as number[];\n const spanA = Vector2.distance(aVal, midVal);\n const spanB = Vector2.distance(midVal, bVal);\n const length = spanA + spanB;\n if ((depth >= minDepth && Math.abs(length - span) < tolerance) || depth >= maxDepth) {\n return length;\n }\n const tol = tolerance / 2;\n const d = depth + 1;\n return calcRec(a, mid, aVal, midVal, spanA, tol, d) + calcRec(mid, b, midVal, bVal, spanB, tol, d);\n };\n const aVal = func(minLimit) as number[];\n const bVal = func(maxLimit) as number[];\n const span = Vector2.distance(aVal, bVal);\n const res = calcRec(minLimit, maxLimit, aVal, bVal, span, tolerance);\n return res;\n }\n\n /**\n * Calculate using trapezoid method\n * @param {Number} func Curve function returning [x,y]\n * @param {Number} minLimit Min limit\n * @param {Number} maxLimit Max limit\n * @param {Number} segments Number of segments\n */\n static trapezoid(func: fx, minLimit = 0, maxLimit = 1, segments = 1000): number {\n let length = 0;\n let lastPos = func(minLimit) as number[];\n const step = (maxLimit - minLimit) / (segments - 1);\n for (let i = 1; i < segments; i++) {\n const pos = func(minLimit + i * step) as number[];\n const delta = Vector2.distance(lastPos, pos);\n length += delta;\n lastPos = pos;\n }\n return length;\n }\n}\n","/**\n * Find index where value[index] =< searchValue and value[index+1] >= searchValue using binary search\n * @param {Number} values Array of sorted values\n * @param {Number} searchValue Value to search for\n */\nexport class BinarySearch {\n static search(values: number[], searchValue: number): number {\n let il = 0;\n let ih = values.length - 1;\n let i = Math.floor(il + ih / 2);\n while (i > il && i < ih) {\n const v = values[i];\n const v1 = values[i + 1];\n if (v != null && v1 != null && v <= searchValue && v1 >= searchValue) {\n return i;\n }\n if (v != null && searchValue < v) {\n ih = i;\n } else {\n il = i;\n }\n i = Math.floor(il + ih / 2);\n }\n return i;\n }\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { clamp } from '@equinor/videx-math';\nimport { CurveInterpolator } from 'curve-interpolator';\nimport { Vector } from 'curve-interpolator/dist/src/core/interfaces';\nimport { CurveInterpolatorOptions } from 'curve-interpolator/dist/src/curve-interpolator';\n\nimport { RootFinder } from '../utils/root-finder';\nimport { ArcLength } from '../utils/arc-length';\nimport { BinarySearch } from '../utils/binary-search';\n\nexport class ExtendedCurveInterpolator extends CurveInterpolator {\n arcLengthLookup: number[] = [];\n\n constructor(points: Vector[], options?: CurveInterpolatorOptions) {\n super(points, options);\n this.findTForArcLength = this.findTForArcLength.bind(this);\n this.findTByRootForArcLength = this.findTByRootForArcLength.bind(this);\n this.findApproxTForArcLength = this.findApproxTForArcLength.bind(this);\n this.findTQuickForArcLength = this.findTQuickForArcLength.bind(this);\n this.generateArcLengthLookup = this.generateArcLengthLookup.bind(this);\n this.getArcLength = this.getArcLength.bind(this);\n this.getQuickArcLength = this.getQuickArcLength.bind(this);\n this.getPointAtArcLength = this.getPointAtArcLength.bind(this);\n this.getPointAt = this.getPointAt.bind(this);\n }\n\n /**\n * Function which finds t value for arc length\n * @param {Number} arcLength Target arc length\n * @param {Number} tolerance Tolerance for result\n * @param {Number} iterations Max number of iterations to use\n */\n findTForArcLength(arcLength: number, options?: { approxT?: boolean; quickT?: boolean; normalizedLength?: number }): number {\n // TODO: Ideally the CurveInterpolator should be able to provide t for curve length\n let t;\n if (options?.approxT) {\n t = this.findApproxTForArcLength(arcLength, options?.normalizedLength);\n } else if (options?.quickT) {\n t = this.findTQuickForArcLength(arcLength);\n } else {\n t = this.findTByRootForArcLength(arcLength);\n }\n return t;\n }\n\n /**\n * Function which finds t value for arc length by finding root\n * @param {Number} arcLength Target arc length\n * @param {Number} tolerance Tolerance for result\n * @param {Number} iterations Max number of iterations to use\n */\n findTByRootForArcLength(arcLength: number, tolerance = 0.01, iterations = 100): number {\n if (arcLength <= 0) {\n return 0.0;\n }\n if (arcLength >= this.length) {\n return 1.0;\n }\n const t = RootFinder.findRoot((x) => arcLength - this.getQuickArcLength(0, x), tolerance, iterations, arcLength / this.length);\n return t;\n }\n\n /**\n * Function which finds t value for arc length by simple approximation\n * @param {Number} arcLength Target arclength\n */\n findApproxTForArcLength(arcLength: number, normalizedLength?: number): number {\n const t = arcLength / (normalizedLength || this.length);\n return t;\n }\n\n /**\n * Function which finds t value for arc length using lookup table\n * @param {Number} arcLength Target arclength\n */\n findTQuickForArcLength(arcLength: number): number {\n if (this.arcLengthLookup.length === 0) {\n this.generateArcLengthLookup();\n }\n const index = BinarySearch.search(this.arcLengthLookup, arcLength);\n const v1 = this.arcLengthLookup[index]!;\n const v2 = this.arcLengthLookup[index + 1]!;\n const t = (index + (arcLength - v1) / (v2 - v1)) / this.arcLengthLookup.length;\n return t;\n }\n\n generateArcLengthLookup(segments = 1000): void {\n let lastPos = this.getPointAt(0);\n let length = 0;\n for (let i = 0; i < segments; i++) {\n const pos = this.getPointAt(i / (segments - 1));\n const delta = Vector2.distance(lastPos as number[], pos as number[]);\n length += delta;\n this.arcLengthLookup.push(length);\n lastPos = pos;\n }\n }\n\n /**\n * Function calculating length along curve using interpolator.\n * @param {Number} from t at start (default = 0)\n * @param {Number} to t at end (default = 1)\n */\n getArcLength(from = 0, to = 1): number {\n if (from === 0 && to === 1) {\n return this.length;\n }\n const tolerance = 0.002;\n return ArcLength.bisect((t: number) => this.getPointAt(t), from, to, tolerance);\n }\n\n /**\n * Function calculating length along curve using interpolator.\n * @param {Number} from t at start (default = 0)\n * @param {Number} to t at end (default = 1)\n */\n getQuickArcLength(from = 0, to = 1): number {\n let fromLength = 0;\n let toLength = this.length;\n if (this.arcLengthLookup.length === 0) {\n this.generateArcLengthLookup();\n }\n\n if (from !== 0) {\n const fromIndex = Math.floor(from * this.arcLengthLookup.length);\n const fromLl = this.arcLengthLookup[fromIndex]!;\n const fromLh = this.arcLengthLookup[fromIndex + 1]!;\n fromLength = fromLl + ((from * this.arcLengthLookup.length) % this.arcLengthLookup.length) * (fromLh - fromLl);\n }\n\n if (to !== 1) {\n const toIndex = Math.floor(to * this.arcLengthLookup.length);\n const toLl = this.arcLengthLookup[toIndex]!;\n const toLh = this.arcLengthLookup[toIndex + 1]!;\n toLength = toLl + ((from * this.arcLengthLookup.length) % this.arcLengthLookup.length) * (toLh - toLl);\n }\n\n const totalLength = toLength - fromLength;\n return totalLength;\n }\n\n /**\n * Function getting a point at curve length.\n * @param {Number} arcLength\n */\n getPointAtArcLength(arcLength: number, options?: { approxT?: boolean; quickT?: boolean; normalizedLength?: number }): Vector {\n const t = this.findTForArcLength(arcLength, options);\n return this.getPointAt(t);\n }\n\n override getPointAt(t: number): Vector {\n const tl = clamp(t, 0, 1);\n return super.getPointAt(tl);\n }\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { clamp, radians } from '@equinor/videx-math';\nimport { CurveInterpolator, normalize } from 'curve-interpolator';\n\nimport { Interpolators, Trajectory, MDPoint } from '../interfaces';\nimport { ExtendedCurveInterpolator } from './ExtendedCurveInterpolator';\n\n// determines how curvy the curve is\nconst TENSION = 0.75;\n// determines how many segments to split the curve into\nconst ARC_DIVISIONS = 5000;\n// specifies amount of steps (in the range [0,1]) to work back from the end of the curve\nconst THRESHOLD_DIRECTION_DISTANCE = 0.001;\n\nconst DEFAULT_START_EXTEND_LENGTH = 1000.0;\nconst DEFAULT_END_EXTEND_LENGTH = 1000.0;\n\nconst CURTAIN_SAMPLING_ANGLE_THRESHOLD = 0.0005;\nconst CURTAIN_SAMPLING_INTERVAL = 0.1;\n\nconst defaultOptions = {\n approxT: true,\n};\n\nexport interface ReferenceSystemOptions {\n normalizedLength?: number;\n arcDivisions?: number;\n tension?: number;\n trajectoryAngle?: number;\n calculateDisplacementFromBottom?: boolean;\n curveInterpolator?: ExtendedCurveInterpolator;\n trajectoryInterpolator?: ExtendedCurveInterpolator;\n curtainInterpolator?: ExtendedCurveInterpolator;\n approxT?: boolean;\n quickT?: boolean;\n}\n\nexport class IntersectionReferenceSystem {\n options!: ReferenceSystemOptions;\n\n path: number[][] = [];\n\n projectedPath: number[][] = [];\n\n private _offset = 0;\n\n displacement!: number;\n\n interpolators!: Interpolators;\n\n startVector!: number[];\n\n endVector!: number[];\n\n _curtainPathCache: MDPoint[] | undefined;\n\n /**\n * Creates a common reference system that layers and other components can use\n * @param path (required) array of 3d coordinates: [x, y, z]\n * @param options (optional)\n * @param options.trajectoryAngle (optional) - trajectory angle in degrees, overrides the calculated value\n * @param options.calculateDisplacementFromBottom - (optional) specify if the path is passed from bottom up\n */\n constructor(path: number[][], options?: ReferenceSystemOptions) {\n if (path.length < 1) {\n throw new Error('Missing coordinates');\n }\n if (path[0] && path[0].length !== 3) {\n throw new Error('Coordinates should be in 3d');\n }\n this.setPath(path, options);\n\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.getPosition = this.getPosition.bind(this);\n this.getProjectedLength = this.getProjectedLength.bind(this);\n this.getTrajectory = this.getTrajectory.bind(this);\n }\n\n private setPath(path: number[][], options: ReferenceSystemOptions = {}): void {\n this.options = { ...defaultOptions, ...options };\n const { arcDivisions, tension, calculateDisplacementFromBottom } = this.options;\n\n this.path = path;\n\n this.projectedPath = IntersectionReferenceSystem.toDisplacement(path);\n\n const [displacement] = this.projectedPath[this.projectedPath.length - 1]!;\n this.displacement = displacement!;\n\n this.interpolators = {\n curve: options.curveInterpolator || new ExtendedCurveInterpolator(path),\n trajectory:\n options.trajectoryInterpolator ||\n new ExtendedCurveInterpolator(\n path.map((d: number[]) => [d[0]!, d[1]!]),\n { tension: tension || TENSION, arcDivisions: arcDivisions || ARC_DIVISIONS },\n ),\n curtain:\n options.curtainInterpolator ||\n new ExtendedCurveInterpolator(this.projectedPath, { tension: tension || TENSION, arcDivisions: arcDivisions || ARC_DIVISIONS }),\n };\n\n const trajVector = this.getTrajectoryVector();\n const negativeTrajVector = trajVector.map((d: number) => d * -1);\n\n if (calculateDisplacementFromBottom) {\n this.endVector = negativeTrajVector;\n this.startVector = trajVector;\n } else {\n this.endVector = trajVector;\n this.startVector = negativeTrajVector;\n }\n\n this._curtainPathCache = undefined;\n }\n\n /**\n * Map a length along the curve to intersection coordinates\n * @param length length along the curve\n */\n project(length: number): number[] {\n const { curtain } = this.interpolators;\n const { calculateDisplacementFromBottom } = this.options;\n const cl = clamp(calculateDisplacementFromBottom ? this.length - (length - this._offset) : length - this._offset, 0, this.length);\n const p = curtain.getPointAtArcLength(cl, this.options);\n return p as number[];\n }\n\n curtainTangent(length: number): number[] {\n const { curtain } = this.interpolators;\n const l = length - this._offset;\n const t = curtain.findTForArcLength(l, this.options);\n const tangent = t && curtain.getTangentAt(t);\n return tangent as number[];\n }\n\n /**\n * Returns as resampled version of the projected path between start and end\n * Samples are picked from the beginning of the path at every CURTAIN_SAMPLING_INTERVAL meters\n * If the angle between two consecutive segments is close to 180 degrees depending on CURTAIN_SAMPLING_ANGLE_THRESHOLD,\n * a sample in between is discarded.\n *\n * The start and the end are not guaranteed to be part of the returned set of points\n * @param startMd in MD\n * @param endMd in MD\n * @param includeStartEnd guarantee to include the starting and end points\n */\n getCurtainPath(startMd: number, endMd: number, includeStartEnd = false): MDPoint[] {\n if (!this._curtainPathCache) {\n const points: MDPoint[] = [];\n let prevAngle = Math.PI * 2; // Always add first point\n for (let i = this._offset; i <= this.length + this._offset; i += CURTAIN_SAMPLING_INTERVAL) {\n const point = this.project(i);\n const angle = Math.atan2(point[1]!, point[0]!);\n\n // Reduce number of points on a straight line by angle since last point\n if (Math.abs(angle - prevAngle) > CURTAIN_SAMPLING_ANGLE_THRESHOLD) {\n points.push({ point, md: i });\n prevAngle = angle;\n }\n }\n this._curtainPathCache = points;\n }\n\n if (includeStartEnd) {\n const startPoint = { point: this.project(startMd), md: startMd };\n const pointsBetween = this._curtainPathCache.filter((p) => p.md > startMd && p.md < endMd);\n const endPoint = { point: this.project(endMd), md: endMd };\n return [startPoint, ...pointsBetween, endPoint];\n }\n return this._curtainPathCache.filter((p) => p.md >= startMd && p.md <= endMd);\n }\n\n /**\n * Map a displacement back to length along the curve\n */\n unproject(displacement: number): number | undefined {\n const { normalizedLength, calculateDisplacementFromBottom } = this.options;\n const displacementFromStart = calculateDisplacementFromBottom ? this.displacement - displacement : displacement;\n const length = normalizedLength || this.length;\n\n if (displacementFromStart < 0) {\n return displacementFromStart;\n }\n if (displacementFromStart > this.displacement) {\n return length + (displacementFromStart - this.displacement);\n }\n\n const ls = this.interpolators.curtain.getIntersectsAsPositions(displacementFromStart, 0, 1);\n if (ls && ls.length) {\n return ls[0]! * length + this._offset;\n }\n return undefined;\n }\n\n /**\n * Get the normalized displacement [0 - 1] of a specific length along the curve\n */\n getProjectedLength(length: number): number {\n const { curtain } = this.interpolators;\n const pl = this.project(length);\n const l = pl[0]! / curtain.maxX;\n return Number.isFinite(l) ? clamp(l, 0, 1) : 0;\n }\n\n /**\n * Get the trajectory position at a length along the curve\n */\n getPosition(length: number): number[] {\n const { trajectory } = this.interpolators;\n const t = this.getProjectedLength(length);\n const p = trajectory.getPointAt(t) as number[];\n return p;\n }\n\n /**\n * Generate a set of coordinates along the trajectory of the curve\n */\n getTrajectory(steps: number, from = 0, to = 1): Trajectory {\n const extensionStart = from < 0 ? -from : 0;\n const extensionEnd = to > 1 ? to - 1 : 0;\n\n const refStart = this.interpolators.trajectory.getPointAt(0) as [number, number];\n const refEnd = this.interpolators.trajectory.getPointAt(1) as [number, number];\n\n let p0: [number, number];\n let p3: [number, number];\n let offset = 0;\n const t0 = Math.max(0, from);\n const t1 = Math.min(1, to);\n const p1 = this.interpolators.trajectory.getPointAt(t0) as [number, number];\n const p2 = this.interpolators.trajectory.getPointAt(t1) as [number, number];\n\n if (extensionStart) {\n p0 = [\n refStart[0] + this.startVector[0]! * extensionStart * this.displacement,\n refStart[1] + this.startVector[1]! * extensionStart * this.displacement,\n ];\n offset = -Vector2.distance(p0, refStart);\n } else if (from > 0) {\n offset = Vector2.distance(p1, refStart);\n }\n\n if (extensionEnd) {\n p3 = [refEnd[0] + this.endVector[0]! * extensionEnd * this.displacement, refEnd[1] + this.endVector[1]! * extensionEnd * this.displacement];\n }\n const points = [];\n const tl = to - from;\n const preSteps = Math.floor((extensionStart / tl) * steps);\n const curveSteps = Math.ceil(((t1 - t0) / tl) * steps);\n const postSteps = steps - curveSteps - preSteps;\n\n if (p0!) {\n points.push(p0);\n for (let i = 1; i < preSteps; i++) {\n const f = (i / preSteps) * extensionStart * this.displacement;\n points.push([p0[0] - this.startVector[0]! * f, p0[1] - this.startVector[1]! * f]);\n }\n }\n const curvePoints = this.interpolators.trajectory.getPoints(curveSteps - 1, null, t0, t1) as number[][]; // returns steps + 1 points\n points.push(...curvePoints);\n if (p3!) {\n for (let i = 1; i < postSteps - 1; i++) {\n const f = (i / postSteps) * extensionEnd * this.displacement;\n points.push([p2[0] + this.endVector[0]! * f, p2[1] + this.endVector[1]! * f]);\n }\n points.push(p3);\n }\n return { points, offset };\n }\n\n /**\n * Generate a set of coordinates along the trajectory of the curve\n */\n getExtendedTrajectory(\n numPoints: number,\n startExtensionLength = DEFAULT_START_EXTEND_LENGTH,\n endExtensionLength = DEFAULT_END_EXTEND_LENGTH,\n ): Trajectory {\n if (!isFinite(startExtensionLength) || startExtensionLength < 0.0) {\n throw new Error('Invalid parameter, getExtendedTrajectory() must be called with a valid and positive startExtensionLength parameter');\n }\n if (!isFinite(endExtensionLength) || endExtensionLength < 0.0) {\n throw new Error('Invalid parameter, getExtendedTrajectory() must be called with a valid and positive endExtensionLength parameter');\n }\n\n const totalLength = this.displacement + startExtensionLength + endExtensionLength;\n const startExtensionNumPoints = Math.floor((startExtensionLength / totalLength) * numPoints);\n const curveSteps = Math.max(Math.ceil((this.displacement / totalLength) * numPoints), 1);\n const endExtensionNumPoints = numPoints - curveSteps - startExtensionNumPoints;\n\n const points = [];\n\n const refStart = new Vector2(this.interpolators.trajectory.getPointAt(0.0) as number[]);\n const startVec = new Vector2(this.startVector);\n const startExtensionStepLength = startExtensionLength / startExtensionNumPoints;\n for (let i = startExtensionNumPoints; i > 0; i--) {\n const f = i * startExtensionStepLength;\n const point = refStart.add(startVec.scale(f));\n points.push(point.toArray());\n }\n\n const curveStepPoints = this.interpolators.trajectory.getPoints(curveSteps, null, 0.0, 1.0) as number[][];\n points.push(...curveStepPoints);\n\n const refEnd = new Vector2(this.interpolators.trajectory.getPointAt(1.0) as number[]);\n const endVec = new Vector2(this.endVector);\n const endExtensionStepLength = endExtensionLength / (endExtensionNumPoints - 1); // -1 so last point is at end of extension\n for (let i = 1; i < endExtensionNumPoints; i++) {\n const f = i * endExtensionStepLength;\n const point = refEnd.add(endVec.scale(f));\n points.push(point.toArray());\n }\n\n const offset = -startExtensionLength;\n\n const trajectory = { points, offset };\n return trajectory;\n }\n\n getTrajectoryVector(): number[] {\n const { trajectoryAngle, calculateDisplacementFromBottom } = this.options;\n\n if (trajectoryAngle != null && isFinite(trajectoryAngle)) {\n const angleInRad = radians(trajectoryAngle);\n return new Vector2(Math.cos(angleInRad), Math.sin(angleInRad)).toArray();\n }\n\n const trajectoryVec = IntersectionReferenceSystem.getDirectionVector(\n this.interpolators.trajectory,\n calculateDisplacementFromBottom ? THRESHOLD_DIRECTION_DISTANCE : 1 - THRESHOLD_DIRECTION_DISTANCE,\n calculateDisplacementFromBottom ? 0 : 1,\n );\n return trajectoryVec;\n }\n\n /**\n * Perform a curtain projection on a set of points in 3D\n * @param points\n * @param origin\n * @param offset\n * @returns {array}\n */\n static toDisplacement(points: number[][], offset = 0): number[][] {\n let p0: number[] = points[0]!;\n let l = 0;\n const projected = points.map((p1: number[]) => {\n const dx = p1[0]! - p0[0]!;\n const dy = p1[1]! - p0[1]!;\n l += Math.sqrt(dx ** 2 + dy ** 2);\n p0 = p1;\n return [offset > 0 ? offset - l : l, p1[2] || 0];\n });\n return projected;\n }\n\n /**\n * returns a normalized vector\n * @param interpolator interpolated curve\n * @param from number between 0 and 1\n * @param to number between 0 and 1\n */\n static getDirectionVector(interpolator: CurveInterpolator, from: number, to: number): number[] {\n const p1 = interpolator.getPointAt(to);\n const p2 = interpolator.getPointAt(from);\n\n return normalize([p1[0] - p2[0], p1[1] - p2[1]]) as number[];\n }\n\n get length(): number {\n return this.interpolators.curve?.length ?? 0;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n set offset(offset: number) {\n this._curtainPathCache = undefined;\n this._offset = offset;\n }\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","import { select, Selection } from 'd3-selection';\nimport { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { zoom, zoomIdentity, ZoomBehavior, ZoomTransform } from 'd3-zoom';\n\nimport { ZoomAndPanOptions, OnRescaleEvent } from '../interfaces';\n\nconst DEFAULT_MIN_ZOOM_LEVEL = 0.1;\nconst DEFAULT_MAX_ZOOM_LEVEL = 256;\n\nexport type RescaleFunction = (event: OnRescaleEvent) => void;\n/**\n * Handle zoom and pan for intersection layers\n */\nexport class ZoomPanHandler {\n zoom!: ZoomBehavior<HTMLElement, unknown>;\n container: Selection<HTMLElement, unknown, null, undefined>;\n onRescale: RescaleFunction;\n options: ZoomAndPanOptions;\n xBounds: [number, number] = [0, 1];\n yBounds: [number, number] = [0, 1];\n translateBoundsX: [number, number] = [0, 1];\n translateBoundsY: [number, number] = [0, 1];\n scaleX: ScaleLinear<number, number>;\n scaleY: ScaleLinear<number, number>;\n _zFactor = 1;\n _enableTranslateExtent = false;\n currentTransform: ZoomTransform | undefined;\n\n /**\n * Constructor\n * @param elm, -\n * @param options - options\n */\n constructor(\n elm: HTMLElement,\n onRescale: RescaleFunction,\n options: ZoomAndPanOptions = { maxZoomLevel: DEFAULT_MAX_ZOOM_LEVEL, minZoomLevel: DEFAULT_MIN_ZOOM_LEVEL },\n ) {\n this.container = select(elm);\n this.options = options;\n\n this.onRescale = onRescale;\n\n this.onZoom = this.onZoom.bind(this);\n this.calculateTransform = this.calculateTransform.bind(this);\n this.applyTransform = this.applyTransform.bind(this);\n this.recalculateZoomTransform = this.recalculateZoomTransform.bind(this);\n this.rescale = this.rescale.bind(this);\n\n this.adjustToSize = this.adjustToSize.bind(this);\n this.setViewport = this.setViewport.bind(this);\n\n this.currentStateAsEvent = this.currentStateAsEvent.bind(this);\n\n this.updateTranslateExtent = this.updateTranslateExtent.bind(this);\n\n this.scaleX = scaleLinear().domain(this.xBounds).range([0, 1]);\n this.scaleY = scaleLinear().domain(this.yBounds).range([0, 1]);\n\n this.init();\n }\n\n /**\n * Getter returning width of target\n * @returns width\n */\n get width(): number {\n return this.scaleX.range()[1] ?? 0;\n }\n\n /**\n * Getter returning height of target\n * @returns height\n */\n get height(): number {\n return this.scaleY.range()[1] ?? 0;\n }\n\n /**\n * Getter which calculate span from x bounds\n * @returns x span\n */\n get xSpan(): number {\n const { xBounds } = this;\n const xspan: number = Math.abs(xBounds[1] - xBounds[0]);\n return xspan;\n }\n\n /**\n * Calculate span from y bounds\n * @returns y span\n */\n get ySpan(): number {\n const { yBounds } = this;\n const yspan: number = Math.abs(yBounds[1] - yBounds[0]);\n return yspan;\n }\n\n /**\n * Ratio between height and width\n * @returns ratio\n */\n get viewportRatio(): number {\n const ratio: number = this.width / (this.height || 1);\n return ratio;\n }\n\n /**\n * x ratios screen to value ratio\n * @returns ratio\n */\n get xRatio(): number {\n const domain = this.scaleX.domain() as [number, number];\n const ratio = Math.abs(this.width / (domain[1] - domain[0]));\n return ratio;\n }\n\n /**\n * y scale screen to value ratio\n * @returns ratio\n */\n get yRatio(): number {\n const domain = this.scaleY.domain() as [number, number];\n const ratio = Math.abs(this.height / (domain[1] - domain[0]));\n return ratio;\n }\n\n /**\n * Get z-factor\n * @returns z-factor\n */\n get zFactor(): number {\n return this._zFactor;\n }\n\n /**\n * Set z factor\n * @param factor\n */\n set zFactor(factor: number) {\n this._zFactor = factor;\n this.recalculateZoomTransform();\n }\n\n /**\n * Check if x is inverted (right to left is positive) from x bounds\n * @returns true if inverted\n */\n get isXInverted(): boolean {\n return this.xBounds[1] < this.xBounds[0];\n }\n\n /**\n * Check if y is inverted (bottom to top is positive) from y bounds\n * @returns true if inverted\n */\n get isYInverted(): boolean {\n return this.yBounds[1] < this.yBounds[0];\n }\n\n /**\n * Get if enable translate extent (pan limit)\n * @returns true if enabled\n */\n get enableTranslateExtent(): boolean {\n return this._enableTranslateExtent;\n }\n\n /**\n * Set enable translate extent (pan limit)\n * @param enabled - If should be enabled\n */\n set enableTranslateExtent(enabled: boolean) {\n this._enableTranslateExtent = enabled;\n\n this.updateTranslateExtent();\n }\n\n /**\n * Update translate extent (pan limits)\n */\n updateTranslateExtent(): void {\n const { width, xSpan, zFactor, enableTranslateExtent, translateBoundsX, translateBoundsY } = this;\n\n let x1 = -Infinity;\n let y1 = -Infinity;\n let x2 = +Infinity;\n let y2 = +Infinity;\n\n if (enableTranslateExtent) {\n const ppu: number = width / xSpan;\n\n x1 = translateBoundsX[0] * ppu;\n x2 = translateBoundsX[1] * ppu;\n y1 = translateBoundsY[0] * ppu * zFactor;\n y2 = translateBoundsY[1] * ppu * zFactor;\n }\n\n this.zoom.translateExtent([\n [x1, y1],\n [x2, y2],\n ]);\n }\n\n /**\n * Create an event object from current state\n */\n currentStateAsEvent(): OnRescaleEvent {\n const { scaleX, scaleY, xBounds, yBounds, zFactor, viewportRatio, currentTransform, xRatio, yRatio, width, height } = this;\n\n return {\n xScale: scaleX.copy(),\n yScale: scaleY.copy(),\n xBounds: xBounds,\n yBounds: yBounds,\n zFactor: zFactor,\n viewportRatio,\n xRatio: xRatio,\n yRatio: yRatio,\n width: width,\n height: height,\n transform: Object.assign({}, currentTransform),\n };\n }\n\n /**\n * Update scale\n */\n rescale(): void {\n const { currentStateAsEvent } = this;\n\n this.onRescale(currentStateAsEvent());\n }\n\n /**\n * Initialized handler\n */\n init(): void {\n this.zoom = zoom<HTMLElement, unknown>().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);\n this.container.call(this.zoom);\n }\n\n /**\n * Handle zoom\n */\n onZoom(event: { transform: ZoomTransform }): void {\n const { transform } = event;\n if (!transform) {\n return;\n }\n\n this.applyTransform(transform);\n this.rescale();\n }\n\n /**\n * Update scale\n */\n applyTransform(transform: ZoomTransform): void {\n const { width, scaleX, scaleY, xSpan, xBounds, yBounds, zFactor } = this;\n\n const { viewportRatio: ratio, isXInverted, isYInverted } = this;\n\n const newWidth: number = width * transform.k;\n\n const unitsPerPixels: number = xSpan / newWidth;\n\n const newXSpan: number = xSpan / transform.k;\n const newYSpan: number = newXSpan / zFactor / ratio;\n\n const shiftx: number = unitsPerPixels * transform.x;\n const shifty: number = (unitsPerPixels / zFactor) * transform.y;\n const dx0: number = xBounds[0] - (isXInverted ? -shiftx : shiftx);\n const dy0: number = yBounds[0] - (isYInverted ? -shifty : shifty);\n\n scaleX.domain([dx0, dx0 + (isXInverted ? -newXSpan : newXSpan)]);\n scaleY.domain([dy0, dy0 + (isYInverted ? -newYSpan : newYSpan)]);\n\n this.currentTransform = transform;\n }\n\n /**\n * Set new viewport\n * @param cx - center X pos\n * @param cy - center Y pos\n * @param displ\n * @param duration - duration of transition\n * @returns a merge of filter and payload\n */\n setViewport(cx?: number, cy?: number, displ?: number, duration?: number): void {\n const { zoom, container, calculateTransform, scaleX, scaleY, isXInverted } = this;\n\n if (cx == null || displ == null || isNaN(cx) || isNaN(displ)) {\n const xd = scaleX.domain() as [number, number];\n const dspan: number = xd[1] - xd[0];\n\n if (cx == null || isNaN(cx)) {\n cx = xd[0] + dspan / 2 || 0;\n }\n if (displ == null || isNaN(displ)) {\n displ = Math.abs(dspan) || 1;\n }\n }\n\n if (cy == null || isNaN(cy)) {\n const yd = scaleY.domain() as [number, number];\n cy = yd[0] + (yd[1] - yd[0]) / 2 || 0;\n }\n\n const xdispl: number = isXInverted ? -displ : displ;\n\n const dx0: number = cx - xdispl / 2;\n const dx1: number = dx0 + xdispl;\n\n const t: ZoomTransform = calculateTransform(dx0, dx1, cy);\n\n if (duration != null && Number.isFinite(duration) && duration > 0) {\n zoom.transform(container.transition().duration(duration), t);\n } else {\n zoom.transform(container, t);\n }\n }\n\n /**\n * Set bounds\n */\n setBounds(xBounds: [number, number], yBounds: [number, number]): void {\n this.xBounds = xBounds;\n this.yBounds = yBounds;\n\n this.recalculateZoomTransform();\n }\n\n /**\n * Set bounds\n */\n setTranslateBounds(xBounds: [number, number], yBounds: [number, number]): void {\n this.translateBoundsX = xBounds;\n this.translateBoundsY = yBounds;\n\n this.updateTranslateExtent();\n }\n\n /**\n * Adjust zoom due to changes in size of target\n * @param force - force update even if size did not change\n */\n adjustToSize(): void;\n adjustToSize(autoAdjust: boolean): void;\n adjustToSize(width: number, height: number, force: boolean): void;\n adjustToSize(widthOrAutoAdjust?: unknown, height?: number, force = false): void {\n const { width: oldWidth, height: oldHeight, scaleX, scaleY, recalculateZoomTransform } = this;\n\n let w = 0;\n let h = 0;\n\n if (typeof widthOrAutoAdjust === 'number' && typeof height === 'number') {\n h = height;\n w = widthOrAutoAdjust;\n } else {\n const containerEl = this.container.node();\n if (containerEl) {\n const { width: containerWidth, height: containerHeight } = containerEl.getBoundingClientRect();\n w = containerWidth;\n h = containerHeight;\n }\n }\n\n const newWidth: number = Math.max(1, w);\n const newHeight: number = Math.max(1, h);\n\n // exit early if nothing has changed\n if (!force && oldWidth === newWidth && oldHeight === newHeight) {\n return;\n }\n\n scaleX.range([0, newWidth]);\n scaleY.range([0, newHeight]);\n\n recalculateZoomTransform();\n this.onRescale(this.currentStateAsEvent());\n }\n\n /**\n * Calculate new transform\n * @param dx0\n * @param dx1\n * @param dy\n * @returns New transformation matrix\n */\n calculateTransform(dx0: number, dx1: number, dy: number): ZoomTransform {\n const { scaleX, xSpan, xBounds, yBounds, zFactor, viewportRatio: ratio, isXInverted, isYInverted } = this;\n\n const [rx1, rx2] = scaleX.range() as [number, number];\n const displ = Math.abs(dx1 - dx0);\n const k = xSpan / displ;\n const unitsPerPixels = displ / (rx2 - rx1);\n\n const dy0 = dy - (isYInverted ? -displ : displ) / zFactor / ratio / 2;\n\n const tx = (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);\n const ty = (yBounds[0] - dy0) / ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);\n\n return zoomIdentity.translate(tx, ty).scale(k);\n }\n\n /**\n * Recalcualate the transform\n */\n recalculateZoomTransform(): void {\n const { scaleX, scaleY, container, calculateTransform, updateTranslateExtent } = this;\n\n const [dx0, dx1] = scaleX.domain() as [number, number];\n const [dy0, dy1] = scaleY.domain() as [number, number];\n\n const dy: number = dy0 + (dy1 - dy0) / 2;\n\n const transform: ZoomTransform = calculateTransform(dx0, dx1, dy);\n\n updateTranslateExtent();\n\n this.zoom.transform(container, transform);\n }\n\n setZoomLevelBoundary(zoomlevels: [number, number]): ZoomPanHandler {\n this.zoom.scaleExtent(zoomlevels);\n return this;\n }\n\n setMaxZoomLevel(zoomlevel: number): ZoomPanHandler {\n const zoomLevels = this.zoom.scaleExtent();\n this.zoom.scaleExtent([zoomLevels[0], zoomlevel]);\n return this;\n }\n\n setMinZoomLevel(zoomlevel: number): ZoomPanHandler {\n const zoomLevels = this.zoom.scaleExtent();\n this.zoom.scaleExtent([zoomlevel, zoomLevels[1]]);\n return this;\n }\n}\n","import { OnMountEvent, OnUnmountEvent, OnUpdateEvent, OnRescaleEvent, OnResizeEvent } from '../../interfaces';\nimport { IntersectionReferenceSystem } from '../../control';\n\nconst defaultOptions = {\n order: 1,\n layerOpacity: 1,\n interactive: false,\n};\n\nexport interface LayerOptions<T> {\n order?: number;\n layerOpacity?: number;\n referenceSystem?: IntersectionReferenceSystem;\n data?: T;\n interactive?: boolean;\n\n onMount?(event: OnMountEvent, layer: Layer<T>): void;\n onUnmount?(event: OnUnmountEvent, layer: Layer<T>): void;\n onUpdate?(event: OnUpdateEvent<T>, layer: Layer<T>): void;\n onRescale?(event: OnRescaleEvent, layer: Layer<T>): void;\n onResize?(event: OnResizeEvent, layer: Layer<T>): void;\n}\n\nexport abstract class Layer<T> {\n private _id: string;\n private _order: number;\n protected _options: LayerOptions<T>;\n private loading: boolean;\n private _element: HTMLElement | undefined;\n private _opacity: number;\n private _referenceSystem: IntersectionReferenceSystem | undefined;\n private _data: T | undefined;\n private _visible: boolean;\n private _interactive = false;\n\n constructor(id?: string, options?: LayerOptions<T>) {\n this._id = id || `layer-${Math.floor(Math.random() * 1000)}`;\n const opts = options || defaultOptions;\n this._order = opts.order || 1;\n this._options = {\n ...opts,\n };\n this.loading = false;\n this._element = undefined;\n this._opacity = opts.layerOpacity || 1;\n this._visible = true;\n this._interactive = opts.interactive || false;\n\n if (options && options.data) {\n this.setData(options.data);\n }\n this._referenceSystem = options?.referenceSystem;\n\n this.onMount = this.onMount.bind(this);\n this.onUnmount = this.onUnmount.bind(this);\n this.onUpdate = this.onUpdate.bind(this);\n this.onRescale = this.onRescale.bind(this);\n this.onResize = this.onResize.bind(this);\n this.onOrderChanged = this.onOrderChanged.bind(this);\n this.onOpacityChanged = this.onOpacityChanged.bind(this);\n this.setVisibility = this.setVisibility.bind(this);\n }\n\n get id(): string {\n return this._id;\n }\n\n get element(): HTMLElement | undefined {\n return this._element;\n }\n\n get options(): LayerOptions<T> {\n return this._options;\n }\n\n set options(options: LayerOptions<T>) {\n this._options = options;\n }\n\n set isLoading(loading: boolean) {\n this.loading = loading;\n }\n\n get isLoading(): boolean {\n return this.loading;\n }\n\n set opacity(opacity: number) {\n this._opacity = opacity;\n this.onOpacityChanged(opacity);\n }\n\n get opacity(): number {\n return this._opacity;\n }\n\n set order(order: number) {\n this._order = order;\n this.onOrderChanged(order);\n }\n\n get order(): number {\n return this._order;\n }\n\n set interactive(shouldBeInteractive: boolean) {\n this._interactive = shouldBeInteractive;\n this.onInteractivityChanged(shouldBeInteractive);\n }\n\n get interactive(): boolean {\n return this._interactive;\n }\n\n get referenceSystem(): IntersectionReferenceSystem | undefined {\n return this._referenceSystem;\n }\n\n set referenceSystem(referenceSystem: IntersectionReferenceSystem | undefined) {\n this._referenceSystem = referenceSystem;\n }\n\n get data(): T | undefined {\n return this.getData();\n }\n\n set data(data: T | undefined) {\n this.setData(data);\n }\n\n get isVisible(): boolean {\n return this._visible;\n }\n\n getData(): T | undefined {\n return this._data;\n }\n\n setData(data: T | undefined): void {\n this._data = data;\n // should not be called when there is no visual element to work with\n if (this.element && data != null) {\n this.onUpdate({ data });\n }\n }\n\n /**\n * Clears data and (optionally) the reference system\n * @param includeReferenceSystem - (optional) if true also removes reference system, default is true\n */\n clearData(includeReferenceSystem = true): void {\n this._data = undefined;\n if (includeReferenceSystem) {\n this.referenceSystem = undefined;\n }\n this.onUpdate({});\n }\n\n setVisibility(visible: boolean, _layerId?: string): void {\n this._visible = visible;\n }\n\n onMount(event: OnMountEvent): void {\n this._element = event.elm;\n if (this._options.onMount) {\n this._options.onMount(event, this);\n }\n }\n\n onUnmount(event?: OnUnmountEvent): void {\n if (this._options.onUnmount && event != null) {\n this._options.onUnmount(event, this);\n }\n }\n\n onResize(event: OnResizeEvent): void {\n if (this._options.onResize) {\n this._options.onResize(event, this);\n }\n }\n\n onUpdate(event: OnUpdateEvent<T>): void {\n if (event.data) {\n this._data = event.data;\n }\n if (this._options.onUpdate) {\n this._options.onUpdate(event, this);\n }\n }\n\n onRescale(event: OnRescaleEvent): void {\n this.optionsRescale(event);\n }\n\n optionsRescale(event: OnRescaleEvent): void {\n if (this._options.onRescale) {\n this._options.onRescale(event, this);\n }\n }\n\n abstract onOpacityChanged(opacity: number): void;\n\n abstract onOrderChanged(order: number): void;\n\n abstract onInteractivityChanged(interactive: boolean): void;\n\n /**\n *\n * Some layers might be built up of several internal layers that should individually be visibility-togglable.\n * Reasons for having multiple internal layers might be tightly related data between layers or need for sharing render context\n *\n * @returns list of internal layer ids\n */\n getInternalLayerIds(): string[] {\n return [];\n }\n}\n","export const DEFAULT_LAYER_WIDTH = 200;\nexport const DEFAULT_LAYER_HEIGHT = 300;\n\nexport const HORIZONTAL_AXIS_MARGIN = 40;\nexport const VERTICAL_AXIS_MARGIN = 30;\n\nexport const EXAGGERATED_DIAMETER = 100;\nexport const HOLE_OUTLINE = 0.6;\nexport const SCREEN_OUTLINE = 0.3;\n\nexport const SHOE_WIDTH = 8;\nexport const SHOE_LENGTH = 16;\n\nexport const DEFAULT_TEXTURE_SIZE = 64;\n\n// Surface lines are drawn as LINES and not TRIANGLE_STRIP so width can only be 1\nexport const SURFACE_LINE_WIDTH = 1;\n","import { Layer } from './Layer';\nimport { OnMountEvent, OnUpdateEvent, OnResizeEvent, OnRescaleEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\nexport abstract class CanvasLayer<T> extends Layer<T> {\n ctx: CanvasRenderingContext2D | undefined;\n elm: HTMLElement | undefined;\n canvas: HTMLCanvasElement | undefined;\n\n onOpacityChanged(_opacity: number): void {\n if (this.canvas) {\n this.updateStyle();\n }\n }\n\n onOrderChanged(_order: number): void {\n if (this.canvas) {\n this.updateStyle();\n }\n }\n\n onInteractivityChanged(_interactive: boolean): void {\n if (this.canvas) {\n this.updateStyle();\n }\n }\n\n override setVisibility(visible: boolean): void {\n super.setVisibility(visible);\n if (this.canvas) {\n this.updateStyle(visible);\n }\n }\n\n updateStyle(visible?: boolean): void {\n const isVisible = visible || this.isVisible;\n const visibility = isVisible ? 'visible' : 'hidden';\n const interactive = this.interactive ? 'auto' : 'none';\n this.canvas?.setAttribute(\n 'style',\n `position:absolute;pointer-events:${interactive};z-index:${this.order};opacity:${this.opacity};visibility:${visibility}`,\n );\n }\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const { elm } = event;\n const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;\n const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;\n this.elm = elm;\n let canvas: HTMLCanvasElement;\n if (!this.canvas) {\n canvas = document.createElement('canvas');\n this.canvas = canvas;\n event.elm.appendChild(canvas);\n }\n this.canvas.setAttribute('id', `${this.id}`);\n this.canvas.setAttribute('width', `${width}px`);\n this.canvas.setAttribute('height', `${height}px`);\n this.canvas.setAttribute('class', 'canvas-layer');\n this.updateStyle();\n this.ctx = this.canvas.getContext('2d') ?? undefined;\n }\n\n override onUnmount(): void {\n super.onUnmount();\n this.canvas?.remove();\n this.canvas = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n const { ctx } = this;\n const { width, height } = event;\n\n ctx?.canvas.setAttribute('width', `${width}px`);\n ctx?.canvas.setAttribute('height', `${height}px`);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n }\n\n resetTransform(): void {\n this.ctx?.resetTransform();\n }\n\n setTransform(event: OnRescaleEvent): void {\n this.resetTransform();\n const flippedX = event.xBounds[0] > event.xBounds[1];\n const flippedY = event.yBounds[0] > event.yBounds[1];\n this.ctx?.translate(event.xScale(0), event.yScale(0));\n this.ctx?.scale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));\n }\n\n clearCanvas(): void {\n const { ctx, canvas } = this;\n ctx?.save();\n ctx?.resetTransform();\n ctx?.clearRect(0, 0, canvas?.width ?? 0, canvas?.height ?? 0);\n ctx?.restore();\n }\n}\n","import { select, Selection } from 'd3-selection';\nimport { Layer } from './Layer';\nimport { OnMountEvent, OnResizeEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\nexport abstract class HTMLLayer<T> extends Layer<T> {\n elm: Selection<HTMLDivElement, unknown, null, undefined> | undefined;\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const { elm } = event;\n const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;\n const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;\n\n if (!this.elm) {\n this.elm = select(elm).append('div');\n this.elm.attr('id', `${this.id}`);\n this.elm.attr('class', 'html-layer');\n }\n const interactive = this.interactive ? 'auto' : 'none';\n this.elm\n .style('position', 'absolute')\n .style('height', `${height}px`)\n .style('width', `${width}px`)\n .style('opacity', this.opacity)\n .style('overflow', 'hidden')\n .style('pointer-events', interactive)\n .style('z-index', this.order);\n }\n\n override onUnmount(): void {\n super.onUnmount();\n this.elm?.remove();\n this.elm = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n if (!this.elm) {\n return;\n }\n super.onResize(event);\n this.elm.style('height', `${event.height}px`).style('width', `${event.width}px`);\n }\n\n override setVisibility(visible: boolean): void {\n super.setVisibility(visible);\n if (this.elm) {\n this.elm.attr('visibility', visible ? 'visible' : 'hidden');\n }\n }\n\n onOpacityChanged(opacity: number): void {\n if (this.elm) {\n this.elm.style('opacity', opacity);\n }\n }\n\n onOrderChanged(order: number): void {\n if (this.elm) {\n this.elm.style('z-index', order);\n }\n }\n\n onInteractivityChanged(shouldBeInteractive: boolean): void {\n if (this.elm) {\n const interactive = shouldBeInteractive ? 'auto' : 'none';\n this.elm.style('pointer-events', interactive);\n }\n }\n}\n","import { select, Selection } from 'd3-selection';\nimport { Layer } from './Layer';\nimport { OnMountEvent, OnResizeEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\nexport abstract class SVGLayer<T> extends Layer<T> {\n elm: Selection<SVGSVGElement, unknown, null, undefined> | undefined;\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const { elm } = event;\n const width = event.width || parseInt(elm.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;\n const height = event.height || parseInt(elm.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;\n if (!this.elm) {\n this.elm = select(elm).append('svg');\n this.elm.attr('id', `${this.id}`);\n this.elm.attr('class', 'svg-layer');\n }\n this.elm.attr('height', height).attr('width', width);\n const interactive = this.interactive ? 'auto' : 'none';\n this.elm.style('position', 'absolute').style('pointer-events', interactive).style('opacity', this.opacity).style('z-index', this.order);\n }\n\n override onUnmount(): void {\n super.onUnmount();\n this.elm?.remove();\n this.elm = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n if (!this.elm) {\n return;\n }\n super.onResize(event);\n this.elm.attr('height', event.height).attr('width', event.width);\n }\n\n override setVisibility(visible: boolean): void {\n super.setVisibility(visible);\n if (this.elm) {\n this.elm.attr('visibility', visible ? 'visible' : 'hidden');\n }\n }\n\n onOpacityChanged(opacity: number): void {\n if (this.elm) {\n this.elm.style('opacity', opacity);\n }\n }\n\n onOrderChanged(order: number): void {\n if (this.elm) {\n this.elm.style('z-index', order);\n }\n }\n\n onInteractivityChanged(shouldBeInteractive: boolean): void {\n if (this.elm) {\n const interactive = shouldBeInteractive ? 'auto' : 'none';\n this.elm.style('pointer-events', interactive);\n }\n }\n}\n","import { IRenderer, Application, autoDetectRenderer, Container, DisplayObject, IRendererOptionsAuto, Renderer, RENDERER_TYPE } from 'pixi.js';\nimport { Layer, LayerOptions } from './Layer';\nimport { OnMountEvent, OnRescaleEvent, OnResizeEvent, OnUnmountEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\n// PixiRenderApplication has many similarities with PIXI.Application,\n// but an important distinction is that it does not run the TickerPlugin.\n// We only want to re-render on data changes\n// The plugin we are trying to avoid:\n// https://github.com/pixijs/pixijs/blob/dev/packages/ticker/src/TickerPlugin.ts\nexport class PixiRenderApplication {\n stage: Container | undefined;\n\n renderer: IRenderer<HTMLCanvasElement> | undefined;\n\n constructor(pixiRenderOptions?: IRendererOptionsAuto) {\n const options = {\n width: DEFAULT_LAYER_WIDTH,\n height: DEFAULT_LAYER_HEIGHT,\n antialias: true,\n backgroundAlpha: 0,\n clearBeforeRender: true,\n // autoResize: true,\n preserveDrawingBuffer: true,\n ...pixiRenderOptions,\n };\n this.renderer = autoDetectRenderer<HTMLCanvasElement>(options);\n this.stage = new Container();\n }\n\n destroy() {\n this.stage?.destroy({\n children: true,\n texture: true,\n baseTexture: true,\n });\n this.stage = undefined;\n\n // Get renderType and clContext before we destroy the renderer\n const renderType = this.renderer?.type;\n const glContext = this.renderer instanceof Renderer ? this.renderer?.gl : undefined;\n\n /**\n * WebGL v2 does supposedly not have WEBGL_lose_context\n * so Pixi.js does not use it to \"clean up\" on v2.\n *\n * Cleaning up our self since it still seems to work and fix issue with lingering context\n */\n if (renderType === RENDERER_TYPE.WEBGL && glContext) {\n glContext?.getExtension('WEBGL_lose_context')?.loseContext();\n }\n\n this.renderer?.destroy(true);\n this.renderer = undefined;\n }\n\n get view() {\n return this.renderer?.view;\n }\n\n render() {\n if (this.stage != null) {\n this.renderer?.render(this.stage);\n }\n }\n}\n\nexport abstract class PixiLayer<T> extends Layer<T> {\n private pixiViewContainer: HTMLElement | undefined;\n private ctx: PixiRenderApplication;\n private container: Container;\n\n constructor(ctx: Application<HTMLCanvasElement> | PixiRenderApplication, id?: string, options?: LayerOptions<T>) {\n super(id, options);\n\n this.ctx = ctx;\n\n this.container = new Container();\n this.ctx.stage?.addChild(this.container);\n }\n\n render(): void {\n this.ctx.render();\n }\n\n addChild(child: DisplayObject) {\n this.container.addChild(child);\n }\n\n clearLayer() {\n const children = this.container.removeChildren();\n children.forEach((child) => {\n child.destroy();\n });\n }\n\n override onMount(event: OnMountEvent) {\n super.onMount(event);\n\n this.pixiViewContainer = this.element?.querySelector('#webgl-layer') ?? undefined;\n\n if (!this.pixiViewContainer) {\n this.pixiViewContainer = document.createElement('div');\n this.pixiViewContainer.setAttribute('id', `${this.id}`);\n this.pixiViewContainer.setAttribute('class', 'webgl-layer');\n\n if (this.ctx.view != null) {\n this.pixiViewContainer.appendChild(this.ctx.view);\n }\n\n this.element?.appendChild(this.pixiViewContainer);\n\n this.updateStyle();\n }\n }\n\n override onUnmount(event?: OnUnmountEvent) {\n super.onUnmount(event);\n\n this.clearLayer();\n this.ctx.stage?.removeChild(this.container);\n this.container.destroy();\n this.pixiViewContainer?.remove();\n this.pixiViewContainer = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n super.onResize(event);\n this.ctx.renderer?.resize(event.width, event.height);\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n\n const flippedX = event.xBounds[0] > event.xBounds[1];\n const flippedY = event.yBounds[0] > event.yBounds[1];\n this.setContainerPosition(event.xScale(0), event.yScale(0));\n this.setContainerScale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));\n }\n\n protected setContainerPosition(x?: number, y?: number) {\n this.container.position.set(x, y);\n }\n\n protected setContainerScale(x?: number, y?: number) {\n this.container.scale.set(x, y);\n }\n\n updateStyle(visible?: boolean): void {\n const isVisible = visible || this.isVisible;\n const interactive = this.interactive ? 'auto' : 'none';\n this.container.visible = isVisible;\n\n const styles = [\n ['position', 'absolute'],\n ['pointer-events', `${interactive}`],\n ['z-index', `${this.order}`],\n ['opacity', `${this.opacity}`],\n ]\n .map((pair) => pair.join(':'))\n .join(';');\n\n this.pixiViewContainer?.setAttribute('style', styles);\n }\n\n override setVisibility(visible: boolean, layerId?: string): void {\n super.setVisibility(visible, layerId);\n if (this.pixiViewContainer) {\n this.updateStyle(visible);\n }\n }\n\n onOpacityChanged(_opacity: number): void {\n if (this.pixiViewContainer) {\n this.updateStyle();\n }\n }\n\n onOrderChanged(_order: number): void {\n if (this.pixiViewContainer) {\n this.updateStyle();\n }\n }\n\n onInteractivityChanged(_interactive: boolean): void {\n if (this.pixiViewContainer) {\n this.updateStyle();\n }\n }\n\n renderType(): RENDERER_TYPE | undefined {\n return this.ctx.renderer?.type;\n }\n}\n","import { SHOE_LENGTH, SHOE_WIDTH } from '../constants';\n\nexport function assertNever(x: never): never {\n throw new Error(`Unexpected object: ${JSON.stringify(x)}`);\n}\n\n/**\n * The closure type of the outline\n */\nexport type OutlineClosure = 'None' | 'TopAndBottom' | 'Top' | 'Bottom';\n\nexport interface HoleSize {\n kind: 'hole';\n id: string;\n diameter: number;\n start: number;\n end: number;\n}\n\nexport interface CasingWindow {\n id: string;\n start: number;\n end: number;\n}\n\nexport interface Casing {\n kind: 'casing';\n id: string;\n diameter: number;\n start: number;\n end: number;\n hasShoe: boolean;\n innerDiameter: number;\n windows?: CasingWindow[];\n}\n\ninterface SymbolComponent {\n id: string;\n diameter: number;\n start: number;\n end: number;\n symbolKey: string;\n}\n\nexport interface PAndASymbol extends SymbolComponent {\n kind: 'pAndASymbol';\n}\n\nexport const isPAndASymbol = (item: PAndA): item is PAndASymbol => item.kind === 'pAndASymbol';\n\nexport interface CementSqueeze {\n kind: 'cementSqueeze';\n id: string;\n start: number;\n end: number;\n /**\n * Referenced Casing and Completion ids\n */\n referenceIds: string[];\n}\n\nexport const isCementSqueeze = (item: PAndA): item is CementSqueeze => item.kind === 'cementSqueeze';\n\nexport interface CementPlug {\n kind: 'cementPlug';\n id: string;\n start: number;\n end: number;\n /**\n * Referenced Casing, Completion ids\n */\n referenceIds: string[];\n}\n\nexport const isCementPlug = (item: PAndA): item is CementSqueeze => item.kind === 'cementPlug';\n\nexport type PAndA = PAndASymbol | CementSqueeze | CementPlug;\n\ninterface BaseCompletion {\n id: string;\n diameter: number;\n start: number;\n end: number;\n}\n\nexport interface Screen extends BaseCompletion {\n kind: 'screen';\n}\nexport interface Tubing extends BaseCompletion {\n kind: 'tubing';\n}\n\nexport interface CompletionSymbol extends BaseCompletion {\n kind: 'completionSymbol';\n symbolKey: string;\n}\n\nexport type Completion = Tubing | Screen | CompletionSymbol;\n\nexport const foldCompletion =\n <T>(fScreen: (obj: Screen) => T, fTubing: (obj: Tubing) => T, fSymbol: (obj: CompletionSymbol) => T) =>\n (completion: Completion): T => {\n switch (completion.kind) {\n case 'screen':\n return fScreen(completion);\n case 'tubing':\n return fTubing(completion);\n case 'completionSymbol':\n return fSymbol(completion);\n default:\n return assertNever(completion);\n }\n };\n\nexport interface Cement {\n kind: 'cement';\n id: string;\n /**\n * Referenced Casing and Completion ids\n */\n referenceIds: string[];\n toc: number;\n}\n\n/**\n * 'Open hole' and 'Open hole screen' are not included as they are not visualized and also not included in the ruleset\n */\nexport type PerforationSubKind =\n | 'Perforation'\n | 'Open hole gravel pack'\n | 'Open hole frac pack'\n | 'Cased hole frac pack'\n | 'Cased hole gravel pack'\n | 'Cased hole fracturation';\n\nexport interface Perforation {\n kind: 'perforation';\n subKind: PerforationSubKind;\n id: string;\n start: number;\n end: number;\n /**\n * is the perforation open or sealed?\n */\n isOpen: boolean;\n}\n\nexport const foldPerforationSubKind = <T>(\n options: {\n Perforation: (kind: 'Perforation') => T;\n OpenHoleGravelPack: (kind: 'Open hole gravel pack') => T;\n OpenHoleFracPack: (kind: 'Open hole frac pack') => T;\n CasedHoleGravelPack: (kind: 'Cased hole gravel pack') => T;\n CasedHoleFracPack: (kind: 'Cased hole frac pack') => T;\n CasedHoleFracturation: (kind: 'Cased hole fracturation') => T;\n },\n subKind: PerforationSubKind,\n) => {\n switch (subKind) {\n case 'Perforation':\n return options.Perforation(subKind);\n\n case 'Open hole gravel pack':\n return options.OpenHoleGravelPack(subKind);\n\n case 'Open hole frac pack':\n return options.OpenHoleFracPack(subKind);\n\n case 'Cased hole fracturation':\n return options.CasedHoleFracturation(subKind);\n\n case 'Cased hole frac pack':\n return options.CasedHoleFracPack(subKind);\n\n case 'Cased hole gravel pack':\n return options.CasedHoleGravelPack(subKind);\n\n default:\n return assertNever(subKind);\n }\n};\n\nexport const shouldPerforationStartAtHoleDiameter = (perf: Perforation) =>\n foldPerforationSubKind(\n {\n Perforation: () => true,\n OpenHoleGravelPack: () => true,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n\nexport const shouldPerforationStartAtCasingDiameter = (perf: Perforation) =>\n foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => true,\n CasedHoleGravelPack: () => true,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n\nexport const hasPacking = (perf: Perforation): boolean =>\n foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => true,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => true,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n\nexport function hasFracLines(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => true,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n}\n\nexport function hasSpikes(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => true,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport function isSubkindCasedHoleGravelPack(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => true,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport function isSubKindPerforation(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => true,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport function isSubKindCasedHoleFracPack(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n}\n\nexport function isOpenHoleFracPack(perf: Perforation) {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport const isSubKindCasedHoleFracturation = (perf: Perforation): boolean => perf.subKind === 'Cased hole fracturation';\n\nexport const intersect = (a: Perforation, b: Perforation): boolean => {\n return a.start < b.end && a.end > b.start;\n};\n\nexport interface SchematicData {\n holeSizes: HoleSize[];\n casings: Casing[];\n cements: Cement[];\n completion: Completion[];\n pAndA: PAndA[];\n symbols: {\n [key: string]: string;\n };\n perforations: Perforation[];\n}\n\nexport interface InternalLayerOptions {\n holeLayerId: string;\n casingLayerId: string;\n completionLayerId: string;\n cementLayerId: string;\n pAndALayerId: string;\n perforationLayerId: string;\n}\n\nexport const defaultInternalLayerOptions = (layerId: string): InternalLayerOptions => ({\n holeLayerId: `${layerId}-hole`,\n casingLayerId: `${layerId}-casing`,\n completionLayerId: `${layerId}-completion`,\n cementLayerId: `${layerId}-cement`,\n pAndALayerId: `${layerId}-pAndA`,\n perforationLayerId: `${layerId}-perforation`,\n});\n\nexport interface HoleOptions {\n firstColor: string;\n secondColor: string;\n lineColor: string;\n}\n\nexport const defaultHoleOptions: HoleOptions = {\n firstColor: '#8c541d',\n secondColor: '#eee3d8',\n lineColor: '#8b4513',\n};\n\nexport interface CasingShoeSize {\n width: number;\n length: number;\n}\n\nexport interface WindowOptions {\n dashColor: string;\n dashLength: number;\n spaceLength: number;\n}\n\nexport interface CasingOptions {\n solidColor: string;\n lineColor: string;\n shoeSize: CasingShoeSize;\n windowOptions: WindowOptions;\n}\n\nexport const defaultCasingOptions: CasingOptions = {\n solidColor: '#dcdcdc',\n lineColor: '#575757',\n shoeSize: {\n width: SHOE_WIDTH,\n length: SHOE_LENGTH,\n },\n windowOptions: {\n dashColor: '#dc0000',\n dashLength: 5,\n spaceLength: 3,\n },\n};\n\nexport interface PerforationOptions {\n stroke: string;\n yellow: string;\n grey: string;\n red: string;\n outline: string;\n transparent: string;\n spikeWidth: number;\n spikeLength: number;\n packingOpacity: number;\n fracLineLength: number;\n fracLineCurve: number;\n scalingFactor: number;\n}\n\nexport const defaultPerforationOptions: PerforationOptions = {\n stroke: 'rgba(0, 0, 0, 0.25)',\n yellow: '#FFFC00',\n grey: 'gray',\n red: '#FF5050',\n outline: 'black',\n transparent: 'rgba(255, 255, 255, 0)',\n spikeWidth: 50,\n spikeLength: 50,\n packingOpacity: 0.7,\n fracLineCurve: 10,\n fracLineLength: 25,\n scalingFactor: 25,\n};\n\nexport interface CementOptions {\n firstColor: string;\n secondColor: string;\n scalingFactor: number;\n}\n\nexport const defaultCementOptions: CementOptions = {\n firstColor: '#c7b9ab',\n secondColor: '#5b5b5b',\n scalingFactor: 4,\n};\n\nexport interface CementSqueezeOptions {\n firstColor: string;\n secondColor: string;\n scalingFactor: number;\n}\n\nexport const defaultCementSqueezeOptions: CementSqueezeOptions = {\n firstColor: '#8b6713',\n secondColor: '#000000',\n scalingFactor: 4,\n};\n\nexport interface ScreenOptions {\n scalingFactor: number;\n lineColor: string;\n}\n\nexport const defaultScreenOptions: ScreenOptions = {\n scalingFactor: 4,\n lineColor: '#63666a',\n};\n\nexport interface TubingOptions {\n innerColor: string;\n outerColor: string;\n scalingFactor: number;\n}\n\nexport const defaultTubingOptions: TubingOptions = {\n scalingFactor: 1,\n innerColor: '#eeeeff',\n outerColor: '#777788',\n};\n\nexport interface CementPlugOptions {\n firstColor: string;\n secondColor: string;\n scalingFactor: number;\n}\n\nexport const defaultCementPlugOptions: CementPlugOptions = {\n firstColor: '#c7b9ab',\n secondColor: '#000000',\n scalingFactor: 4,\n};\n","import { clamp } from '@equinor/videx-math';\n\nimport { BoundingBox } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\n\nconst DEFAULT_HORIZONTAL_PADDING = 4;\nconst DEFAULT_VERTICAL_PADDING = 2;\n\nexport function pixelsPerUnit(x: ScaleLinear<number, number>): number {\n const [min] = x.domain() as [number, number];\n return Math.abs(x(min + 1));\n}\n\nexport function calcSize(factor: number, min: number, max: number, x: ScaleLinear<number, number>): number {\n return clamp(pixelsPerUnit(x) * factor, min, max);\n}\n\nexport function isOverlappingHorizontally(r1: BoundingBox, r2: BoundingBox): boolean {\n const r1x2 = r1.x + r1.width;\n const r2x2 = r2.x + r2.width;\n\n if (r2.x > r1x2 || r2x2 < r1.x) {\n return false;\n }\n return true;\n}\n\nexport function isOverlapping(\n r1: BoundingBox,\n r2: BoundingBox,\n horizontalPadding: number = DEFAULT_HORIZONTAL_PADDING,\n verticalPadding: number = DEFAULT_VERTICAL_PADDING,\n): boolean {\n const r1x2 = r1.x + r1.width + horizontalPadding;\n const r2x2 = r2.x + r2.width + horizontalPadding;\n const r1y2 = r1.y + r1.height + verticalPadding;\n const r2y2 = r2.y + r2.height + verticalPadding;\n\n if (r2.x - horizontalPadding > r1x2 || r2.y - verticalPadding > r1y2 || r2x2 + horizontalPadding < r1.x || r2y2 + verticalPadding < r1.y) {\n return false;\n }\n return true;\n}\n\nexport function getOverlap(r1: BoundingBox, r2: BoundingBox): { dx: number; dy: number } | undefined {\n const r1x2 = r1.x + r1.width;\n const r2x2 = r2.x + r2.width;\n const r1y2 = r1.y + r1.height;\n const r2y2 = r2.y + r2.height;\n\n if (r2.x > r1x2 || r2.y > r1y2 || r2x2 < r1.x || r2y2 < r1.y) {\n return undefined;\n }\n\n const dx = Math.max(0, Math.min(r1.x + r1.width, r2.x + r2.width) - Math.max(r1.x, r2.x));\n const dy = Math.max(0, Math.min(r1.y + r1.height, r2.y + r2.height) - Math.max(r1.y, r2.y));\n\n const newPoints = {\n dx,\n dy,\n };\n return newPoints;\n}\n\nexport function getOverlapOffset(\n r1: BoundingBox,\n r2: BoundingBox,\n horizontalPadding = DEFAULT_HORIZONTAL_PADDING,\n verticalPadding = DEFAULT_VERTICAL_PADDING,\n): { dx: number; dy: number } | undefined {\n const r1x2 = r1.x + r1.width;\n const r2x2 = r2.x + r2.width;\n const r1y2 = r1.y + r1.height;\n const r2y2 = r2.y + r2.height;\n\n if (r2.x - horizontalPadding > r1x2 || r2.y - verticalPadding > r1y2 || r2x2 + horizontalPadding < r1.x || r2y2 + verticalPadding < r1.y) {\n return undefined;\n }\n\n const dx = r1.x + r1.width - r2.x + horizontalPadding;\n const dy = r1.y + r1.height - r2.y + verticalPadding;\n\n const newPoints = {\n dx,\n dy,\n };\n return newPoints;\n}\n","import { ScaleLinear } from 'd3-scale';\n\nimport { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, Annotation, OnRescaleEvent, BoundingBox } from '../interfaces';\nimport { calcSize, isOverlapping, getOverlapOffset } from '../utils';\nimport { LayerOptions } from './base/Layer';\n\nconst DEFAULT_MIN_FONT_SIZE = 7;\nconst DEFAULT_MAX_FONT_SIZE = 11;\nconst DEFAULT_FONT_SIZE_FACTOR = 7;\n\nconst DEFAULT_OFFSET_MIN = 20;\nconst DEFAULT_OFFSET_MAX = 120;\nconst DEFAULT_OFFSET_FACTOR = 19;\n\nconst DEFAULT_BACKGROUND_COLOR = 'rgba(0, 0, 0, 0.5)';\nconst DEFAULT_BACKGROUND_PADDING = 5;\nconst DEFAULT_BACKGROUND_BORDER_RADIUS = 5;\n\n/** Input returned if present, defaultValue used as fallback. */\nfunction getValueOrDefault<T>(input: T | null | undefined, defaultValue: T): T {\n return input === null || input === undefined ? defaultValue : input;\n}\n\nconst Location = {\n topleft: 'topleft',\n topright: 'topright',\n bottomleft: 'bottomleft',\n bottomright: 'bottomright',\n};\n\nexport type Point = {\n x: number;\n y: number;\n};\n\nexport type Callout = {\n title: string;\n label: string;\n color: string;\n pos: Point;\n group: string;\n alignment: string;\n boundingBox: BoundingBox;\n dx: number;\n dy: number;\n};\n\nexport interface CalloutOptions<T extends Annotation[]> extends LayerOptions<T> {\n minFontSize?: number;\n maxFontSize?: number;\n fontSizeFactor?: number;\n offsetMin?: number;\n offsetMax?: number;\n offsetFactor?: number;\n fontColor?: string;\n backgroundColor?: string;\n backgroundPadding?: number;\n backgroundBorderRadius?: number;\n}\n\nexport class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {\n rescaleEvent: OnRescaleEvent | undefined;\n xRatio: number | undefined;\n callouts: Callout[] = [];\n groupFilter: string[] = [];\n minFontSize: number;\n maxFontSize: number;\n fontSizeFactor: number;\n offsetMin: number;\n offsetMax: number;\n offsetFactor: number;\n\n fontColor: string | undefined;\n\n backgroundActive: boolean;\n backgroundColor: string;\n backgroundPadding: number;\n backgroundBorderRadius: number;\n\n constructor(id?: string, options?: CalloutOptions<T>) {\n super(id, options);\n this.minFontSize = options?.minFontSize || DEFAULT_MIN_FONT_SIZE;\n this.maxFontSize = options?.maxFontSize || DEFAULT_MAX_FONT_SIZE;\n this.fontSizeFactor = options?.fontSizeFactor || DEFAULT_FONT_SIZE_FACTOR;\n this.offsetMin = options?.offsetMin || DEFAULT_OFFSET_MIN;\n this.offsetMax = options?.offsetMax || DEFAULT_OFFSET_MAX;\n this.offsetFactor = options?.offsetFactor || DEFAULT_OFFSET_FACTOR;\n\n this.fontColor = options?.fontColor;\n\n // Set background as active if 'backgroundColor' is defined\n if (options?.backgroundColor) {\n this.backgroundActive = true;\n this.backgroundColor = options.backgroundColor;\n } else {\n this.backgroundActive = false;\n this.backgroundColor = DEFAULT_BACKGROUND_COLOR;\n }\n\n this.backgroundPadding = options?.backgroundPadding || DEFAULT_BACKGROUND_PADDING;\n this.backgroundBorderRadius = getValueOrDefault(options?.backgroundBorderRadius, DEFAULT_BACKGROUND_BORDER_RADIUS);\n }\n\n setGroupFilter(filter: string[]): void {\n this.groupFilter = filter;\n this.callouts = [];\n this.render();\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.callouts = [];\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n const isPanning = this.rescaleEvent && this.rescaleEvent.xRatio === event.xRatio;\n this.rescaleEvent = event;\n\n this.render(isPanning);\n }\n\n render(isPanning = false): void {\n requestAnimationFrame(() => {\n this.clearCanvas();\n\n if (!this.data || !this.rescaleEvent || !this.referenceSystem) {\n return;\n }\n\n const { xScale, yScale, xBounds } = this.rescaleEvent;\n\n const fontSize = calcSize(this.fontSizeFactor, this.minFontSize, this.maxFontSize, xScale);\n\n if (!isPanning || this.callouts.length <= 0) {\n const { data, ctx, groupFilter } = this;\n const { calculateDisplacementFromBottom } = this.referenceSystem.options;\n const isLeftToRight = calculateDisplacementFromBottom ? xBounds[0] < xBounds[1] : xBounds[0] > xBounds[1];\n const scale = 0;\n\n ctx != null && (ctx.font = `bold ${fontSize}px arial`);\n const filtered = data.filter((d: Annotation) => groupFilter.length <= 0 || groupFilter.includes(d.group));\n const offset = calcSize(this.offsetFactor, this.offsetMin, this.offsetMax, xScale);\n this.callouts = this.positionCallouts(filtered, isLeftToRight, xScale, yScale, scale, fontSize, offset);\n }\n\n this.callouts.forEach((callout) => {\n const { pos, title, color } = callout;\n const x = xScale(pos.x);\n const y = yScale(pos.y);\n\n const calloutBB = {\n x,\n y,\n width: callout.boundingBox.width,\n height: fontSize,\n offsetX: callout.dx,\n offsetY: callout.dy,\n };\n\n this.renderCallout(title, callout.label, calloutBB, color, callout.alignment);\n });\n });\n }\n\n private renderBackground(title: string, label: string, x: number, y: number, fontSize: number): void {\n const { ctx } = this;\n\n if (ctx == null) {\n return;\n }\n\n const padding = this.backgroundPadding;\n const borderRadius = this.backgroundBorderRadius;\n\n const titleWidth = this.measureTextWidth(title, fontSize, 'arial', 'bold');\n const labelWidth = this.measureTextWidth(label, fontSize);\n\n // Determine width and height of annotation\n const width = Math.max(titleWidth, labelWidth) + padding * 2;\n const height = (fontSize + padding) * 2;\n\n const xMin = x - padding;\n const yMin = y - 2 * fontSize - padding;\n\n ctx.fillStyle = this.backgroundColor;\n\n if (borderRadius > 0) {\n const xMax = xMin + width;\n const yMax = yMin + height;\n\n // Draw rounded rect\n ctx.beginPath();\n ctx.moveTo(xMin + borderRadius, yMin); // Top left\n ctx.lineTo(xMax - borderRadius, yMin);\n ctx.quadraticCurveTo(xMax, yMin, xMax, yMin + borderRadius); // Top right corner\n ctx.lineTo(xMax, yMax - borderRadius);\n ctx.quadraticCurveTo(xMax, yMax, xMax - borderRadius, yMax); // Bottom right corner\n ctx.lineTo(xMin + borderRadius, yMax);\n ctx.quadraticCurveTo(xMin, yMax, xMin, yMax - borderRadius); // Bottom left corner\n ctx.lineTo(xMin, yMin + borderRadius);\n ctx.quadraticCurveTo(xMin, yMin, xMin + borderRadius, yMin); // Top left corner\n ctx.fill();\n } else {\n // Draw rect if no border radius\n ctx.fillRect(xMin, yMin, width, height);\n }\n }\n\n private renderAnnotation = (title: string, label: string, x: number, y: number, fontSize: number, color: string): void => {\n this.renderText(title, x, y - fontSize, fontSize, color, 'arial', 'bold');\n this.renderText(label, x, y, fontSize, color);\n };\n\n private renderText(title: string, x: number, y: number, fontSize: number, color: string, font = 'arial', fontStyle = 'normal'): void {\n const { ctx } = this;\n if (ctx != null) {\n ctx.font = `${fontStyle} ${fontSize}px ${font}`;\n ctx.fillStyle = this.fontColor || color;\n ctx.fillText(title, x, y);\n }\n }\n\n private measureTextWidth(title: string, fontSize: number, font = 'arial', fontStyle = 'normal'): number {\n const { ctx } = this;\n\n if (ctx == null) {\n return 0;\n }\n\n ctx.font = `${fontStyle} ${fontSize}px ${font}`;\n return ctx.measureText(title).width;\n }\n\n private renderPoint(x: number, y: number, color: string, radius = 3): void {\n const { ctx } = this;\n\n if (ctx != null) {\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.arc(x, y, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n\n private renderCallout(title: string, label: string, boundingBox: BoundingBox, color: string, location: string): void {\n const pos = this.getPosition(boundingBox, location);\n const { x, y } = pos;\n const { height, width, x: dotX, y: dotY } = boundingBox;\n\n const placeLeft = location === Location.topright || location === Location.bottomright;\n\n if (this.backgroundActive) {\n this.renderBackground(title, label, x, y, height);\n }\n\n this.renderAnnotation(title, label, x, y, height, color);\n this.renderPoint(dotX, dotY, color);\n this.renderLine(x, y, width, dotX, dotY, color, placeLeft);\n }\n\n private renderLine = (x: number, y: number, width: number, dotX: number, dotY: number, color: string, placeLeft = true): void => {\n const { ctx } = this;\n const textX = placeLeft ? x : x + width;\n const inverseTextX = placeLeft ? x + width : x;\n const textY = y + 2;\n\n if (ctx != null) {\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n\n ctx.beginPath();\n ctx.moveTo(dotX, dotY);\n ctx.lineTo(textX, textY);\n ctx.lineTo(inverseTextX, textY);\n\n ctx.stroke();\n }\n };\n\n private getPosition(boundingBox: BoundingBox, location: string): Point {\n const { x, y, offsetX = 0, offsetY = 0, width } = boundingBox;\n switch (location) {\n case Location.topleft:\n return {\n x: x - width - offsetX,\n y: y - offsetY,\n };\n case Location.topright:\n return {\n x: x + offsetX,\n y: y - offsetY,\n };\n case Location.bottomleft:\n return {\n x: x - width - offsetX,\n y: y + offsetY,\n };\n case Location.bottomright:\n return {\n x: x + offsetX,\n y: y + offsetY,\n };\n default:\n return {\n x,\n y,\n };\n }\n }\n\n // Calculates position of a list of annotations\n positionCallouts(\n annotations: Annotation[],\n isLeftToRight: boolean,\n xScale: ScaleLinear<number, number>,\n yScale: ScaleLinear<number, number>,\n _scale: number,\n fontSize: number,\n offset = 20,\n ): Callout[] {\n if (annotations.length === 0) {\n return [];\n }\n const alignment = isLeftToRight ? Location.topleft : Location.topright;\n\n const nodes = annotations.map((a) => {\n const pos = a.pos ? a.pos : this.referenceSystem?.project(a.md!)!;\n return {\n title: a.title,\n label: a.label,\n color: a.color,\n pos: { x: pos?.[0]!, y: pos?.[1]! },\n group: a.group,\n alignment,\n boundingBox: this.getAnnotationBoundingBox(a.title, a.label, pos, xScale, yScale, fontSize),\n dx: offset,\n dy: offset,\n };\n });\n\n const top = [nodes[nodes.length - 1]!];\n const bottom: Callout[] = [];\n\n // Initial best effort\n this.chooseTopOrBottomPosition(nodes, bottom, top);\n\n // Adjust position for top set\n this.adjustTopPositions(top);\n\n // Adjust position for bottom set\n this.adjustBottomPositions(bottom);\n\n return nodes;\n }\n\n getAnnotationBoundingBox(\n title: string,\n label: string,\n pos: number[],\n xScale: ScaleLinear<number, number>,\n yScale: ScaleLinear<number, number>,\n height: number,\n ): { x: number; y: number; width: number; height: number } {\n const { ctx } = this;\n const ax1 = xScale(pos[0]!);\n const ay1 = yScale(pos[1]!);\n\n const labelWidth = ctx?.measureText(label).width ?? 0;\n const titleWidth = ctx?.measureText(title).width ?? 0;\n const width = Math.max(labelWidth, titleWidth);\n\n const bbox = {\n x: ax1,\n y: ay1,\n width,\n height: height * 2 + 4,\n };\n return bbox;\n }\n\n chooseTopOrBottomPosition(nodes: Callout[], bottom: Callout[], top: Callout[]): void {\n for (let i = nodes.length - 2; i >= 0; --i) {\n const node = nodes[i]!;\n const prevNode = top[0]!;\n\n const overlap = isOverlapping(node.boundingBox, prevNode.boundingBox);\n if (overlap) {\n node.alignment = node.alignment === Location.topleft ? Location.bottomright : Location.bottomleft;\n bottom.push(node);\n if (i > 0) {\n top.unshift(nodes[--i]!);\n }\n } else {\n top.unshift(node);\n }\n }\n }\n\n adjustTopPositions(top: Callout[]): void {\n for (let i = top.length - 2; i >= 0; --i) {\n const currentNode = top[i]!;\n for (let j = top.length - 1; j > i; --j) {\n const prevNode = top[j]!;\n const overlap = getOverlapOffset(currentNode.boundingBox, prevNode.boundingBox);\n if (overlap) {\n currentNode.dy += overlap.dy;\n currentNode.boundingBox.y -= overlap.dy;\n }\n }\n }\n }\n\n adjustBottomPositions(bottom: Callout[]): void {\n for (let i = bottom.length - 2; i >= 0; --i) {\n const currentNode = bottom[i]!;\n for (let j = bottom.length - 1; j > i; --j) {\n const prevNode = bottom[j]!;\n const overlap = getOverlapOffset(prevNode.boundingBox, currentNode.boundingBox);\n if (overlap) {\n currentNode.dy += overlap.dy;\n currentNode.boundingBox.y += overlap.dy;\n }\n }\n }\n }\n}\n","import { color } from 'd3-color';\n\nconst RADIX_SIXTEEN = 16;\nconst HEX_STRING_LENGTH = 6;\n/**\n * Convert color string to number\n */\nexport function convertColor(colorStr: string): number {\n const c = color(colorStr);\n if (c != null) {\n const d: string = c?.formatHex();\n const n: number = parseInt(d.replace('#', '0x'));\n return n;\n } else {\n throw Error(`Could not format string ${colorStr} to hex code.`);\n }\n}\n\nexport function colorToCSSColor(color: number | string): string {\n if (typeof color === 'string') {\n return color;\n }\n\n const colorHexString = color.toString(RADIX_SIXTEEN);\n return `#${colorHexString.padStart(HEX_STRING_LENGTH, '0')}`;\n}\n","import { SurfaceArea, SurfaceData, SurfaceLine } from '../datautils';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { colorToCSSColor } from '../utils/color';\nimport { LayerOptions } from './base';\nimport { CanvasLayer } from './base/CanvasLayer';\n\nconst DEFAULT_MAX_DEPTH = 10000;\n\ntype SurfacePaths = {\n color: string;\n path: Path2D;\n};\n\nexport class GeomodelCanvasLayer<T extends SurfaceData> extends CanvasLayer<T> {\n rescaleEvent: OnRescaleEvent | undefined;\n\n surfaceAreasPaths: SurfacePaths[] = [];\n\n surfaceLinesPaths: SurfacePaths[] = [];\n\n maxDepth: number = DEFAULT_MAX_DEPTH;\n\n constructor(id?: string, options?: LayerOptions<T>) {\n super(id, options);\n this.render = this.render.bind(this);\n this.generateSurfaceAreasPaths = this.generateSurfaceAreasPaths.bind(this);\n this.generateSurfaceLinesPaths = this.generateSurfaceLinesPaths.bind(this);\n this.drawPolygonPath = this.drawPolygonPath.bind(this);\n this.drawLinePath = this.drawLinePath.bind(this);\n this.updatePaths = this.updatePaths.bind(this);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.updatePaths();\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n this.rescaleEvent = event;\n this.setTransform(this.rescaleEvent);\n this.render();\n }\n\n updatePaths(): void {\n if (!this.data) {\n this.surfaceAreasPaths = [];\n this.surfaceLinesPaths = [];\n } else {\n this.generateSurfaceAreasPaths();\n this.generateSurfaceLinesPaths();\n }\n }\n\n render(): void {\n if (!this.ctx || !this.rescaleEvent) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.clearCanvas();\n this.surfaceAreasPaths.forEach((p: SurfacePaths) => this.drawPolygonPath(p.color, p.path));\n this.surfaceLinesPaths.forEach((l: SurfacePaths) => this.drawLinePath(l.color, l.path));\n });\n }\n\n colorToCSSColor(color: number | string): string {\n return colorToCSSColor(color);\n }\n\n generateSurfaceAreasPaths(): void {\n this.surfaceAreasPaths =\n this.data?.areas.reduce((acc: SurfacePaths[], s: SurfaceArea) => {\n const polygons = this.createPolygons(s.data);\n const mapped: SurfacePaths[] = polygons.map((polygon: number[]) => ({\n color: this.colorToCSSColor(s.color),\n path: this.generatePolygonPath(polygon),\n }));\n acc.push(...mapped);\n return acc;\n }, []) ?? [];\n }\n\n generateSurfaceLinesPaths(): void {\n this.surfaceLinesPaths =\n this.data?.lines.reduce((acc: SurfacePaths[], l: SurfaceLine) => {\n const lines = this.generateLinePaths(l);\n const mapped: SurfacePaths[] = lines.map((path: Path2D) => ({ color: this.colorToCSSColor(l.color), path }));\n acc.push(...mapped);\n return acc;\n }, []) ?? [];\n }\n\n drawPolygonPath = (color: string, path: Path2D): void => {\n const { ctx } = this;\n if (ctx != null) {\n ctx.fillStyle = color;\n ctx.fill(path);\n }\n };\n\n drawLinePath = (color: string, path: Path2D): void => {\n const { ctx } = this;\n\n if (ctx != null) {\n ctx.strokeStyle = color;\n ctx.stroke(path);\n }\n };\n\n createPolygons = (data: number[][]): number[][] => {\n const polygons: number[][] = [];\n let polygon: number[] = [];\n\n // Start generating polygons\n for (let i = 0; i < data.length; i++) {\n // Generate top of polygon as long as we have valid values\n const topIsValid = !!data[i]?.[1];\n if (topIsValid) {\n if (polygon === null) {\n polygon = [];\n }\n polygon.push(data[i]?.[0]!, data[i]?.[1]!);\n }\n\n const endIsReached = i === data.length - 1;\n if (!topIsValid || endIsReached) {\n if (polygon.length > 0) {\n // Generate bottom of polygon\n for (let j: number = !topIsValid ? i - 1 : i; j >= 0; j--) {\n if (!data[j]?.[1]) {\n break;\n }\n polygon.push(data[j]?.[0]!, data[j]?.[2] || this.maxDepth);\n }\n polygons.push(polygon);\n polygon = [];\n }\n }\n }\n\n return polygons;\n };\n\n generatePolygonPath = (polygon: number[]): Path2D => {\n const path = new Path2D();\n\n path.moveTo(polygon[0]!, polygon[1]!);\n for (let i = 2; i < polygon.length; i += 2) {\n path.lineTo(polygon[i]!, polygon[i + 1]!);\n }\n path.closePath();\n\n return path;\n };\n\n generateLinePaths = (s: SurfaceLine): Path2D[] => {\n const paths: Path2D[] = [];\n const { data: d } = s;\n\n let penDown = false;\n let path: Path2D | undefined;\n for (let i = 0; i < d.length; i++) {\n if (d[i]?.[1]) {\n if (penDown && path) {\n path.lineTo(d[i]?.[0]!, d[i]?.[1]!);\n } else {\n path = new Path2D();\n path.moveTo(d[i]?.[0]!, d[i]?.[1]!);\n penDown = true;\n }\n } else if (penDown && path) {\n paths.push(path);\n penDown = false;\n }\n }\n if (penDown && path) {\n paths.push(path);\n }\n\n return paths;\n };\n}\n","export function findIndexOfSample(data: number[][], pos: number): number {\n if (data.length < 2) {\n return -1;\n }\n\n const linearSearchLimit = 20;\n let a = 0;\n let b = data.length - 1;\n let aPos = data[a]?.[0];\n let bPos = data[b]?.[0];\n\n while (b - a > linearSearchLimit) {\n const splitAt = Math.floor((b + a) / 2);\n const splitPos = data[splitAt]?.[0];\n\n if (aPos == null || bPos == null || splitPos == null) {\n return -1;\n }\n\n if (pos >= aPos && pos < splitPos) {\n b = splitAt;\n bPos = data[b]?.[0];\n } else if (pos >= splitPos && pos <= bPos) {\n a = splitAt;\n aPos = data[a]?.[0];\n } else if (pos <= aPos && pos > splitPos) {\n b = splitAt;\n bPos = data[b]?.[0];\n } else if (pos <= splitPos && pos >= bPos) {\n a = splitAt;\n aPos = data[a]?.[0];\n } else {\n return -1;\n }\n }\n\n let index = -1;\n for (let i = a; i < b; i++) {\n const v1 = data[i]?.[0];\n const v2 = data[i + 1]?.[0];\n if (v1 != null && v2 != null && Math.min(v1, v2) <= pos && pos <= Math.max(v1, v2)) {\n index = i;\n break;\n }\n }\n\n return index;\n}\n\nexport function findSampleAtPos(data: number[][], pos: number, topLimit = 0, bottomLimit = 0): number {\n let y = 0;\n const index = findIndexOfSample(data, pos);\n if (index !== -1) {\n const v1 = data[index]?.[1];\n const v2 = data[index + 1]?.[1];\n\n if (v1 && v2) {\n const x1 = data[index]?.[0] ?? 0;\n const x2 = data[index + 1]?.[0] ?? 0;\n const span = x2 - x1;\n const d = pos - x1;\n const f = d / span;\n y = v1 * (1 - f) + v2 * f;\n if (topLimit && topLimit > y) {\n y = topLimit;\n }\n if (bottomLimit && bottomLimit < y) {\n y = bottomLimit;\n }\n }\n }\n return y;\n}\n","import { Annotation } from '../interfaces';\n\ntype Pick = {\n pickIdentifier?: string;\n confidence: string | null;\n depthReferencePoint: string;\n md: number;\n mdUnit: string;\n tvd: number;\n};\n\ntype PickWithId = {\n identifier: string;\n} & Pick;\n\ntype Unit = {\n identifier: string;\n top: string;\n base: string;\n baseAge: number;\n topAge: number;\n colorR: number;\n colorG: number;\n colorB: number;\n stratUnitLevel: number;\n lithologyType: number;\n stratUnitParent: number;\n};\n\ntype UnitDto = {\n unitName: string;\n topSurface: string;\n baseSurface: string;\n ageBase: number;\n ageTop: number;\n color: {\n r: number;\n g: number;\n b: number;\n };\n level: number;\n lithType: number;\n parent: number;\n};\n\ntype PickAndUnit = PickWithId & UnitDto;\n\ntype PairedPickAndUnit = {\n name: string;\n mdEntry: number;\n tvdEntry: number;\n color: { r: number; g: number; b: number };\n level: number;\n entryPick: PickAndUnit;\n mdExit: number;\n tvdExit: number;\n exitPick: PickAndUnit;\n confidenceEntry: string;\n confidenceExit: string;\n from?: number;\n to?: number;\n};\n\nconst mapPick = (p: PickWithId, groupName: string): Annotation => ({\n title: p.pickIdentifier || p.identifier,\n group: groupName,\n label: `${p.md} ${p.mdUnit} ${p.depthReferencePoint}`,\n color: groupName === 'strat-picks' ? '#227' : 'rgba(0,0,0,0.8)',\n md: p.md,\n});\n\nfunction getReferencePicks(picks: PickWithId[]): Annotation[] {\n if (!picks) {\n return [];\n }\n\n return picks.map((p: PickWithId) => mapPick(p, 'ref-picks'));\n}\n\nfunction getEntryPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {\n if (!formationPicks) {\n return [];\n }\n\n return formationPicks\n .filter((d: PairedPickAndUnit) => d.entryPick.md === d.from)\n .map((p: PairedPickAndUnit) => mapPick(p.entryPick, 'strat-picks'));\n}\n\nfunction getFilteredExitPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {\n if (!formationPicks) {\n return [];\n }\n\n return (\n formationPicks\n .filter((d: PairedPickAndUnit) => formationPicks.findIndex((p: PairedPickAndUnit) => Math.abs(p.entryPick.md - d.exitPick.md) < 0.5) === -1)\n .map((p: PairedPickAndUnit) => mapPick(p.exitPick, 'strat-picks'))\n // Remove duplicates from unitpicks filling in gaps in formation\n .filter((obj: Annotation, i: number, array: Annotation[]) => i === array.findIndex((v: Annotation) => v.title === obj.title && v.md === obj.md))\n );\n}\n\nexport const getPicksData = (picksData: { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] }): Annotation[] =>\n [...getReferencePicks(picksData.nonUnitPicks), ...getEntryPicks(picksData.unitPicks), ...getFilteredExitPicks(picksData.unitPicks)].sort(\n (a, b) => a.md! - b.md!,\n );\n\n/**\n * @param {Unit} u\n */\nconst unitDto = (u: Unit): UnitDto => ({\n unitName: u.identifier,\n topSurface: u.top,\n baseSurface: u.base,\n ageBase: u.baseAge,\n ageTop: u.topAge,\n color: {\n r: u.colorR === null ? 255 : u.colorR,\n g: u.colorG === null ? 255 : u.colorG,\n b: u.colorB === null ? 255 : u.colorB,\n },\n level: u.stratUnitLevel,\n lithType: u.lithologyType,\n parent: u.stratUnitParent,\n});\n\n/**\n *\n * @param {number} from\n * @param {number} to\n * @param {{ from: number; to: number; itm: PairedPickAndUnit }[]} arr\n * @param {number} arr.to\n * @param {number} arr.from\n * @returns {[number, number][]}\n */\nfunction findGaps(from: number, to: number, arr: { from: number; to: number; itm: PairedPickAndUnit }[]): [number, number][] {\n if (arr.length === 0) {\n return [[from, to]];\n }\n const gaps: [number, number][] = [];\n let d = from;\n let i = 0;\n while (d < to && i < arr.length) {\n const itm = arr[i]!;\n if (itm.from > d) {\n gaps.push([d, Math.min(itm.from, to)]);\n }\n d = Math.min(to, Math.max(from, itm.to));\n i += 1;\n }\n if (d < to) {\n gaps.push([d, to]);\n }\n return gaps;\n}\n\n/**\n * @param {Unit[]} units\n * @returns {UnitDto[]}\n */\nconst transformStratColumn = (units: Unit[]): UnitDto[] => units.map(unitDto);\n\n/**\n * Join picks data with strat column units\n * @param {Pick[]} picks picks\n * @param {Unit[]} stratColumn strat column\n */\nfunction joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined: PickAndUnit[]; nonUnitPicks: PickWithId[] } {\n const transformed = transformStratColumn(stratColumn);\n const nonUnitPicks: PickWithId[] = [];\n const joined: PickAndUnit[] = [];\n picks.forEach((p: Pick) => {\n const matches = transformed.filter((u: UnitDto) => p.pickIdentifier?.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);\n if (matches.length > 0) {\n matches.forEach((u: UnitDto) =>\n joined.push({\n md: p.md,\n tvd: p.tvd,\n identifier: p.pickIdentifier!,\n confidence: p.confidence,\n mdUnit: p.mdUnit,\n depthReferencePoint: p.depthReferencePoint,\n ...u,\n }),\n );\n } else {\n nonUnitPicks.push({ identifier: p.pickIdentifier!, ...p });\n }\n });\n\n return { joined, nonUnitPicks };\n}\n\n/**\n * Find matching pairs of entry/exit picks\n * @param {PickAndUnit[]} joined picks joined with strat column units\n */\nfunction pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {\n // pair picks by unit name\n const pairs = [];\n let current = null;\n\n const sorted = joined\n .filter((d: PickAndUnit) => d.level)\n .sort((a: PickAndUnit, b: PickAndUnit) => a.unitName.localeCompare(b.unitName) || a.md - b.md || a.ageTop - b.ageTop);\n\n while (sorted.length > 0) {\n current = sorted.shift()!;\n const name = current.identifier;\n let pairWithName: string;\n\n const isTop = name === current.topSurface;\n const isBase = name === current.baseSurface;\n\n if (isTop) {\n pairWithName = current.baseSurface;\n } else if (isBase) {\n pairWithName = current.topSurface;\n } else {\n console.warn(`Unable to match ${name} with top or base surface, ignored`);\n continue;\n }\n\n let top: PickAndUnit | undefined;\n let base: PickAndUnit | undefined;\n\n const pairWith = sorted.find((p: PickAndUnit) => p.identifier === pairWithName);\n if (!pairWith) {\n console.warn(`Unable to find ${pairWithName} pick for ${name}`);\n if (isTop) {\n top = current;\n base = joined\n .filter((d: PickAndUnit) => d.level)\n .sort((a: PickAndUnit, b: PickAndUnit) => a.md - b.md)\n .find((p: PickAndUnit) => p.md > top!.md);\n if (base) {\n console.warn(`Using ${base.identifier} as base for ${name}`);\n } else {\n console.warn(`Unable to find a base pick for ${name} pick at ${top.md}, ignored`);\n continue;\n }\n } else if (isBase) {\n base = current;\n top = joined\n .filter((d: PickAndUnit) => d.level)\n .sort((a: PickAndUnit, b: PickAndUnit) => b.md - a.md)\n .find((p: PickAndUnit) => p.md < base!.md);\n if (top) {\n console.warn(`Using ${top.identifier} as top for ${name}`);\n } else {\n console.warn(`Unable to find a top pick for ${name} pick at ${base.md}, ignored`);\n continue;\n }\n } else {\n console.warn(`${name} ignored`);\n continue;\n }\n } else {\n top = isTop ? current : pairWith;\n base = isTop ? pairWith : current;\n\n if (top.md > base.md) {\n [top, base] = [base, top];\n }\n\n sorted.splice(sorted.indexOf(pairWith), 1);\n }\n\n pairs.push(<PairedPickAndUnit>{\n name: top.unitName,\n mdEntry: top.md,\n tvdEntry: top.tvd,\n color: top.color,\n level: top.level,\n entryPick: top,\n mdExit: base.md,\n tvdExit: base.tvd,\n exitPick: base,\n confidenceEntry: top.confidence,\n confidenceExit: base.confidence,\n });\n }\n\n return pairs;\n}\n\n/**\n * Transform data for formation track\n * @param {Pick[]} picks picks\n * @param {Unit[]} stratColumn strat column\n */\nexport function transformFormationData(picks: Pick[], stratColumn: Unit[]): { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] } {\n const { joined, nonUnitPicks } = joinPicksAndStratColumn(picks, stratColumn);\n const pairs = pairJoinedPicks(joined);\n\n const itemstack = pairs\n .filter((d: PairedPickAndUnit) => d.mdEntry < d.mdExit)\n .sort((a, b) => a.mdEntry - b.mdEntry || a.level - b.level)\n .reverse();\n\n // flatten groups of unit picks, so that the highest level is\n // given presedence over lower levels for overlapping picks.\n const unitPicks = [];\n while (itemstack.length > 0) {\n const first = itemstack.pop()!;\n const group: PairedPickAndUnit[] = [];\n while (itemstack.length > 0 && itemstack[itemstack.length - 1]?.level! > first.level) {\n group.push(itemstack.pop()!);\n }\n group.reverse();\n group.push(first);\n const arr: { from: number; to: number; itm: PairedPickAndUnit }[] = [];\n group.forEach((itm: PairedPickAndUnit) => {\n const gaps = findGaps(itm.mdEntry, itm.mdExit, arr);\n arr.push(...gaps.map((g) => ({ from: g[0], to: g[1], itm })));\n });\n arr.sort((a, b) => a.from - b.from);\n unitPicks.push(\n ...arr.map((d) => ({\n from: d.from,\n to: d.to,\n ...d.itm,\n })),\n );\n }\n return { unitPicks, nonUnitPicks };\n}\n","import { scaleLinear } from 'd3-scale';\nimport { color } from 'd3-color';\n\nexport function createColorTable(colorMap: string[], size: number): [number, number, number][] {\n const colorDomain = colorMap.map((_v, i) => (i * size) / colorMap.length);\n const colorScale = scaleLinear<string>().domain(colorDomain).range(colorMap);\n\n const table = Array.from(new Array(size).keys()).map<[number, number, number]>((i) => {\n const rgb = color(colorScale(i))?.rgb();\n return rgb != null ? [rgb.r, rgb.g, rgb.b] : [0, 0, 0];\n });\n\n return table;\n}\n","import { clamp } from '@equinor/videx-math';\nimport { SeismicCanvasDataOptions } from '../layers/SeismicCanvasLayer';\n\nimport { createColorTable } from './colortable';\nimport { findIndexOfSample } from './findsample';\n\nexport type SeismicInfo = {\n minX: number;\n maxX: number;\n minTvdMsl: number;\n maxTvdMsl: number;\n domain: {\n min: number;\n max: number;\n difference: number;\n };\n};\n\nexport const getSeismicOptions = (info: SeismicInfo | null): SeismicCanvasDataOptions => {\n if (!info) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n return {\n x: info.minX,\n y: info.minTvdMsl,\n width: info.maxX - info.minX,\n height: info.maxTvdMsl - info.minTvdMsl,\n };\n};\n\n/**\n * Get key information about the seismic data\n * Code originally developed for the REP project\n * @param data Seismic data\n * @param trajectory Wellbore or freehand trajectory\n * @return Key domain and depth information for seismic data\n */\nexport function getSeismicInfo(data: { datapoints: number[][]; yAxisValues: number[] }, trajectory: number[][]): SeismicInfo | null {\n if (!(data && data.datapoints)) {\n return null;\n }\n const minX = trajectory.reduce((acc: number, val: number[]) => Math.min(acc, val[0]!), 0);\n const maxX = trajectory.reduce((acc: number, val: number[]) => Math.max(acc, val[0]!), 0);\n\n const minTvdMsl = data.yAxisValues && data.yAxisValues[0]!;\n const maxTvdMsl = data.yAxisValues && data.yAxisValues[data.yAxisValues.length - 1]!;\n\n // Find value domain\n const dp = data.datapoints || [];\n const min = -dp.reduce((val: number, array: number[]) => Math.min(...array, val), 0);\n const max = dp.reduce((val: number, array: number[]) => Math.max(...array, val), 0);\n\n const absMax = Math.max(Math.abs(min), Math.abs(max));\n\n const dmin = -absMax;\n const dmax = absMax;\n\n const info = {\n minX,\n maxX,\n minTvdMsl,\n maxTvdMsl,\n domain: {\n min: dmin,\n max: dmax,\n difference: dmax - dmin,\n },\n };\n\n return info;\n}\n\n/**\n * Generate seismic\n * Code originally developed for the REP project\n * @param data Seismic data\n * @param trajectory Wellbore or freehand trajectory\n * @param colormap Color map for rendering\n * @param options.isLeftToRight (optional) draw left to right\n * @param options.seismicRange (optional) Range for mapping seimic values to color map\n * @param options.seismicMin (optional) Min seismic value for mapping seimic values to color map\n * @param options.seismicMax (optional) Max seismic value for mapping seimic values to color map\n * @return Key domain and depth information for seismic data\n */\nexport async function generateSeismicSliceImage(\n data: { datapoints: number[][]; yAxisValues: number[] },\n trajectory: number[][],\n colormap: string[],\n options: {\n isLeftToRight: boolean;\n seismicRange?: number;\n seismicMin?: number;\n seismicMax?: number;\n } = { isLeftToRight: true },\n): Promise<ImageBitmap | undefined> {\n if (!(data && data.datapoints && data.datapoints.length > 0)) {\n return undefined;\n }\n const { datapoints: dp } = data;\n\n const min = options?.seismicMin || options?.seismicRange || dp.reduce((val: number, array: number[]) => Math.min(...array, val), 0);\n const max = options?.seismicMax || options?.seismicRange || dp.reduce((val: number, array: number[]) => Math.max(...array, val), 0);\n\n const absMax = Math.max(Math.abs(min), Math.abs(max));\n\n const dmin = -absMax;\n const dmax = absMax;\n\n const domain = {\n min: dmin,\n max: dmax,\n difference: dmax - dmin,\n };\n\n const length = trajectory[0]?.[0]! - trajectory[trajectory.length - 1]?.[0]!;\n const width = Math.abs(Math.floor(length / 5));\n const height = data.yAxisValues.length;\n\n // Generate color table\n const colorTableSize = 1000;\n const colorTable = createColorTable(colormap, colorTableSize);\n\n // Generate image\n const d = new Uint8ClampedArray(width * height * 4);\n\n let offset = 0;\n const colorFactor = (colorTableSize - 1) / domain.difference;\n\n let pos = options?.isLeftToRight ? trajectory[0]?.[0]! : trajectory[trajectory.length - 1]?.[0]!;\n\n const step = (length / width) * (options?.isLeftToRight ? -1 : 1);\n\n let val1: number;\n let val2: number;\n let val: number;\n let i: number;\n let col: number[];\n const black = [0, 0, 0];\n let opacity: number;\n\n for (let x = 0; x < width; x++) {\n offset = x * 4;\n const index = findIndexOfSample(trajectory, pos);\n const x1 = trajectory[index]?.[0]!;\n const x2 = trajectory[index + 1]?.[0]!;\n const span = x2 - x1;\n const dx = pos - x1;\n const ratio = dx / span;\n\n for (let y = 0; y < height; y++) {\n val1 = dp[y]?.[index]!;\n val2 = dp[y]?.[index + 1]!;\n if (val1 == null || val2 == null) {\n col = black;\n opacity = 0;\n } else {\n val = val1 * (1 - ratio) + val2 * ratio;\n i = (val - domain.min) * colorFactor;\n i = clamp(~~i, 0, colorTableSize - 1);\n col = colorTable[i]!;\n opacity = 255;\n }\n\n d.set([col[0]!, col[1]!, col[2]!, opacity], offset);\n\n offset += width * 4;\n }\n pos += step;\n }\n const imageData = new ImageData(d, width, height);\n const image = await createImageBitmap(imageData, 0, 0, width, height);\n\n return image;\n}\n","import { interpolateRgb, quantize } from 'd3-interpolate';\nimport { scaleOrdinal } from 'd3-scale';\nimport { convertColor } from '../utils/color';\nimport { StratUnit, SurfaceMetaAndValues, SurfaceLine, SurfaceArea, SurfaceData } from './interfaces';\n\nconst TRANSLUCENT_RED = 0x80000000;\nconst WHITE = 0xffffffff;\n\ntype MappedSurfaces = {\n name: string;\n isBase: boolean;\n values: number[];\n color: string;\n visualization: string;\n};\n\ntype StratGroup = {\n age: number;\n name: string;\n};\n\ntype Stratigraphy = {\n unit: StratUnit;\n group: string;\n name: string;\n isBase: boolean;\n values: number[];\n color: string;\n visualization: string;\n};\n\ntype MappedGroup = {\n id: string;\n label: string;\n color: string;\n top: number[];\n};\n\ninterface SurfaceAreaGrouping {\n [propType: string]: SurfaceArea[];\n}\n\n/**\n * Generate surface data from trajectory, stratcolum and surface data\n * Code originally developed for the REP project\n * @param trajectory Projected trajectory generated from the poslog used when retrieving surface data from surface API\n * @param stratColumn Strat columnd from SMDA\n * @param surfaceData - Surfaces meta data with surface values in data section\n * @return Surface areas ready for rendering in geolayer\n */\nexport function generateSurfaceData(trajectory: number[][], stratColumn: StratUnit[], surfaceData: SurfaceMetaAndValues[]): SurfaceData {\n const filteredSurfaces: SurfaceMetaAndValues[] = surfaceData.filter((s) => s.data.values);\n const mappedSurfaces = mapSurfaceData(filteredSurfaces);\n\n const stratGroups = new Map<string, StratGroup>();\n const stratigraphies = combineSurfacesAndStratColumn(mappedSurfaces, stratColumn, stratGroups);\n sortStratigraphies(stratigraphies);\n\n const lines: SurfaceLine[] = getSurfaceLines(mappedSurfaces, trajectory);\n const surfaceAreas: SurfaceAreaGrouping = generateSurfaceAreas(trajectory, stratigraphies, stratColumn);\n\n const groups: MappedGroup[] = mapGroups(stratGroups, surfaceAreas);\n const groupAreas: SurfaceArea[] = generateGroupAreas(groups, trajectory);\n\n //Combine group areas with surface areas\n const areas: SurfaceArea[] = [\n ...groupAreas,\n ...Object.values(surfaceAreas)\n .flat()\n .filter((d) => !d.exclude),\n ];\n\n const data = {\n lines,\n areas,\n };\n\n return data;\n}\n\n/**\n * Get surfaces which should be rendered as lines\n * @param mappedSurfaces\n * @param trajectory\n */\nfunction getSurfaceLines(mappedSurfaces: MappedSurfaces[], trajectory: number[][]): SurfaceLine[] {\n const lines: SurfaceLine[] = mappedSurfaces\n .filter((d: MappedSurfaces) => d.visualization === 'line')\n .map((l: MappedSurfaces) => ({\n id: l.name,\n label: l.name,\n width: 2,\n color: convertColor(l.color || 'black'),\n data: trajectory.map((p, j) => [p[0]!, l.values[j]!]),\n }));\n\n return lines;\n}\n\nfunction generateGroupAreas(groups: MappedGroup[], trajectory: number[][]): SurfaceArea[] {\n const groupAreas = groups.map((g: MappedGroup, i: number) => {\n const next: MappedGroup | null = i + 1 < groups.length ? groups[i + 1]! : null;\n return {\n id: g.id,\n color: convertColor(g.color),\n data: trajectory.map((p: number[], j: number) => [p[0]!, g.top[j]!, ...(next ? [next.top[j]!] : [])]),\n };\n });\n\n return groupAreas;\n}\n\nfunction mapGroups(stratGroups: Map<string, StratGroup>, surfaceAreas: SurfaceAreaGrouping): MappedGroup[] {\n const groups = Array.from(stratGroups.values())\n .sort((a: StratGroup, b: StratGroup) => a.age - b.age)\n .filter((g: StratGroup) => {\n const surfaces = surfaceAreas[g.name];\n const isValid = surfaces && surfaces.length > 0;\n if (!isValid) {\n console.warn(`Intersection surface group '${g.name}' has no valid entries and will be discarded.`);\n }\n return isValid;\n })\n .map((g: StratGroup, i: number) => {\n const surface = surfaceAreas[g.name]!;\n const top = surface[0]!;\n return {\n id: g.name,\n label: g.name,\n color: unassignedColorScale(i),\n top: top.data.map((d: number[]) => d[1]!),\n };\n });\n return groups;\n}\n\nfunction combineSurfacesAndStratColumn(\n mappedSurfaces: MappedSurfaces[],\n stratColumn: StratUnit[],\n stratGroups: Map<string, StratGroup>,\n): Stratigraphy[] {\n const firstUnit = stratColumn && stratColumn.find((d: StratUnit) => d.stratUnitLevel === 1);\n const defaultGroupName: string = firstUnit ? firstUnit.identifier : 'SEABED';\n const stratigrafies = mappedSurfaces\n .filter((d: MappedSurfaces) => d.visualization === 'interval' || d.visualization === 'none')\n .map((s: MappedSurfaces) => {\n const path: StratUnit[] = [];\n const stratUnit = findStratcolumnUnit(stratColumn, s.name, path);\n if (!stratUnit) {\n console.warn(`No match for ${s.name} in strat column`);\n }\n const group = path[0]! || stratUnit;\n const groupName: string = (group && group.identifier) || defaultGroupName;\n if (group && !stratGroups.has(groupName)) {\n stratGroups.set(groupName, {\n age: group.topAge,\n name: group.identifier,\n });\n }\n return {\n ...s,\n unit: stratUnit!,\n group: groupName,\n };\n });\n return stratigrafies;\n}\n\n/**\n * Sort stratigrafies on unit and age, base after top and higher level after lower\n * @param stratigrafies\n */\nfunction sortStratigraphies(stratigrafies: Stratigraphy[]): void {\n stratigrafies.sort((a: Stratigraphy, b: Stratigraphy) => {\n if (!a.unit && !b.unit) {\n return 0;\n }\n if (!a.unit) {\n return -1;\n }\n if (!b.unit) {\n return 1;\n }\n const aAge = a.isBase ? a.unit.baseAge : a.unit.topAge;\n const bAge = b.isBase ? b.unit.baseAge : b.unit.topAge;\n if (aAge !== bAge) {\n return aAge - bAge;\n }\n if (a.isBase && !b.isBase) {\n return 1;\n }\n if (!a.isBase && b.isBase) {\n return -1;\n }\n return a.unit.stratUnitLevel - b.unit.stratUnitLevel;\n });\n}\n\n/**\n * @param {[]} units\n * @param {string} unitname\n * @param {[]} path\n */\nfunction findStratcolumnUnit(units: StratUnit[], unitname: string, path: StratUnit[] = []): StratUnit | null {\n const unit = units.find((u: StratUnit) => u.identifier.toLowerCase() === unitname.toLowerCase());\n if (unit) {\n // Build path\n let temp: StratUnit | undefined = unit;\n do {\n path.unshift(temp);\n temp = units.find((u: StratUnit) => u.identifier === temp!.stratUnitParent);\n } while (temp);\n\n return unit;\n }\n return null;\n}\n\nfunction mapSurfaceData(surfaces: SurfaceMetaAndValues[]): MappedSurfaces[] {\n return surfaces.map((s: SurfaceMetaAndValues) => {\n const displayName: string = s.visualSettings.displayName;\n const name: string = displayName.replace(/\\s(Base|Top)/gi, '');\n const isBase: boolean = displayName.toLowerCase().endsWith('base');\n\n return {\n name,\n isBase,\n values: s.data.values,\n color: s.visualSettings.colors.crossSection,\n visualization: s.visualSettings.crossSection.toLowerCase(),\n };\n });\n}\n\nfunction getColorFromUnit(unit: StratUnit): number {\n if (unit.colorR === null || unit.colorG === null || unit.colorB === null) {\n return TRANSLUCENT_RED;\n }\n const res: number = (unit.colorR << 16) | (unit.colorG << 8) | unit.colorB;\n return res;\n}\n\nconst unassignedColorScale = scaleOrdinal<number, string>()\n .domain([0, 100])\n .range(quantize(interpolateRgb('#e6f1cf', '#85906d'), 10));\n\n/**\n * Find the best matching base index based on name or by values\n */\nfunction findBestMatchingBaseIndex(top: Stratigraphy, index: number, surfaces: Stratigraphy[], stratColumn: StratUnit[]): number | undefined {\n const nextIndex: number = index + 1;\n\n if (!surfaces || nextIndex >= surfaces.length) {\n return undefined;\n }\n\n // If there is a matching base by name, use that. More robust, does not rely on sorting\n const baseSurfaceIndex = surfaces.findIndex((candidate: Stratigraphy) => candidate.isBase && candidate.name === top.name);\n if (baseSurfaceIndex !== -1) {\n return baseSurfaceIndex;\n }\n\n for (let i = nextIndex; i < surfaces.length; i++) {\n const candidate = surfaces[i];\n if (!candidate?.isBase) {\n return i;\n }\n if (isAnchestor(top, candidate, stratColumn)) {\n return i;\n }\n }\n return undefined;\n}\n\nfunction isAnchestor(descendant: Stratigraphy, candidate: Stratigraphy, stratColumn: StratUnit[]): boolean {\n const path: StratUnit[] = [];\n findStratcolumnUnit(stratColumn, descendant.name, path);\n return path.some((p: StratUnit) => candidate.name === p.identifier);\n}\n\nfunction generateSurfaceAreas(projection: number[][], surfaces: Stratigraphy[], stratColumn: StratUnit[]): SurfaceAreaGrouping {\n const areas: SurfaceAreaGrouping = surfaces.reduce((acc: SurfaceAreaGrouping, surface: Stratigraphy, i: number) => {\n if (!surface.isBase) {\n if (!acc[surface.group]) {\n acc[surface.group] = [];\n }\n const baseIndex = findBestMatchingBaseIndex(surface, i, surfaces, stratColumn);\n acc[surface.group]?.push({\n id: surface.name,\n label: surface.name,\n color: (surface.unit && getColorFromUnit(surface.unit)) || WHITE,\n exclude: surface.visualization === 'none' || !surface.unit,\n data: projection.map((p, j) => {\n const baseValue = surface.values[j] != null ? getBaseValue(baseIndex, surfaces, j) : undefined;\n return [p[0]!, surface.values[j]!, baseValue!];\n }),\n });\n }\n return acc;\n }, {});\n return areas;\n}\n\n// get the value from the surface with the supplied index,\n// iterate to next surface if value is null\nfunction getBaseValue(index: number | undefined, surfaces: Stratigraphy[], datapoint: number): number | undefined {\n if (!surfaces || !index || index >= surfaces.length) {\n return undefined;\n }\n\n for (let i: number = index; i < surfaces.length; i++) {\n if (surfaces[i]?.values[datapoint] != null) {\n return surfaces[i]?.values[datapoint];\n }\n }\n return undefined;\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { seqI } from '@equinor/videx-math';\nimport { CurveInterpolator } from 'curve-interpolator';\nimport { SurveySample } from './interfaces';\n\nconst stepSize = 0.1;\nconst extensionLength = 1000;\nconst thresholdRelativeDist = 150;\nconst thresholdDirectionDist = 30;\n\nconst pathSteps = 10;\n\n/**\n * Generate projected wellbore path for drawing using wellbore path layer\n * Code originally developed for REP\n * @param {[]} poslog Position log from SMDA\n */\nexport function generateProjectedWellborePath(poslog: SurveySample[]): [number, number][] {\n if (!poslog || poslog.length === 0) {\n return [];\n }\n\n const points: [number, number, number, number][] = poslog ? poslog.map((p: SurveySample) => [p.easting, p.northing, p.tvd, p.md]) : [];\n\n const projection = simplify(projectCurtain(points));\n const offset = projection[projection.length - 1]?.[0];\n\n if (offset != null) {\n projection.forEach((p, i) => {\n projection[i]![0] = offset - p[0];\n });\n }\n\n return projection;\n}\n\n/**\n * Generate Trajectory\n * Code originally developed for REP\n * @param {[]} poslog Position log from SMDA\n * @param {number} defaultIntersectionAngle Default intersection angle for the field\n */\nexport function generateProjectedTrajectory(poslog: SurveySample[], defaultIntersectionAngle: number): number[][] {\n if (!poslog || poslog.length === 0) {\n return [];\n }\n\n const points: [number, number, number, number][] = poslog ? poslog.map((p) => [p.easting, p.northing, p.tvd, p.md]) : [];\n\n const interpolator: CurveInterpolator = new CurveInterpolator(points, { tension: 0.75, arcDivisions: 5000 });\n const displacement: number = interpolator.length;\n\n const nPoints: number = Math.round(displacement * pathSteps);\n let path: [number, number][];\n if (nPoints > 0) {\n const maxOffset = 0.0005;\n const maxDistance = 10;\n path = simplify(interpolator.getPoints(nPoints), maxOffset, maxDistance);\n } else {\n path = [[points[0]![0], points[0]![1]]];\n }\n\n const first = path[0]!;\n const last = path[path.length - 1]!;\n const relativeDist: number = Vector2.distance(first, last);\n let v: Vector2;\n\n if (relativeDist < thresholdRelativeDist) {\n const oneEighty = 180;\n const radCurtainDirection = (defaultIntersectionAngle / oneEighty) * Math.PI;\n v = new Vector2(Math.cos(radCurtainDirection), Math.sin(radCurtainDirection)).mutable;\n } else {\n v = getDirectionVector(path, thresholdDirectionDist);\n }\n const extensionLengthStart: number = Math.max(0, extensionLength - displacement);\n const offset: number = extensionLengthStart + displacement;\n const trajectory: [number, number][] = [];\n\n let firstPoints: [number, number][] = [];\n\n // Reference to initial vector\n const initial: number[] = v.toArray();\n\n if (extensionLengthStart > 0) {\n // extend from start\n firstPoints = seqI(Math.ceil(extensionLengthStart * stepSize)).map((t) =>\n v\n .set(initial)\n .scale(extensionLengthStart * (1 - t))\n .subFrom(first)\n .toArray(),\n );\n firstPoints.pop();\n trajectory.push(...firstPoints);\n }\n trajectory.push(...path);\n\n const endPoints = seqI(Math.ceil(extensionLength * stepSize))\n .map((t) =>\n v\n .set(initial)\n .scale(extensionLength * t)\n .add(last)\n .toArray(),\n )\n .splice(1);\n\n trajectory.push(...endPoints);\n\n const projectedTrajectory: number[][] = projectCurtain(trajectory, undefined, offset);\n\n return projectedTrajectory;\n}\n\n/**\n * Get direction vector\n * Code originally developed for REP\n * @param {[]} path\n * @param {number} threshold\n * @returns {Vector2}\n */\nfunction getDirectionVector(path: number[][], threshold: number): Vector2 {\n const res: Vector2 = Vector2.zero.mutable;\n let len = 0;\n const temp: Vector2 = Vector2.zero.mutable;\n\n for (let i = 0; i < path.length - 1; i++) {\n const index = path.length - 1 - i;\n temp.set(path[index]!).sub(path[index - 1]!);\n res.add(temp);\n\n len = res.magnitude;\n if (len > threshold) {\n break;\n }\n }\n\n if (len === 0) {\n return new Vector2([0, 0]);\n }\n return res.scale(1 / len);\n}\n\n/**\n * Simplify array\n *\n * Simplifies an array using given parameters.\n * Code originally developed for REP\n * @access public\n *\n * @param {Number[]} inputArr Array to simplify\n * @param {Number} [maxOffset=0.001] Max offset (Default = 0.001)\n * @param {Number} [maxDistance=10] Max distance (Default = 10)\n *\n * @return {Number[]} Simplified array\n */\nfunction simplify(inputArr: [number, number][], maxOffset = 0.001, maxDistance = 10): [number, number][] {\n if (inputArr.length <= 4) {\n return inputArr;\n }\n const [o0, o1] = inputArr[0]!;\n const arr = inputArr.map<[number, number]>((d) => [d[0]! - o0, d[1]! - o1]);\n let [a0, a1] = arr[0]!;\n const sim = [inputArr[0]!];\n\n for (let i = 1; i + 1 < arr.length; i++) {\n const [t0, t1] = arr[i] ?? [];\n const [b0, b1] = arr[i + 1] ?? [];\n\n // If t->b vector is NOT [0, 0]\n if (t0 != null && t1 != null && b0 != null && b1 != null && (b0 - t0 !== 0 || b1 - t1 !== 0)) {\n // Proximity check\n const proximity: number = Math.abs(a0 * b1 - a1 * b0 + b0 * t1 - b1 * t0 + a1 * t0 - a0 * t1) / Math.sqrt((b0 - a0) ** 2 + (b1 - a1) ** 2);\n\n const dir: [number, number] = [a0 - t0, a1 - t1];\n const len: number = Math.sqrt(dir[0] ** 2 + dir[1] ** 2);\n\n if (proximity > maxOffset || len >= maxDistance) {\n sim.push([t0 + o0, t1 + o1]);\n [a0, a1] = [t0, t1];\n }\n }\n }\n const last = arr[arr.length - 1]!;\n sim.push([last[0] + o0, last[1] + o1]);\n\n return sim;\n}\n\n/**\n * Perform a curtain projection on a set of points in 3D\n * @param points\n * @param origin\n * @param offset\n * @returns {array}\n */\nfunction projectCurtain(points: [number, number, ...number[]][], origin?: [number, number, number, number], offset = 0): [number, number][] {\n let p0 = origin || points[0]!;\n let l = 0;\n const projected = points.map<[number, number]>((p1) => {\n const dx = p1[0] - p0[0];\n const dy = p1[1] - p0[1];\n l += Math.sqrt(dx ** 2 + dy ** 2);\n p0 = p1;\n return [offset > 0 ? offset - l : l, p1[2] ?? 0];\n });\n return projected;\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { clamp } from '@equinor/videx-math';\n\nimport { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnRescaleEvent, OnMountEvent } from '../interfaces';\nimport { SurfaceArea, SurfaceLine, findSampleAtPos, SurfaceData } from '../datautils';\nimport { SURFACE_LINE_WIDTH } from '../constants';\nimport { LayerOptions } from './base/Layer';\n\nconst DEFAULT_MARGINS = 18;\nconst DEFAULT_MIN_FONT_SIZE = 8;\nconst DEFAULT_MAX_FONT_SIZE = 13;\nconst DEFAULT_TEXT_COLOR = 'black';\nconst DEFAULT_FONT = 'Arial';\nconst MAX_FONT_SIZE_IN_WORLD_COORDINATES = 70;\n\nexport interface GeomodelLayerLabelsOptions<T extends SurfaceData> extends LayerOptions<T> {\n margins?: number;\n minFontSize?: number;\n maxFontSize?: number;\n textColor?: string;\n font?: string;\n}\n\ninterface SurfaceAreaWithAvgTopDepth extends SurfaceArea {\n avgTopDepth: number;\n}\n\nexport class GeomodelLabelsLayer<T extends SurfaceData> extends CanvasLayer<T> {\n defaultMargins: number = DEFAULT_MARGINS;\n defaultMinFontSize: number = DEFAULT_MIN_FONT_SIZE;\n defaultMaxFontSize: number = DEFAULT_MAX_FONT_SIZE;\n defaultTextColor: string = DEFAULT_TEXT_COLOR;\n defaultFont: string = DEFAULT_FONT;\n\n rescaleEvent: OnRescaleEvent | undefined;\n isLabelsOnLeftSide = true;\n maxFontSizeInWorldCoordinates: number = MAX_FONT_SIZE_IN_WORLD_COORDINATES;\n isXFlipped = false;\n areasWithAvgTopDepth: SurfaceAreaWithAvgTopDepth[] = [];\n\n constructor(id?: string, options?: GeomodelLayerLabelsOptions<T>) {\n super(id, options);\n this.render = this.render.bind(this);\n this.getMarginsInWorldCoordinates = this.getMarginsInWorldCoordinates.bind(this);\n this.getSurfacesAreaEdges = this.getSurfacesAreaEdges.bind(this);\n this.updateXFlipped = this.updateXFlipped.bind(this);\n this.generateSurfacesWithAvgDepth = this.generateSurfacesWithAvgDepth.bind(this);\n }\n\n override get options(): GeomodelLayerLabelsOptions<T> {\n return this._options;\n }\n\n override setData(data: T): void {\n super.setData(data);\n this.areasWithAvgTopDepth = [];\n }\n\n generateSurfacesWithAvgDepth(): void {\n const areas = this.data?.areas ?? [];\n this.areasWithAvgTopDepth = areas.reduce((acc: SurfaceAreaWithAvgTopDepth[], area: SurfaceArea) => {\n // Filter surfaces without label\n if (!area.label) {\n return acc;\n }\n const sumAndCount = area.data.reduce(\n (a: { sum: number; count: number }, d: number[]) => {\n if (d[1] != null) {\n a.sum += d[1];\n a.count++;\n }\n return a;\n },\n {\n sum: 0,\n count: 0,\n },\n );\n if (sumAndCount.count === 0) {\n return acc;\n }\n const avgTopDepth = sumAndCount.sum / sumAndCount.count;\n\n acc.push({\n ...area,\n avgTopDepth,\n });\n return acc;\n }, []);\n }\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n this.rescaleEvent = event;\n this.updateXFlipped();\n this.resetTransform();\n this.render();\n }\n\n render(): void {\n if (!this.rescaleEvent) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.clearCanvas();\n\n if (!this.data) {\n return;\n }\n\n if (this.areasWithAvgTopDepth.length <= 0) {\n this.generateSurfacesWithAvgDepth();\n }\n\n this.drawAreaLabels();\n this.drawLineLabels();\n });\n }\n\n drawAreaLabels(): void {\n this.areasWithAvgTopDepth.forEach((s: SurfaceAreaWithAvgTopDepth, i: number, array: SurfaceAreaWithAvgTopDepth[]) => {\n const topmostSurfaceNotDrawnYet = array.reduce((acc: SurfaceAreaWithAvgTopDepth | null, v, index): SurfaceAreaWithAvgTopDepth | null => {\n if (index > i) {\n if (acc == null) {\n acc = v;\n } else {\n if (v.avgTopDepth < acc.avgTopDepth) {\n acc = v;\n }\n }\n }\n return acc;\n }, null);\n\n this.drawAreaLabel(s, topmostSurfaceNotDrawnYet, array, i);\n });\n }\n\n drawLineLabels(): void {\n this.data?.lines.filter((surfaceLine: SurfaceLine) => surfaceLine.label).forEach((surfaceLine: SurfaceLine) => this.drawLineLabel(surfaceLine));\n }\n\n drawAreaLabel = (surfaceArea: SurfaceArea, nextSurfaceArea: SurfaceArea | null, surfaces: SurfaceArea[], i: number): void => {\n const { data } = surfaceArea;\n const { ctx, maxFontSizeInWorldCoordinates, isXFlipped } = this;\n const { xScale, yScale, xRatio, yRatio, zFactor } = this.rescaleEvent!;\n if (ctx == null) return;\n\n let isLabelsOnLeftSide = this.checkDrawLabelsOnLeftSide();\n const margins = (this.options.margins || this.defaultMargins) * (isXFlipped ? -1 : 1);\n const marginsInWorldCoords = margins / xRatio;\n const minFontSize = this.options.minFontSize || this.defaultMinFontSize;\n const maxFontSize = this.options.maxFontSize || this.defaultMaxFontSize;\n\n let fontSizeInWorldCoords = maxFontSize / yRatio;\n if (fontSizeInWorldCoords > maxFontSizeInWorldCoordinates) {\n fontSizeInWorldCoords = maxFontSizeInWorldCoordinates;\n if (fontSizeInWorldCoords * yRatio < minFontSize) {\n fontSizeInWorldCoords = minFontSize / yRatio;\n }\n }\n\n const leftEdge = xScale.invert(xScale.range()[0]!) + marginsInWorldCoords;\n const rightEdge = xScale.invert(xScale.range()[1]!) - marginsInWorldCoords;\n const [surfaceAreaLeftEdge, surfaceAreaRightEdge] = this.getSurfacesAreaEdges() as [number, number];\n\n // Get label metrics\n ctx.save();\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n let labelMetrics = ctx.measureText(surfaceArea.label ?? '');\n let labelLengthInWorldCoords = labelMetrics.width / xRatio;\n\n // Check if label will fit horizontally\n if (isLabelsOnLeftSide) {\n const labelRightEdge = leftEdge + (isXFlipped ? -labelLengthInWorldCoords : labelLengthInWorldCoords);\n if ((!isXFlipped && labelRightEdge > surfaceAreaRightEdge) || (isXFlipped && labelRightEdge < surfaceAreaRightEdge)) {\n isLabelsOnLeftSide = false;\n }\n } else {\n const labelLeftEdge = rightEdge + (isXFlipped ? labelLengthInWorldCoords : -labelLengthInWorldCoords);\n if ((!isXFlipped && labelLeftEdge < surfaceAreaLeftEdge) || (isXFlipped && labelLeftEdge > surfaceAreaLeftEdge)) {\n isLabelsOnLeftSide = true;\n }\n }\n\n // Find edge where to draw\n let startPos: number;\n const portionOfLabelLengthUsedForPosCalc = 0.07;\n if (isLabelsOnLeftSide) {\n startPos = isXFlipped ? Math.min(surfaceAreaLeftEdge, leftEdge) : Math.max(surfaceAreaLeftEdge, leftEdge);\n } else {\n startPos = isXFlipped ? Math.max(surfaceAreaRightEdge, rightEdge) : Math.min(surfaceAreaRightEdge, rightEdge);\n }\n\n const topEdge = yScale.invert(yScale.range()[0]!);\n const bottomEdge = yScale.invert(yScale.range()[1]!);\n\n // Calculate where to sample points\n const dirSteps = 5;\n const posSteps = 3;\n const posStep =\n portionOfLabelLengthUsedForPosCalc * (labelLengthInWorldCoords / posSteps) * (isLabelsOnLeftSide ? 1 : -1) * (isXFlipped ? -1 : 1);\n const dirStep = (labelLengthInWorldCoords / dirSteps) * (isLabelsOnLeftSide ? 1 : -1) * (isXFlipped ? -1 : 1);\n\n // Sample points from top and calculate position\n const topData = data.map((d) => [d[0]!, d[1]!]);\n const topPos = this.calcPos(topData, startPos, posSteps, posStep, topEdge, bottomEdge);\n if (!topPos) {\n return;\n }\n\n // Sample points from bottom and calculate position\n const bottomData = data.map((d) => [d[0]!, d[2]!]);\n let bottomPos = this.calcPos(\n bottomData,\n startPos,\n posSteps,\n posStep,\n topEdge,\n bottomEdge,\n nextSurfaceArea?.data.map((d) => [d[0]!, d[1]!]) ?? [],\n surfaces,\n i,\n );\n if (!bottomPos) {\n bottomPos = new Vector2(topPos.x, bottomEdge);\n }\n\n // Check if there is enough height for label\n const thickness = bottomPos.y - topPos.y;\n if (thickness < fontSizeInWorldCoords) {\n // Check minimum fontsize\n if (thickness * yRatio < minFontSize) {\n return;\n }\n // Use reduced fontsize\n fontSizeInWorldCoords = thickness;\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n labelMetrics = ctx.measureText(surfaceArea.label ?? '');\n labelLengthInWorldCoords = labelMetrics.width / xRatio;\n }\n // Sample points from top and bottom and calculate direction vector\n const initialDirVec = isLabelsOnLeftSide !== isXFlipped ? Vector2.right : Vector2.left;\n const areaDir = this.calcAreaDir(\n topData,\n bottomData,\n startPos,\n dirSteps,\n dirStep,\n initialDirVec,\n topEdge,\n bottomEdge,\n 0,\n Math.PI / 4,\n 4,\n nextSurfaceArea?.data.map((d) => [d[0]!, d[1]!]) ?? [],\n surfaces,\n i,\n );\n const scaledAngle = Math.atan(Math.tan(areaDir) * zFactor);\n\n // Draw label\n const textX = startPos;\n const textY = (topPos.y + bottomPos.y) / 2;\n const textAngle = isXFlipped ? -scaledAngle : scaledAngle;\n\n if (ctx) {\n ctx.textAlign = isLabelsOnLeftSide ? 'left' : 'right';\n ctx.translate(xScale(textX), yScale(textY));\n ctx.rotate(textAngle);\n ctx.fillStyle = this.options.textColor || this.defaultTextColor;\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n ctx.textBaseline = 'middle';\n ctx.fillText(surfaceArea.label ?? '', 0, 0);\n\n ctx.restore();\n }\n };\n\n drawLineLabel = (s: SurfaceLine): void => {\n const { ctx, isXFlipped } = this;\n const { xScale, yScale, xRatio, yRatio, zFactor } = this.rescaleEvent!;\n if (ctx == null) return;\n const isLabelsOnLeftSide = this.checkDrawLabelsOnLeftSide();\n const marginsInWorldCoords = this.getMarginsInWorldCoordinates();\n const maxFontSize = this.options.maxFontSize || this.defaultMaxFontSize;\n\n const fontSizeInWorldCoords = maxFontSize / yRatio;\n\n ctx.save();\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n const labelMetrics = ctx.measureText(s.label);\n const labelLengthInWorldCoords = labelMetrics.width / xRatio;\n\n const leftEdge = xScale.invert(xScale.range()[0]!) + marginsInWorldCoords;\n const rightEdge = xScale.invert(xScale.range()[1]!) - marginsInWorldCoords;\n const [surfaceAreaLeftEdge, surfaceAreaRightEdge] = this.getSurfacesAreaEdges() as [number, number];\n\n // Find edge where to draw\n let startPos: number;\n const steps = 5;\n if (isLabelsOnLeftSide) {\n startPos = isXFlipped ? Math.max(surfaceAreaRightEdge, rightEdge) : Math.min(surfaceAreaRightEdge, rightEdge);\n } else {\n startPos = isXFlipped ? Math.min(surfaceAreaLeftEdge, leftEdge) : Math.max(surfaceAreaLeftEdge, leftEdge);\n }\n\n // Calculate where to sample points\n const step = (labelLengthInWorldCoords / steps) * (isLabelsOnLeftSide ? -1 : 1);\n\n // Sample points and calculate position and direction vector\n const { data } = s;\n const pos = this.calcPos(data, startPos, steps, step);\n const dir = this.calcLineDir(data, startPos, steps, step, zFactor, isLabelsOnLeftSide ? Vector2.left : Vector2.right);\n if (!pos || !dir) {\n return;\n }\n\n // Calculate position and direction for label\n const textX = startPos;\n const textY = pos.y - SURFACE_LINE_WIDTH - fontSizeInWorldCoords / 2;\n const textDir = Vector2.angleRight(dir) - (isLabelsOnLeftSide ? Math.PI : 0);\n\n // Draw label\n if (ctx) {\n ctx.textAlign = isLabelsOnLeftSide ? 'right' : 'left';\n ctx.translate(xScale(textX), yScale(textY));\n ctx.rotate(textDir);\n ctx.fillStyle = this.colorToCSSColor(s.color);\n ctx.textBaseline = 'middle';\n ctx.fillText(s.label, 0, 0);\n\n ctx.restore();\n }\n };\n\n colorToCSSColor(color: number | string): string {\n if (typeof color === 'string') {\n return color;\n }\n\n let hexString = color.toString(16);\n hexString = '000000'.substr(0, 6 - hexString.length) + hexString;\n return `#${hexString}`;\n }\n\n calcPos(\n data: number[][],\n offset: number,\n count: number,\n step: number,\n topLimit?: number,\n bottomLimit?: number,\n alternativeSurfaceData?: number[][],\n surfaces: SurfaceArea[] | null = null,\n currentSurfaceIndex?: number,\n ): Vector2 | null {\n const pos = Vector2.zero.mutable;\n let samples = 0;\n for (let i = 0; i < count; i++) {\n const x = offset + i * step;\n const y = findSampleAtPos(data, x, topLimit, bottomLimit);\n if (y) {\n const alternativeY = this.getAlternativeYValueIfAvailable(x, topLimit, bottomLimit, alternativeSurfaceData, surfaces, currentSurfaceIndex);\n // Use topmost of value from current surface and alternative surface\n const usedY = alternativeY ? Math.min(y, alternativeY) : y;\n pos.add(x, usedY);\n samples++;\n }\n }\n\n if (samples === 0) {\n return null;\n }\n\n return Vector2.divide(pos, samples);\n }\n\n getAlternativeYValueIfAvailable(\n x: number,\n topLimit?: number,\n bottomLimit?: number,\n alternativeSurfaceData?: number[][],\n surfaces: SurfaceArea[] | null = null,\n currentSurfaceIndex?: number,\n ): number | null {\n if (!alternativeSurfaceData) {\n return null;\n }\n // Find sample from passed in surface data\n let altY = findSampleAtPos(alternativeSurfaceData, x, topLimit, bottomLimit);\n if (altY == null && surfaces && currentSurfaceIndex != null) {\n //Find topmost surface after current which gives us data\n let si = currentSurfaceIndex + 1;\n while (altY == null && si < surfaces.length) {\n const altSurface = surfaces[si++];\n altY = findSampleAtPos(altSurface?.data.map((d: number[]) => [d[0]!, d[1]!]) ?? [], x, topLimit, bottomLimit);\n }\n }\n return altY;\n }\n\n calcLineDir(\n data: number[][],\n offset: number,\n count: number,\n step: number,\n zFactor: number,\n initalVector: Vector2 = Vector2.left,\n topLimit?: number,\n bottomLimit?: number,\n ): Vector2 {\n const dir = initalVector.mutable;\n\n const startY = findSampleAtPos(data, offset, topLimit, bottomLimit);\n if (startY === null) {\n return dir;\n }\n\n const vecAtEnd = new Vector2(offset, startY * zFactor);\n const tmpVec = Vector2.zero.mutable;\n for (let i = 1; i <= count; i++) {\n const x = offset + i * step;\n const y = findSampleAtPos(data, offset, topLimit, bottomLimit);\n if (y !== null) {\n tmpVec.set(x, y * zFactor);\n tmpVec.sub(vecAtEnd);\n dir.add(tmpVec);\n }\n }\n\n return dir;\n }\n\n calcAreaDir(\n top: number[][],\n bottom: number[][],\n offset: number,\n count: number,\n step: number,\n initalVector: Vector2 = Vector2.left,\n topLimit: number,\n bottomLimit: number,\n minReductionAngle = 0,\n maxReductionAngle: number = Math.PI / 4,\n angleReductionExponent = 4,\n alternativeSurfaceBottomData: number[][],\n surfaces: SurfaceArea[] | null = null,\n currentSurfaceIndex: number,\n ): number {\n const angles: number[] = [];\n const tmpVec = Vector2.zero.mutable;\n let vecAtEnd: Vector2;\n for (let i = 0; i <= count; i++) {\n const x = offset + i * step;\n const topY = findSampleAtPos(top, x, topLimit, bottomLimit);\n const bottomY = findSampleAtPos(bottom, x, topLimit, bottomLimit) || bottomLimit;\n // Find position of next surface in case it's higher than current base\n const alternativeBottomY = this.getAlternativeYValueIfAvailable(\n x,\n topLimit,\n bottomLimit,\n alternativeSurfaceBottomData,\n surfaces,\n currentSurfaceIndex,\n );\n // Use topmost of value from current surface and alternative surface\n const usedBottomY = alternativeBottomY ? Math.min(bottomY, alternativeBottomY) : bottomY;\n if (i === 0) {\n if (topY === null) {\n return Vector2.angleRight(initalVector);\n }\n const startY = (topY + usedBottomY) / 2;\n vecAtEnd = new Vector2(offset, startY);\n } else {\n if (topY !== null) {\n tmpVec.set(x, (topY + usedBottomY) / 2);\n tmpVec.sub(vecAtEnd!);\n\n angles.push(Vector2.angleRight(tmpVec));\n } else {\n angles.push(Vector2.angleRight(initalVector));\n }\n }\n }\n\n const refAngle = angles[0]!;\n const offsetAngles = angles.map((d: number) => d - refAngle);\n let factors = 0;\n const offsetSum = offsetAngles.reduce((acc: number, v: number) => {\n const ratio = (Math.abs(v) - minReductionAngle) / maxReductionAngle;\n const factor = Math.pow(1 - clamp(ratio, 0, 1), angleReductionExponent);\n factors += factor;\n return acc + v * factor;\n }, 0);\n const angle = offsetSum / factors + refAngle;\n return angle;\n }\n\n updateXFlipped(): void {\n const { xBounds } = this.rescaleEvent!;\n this.isXFlipped = xBounds[0] > xBounds[1];\n }\n\n getMarginsInWorldCoordinates(): number {\n const { xRatio } = this.rescaleEvent!;\n const margins = (this.options.margins || this.defaultMargins) * (this.isXFlipped ? -1 : 1);\n const marginsInWorldCoords = margins / xRatio;\n return marginsInWorldCoords;\n }\n\n getSurfacesAreaEdges(): number[] {\n const endPoints =\n this.data?.areas.reduce((acc, area) => {\n const { data } = area;\n const firstValidPoint = data.find((d: number[]) => d[1] != null);\n if (firstValidPoint) {\n acc.push(firstValidPoint[0]!);\n }\n // TODO: Use findLast() when TypeScript stops complaining about it\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i]?.[1] != null) {\n acc.push(data[i]?.[0]!);\n break;\n }\n }\n\n return acc;\n }, [] as number[]) ?? [];\n endPoints.push(\n ...(this.data?.lines.reduce((acc, line) => {\n const { data } = line;\n const firstValidPoint = data.find((d: number[]) => d[1] != null);\n if (firstValidPoint) {\n acc.push(firstValidPoint[0]!);\n }\n // TODO: Use findLast() when TypeScript stops complaining about it\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i]?.[1] != null) {\n acc.push(data[i]?.[0]!);\n break;\n }\n }\n return acc;\n }, [] as number[]) ?? []),\n );\n\n const minX = Math.min(...endPoints);\n const maxX = Math.max(...endPoints);\n const marginsInWorldCoords = this.getMarginsInWorldCoordinates();\n const { isXFlipped } = this;\n const surfaceAreaLeftEdge = isXFlipped ? maxX + marginsInWorldCoords : minX + marginsInWorldCoords;\n const surfaceAreaRightEdge = isXFlipped ? minX - marginsInWorldCoords : maxX - marginsInWorldCoords;\n return [surfaceAreaLeftEdge, surfaceAreaRightEdge];\n }\n\n checkDrawLabelsOnLeftSide(): boolean {\n const { referenceSystem, isXFlipped } = this;\n if (!referenceSystem) {\n return true;\n }\n\n const { xScale, yScale, xRatio } = this.rescaleEvent!;\n const t = 200; // TODO: Use actual size of largest label or average size of all\n\n const [dx1, dx2] = xScale.domain() as [number, number];\n const [dy1, dy2] = yScale.domain() as [number, number];\n\n let top = referenceSystem.interpolators.curtain.getIntersects(dy1, 1, 0) as number[][];\n if (top.length === 0) {\n top = [referenceSystem.interpolators.curtain.getPointAt(0.0) as number[]];\n }\n let bottom = referenceSystem.interpolators.curtain.getIntersects(dy2, 1, 0) as number[][];\n if (bottom.length === 0) {\n bottom = [referenceSystem.interpolators.curtain.getPointAt(1.0) as number[]];\n }\n\n const maxX = Math.max(top[0]?.[0]!, bottom[0]?.[0]!);\n const minX = Math.min(top[0]?.[0]!, bottom[0]?.[0]!);\n\n const wbBBox = {\n left: isXFlipped ? maxX : minX,\n right: isXFlipped ? minX : maxX,\n };\n\n const margin = this.getMarginsInWorldCoordinates();\n const screenLeftEdge = dx1 + margin;\n const screenRightEdge = dx2 - margin;\n\n const [surfaceAreaLeftEdge, surfaceAreaRightEdge] = this.getSurfacesAreaEdges() as [number, number];\n\n const leftLimit = isXFlipped ? Math.min(screenLeftEdge, surfaceAreaLeftEdge) : Math.max(screenLeftEdge, surfaceAreaLeftEdge);\n const rightLimit = isXFlipped ? Math.max(screenRightEdge, surfaceAreaRightEdge) : Math.min(screenRightEdge, surfaceAreaRightEdge);\n\n const spaceOnLeftSide = Math.max(isXFlipped ? leftLimit - wbBBox.left : wbBBox.left - leftLimit, 0);\n const spaceOnRightSide = Math.max(isXFlipped ? wbBBox.right - rightLimit : rightLimit - wbBBox.right, 0);\n\n const spaceOnLeftSideInScreenCoordinates = spaceOnLeftSide * xRatio;\n const spaceOnRightSideInScreenCoordinates = spaceOnRightSide * xRatio;\n const isLabelsOnLeftSide =\n spaceOnLeftSide > spaceOnRightSide ||\n spaceOnLeftSideInScreenCoordinates > t ||\n (spaceOnLeftSideInScreenCoordinates < t && spaceOnRightSideInScreenCoordinates < t && isXFlipped) ||\n bottom[0]?.[1]! < dy1;\n\n return isLabelsOnLeftSide;\n }\n}\n","import { Graphics } from 'pixi.js';\nimport { PixiLayer } from './base/PixiLayer';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { SurfaceArea, SurfaceData, SurfaceLine } from '../datautils';\nimport { SURFACE_LINE_WIDTH } from '../constants';\n\nconst DEFAULT_Y_BOTTOM = 10000;\n\nexport class GeomodelLayerV2<T extends SurfaceData> extends PixiLayer<T> {\n private isPreRendered = false;\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n\n if (!this.isPreRendered) {\n this.clearLayer();\n this.preRender();\n }\n\n this.render();\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n\n this.isPreRendered = false;\n this.clearLayer();\n this.preRender();\n this.render();\n }\n\n preRender(): void {\n const { data } = this;\n\n if (!data) {\n return;\n }\n\n data.areas.forEach((a) => this.generateAreaPolygon(a));\n data.lines.forEach((l) => this.generateSurfaceLine(l));\n\n this.isPreRendered = true;\n }\n\n createPolygons = (data: number[][]): number[][] => {\n const polygons: number[][] = [];\n let polygon: number[] | undefined;\n\n // Start generating polygons\n for (let i = 0; i < data.length; i++) {\n // Generate top of polygon as long as we have valid values\n const topIsValid = !!data[i]?.[1];\n if (topIsValid) {\n if (polygon == null) {\n polygon = [];\n }\n polygon.push(data[i]?.[0]!, data[i]?.[1]!);\n }\n\n const endIsReached = i === data.length - 1;\n if (!topIsValid || endIsReached) {\n if (polygon) {\n // Generate bottom of polygon\n for (let j: number = !topIsValid ? i - 1 : i; j >= 0; j--) {\n if (!data[j]?.[1]) {\n break;\n }\n polygon.push(data[j]?.[0]!, data[j]?.[2] || DEFAULT_Y_BOTTOM);\n }\n polygons.push(polygon);\n polygon = undefined;\n }\n }\n }\n return polygons;\n };\n\n generateAreaPolygon = (s: SurfaceArea): void => {\n const g = new Graphics();\n g.lineStyle(1, s.color as number, 1);\n g.beginFill(s.color as number);\n const polygons = this.createPolygons(s.data);\n polygons.forEach((polygon: number[]) => g.drawPolygon(polygon));\n g.endFill();\n this.addChild(g);\n };\n\n generateSurfaceLine = (s: SurfaceLine): void => {\n const g = new Graphics();\n const { data: d } = s;\n\n const alignment = 0.5;\n g.lineStyle(SURFACE_LINE_WIDTH, s.color as number, 1, alignment, true);\n\n let penDown = false;\n for (let i = 0; i < d.length; i++) {\n const lineData = d[i];\n if (lineData && lineData[1] && lineData[0]) {\n if (penDown) {\n g.lineTo(lineData[0], lineData[1]);\n } else {\n g.moveTo(lineData[0], lineData[1]);\n penDown = true;\n }\n } else {\n penDown = false;\n }\n }\n this.addChild(g);\n };\n}\n","import { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\nimport { LayerOptions } from './base/Layer';\n\n// constants\nconst MINORCOLOR = 'lightgray';\nconst MAJORCOLOR = 'gray';\nconst MINORWIDTH = 0.25;\nconst MAJORWIDTH = 0.75;\n\nconst defaultOptions = {\n minorColor: MINORCOLOR,\n majorColor: MAJORCOLOR,\n minorWidth: MINORWIDTH,\n majorWidth: MAJORWIDTH,\n};\n\nexport interface GridLayerOptions<T> extends LayerOptions<T> {\n majorWidth?: number;\n majorColor?: string;\n minorWidth?: number;\n minorColor?: string;\n}\n\nexport interface OnGridLayerUpdateEvent<T> extends OnUpdateEvent<T> {\n xScale?: ScaleLinear<number, number, never>;\n yScale?: ScaleLinear<number, number, never>;\n}\n\nexport class GridLayer<T> extends CanvasLayer<T> {\n private _offsetX = 0;\n private _offsetY = 0;\n\n constructor(id?: string, options?: GridLayerOptions<T>) {\n super(id, options);\n this.options = {\n ...this.options,\n ...(options || defaultOptions),\n };\n this.render = this.render.bind(this);\n }\n\n override onUpdate(event: OnGridLayerUpdateEvent<T>): void {\n super.onUpdate(event);\n this.render(event);\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n this.render(event);\n }\n\n render(event: OnRescaleEvent | OnGridLayerUpdateEvent<T>): void {\n const { ctx } = this;\n const { minorWidth, minorColor, majorWidth, majorColor } = this.options as GridLayerOptions<T>;\n\n if (!ctx) {\n return;\n }\n\n this.clearCanvas();\n\n if (!(event.xScale || event.yScale)) {\n return;\n }\n\n const xScale = event.xScale!.copy();\n const yScale = event.yScale!.copy();\n\n const xDomain = xScale.domain() as [number, number];\n const yDomain = yScale.domain() as [number, number];\n\n const offsetX = this.offsetX;\n const offsetY = this.offsetY;\n\n xScale.domain([xDomain[0] - offsetX, xDomain[1] - offsetX]);\n yScale.domain([yDomain[0] - offsetY, yDomain[1] - offsetY]);\n\n const [rx1, rx2] = xScale.range() as [number, number];\n const [ry1, ry2] = yScale.range() as [number, number];\n\n ctx.lineWidth = minorWidth || MINORWIDTH;\n ctx.strokeStyle = minorColor || MINORCOLOR;\n\n // minor grid lines\n const xminticks = this.mapMinorTicks(xScale.ticks());\n const yminticks = this.mapMinorTicks(yScale.ticks());\n this.renderTicksX(xScale, xminticks, ry1, ry2);\n this.renderTicksY(yScale, yminticks, rx1, rx2);\n\n ctx.lineWidth = majorWidth || MAJORWIDTH;\n ctx.strokeStyle = majorColor || MAJORCOLOR;\n\n // major grid lines\n this.renderTicksX(xScale, xScale.ticks(), ry1, ry2);\n this.renderTicksY(yScale, yScale.ticks(), rx1, rx2);\n ctx.restore();\n }\n\n private renderTicksX(xscale: ScaleLinear<number, number, never>, xticks: number[], ry1: number, ry2: number): void {\n xticks.forEach((tx: number) => {\n const x = xscale(tx);\n if (this.ctx != null) {\n this.ctx.beginPath();\n this.ctx.moveTo(x, ry1);\n this.ctx.lineTo(x, ry2);\n this.ctx.stroke();\n }\n });\n }\n\n private renderTicksY(yscale: ScaleLinear<number, number, never>, yticks: number[], rx1: number, rx2: number): void {\n yticks.forEach((ty: number) => {\n const y = yscale(ty);\n if (this.ctx != null) {\n this.ctx.beginPath();\n this.ctx.moveTo(rx1, y);\n this.ctx.lineTo(rx2, y);\n this.ctx.stroke();\n }\n });\n }\n\n private mapMinorTicks(ticks: number[]): number[] {\n let xminticks: number[] = [];\n if (ticks.length >= 2) {\n xminticks = ticks.map((v: number) => v + (ticks[1]! - ticks[0]!) / 2);\n xminticks.pop();\n }\n return xminticks;\n }\n\n get offsetX(): number {\n return this._offsetX;\n }\n\n set offsetX(offset: number) {\n this._offsetX = offset;\n }\n\n get offsetY(): number {\n return this._offsetY;\n }\n\n set offsetY(offset: number) {\n this._offsetY = offset;\n }\n}\n","import { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnMountEvent, OnRescaleEvent } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\n\nexport interface OnImageLayerUpdateEvent<T> extends OnUpdateEvent<T> {\n url: string;\n xScale: ScaleLinear<number, number, never>;\n yScale: ScaleLinear<number, number, never>;\n xRatio?: number;\n yRatio?: number;\n x?: number;\n y?: number;\n}\n\nexport type OnImageLayerRescaleEvent<T> = OnImageLayerUpdateEvent<T> & OnRescaleEvent;\n\nexport class ImageLayer<T> extends CanvasLayer<T> {\n img: HTMLImageElement | undefined;\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const img = document.createElement('img');\n this.img = img;\n this.isLoading = true;\n }\n\n override onUpdate(event: OnImageLayerUpdateEvent<T>): void {\n super.onUpdate(event);\n if (this.img != null) {\n this.img.src = event.url;\n }\n this.render(event);\n }\n\n override onRescale(event: OnImageLayerRescaleEvent<T>): void {\n super.onRescale(event);\n this.setTransform(event);\n this.render(event);\n }\n\n render(event: OnImageLayerUpdateEvent<T>): void {\n const width = parseInt(this.elm?.getAttribute('width') ?? '0', 10);\n const height = parseInt(this.elm?.getAttribute('height') ?? '0', 10);\n const { xScale, yScale, xRatio, yRatio, x, y } = event;\n const calcWidth = width * (xRatio || 1);\n const calcHeight = height * (yRatio || 1);\n this.clearCanvas();\n\n if (this.img != null) {\n if (this.isLoading) {\n this.img.onload = (): void => {\n this.isLoading = false;\n // An extra undefined check should happen here as the execution doesn't happen synchronously\n this.img != null && this.ctx?.drawImage(this.img, xScale(x || 0), yScale(y || 0), calcWidth, calcHeight);\n };\n } else {\n this.ctx?.drawImage(this.img, xScale(x || 0), yScale(y || 0), calcWidth, calcHeight);\n }\n }\n }\n}\n","// @ts-nocheck\n// https://github.com/davidfig/pixi-dashed-line\n//\n// Copyright 2021 David Figatner\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software\n// and associated documentation files (the \"Software\"), to deal in the Software without restriction,\n// including without limitation the rights to use, copy, modify, merge, publish, distribute,\n// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software\n// is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport * as PIXI from 'pixi.js';\n\n/** Define the dash: [dash length, gap size, dash size, gap size, ...] */\nexport type Dashes = number[];\n\nexport interface DashLineOptions {\n dash?: Dashes;\n width?: number;\n color?: number;\n alpha?: number;\n scale?: number;\n useTexture?: boolean;\n useDots?: boolean;\n cap?: PIXI.LINE_CAP;\n join?: PIXI.LINE_JOIN;\n alignment?: number;\n}\n\nconst dashLineOptionsDefault: Partial<DashLineOptions> = {\n dash: [10, 5],\n width: 1,\n color: 0xffffff,\n alpha: 1,\n scale: 1,\n useTexture: false,\n alignment: 0.5,\n};\n\nexport class DashLine {\n graphics: PIXI.Graphics;\n\n /** current length of the line */\n lineLength: number;\n\n /** cursor location */\n cursor = new PIXI.Point();\n\n /** desired scale of line */\n scale = 1;\n\n private start: PIXI.Point;\n\n private dashSize: number;\n private dash: number[];\n\n private useTexture: boolean;\n private options: DashLineOptions;\n\n // cache of PIXI.Textures for dashed lines\n static dashTextureCache: Record<string, PIXI.Texture> = {};\n\n /**\n * Create a DashLine\n * @param graphics\n * @param [options]\n * @param [options.useTexture=false] - use the texture based render (useful for very large or very small dashed lines)\n * @param [options.dashes=[10,5] - an array holding the dash and gap (eg, [10, 5, 20, 5, ...])\n * @param [options.width=1] - width of the dashed line\n * @param [options.alpha=1] - alpha of the dashed line\n * @param [options.color=0xffffff] - color of the dashed line\n * @param [options.cap] - add a PIXI.LINE_CAP style to dashed lines (only works for useTexture: false)\n * @param [options.join] - add a PIXI.LINE_JOIN style to the dashed lines (only works for useTexture: false)\n * @param [options.alignment] - The alignment of any lines drawn (0.5 = middle, 1 = outer, 0 = inner)\n */\n constructor(graphics: PIXI.Graphics, options: DashLineOptions = {}) {\n this.graphics = graphics;\n options = { ...dashLineOptionsDefault, ...options };\n this.dash = options.dash;\n this.dashSize = this.dash.reduce((a, b) => a + b);\n this.useTexture = options.useTexture;\n this.options = options;\n this.setLineStyle();\n }\n\n /** resets line style to enable dashed line (useful if lineStyle was changed on graphics element) */\n setLineStyle() {\n const options = this.options;\n if (this.useTexture) {\n const texture = DashLine.getTexture(options, this.dashSize);\n this.graphics.lineTextureStyle({\n width: options.width * options.scale,\n color: options.color,\n alpha: options.alpha,\n texture,\n alignment: options.alignment,\n });\n } else {\n this.graphics.lineStyle({\n width: options.width * options.scale,\n color: options.color,\n alpha: options.alpha,\n cap: options.cap,\n join: options.join,\n alignment: options.alignment,\n });\n }\n this.scale = options.scale;\n }\n\n private static distance(x1: number, y1: number, x2: number, y2: number): number {\n return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n }\n\n moveTo(x: number, y: number): this {\n this.lineLength = 0;\n this.cursor.set(x, y);\n this.start = new PIXI.Point(x, y);\n this.graphics.moveTo(this.cursor.x, this.cursor.y);\n return this;\n }\n\n lineTo(x: number, y: number, closePath?: boolean): this {\n const type = typeof this.lineLength;\n if (type === undefined) {\n this.moveTo(0, 0);\n }\n const length = DashLine.distance(this.cursor.x, this.cursor.y, x, y);\n const angle = Math.atan2(y - this.cursor.y, x - this.cursor.x);\n const closed = closePath && x === this.start.x && y === this.start.y;\n if (this.useTexture) {\n this.graphics.moveTo(this.cursor.x, this.cursor.y);\n this.adjustLineStyle(angle);\n if (closed && this.dash.length % 2 === 0) {\n const gap = Math.min(this.dash[this.dash.length - 1], length);\n this.graphics.lineTo(x - Math.cos(angle) * gap, y - Math.sin(angle) * gap);\n this.graphics.closePath();\n } else {\n this.graphics.lineTo(x, y);\n }\n } else {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n let x0 = this.cursor.x;\n let y0 = this.cursor.y;\n\n // find the first part of the dash for this line\n const place = this.lineLength % (this.dashSize * this.scale);\n let dashIndex = 0,\n dashStart = 0;\n let dashX = 0;\n for (let i = 0; i < this.dash.length; i++) {\n const dashSize = this.dash[i] * this.scale;\n if (place < dashX + dashSize) {\n dashIndex = i;\n dashStart = place - dashX;\n break;\n } else {\n dashX += dashSize;\n }\n }\n\n let remaining = length;\n // let count = 0\n while (remaining > 0) {\n // && count++ < 1000) {\n const dashSize = this.dash[dashIndex] * this.scale - dashStart;\n const dist = remaining > dashSize ? dashSize : remaining;\n if (closed) {\n const remainingDistance = DashLine.distance(x0 + cos * dist, y0 + sin * dist, this.start.x, this.start.y);\n if (remainingDistance <= dist) {\n if (dashIndex % 2 === 0) {\n const lastDash = DashLine.distance(x0, y0, this.start.x, this.start.y) - this.dash[this.dash.length - 1] * this.scale;\n x0 += cos * lastDash;\n y0 += sin * lastDash;\n this.graphics.lineTo(x0, y0);\n }\n break;\n }\n }\n\n x0 += cos * dist;\n y0 += sin * dist;\n if (dashIndex % 2) {\n this.graphics.moveTo(x0, y0);\n } else {\n this.graphics.lineTo(x0, y0);\n }\n remaining -= dist;\n\n dashIndex++;\n dashIndex = dashIndex === this.dash.length ? 0 : dashIndex;\n dashStart = 0;\n }\n // if (count >= 1000) console.log('failure', this.scale)\n }\n this.lineLength += length;\n this.cursor.set(x, y);\n return this;\n }\n\n closePath() {\n this.lineTo(this.start.x, this.start.y, true);\n }\n\n drawCircle(x: number, y: number, radius: number, points = 80, matrix?: PIXI.Matrix): this {\n const interval = (Math.PI * 2) / points;\n let angle = 0,\n first: PIXI.Point;\n if (matrix) {\n first = new PIXI.Point(x + Math.cos(angle) * radius, y + Math.sin(angle) * radius);\n matrix.apply(first, first);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.moveTo(first[0], first[1]);\n } else {\n first = new PIXI.Point(x + Math.cos(angle) * radius, y + Math.sin(angle) * radius);\n this.moveTo(first.x, first.y);\n }\n angle += interval;\n for (let i = 1; i < points + 1; i++) {\n const next = i === points ? first : [x + Math.cos(angle) * radius, y + Math.sin(angle) * radius];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.lineTo(next[0], next[1]);\n angle += interval;\n }\n return this;\n }\n\n drawEllipse(x: number, y: number, radiusX: number, radiusY: number, points = 80, matrix?: PIXI.Matrix): this {\n const interval = (Math.PI * 2) / points;\n let first: { x: number; y: number };\n const point = new PIXI.Point();\n for (let i = 0; i < Math.PI * 2; i += interval) {\n let x0 = x - radiusX * Math.sin(i);\n let y0 = y - radiusY * Math.cos(i);\n if (matrix) {\n point.set(x0, y0);\n matrix.apply(point, point);\n x0 = point.x;\n y0 = point.y;\n }\n if (i === 0) {\n this.moveTo(x0, y0);\n first = { x: x0, y: y0 };\n } else {\n this.lineTo(x0, y0);\n }\n }\n this.lineTo(first.x, first.y, true);\n return this;\n }\n\n drawPolygon(points: PIXI.Point[] | number[], matrix?: PIXI.Matrix): this {\n const p = new PIXI.Point();\n if (typeof points[0] === 'number') {\n if (matrix) {\n p.set(points[0] as number, points[1] as number);\n matrix.apply(p, p);\n this.moveTo(p.x, p.y);\n for (let i = 2; i < points.length; i += 2) {\n p.set(points[i] as number, points[i + 1] as number);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y, i === points.length - 2);\n }\n } else {\n this.moveTo(points[0] as number, points[1] as number);\n for (let i = 2; i < points.length; i += 2) {\n this.lineTo(points[i] as number, points[i + 1] as number, i === points.length - 2);\n }\n }\n } else {\n if (matrix) {\n const point = points[0] as PIXI.Point;\n p.copyFrom(point);\n matrix.apply(p, p);\n this.moveTo(p.x, p.y);\n for (let i = 1; i < points.length; i++) {\n const point = points[i] as PIXI.Point;\n p.copyFrom(point);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y, i === points.length - 1);\n }\n } else {\n const point = points[0] as PIXI.Point;\n this.moveTo(point.x, point.y);\n for (let i = 1; i < points.length; i++) {\n const point = points[i] as PIXI.Point;\n this.lineTo(point.x, point.y, i === points.length - 1);\n }\n }\n }\n return this;\n }\n\n drawRect(x: number, y: number, width: number, height: number, matrix?: PIXI.Matrix): this {\n if (matrix) {\n const p = new PIXI.Point();\n\n // moveTo(x, y)\n p.set(x, y);\n matrix.apply(p, p);\n this.moveTo(p.x, p.y);\n\n // lineTo(x + width, y)\n p.set(x + width, y);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y);\n\n // lineTo(x + width, y + height)\n p.set(x + width, y + height);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y);\n\n // lineto(x, y + height)\n p.set(x, y + height);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y);\n\n // lineTo(x, y, true)\n p.set(x, y);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y, true);\n } else {\n this.moveTo(x, y)\n .lineTo(x + width, y)\n .lineTo(x + width, y + height)\n .lineTo(x, y + height)\n .lineTo(x, y, true);\n }\n return this;\n }\n\n // adjust the matrix for the dashed texture\n private adjustLineStyle(angle: number) {\n const lineStyle = this.graphics.line;\n lineStyle.matrix = new PIXI.Matrix();\n if (angle) {\n lineStyle.matrix.rotate(angle);\n }\n if (this.scale !== 1) {\n lineStyle.matrix.scale(this.scale, this.scale);\n }\n const textureStart = -this.lineLength;\n lineStyle.matrix.translate(this.cursor.x + textureStart * Math.cos(angle), this.cursor.y + textureStart * Math.sin(angle));\n this.graphics.lineStyle(lineStyle);\n }\n\n // creates or uses cached texture\n private static getTexture(options: DashLineOptions, dashSize: number): PIXI.Texture | undefined {\n const key = options.dash.toString();\n if (DashLine.dashTextureCache[key]) {\n return DashLine.dashTextureCache[key];\n }\n const canvas = document.createElement('canvas');\n canvas.width = dashSize;\n canvas.height = Math.ceil(options.width);\n const context = canvas.getContext('2d');\n if (!context) {\n console.warn('Did not get context from canvas');\n return undefined;\n }\n context.strokeStyle = 'white';\n context.globalAlpha = options.alpha;\n context.lineWidth = options.width;\n let x = 0;\n const y = options.width / 2;\n context.moveTo(x, y);\n for (let i = 0; i < options.dash.length; i += 2) {\n x += options.dash[i];\n context.lineTo(x, y);\n if (options.dash.length !== i + 1) {\n x += options.dash[i + 1];\n context.moveTo(x, y);\n }\n }\n context.stroke();\n const texture = (DashLine.dashTextureCache[key] = PIXI.Texture.from(canvas));\n texture.baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST;\n return texture;\n }\n}\n","import { IPoint, Point } from 'pixi.js';\nimport Vector2 from '@equinor/videx-vector2';\n\nexport const pointToVector = (p: IPoint): Vector2 => new Vector2(p.x, p.y);\nexport const pointToArray = (p: IPoint): [number, number] => [p.x, p.y];\nexport const vectorToPoint = (v: Vector2): Point => new Point(v[0], v[1]);\nexport const vectorToArray = (v: Vector2): [number, number] => [v[0] ?? 0, v[1] ?? 0];\nexport const arrayToPoint = (a: number[]): Point => new Point(a[0], a[1]);\nexport const arrayToVector = (a: number[]): Vector2 => new Vector2(a[0] ?? 0, a[1] ?? 0);\n\nexport const calcDist = (prev: [number, number], point: [number, number]): number => {\n return arrayToVector(point).sub(prev).magnitude;\n};\n\nexport const calcDistPoint = (prev: Point, point: Point): number => {\n return pointToVector(point).sub(prev.x, prev.y).magnitude;\n};\n\nexport const calcNormal = (p1: Point, p2: Point): Point => {\n const d = pointToVector(p2).sub(p1.x, p1.y);\n d.x = d.y === 0 ? 1 : d.x;\n d.y = d.x === 0 ? 1 : d.y;\n return vectorToPoint(d.rotate90()); //TODO: normalize\n};\n\nexport const convertToUnitVector = (p: Point): Point => {\n return vectorToPoint(pointToVector(p).normalize());\n};\n\nexport const createNormals = (points: IPoint[]): Vector2[] => {\n if (points.length < 2) {\n return [new Vector2(0)];\n }\n\n let n: Vector2;\n\n return points.map((_coord, i, list) => {\n const curr = list[i];\n const next = list[i + 1];\n\n if (i < list.length - 1 && curr != null && next != null) {\n const p = pointToVector(curr);\n const q = pointToVector(next);\n const np = q.sub(p);\n const rotate = np.rotate90();\n n = rotate.normalized();\n return n;\n }\n\n // reuse previous normal for last coord\n return n;\n });\n};\n\n// TODO check if this can be simplified and return Vector/number[]\nexport const offsetPoint = (point: IPoint, vector: Vector2, offset: number): Point => {\n const p = pointToVector(point);\n return vectorToPoint(p.add(vector.scale(offset)));\n};\n\nexport const offsetPoints = (points: IPoint[], vectors: Vector2[], offset: number): Point[] => {\n if (points.length !== vectors.length) {\n throw new Error('Number of vectors does not match number of points');\n }\n\n return points.map((point, index) => {\n const vector = vectors[index];\n\n if (vector != null) {\n return offsetPoint(point, vector, offset);\n }\n throw new Error(`Trying to read index ${index} of point ${point}, but no such vector was found!`);\n });\n};\n","import { groupD8, IPoint, Point, Rectangle, Texture, WRAP_MODES } from 'pixi.js';\nimport { DEFAULT_TEXTURE_SIZE } from '../constants';\nimport {\n Casing,\n CasingWindow,\n Cement,\n CementOptions,\n CementPlug,\n CementPlugOptions,\n CementSqueeze,\n CementSqueezeOptions,\n Completion,\n HoleOptions,\n HoleSize,\n ScreenOptions,\n TubingOptions,\n Perforation,\n PerforationOptions,\n foldPerforationSubKind,\n intersect,\n isSubKindCasedHoleFracPack,\n isSubkindCasedHoleGravelPack,\n PerforationSubKind,\n isSubKindCasedHoleFracturation,\n} from '../layers/schematicInterfaces';\nimport { ComplexRopeSegment } from '../layers/CustomDisplayObjects/ComplexRope';\nimport { createNormals, offsetPoints } from '../utils/vectorUtils';\n\nexport type PerforationShape = ComplexRopeSegment;\n\nexport interface TubularRenderingObject {\n leftPath: Point[];\n rightPath: Point[];\n}\n\nexport interface CasingRenderObject {\n id: string;\n kind: 'casing';\n referenceDiameter: number;\n referenceRadius: number;\n casingWallWidth: number;\n hasShoe: boolean;\n bottom: number;\n zIndex?: number;\n sections: {\n kind: 'casing' | 'casing-window';\n leftPath: Point[];\n rightPath: Point[];\n pathPoints: Point[];\n }[];\n}\n\nexport const getEndLines = (\n rightPath: [IPoint, IPoint, ...IPoint[]],\n leftPath: [IPoint, IPoint, ...IPoint[]],\n): {\n top: [IPoint, IPoint];\n bottom: [IPoint, IPoint];\n} => {\n return {\n top: [rightPath[0], leftPath[0]],\n bottom: [rightPath[rightPath.length - 1] as IPoint, leftPath[leftPath.length - 1] as IPoint],\n };\n};\n\nexport const overlaps = (top1: number, bottom1: number, top2: number, bottom2: number): boolean => top1 <= bottom2 && top2 <= bottom1;\n\nexport const strictlyOverlaps = (top1: number, bottom1: number, top2: number, bottom2: number): boolean => top1 < bottom2 && top2 < bottom1;\n\nexport const uniq = <T>(arr: T[]): T[] => Array.from<T>(new Set(arr));\n\nconst findIntersectingItems = (\n start: number,\n end: number,\n otherStrings: (Casing | Completion)[],\n holes: HoleSize[],\n): { overlappingHoles: HoleSize[]; overlappingOuterStrings: (Casing | Completion)[] } => {\n const overlappingHoles = holes.filter((hole: HoleSize) => overlaps(start, end, hole.start, hole.end));\n\n const overlappingOuterStrings = otherStrings.filter((casing: Casing | Completion) => overlaps(start, end, casing.start, casing.end));\n\n return {\n overlappingHoles,\n overlappingOuterStrings,\n };\n};\n\nexport const getUniqueDiameterChangeDepths = (\n [intervalStart, intervalEnd]: [number, number],\n diameterIntervals: { start: number; end: number }[],\n): number[] => {\n const epsilon = 0.0001;\n const diameterChangeDepths = diameterIntervals.flatMap(\n (\n d, // to find diameter right before/after object\n ) => [d.start - epsilon, d.start, d.end, d.end + epsilon],\n );\n const trimmedChangedDepths = diameterChangeDepths.filter((d) => d >= intervalStart && d <= intervalEnd); // trim\n\n trimmedChangedDepths.push(intervalStart);\n trimmedChangedDepths.push(intervalEnd);\n\n const uniqDepths = uniq(trimmedChangedDepths);\n return uniqDepths.sort((a: number, b: number) => a - b);\n};\n\nconst getInnerStringDiameter = (stringType: Casing | Completion): number =>\n stringType.kind === 'casing' ? stringType.innerDiameter : stringType.diameter;\n\nexport const findCementOuterDiameterAtDepth = (\n attachedStrings: (Casing | Completion)[],\n nonAttachedStrings: (Casing | Completion)[],\n holes: HoleSize[],\n depth: number,\n): number => {\n const defaultCementWidth = 100; // Default to flow cement outside to show error in data\n\n const attachedStringAtDepth = attachedStrings.find(\n (casingOrCompletion: Casing | Completion) => casingOrCompletion.start <= depth && casingOrCompletion.end >= depth,\n );\n const attachedOuterDiameter = attachedStringAtDepth ? attachedStringAtDepth.diameter : 0;\n\n const outerCasingAtDepth = nonAttachedStrings\n .filter((casingOrCompletion: Casing | Completion) => getInnerStringDiameter(casingOrCompletion) > attachedOuterDiameter)\n .sort((a: Casing | Completion, b: Casing | Completion) => getInnerStringDiameter(a) - getInnerStringDiameter(b)) // ascending\n .find((casing) => casing.start <= depth && casing.end >= depth);\n\n const holeAtDepth = holes.find((hole: HoleSize) => hole.start <= depth && hole.end >= depth && hole.diameter > attachedOuterDiameter);\n\n if (outerCasingAtDepth) {\n return getInnerStringDiameter(outerCasingAtDepth);\n }\n\n if (holeAtDepth) {\n return holeAtDepth.diameter;\n }\n\n return defaultCementWidth;\n};\n\nexport const findPerforationOuterDiameterAtDepth = (\n nonAttachedStrings: (Casing | Completion)[],\n holes: HoleSize[],\n depth: number,\n perforationSubKind: PerforationSubKind,\n): number => {\n const defaultPerforationWidth = 100; // Default to flow perforation outside to show error in data\n\n const outerCasingAtDepth = nonAttachedStrings\n .sort((a: Casing | Completion, b: Casing | Completion) => b.diameter - a.diameter) // descending\n .find((casing) => casing.start <= depth && casing.end >= depth);\n\n const holeAtDepth = holes.find((hole: HoleSize) => hole.start <= depth && hole.end >= depth);\n\n if (outerCasingAtDepth && perforationSubKind !== 'Open hole frac pack' && perforationSubKind !== 'Open hole gravel pack') {\n return getInnerStringDiameter(outerCasingAtDepth);\n }\n\n if (holeAtDepth) {\n return holeAtDepth.diameter;\n }\n\n return defaultPerforationWidth;\n};\n\nexport const findCementPlugInnerDiameterAtDepth = (\n attachedStrings: (Casing | Completion)[],\n nonAttachedStrings: (Casing | Completion)[],\n holes: HoleSize[],\n depth: number,\n): number => {\n // Default to flow cement outside to show error in data\n const defaultCementWidth = 100;\n const attachedStringAtDepth = attachedStrings\n .sort((a: Casing | Completion, b: Casing | Completion) => getInnerStringDiameter(a) - getInnerStringDiameter(b)) // ascending\n .find((casingOrCompletion) => casingOrCompletion.start <= depth && casingOrCompletion.end >= depth);\n\n if (attachedStringAtDepth) {\n return getInnerStringDiameter(attachedStringAtDepth);\n }\n\n // Start from an attached diameter\n const minimumDiameter = attachedStrings.length ? Math.min(...attachedStrings.map((c) => getInnerStringDiameter(c))) : 0;\n const nonAttachedStringAtDepth = nonAttachedStrings\n .sort((a: Casing | Completion, b: Casing | Completion) => getInnerStringDiameter(a) - getInnerStringDiameter(b)) // ascending\n .find(\n (casingOrCompletion: Casing | Completion) =>\n casingOrCompletion.start <= depth && casingOrCompletion.end >= depth && minimumDiameter <= getInnerStringDiameter(casingOrCompletion),\n );\n\n if (nonAttachedStringAtDepth) {\n return getInnerStringDiameter(nonAttachedStringAtDepth);\n }\n\n const holeAtDepth = holes.find((hole) => hole.start <= depth && hole.end >= depth && hole.diameter);\n\n if (holeAtDepth) {\n return holeAtDepth.diameter;\n }\n\n return defaultCementWidth;\n};\n\nexport const createComplexRopeSegmentsForCement = (\n cement: Cement,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { attachedStrings, nonAttachedStrings } = splitByReferencedStrings(cement.referenceIds, casings, completion);\n\n if (attachedStrings.length === 0) {\n throw new Error(`Invalid cement data, can't find referenced casing/completion string for cement with id '${cement.id}'`);\n }\n\n attachedStrings.sort((a, b) => a.end - b.end); // ascending\n const bottomOfCement = attachedStrings[attachedStrings.length - 1]!.end;\n\n const { overlappingOuterStrings, overlappingHoles } = findIntersectingItems(cement.toc, bottomOfCement, nonAttachedStrings, holes);\n\n const outerDiameterIntervals = [...overlappingOuterStrings, ...overlappingHoles].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([cement.toc, bottomOfCement], outerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth: number, index: number, list: number[]) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n const diameterAtChangeDepth = findCementOuterDiameterAtDepth(attachedStrings, overlappingOuterStrings, overlappingHoles, depth);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtChangeDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => ({\n diameter: interval.diameter,\n points: getPoints(interval.top, interval.bottom),\n }));\n\n return ropeSegments;\n};\n\nconst splitByReferencedStrings = (\n referenceIds: string[],\n casings: Casing[],\n completion: Completion[],\n): { attachedStrings: (Casing | Completion)[]; nonAttachedStrings: (Casing | Completion)[] } =>\n [...casings, ...completion].reduce(\n (acc, current) => {\n if (referenceIds.includes(current.id)) {\n return { ...acc, attachedStrings: [...acc.attachedStrings, current] };\n }\n return { ...acc, nonAttachedStrings: [...acc.nonAttachedStrings, current] };\n },\n { attachedStrings: [] as (Casing | Completion)[], nonAttachedStrings: [] as (Casing | Completion)[] },\n );\n\nexport const createComplexRopeSegmentsForCementSqueeze = (\n squeeze: CementSqueeze,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { attachedStrings, nonAttachedStrings } = splitByReferencedStrings(squeeze.referenceIds, casings, completion);\n\n if (attachedStrings.length === 0) {\n throw new Error(`Invalid cement squeeze data, can't find referenced casing/completion for squeeze with id '${squeeze.id}'`);\n }\n\n const { overlappingOuterStrings, overlappingHoles } = findIntersectingItems(squeeze.start, squeeze.end, nonAttachedStrings, holes);\n\n const outerDiameterIntervals = [...overlappingOuterStrings, ...overlappingHoles].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([squeeze.start, squeeze.end], outerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth, index, list) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n\n const diameterAtDepth = findCementOuterDiameterAtDepth(attachedStrings, overlappingOuterStrings, overlappingHoles, depth);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => ({\n diameter: interval.diameter,\n points: getPoints(interval.top, interval.bottom),\n }));\n\n return ropeSegments;\n};\n\nexport const createComplexRopeSegmentsForCementPlug = (\n plug: CementPlug,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { attachedStrings, nonAttachedStrings } = splitByReferencedStrings(plug.referenceIds, casings, completion);\n\n const { overlappingHoles, overlappingOuterStrings } = findIntersectingItems(plug.start, plug.end, nonAttachedStrings, holes);\n const innerDiameterIntervals = [...attachedStrings, ...overlappingHoles, ...overlappingOuterStrings].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([plug.start, plug.end], innerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth, index, list) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n const diameterAtDepth = findCementPlugInnerDiameterAtDepth(attachedStrings, overlappingOuterStrings, overlappingHoles, depth);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => ({\n diameter: interval.diameter,\n points: getPoints(interval.top, interval.bottom),\n }));\n\n return ropeSegments;\n};\n\nconst createGradientFill = (\n canvas: HTMLCanvasElement,\n canvasCtx: CanvasRenderingContext2D,\n firstColor: string,\n secondColor: string,\n startPctOffset: number,\n): CanvasGradient => {\n const halfWayPct = 0.5;\n const gradient = canvasCtx.createLinearGradient(0, 0, 0, canvas.height);\n gradient.addColorStop(0, firstColor);\n gradient.addColorStop(halfWayPct - startPctOffset, secondColor);\n gradient.addColorStop(halfWayPct + startPctOffset, secondColor);\n gradient.addColorStop(1, firstColor);\n\n return gradient;\n};\n\nexport const createHoleBaseTexture = ({ firstColor, secondColor }: HoleOptions, width: number, height: number): Texture => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = createGradientFill(canvas, canvasCtx, firstColor, secondColor, 0);\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n\n return Texture.from(canvas);\n};\n\nexport const createScreenTexture = ({ scalingFactor }: ScreenOptions): Texture => {\n const canvas = document.createElement('canvas');\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = 'white';\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n\n const baseLineWidth = size / 10;\n canvasCtx.strokeStyle = '#AAAAAA';\n canvasCtx.lineWidth = baseLineWidth;\n canvasCtx.beginPath();\n\n const distanceBetweenLines = size / 3;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height * 2);\n }\n canvasCtx.stroke();\n return Texture.from(canvas);\n};\n\nexport const createTubingTexture = ({ innerColor, outerColor, scalingFactor }: TubingOptions): Texture => {\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n const gradient = canvasCtx.createLinearGradient(0, 0, 0, size);\n\n const innerColorStart = 0.3;\n const innerColorEnd = 0.7;\n gradient.addColorStop(0, outerColor);\n gradient.addColorStop(innerColorStart, innerColor);\n gradient.addColorStop(innerColorEnd, innerColor);\n gradient.addColorStop(1, outerColor);\n\n canvasCtx.fillStyle = gradient;\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n\n return Texture.from(canvas);\n};\n\nexport const createCementTexture = ({ firstColor, secondColor, scalingFactor }: CementOptions): Texture => {\n const canvas = document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n const lineWidth = scalingFactor;\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = firstColor;\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n canvasCtx.lineWidth = lineWidth;\n canvasCtx.fillStyle = secondColor;\n canvasCtx.beginPath();\n\n const distanceBetweenLines = size / 12;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height);\n }\n canvasCtx.stroke();\n\n return Texture.from(canvas);\n};\n\nexport const createCementPlugTexture = ({ firstColor, secondColor, scalingFactor }: CementPlugOptions): Texture => {\n const canvas = document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = firstColor;\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n canvasCtx.lineWidth = scalingFactor;\n canvasCtx.strokeStyle = secondColor;\n canvasCtx.beginPath();\n\n canvasCtx.setLineDash([20, 10]);\n const distanceBetweenLines = size / 12;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height * 2);\n }\n canvasCtx.stroke();\n\n return Texture.from(canvas);\n};\n\nexport const createCementSqueezeTexture = ({ firstColor, secondColor, scalingFactor }: CementSqueezeOptions): Texture => {\n const canvas = document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n const lineWidth = scalingFactor;\n canvas.width = size;\n canvas.height = size;\n\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.lineWidth = lineWidth;\n canvasCtx.fillStyle = firstColor;\n canvasCtx.strokeStyle = secondColor;\n\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n canvasCtx.beginPath();\n\n canvasCtx.setLineDash([20, 10]);\n const distanceBetweenLines = size / 12;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height * 2);\n }\n canvasCtx.stroke();\n\n return Texture.from(canvas);\n};\n\nexport const createTubularRenderingObject = (radius: number, pathPoints: IPoint[]): TubularRenderingObject => {\n const normals = createNormals(pathPoints);\n const rightPath = offsetPoints(pathPoints, normals, radius);\n const leftPath = offsetPoints(pathPoints, normals, -radius);\n\n return { leftPath, rightPath };\n};\n\nexport type CasingInterval = {\n kind: 'casing' | 'casing-window';\n start: number;\n end: number;\n};\n\nconst createCasingInterval = (start: number, end: number): CasingInterval => ({ kind: 'casing', start, end });\nconst createCasingWindowInterval = (start: number, end: number): CasingInterval => ({ kind: 'casing-window', start, end });\n\nexport const getCasingIntervalsWithWindows = (casing: Casing): CasingInterval[] => {\n const result = (casing.windows || [])\n .filter((cw: CasingWindow) => strictlyOverlaps(casing.start, casing.end, cw.start, cw.end))\n .reduce<{ intervals: CasingInterval[]; lastBottom: number }>(\n ({ intervals, lastBottom }, currentWindow: CasingWindow, index: number, list: CasingWindow[]) => {\n const startCasingInterval: CasingInterval | null =\n // last bottom before current start?\n lastBottom < currentWindow.start ? createCasingInterval(lastBottom, currentWindow.start) : null;\n\n const updatedLastBottom = startCasingInterval ? startCasingInterval.end : lastBottom;\n\n const windowStart = Math.max(updatedLastBottom, currentWindow.start);\n const windowEnd = Math.min(casing.end, currentWindow.end);\n const windowInterval: CasingInterval = createCasingWindowInterval(windowStart, windowEnd);\n\n const nextLastBottom = windowEnd;\n\n const isLastWindow = index === list.length - 1;\n const endCasingInterval: CasingInterval | null =\n isLastWindow &&\n // still room for a casing interval?\n nextLastBottom < casing.end\n ? createCasingInterval(nextLastBottom, casing.end)\n : null;\n\n const newIntervals: CasingInterval[] = [startCasingInterval, windowInterval, endCasingInterval].filter((i): i is CasingInterval => i != null);\n\n return { intervals: [...intervals, ...newIntervals], lastBottom: nextLastBottom };\n },\n { intervals: [], lastBottom: casing.start },\n );\n\n if (!result.intervals.length) {\n return [createCasingInterval(casing.start, casing.end)];\n }\n\n return result.intervals;\n};\n\nexport const prepareCasingRenderObject = (\n exaggerationFactor: number,\n casing: Casing,\n getPathPoints: (start: number, end: number) => Point[],\n): CasingRenderObject => {\n const exaggeratedDiameter = casing.diameter * exaggerationFactor;\n const exaggeratedRadius = exaggeratedDiameter / 2;\n const exaggeratedInnerDiameter = casing.innerDiameter * exaggerationFactor;\n const exaggeratedInnerRadius = exaggeratedInnerDiameter / 2;\n const casingWallWidth = exaggeratedRadius - exaggeratedInnerRadius;\n\n const sections = getCasingIntervalsWithWindows(casing).map((casingInterval: CasingInterval) => {\n const pathPoints = getPathPoints(casingInterval.start, casingInterval.end);\n const { leftPath, rightPath } = createTubularRenderingObject(exaggeratedRadius, pathPoints);\n return { kind: casingInterval.kind, leftPath, rightPath, pathPoints };\n });\n\n return {\n kind: 'casing',\n id: casing.id,\n referenceDiameter: exaggeratedDiameter,\n referenceRadius: exaggeratedRadius,\n sections,\n casingWallWidth,\n hasShoe: casing.hasShoe,\n bottom: casing.end,\n };\n};\n\nexport const createComplexRopeSegmentsForPerforation = (\n perforation: Perforation,\n casings: Casing[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { overlappingOuterStrings, overlappingHoles } = findIntersectingItems(perforation.start, perforation.end, casings, holes);\n\n const outerDiameterIntervals = [...overlappingOuterStrings, ...overlappingHoles].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([perforation.start, perforation.end], outerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth, index, list) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n\n const diameterAtDepth = findPerforationOuterDiameterAtDepth(overlappingOuterStrings, overlappingHoles, depth, perforation.subKind);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => {\n const points = getPoints(interval.top, interval.bottom);\n\n const diameter = interval.diameter;\n\n return {\n diameter,\n points,\n };\n });\n\n return ropeSegments;\n};\n\nconst drawPacking = (canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, perforationOptions: PerforationOptions) => {\n const { packingOpacity, yellow } = perforationOptions;\n\n ctx.fillStyle = yellow;\n ctx.strokeStyle = yellow;\n\n const xy: [number, number] = [0, 0];\n const wh: [number, number] = [canvas.width, canvas.height];\n ctx.save();\n ctx.globalAlpha = packingOpacity;\n ctx.fillRect(...xy, ...wh);\n ctx.restore();\n};\n\nconst drawFracLines = (\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n extendedPerfShapeDiameter: number,\n perforationOptions: PerforationOptions,\n startAt: 'diameter' | 'spike',\n) => {\n const { fracLineCurve } = perforationOptions;\n\n const amountOfSpikes = 10;\n const spikeWidth = canvas.width / amountOfSpikes;\n\n const diameter = (extendedPerfShapeDiameter / 3) * perforationOptions.scalingFactor;\n\n const fracLineLength = diameter / 4;\n const spikeLength = diameter / 2;\n const offsetX = 0;\n const offsetY = startAt === 'diameter' ? 0 : spikeLength;\n\n ctx.globalAlpha = perforationOptions.packingOpacity;\n\n const fracLines = () => {\n for (let i = -1; i < amountOfSpikes; i++) {\n const bottom: [number, number] = [i * spikeWidth + offsetX + spikeWidth / 2, canvas.height / 2 - fracLineLength - offsetY - fracLineLength];\n\n ctx.beginPath();\n\n const start: [number, number] = [...bottom];\n const controlPoint1: [number, number] = [bottom[0] - fracLineCurve * 2, bottom[1] - fracLineLength / 4];\n const middle: [number, number] = [bottom[0], bottom[1] - fracLineLength / 2];\n\n const controlPoint2: [number, number] = [bottom[0] + fracLineCurve * 2, bottom[1] - fracLineLength / 2 - fracLineLength / 4];\n const end: [number, number] = [bottom[0], bottom[1] - fracLineLength];\n\n ctx.bezierCurveTo(...start, ...controlPoint1, ...middle);\n ctx.bezierCurveTo(...middle, ...controlPoint2, ...end);\n\n ctx.stroke();\n }\n\n for (let i = -1; i < amountOfSpikes; i++) {\n const bottom: [number, number] = [i * spikeWidth + spikeWidth + offsetX + spikeWidth / 2, canvas.height / 2 + diameter / 2 + offsetY];\n\n ctx.beginPath();\n\n const start: [number, number] = [...bottom];\n const controlPoint1: [number, number] = [bottom[0] - fracLineCurve * 2, bottom[1] + fracLineLength / 4];\n const middle: [number, number] = [bottom[0], bottom[1] + fracLineLength / 2];\n\n const controlPoint2: [number, number] = [bottom[0] + fracLineCurve * 2, bottom[1] + fracLineLength / 2 + fracLineLength / 4];\n const end: [number, number] = [bottom[0], bottom[1] + fracLineLength];\n\n ctx.bezierCurveTo(...start, ...controlPoint1, ...middle);\n ctx.bezierCurveTo(...middle, ...controlPoint2, ...end);\n\n ctx.stroke();\n }\n };\n\n ctx.strokeStyle = perforationOptions.yellow;\n ctx.lineWidth = 6;\n ctx.save();\n fracLines();\n ctx.restore();\n ctx.lineWidth = 1;\n ctx.strokeStyle = perforationOptions.outline;\n fracLines();\n\n ctx.closePath();\n};\n\nconst drawSpikes = (\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n extendedPerfShapeDiameter: number,\n perforationOptions: PerforationOptions,\n) => {\n const amountOfSpikes = 4;\n const spikeWidth = canvas.width / amountOfSpikes;\n ctx.strokeStyle = perforationOptions.outline;\n\n const diameter = (extendedPerfShapeDiameter / 3) * perforationOptions.scalingFactor;\n\n ctx.lineWidth = 1;\n const spikeLength = diameter / 2;\n\n // left spikes\n for (let i = 0; i <= amountOfSpikes; i++) {\n const left: [number, number] = [i * spikeWidth, canvas.height / 2 - diameter / 2];\n const bottom: [number, number] = [left[0] - spikeWidth / 2, left[1] - spikeLength];\n const right: [number, number] = [left[0] - spikeWidth, left[1]];\n\n ctx.beginPath();\n ctx.moveTo(...left);\n ctx.lineTo(...bottom);\n ctx.lineTo(...right);\n ctx.fill();\n\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n\n // right spikes\n for (let i = 0; i <= amountOfSpikes; i++) {\n const left: [number, number] = [i * spikeWidth, canvas.height / 2 + diameter / 2];\n const bottom: [number, number] = [left[0] - spikeWidth / 2, left[1] + spikeLength];\n const right: [number, number] = [left[0] - spikeWidth, left[1]];\n\n ctx.beginPath();\n ctx.moveTo(...left);\n ctx.lineTo(...bottom);\n ctx.lineTo(...right);\n ctx.fill();\n\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n\n ctx.closePath();\n};\n\n// for visual debugging\n// if this shoes up, something is wrong\nconst errorTexture = (errorMessage = 'Error!', existingContext?: { canvas: HTMLCanvasElement; canvasCtx: CanvasRenderingContext2D }) => {\n console.error(`${errorMessage}`);\n const canvas = existingContext?.canvas || document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE;\n canvas.width = size / 2;\n canvas.height = size;\n const canvasCtx = existingContext?.canvasCtx || canvas.getContext('2d');\n\n const xy: [number, number] = [0, 0];\n const wh: [number, number] = [canvas.width, canvas.height];\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n canvasCtx.fillStyle = '#ff00ff';\n canvasCtx.fillRect(...xy, ...wh);\n\n const texture = new Texture(\n Texture.from(canvas, { wrapMode: WRAP_MODES.CLAMP }).baseTexture,\n undefined,\n new Rectangle(0, 0, canvas.width, canvas.height),\n undefined,\n groupD8.MIRROR_HORIZONTAL,\n );\n return texture;\n};\n\nconst createPerforationCanvas = (\n perfShape: ComplexRopeSegment,\n options: PerforationOptions,\n): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } => {\n const canvas = document.createElement('canvas');\n const perfShapeDiameter = perfShape.diameter;\n const size = perfShapeDiameter * options.scalingFactor;\n canvas.width = size / 2;\n canvas.height = size;\n const ctx = canvas.getContext('2d');\n\n if (ctx == null) {\n throw Error('Could not get canvas context!');\n }\n\n return { canvas, ctx };\n};\n\nconst createPerforationTexture = (canvas: HTMLCanvasElement) => {\n const texture = new Texture(\n Texture.from(canvas, { wrapMode: WRAP_MODES.CLAMP }).baseTexture,\n undefined,\n new Rectangle(0, 0, canvas.width, canvas.height),\n undefined,\n groupD8.MIRROR_HORIZONTAL,\n );\n return texture;\n};\n\nconst compareIntersectingPerforationsBy =\n (targetPerf: Perforation, comparedPerforations: Perforation[]) => (compareFunc: (comparedPerf: Perforation) => boolean) =>\n comparedPerforations.some((perf) => compareFunc(perf) && intersect(targetPerf, perf));\n\n/**\n * @Perforation\n * If a perforation does not overlap with another perforations of type with gravel,\n * the perforation spikes are either red when open or grey when closed.\n * Open and closed refers to two fields on a perforation item referencing runs.\n *\n * If a perforation overlaps with another perforation of type with gravel and the perforation is open,\n * the perforation spikes should be yellow. If closed the perforation remains grey.\n *\n * Cased Hole Frac Pack:\n * Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n * If a perforation of type \"perforation\" is overlapping, the fracturation lines extends from the tip of the perforation spikes into formation.\n *\n * Cased Hole Gravel Pack:\n * Yellow gravel. Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n *\n * Cased Hole Fracturation:\n * Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n */\nconst createSubkindPerforationTexture = {\n packing: () => errorTexture(),\n fracLines: () => errorTexture(),\n spikes: (\n perforation: Perforation,\n perfShape: ComplexRopeSegment,\n otherPerforations: Perforation[],\n perforationOptions: PerforationOptions,\n ): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n\n const compareBy = compareIntersectingPerforationsBy(perforation, otherPerforations);\n\n const intersectionsWithCasedHoleGravel: boolean = compareBy(isSubkindCasedHoleGravelPack);\n\n const intersectsWithCasedHoleFracturation: boolean = compareBy(isSubKindCasedHoleFracturation);\n\n const intersectionsWithCasedHoleFracPack: boolean = compareBy(isSubKindCasedHoleFracPack);\n\n const intersectsWithPerforation = intersectionsWithCasedHoleGravel || intersectsWithCasedHoleFracturation || intersectionsWithCasedHoleFracPack;\n\n const openPerforationSpikeColor = intersectsWithPerforation ? perforationOptions.yellow : perforationOptions.red;\n\n ctx.globalAlpha = perforationOptions.packingOpacity;\n if (perforation.isOpen) {\n ctx.fillStyle = openPerforationSpikeColor;\n ctx.strokeStyle = openPerforationSpikeColor;\n } else {\n ctx.fillStyle = perforationOptions.grey;\n ctx.strokeStyle = perforationOptions.grey;\n }\n\n drawSpikes(canvas, ctx, perfShape.diameter, perforationOptions);\n\n if (intersectionsWithCasedHoleFracPack) {\n drawFracLines(canvas, ctx, perfShape.diameter, perforationOptions, 'spike');\n }\n\n return createPerforationTexture(canvas);\n },\n};\n\n/**\n * @Cased_hole_fracturation\n * Yellow fracturation lines from casing OD into formation\n */\nconst createSubkindCasedHoleFracturationTexture = {\n packing: () => errorTexture(),\n fracLines: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawFracLines(canvas, ctx, perfShape.diameter, perforationOptions, 'diameter');\n return createPerforationTexture(canvas);\n },\n spikes: () => errorTexture(),\n};\n\n/**\n * @Cased_hole_frac_pack\n * Yellow gravel and fracturation lines.\n * Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n * If no perforation of type \"perforation\" are overlapping, there are no fracturation lines and no spikes.\n * If a perforation of type \"perforation\" is overlapping, the fracturation lines extends from the tip of the perforation spikes into formation.\n */\nconst createSubkindCasedHoleFracPackTexture = {\n packing: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions) => {\n const { canvas } = createPerforationCanvas(perfShape, perforationOptions);\n return createPerforationTexture(canvas);\n },\n spikes: () => errorTexture(),\n};\n\n/**\n * @Cased_hole_gravel_pack\n * Yellow gravel. Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n */\nconst createSubkindCasedHoleGravelPackTexture = {\n packing: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: () => errorTexture(),\n spikes: () => errorTexture(),\n};\n\n/**\n * @Open_hole_gravel_pack\n * Yellow gravel\n */\nconst createSubkindOpenHoleGravelPackTexture = {\n packing: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions) => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: () => errorTexture(),\n spikes: () => errorTexture(),\n};\n\n/**\n * @Open_hole_frac_pack\n * Yellow gravel. Yellow frac lines from hole OD into formation\n */\nconst createSubkindOpenHoleFracPackTexture = {\n packing: (_perforation: Perforation, perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions) => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawFracLines(canvas, ctx, perfShape.diameter, perforationOptions, 'diameter');\n return createPerforationTexture(canvas);\n },\n spikes: () => errorTexture(),\n};\n\nexport const createPerforationPackingTexture = (\n perforation: Perforation,\n perfShape: ComplexRopeSegment,\n perforationOptions: PerforationOptions,\n): Texture => {\n return foldPerforationSubKind(\n {\n Perforation: () => createSubkindPerforationTexture.packing(),\n CasedHoleFracturation: () => createSubkindCasedHoleFracPackTexture.packing(perfShape, perforationOptions),\n CasedHoleFracPack: () => createSubkindCasedHoleFracPackTexture.packing(perfShape, perforationOptions),\n OpenHoleGravelPack: () => createSubkindOpenHoleGravelPackTexture.packing(perfShape, perforationOptions),\n OpenHoleFracPack: () => createSubkindOpenHoleFracPackTexture.packing(perforation, perfShape, perforationOptions),\n CasedHoleGravelPack: () => createSubkindCasedHoleGravelPackTexture.packing(perfShape, perforationOptions),\n },\n perforation.subKind,\n );\n};\n\nexport const createPerforationFracLineTexture = (\n perforation: Perforation,\n perfShape: ComplexRopeSegment,\n perforationOptions: PerforationOptions,\n): Texture => {\n return foldPerforationSubKind(\n {\n Perforation: () => createSubkindPerforationTexture.fracLines(),\n OpenHoleGravelPack: () => createSubkindOpenHoleGravelPackTexture.fracLines(),\n OpenHoleFracPack: () => createSubkindOpenHoleFracPackTexture.fracLines(perfShape, perforationOptions),\n CasedHoleFracturation: () => createSubkindCasedHoleFracturationTexture.fracLines(perfShape, perforationOptions),\n CasedHoleGravelPack: () => createSubkindCasedHoleGravelPackTexture.fracLines(),\n CasedHoleFracPack: () => createSubkindCasedHoleFracPackTexture.fracLines(perfShape, perforationOptions),\n },\n perforation.subKind,\n );\n};\n\nexport const createPerforationSpikeTexture = (\n perforation: Perforation,\n otherPerforations: Perforation[],\n perfShape: ComplexRopeSegment,\n perforationOptions: PerforationOptions,\n): Texture => {\n return foldPerforationSubKind(\n {\n Perforation: () => createSubkindPerforationTexture.spikes(perforation, perfShape, otherPerforations, perforationOptions),\n OpenHoleGravelPack: () => createSubkindOpenHoleGravelPackTexture.spikes(),\n OpenHoleFracPack: () => createSubkindOpenHoleFracPackTexture.spikes(),\n CasedHoleFracturation: () => createSubkindCasedHoleFracturationTexture.spikes(),\n CasedHoleGravelPack: () => createSubkindCasedHoleGravelPackTexture.spikes(),\n CasedHoleFracPack: () => createSubkindCasedHoleFracPackTexture.spikes(),\n },\n perforation.subKind,\n );\n};\n","import { MeshGeometry } from 'pixi.js';\nimport { sum, max } from 'd3-array';\nimport { ComplexRopeSegment } from './ComplexRope';\n\n/**\n * RopeGeometry allows you to draw a geometry across several several segments of points and then manipulate these points.\n */\nexport class ComplexRopeGeometry extends MeshGeometry {\n /** An array of segments with points and diameter that determine the rope. */\n private segments: ComplexRopeSegment[];\n\n /**\n * @param segments - An array of segments with points and diameter to construct this rope.\n */\n constructor(segments: ComplexRopeSegment[]) {\n const pointCount = sum(segments, (segment) => segment.points.length);\n\n // @ts-expect-error Temporary fix until pixi.js is updated\n super(new Float32Array(pointCount * 4), new Float32Array(pointCount * 4), new Uint16Array((pointCount - 1) * 6));\n\n this.segments = segments;\n\n this.build();\n }\n\n /**\n * The max width (i.e., thickness) of the rope.\n * @readonly\n */\n get width(): number {\n return max(this.segments, (segment) => segment.diameter)!;\n }\n\n /** Refreshes Rope indices and uvs */\n private build(): void {\n const segments = this.segments;\n\n if (!segments) {\n return;\n }\n\n const vertexBuffer = this.getBuffer('aVertexPosition');\n const uvBuffer = this.getBuffer('aTextureCoord');\n const indexBuffer = this.getIndex();\n\n const pointCount = sum(segments, (segment) => segment.points.length);\n\n // if too few points, or texture hasn't got UVs set yet just move on.\n if (pointCount < 1) {\n return;\n }\n\n // if the number of points has changed we will need to recreate the arraybuffers\n if (vertexBuffer.data.length / 4 !== pointCount) {\n // @ts-expect-error Temporary fix until pixi.js is updated\n vertexBuffer.data = new Float32Array(pointCount * 4);\n // @ts-expect-error Temporary fix until pixi.js is updated\n uvBuffer.data = new Float32Array(pointCount * 4);\n // @ts-expect-error Temporary fix until pixi.js is updated\n indexBuffer.data = new Uint16Array((pointCount - 1) * 6);\n }\n\n const uvs = uvBuffer.data;\n const indices = indexBuffer.data;\n\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n\n const segmentCount = segments.length;\n const maxDiameter = max(segments, (segment) => segment.diameter)!;\n\n let amount = 0;\n let uvIndex = 0;\n let indicesIndex = 0;\n let indexCount = 0;\n\n for (let i = 0; i < segmentCount; i++) {\n let prev = segments[i]?.points[0]!;\n const textureWidth = maxDiameter;\n const radius = segments[i]?.diameter! / maxDiameter / 2;\n\n const total = segments[i]?.points.length!; // - 1;\n\n for (let j = 0; j < total; j++) {\n // time to do some smart drawing!\n\n // calculate pixel distance from previous point\n const dx = prev.x - segments[i]?.points[j]?.x!;\n const dy = prev.y - segments[i]?.points[j]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n prev = segments[i]?.points[j]!;\n amount += distance / textureWidth;\n\n uvs[uvIndex] = amount;\n uvs[uvIndex + 1] = 0.5 - radius;\n\n uvs[uvIndex + 2] = amount;\n uvs[uvIndex + 3] = 0.5 + radius;\n uvIndex += 4;\n }\n\n for (let j = 0; j < total - 1; j++) {\n indices[indexCount++] = indicesIndex;\n indices[indexCount++] = indicesIndex + 1;\n indices[indexCount++] = indicesIndex + 2;\n\n indices[indexCount++] = indicesIndex + 2;\n indices[indexCount++] = indicesIndex + 1;\n indices[indexCount++] = indicesIndex + 3;\n indicesIndex += 2;\n }\n indicesIndex += 2;\n }\n\n // ensure that the changes are uploaded\n uvBuffer.update();\n indexBuffer.update();\n\n this.updateVertices();\n }\n\n /** refreshes vertices of Rope mesh */\n public updateVertices(): void {\n const segments = this.segments;\n const pointCount = sum(segments, (segment) => segment.points.length);\n\n if (pointCount < 1) {\n return;\n }\n\n const segmentCount = segments.length;\n let lastIndex = 0;\n for (let i = 0; i < segmentCount; i++) {\n let lastPoint = segments[i]?.points[0]!;\n let nextPoint;\n let perpX = 0;\n let perpY = 0;\n\n const vertices = this.buffers[0]?.data;\n const total = segments[i]?.points.length!;\n let index = 0;\n for (let j = 0; j < total; j++) {\n const point = segments[i]?.points[j]!;\n index = lastIndex + j * 4;\n\n if (j < segments[i]?.points.length! - 1) {\n nextPoint = segments[i]?.points[j + 1]!;\n } else {\n nextPoint = point;\n }\n\n perpY = -(nextPoint.x - lastPoint.x);\n perpX = nextPoint.y - lastPoint.y;\n\n const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);\n const num = segments[i]?.diameter! / 2;\n\n perpX /= perpLength;\n perpY /= perpLength;\n\n perpX *= num;\n perpY *= num;\n\n if (vertices != null) {\n vertices[index] = point.x + perpX;\n vertices[index + 1] = point.y + perpY;\n vertices[index + 2] = point.x - perpX;\n vertices[index + 3] = point.y - perpY;\n }\n\n lastPoint = point;\n }\n lastIndex = index + 4;\n }\n\n this.buffers[0]?.update();\n }\n\n public update(): void {\n // TODO: Possible optimiztion to be had here\n // Figure out if/when it is enough to only update verticies with this.updateVertices()\n // See PIXI.SimpleRope.update() for ideas\n\n // build() sets indicies and uvs and then calls this.updateVertices()\n this.build();\n }\n}\n","import { Mesh, MeshMaterial, IPoint, Renderer, Texture, WRAP_MODES } from 'pixi.js';\nimport { ComplexRopeGeometry } from './ComplexRopeGeometry';\n\nexport type ComplexRopeSegment = {\n points: IPoint[];\n diameter: number;\n};\n\n/**\n * The ComplexRope allows you to draw a texture across several segments of points and then manipulate these points\n */\nexport class ComplexRope extends Mesh {\n /**\n * re-calculate vertices by rope segment-points each frame\n * @member {boolean}\n */\n public autoUpdate: boolean;\n\n /**\n * @param texture - The texture to use on the rope.\n * @param segments - An array of segments with points and diaeter to construct this rope.\n */\n constructor(texture: Texture, segments: ComplexRopeSegment[]) {\n const ropeGeometry = new ComplexRopeGeometry(segments);\n const meshMaterial = new MeshMaterial(texture);\n\n // attempt to set UV wrapping, will fail on non-power of two textures\n texture.baseTexture.wrapMode = WRAP_MODES.REPEAT;\n\n super(ropeGeometry, meshMaterial);\n\n this.autoUpdate = true;\n }\n\n override _render(renderer: Renderer): void {\n const geometry: ComplexRopeGeometry = this.geometry as ComplexRopeGeometry;\n\n if (this.autoUpdate) {\n geometry.update();\n }\n\n super._render(renderer);\n }\n}\n","import { IPoint, MeshGeometry } from 'pixi.js';\n\nexport class FixedWidthSimpleRopeGeometry extends MeshGeometry {\n public points: IPoint[];\n _width: number;\n /**\n * @param {number} [width=200] - The width (i.e., thickness) of the rope.\n * @param {PIXI.Point[]} [points] - An array of PIXI.Point objects to construct this rope.\n */\n constructor(points: IPoint[], width = 200) {\n // @ts-expect-error Temporary fix until pixi.js is updated\n super(new Float32Array(points.length * 4), new Float32Array(points.length * 4), new Uint16Array((points.length - 1) * 6));\n /**\n * An array of points that determine the rope\n * @member {PIXI.Point[]}\n */\n this.points = points;\n /**\n * The width (i.e., thickness) of the rope.\n * @member {number}\n * @readOnly\n */\n this._width = width;\n /**\n * Rope texture scale, if zero then the rope texture is stretched.\n * @member {number}\n * @readOnly\n */\n this.build();\n }\n /**\n * The width (i.e., thickness) of the rope.\n * @member {number}\n * @readOnly\n */\n get width(): number {\n return this._width;\n }\n /**\n * Refreshes Rope indices and uvs\n * @private\n */\n private build(): void {\n const points = this.points;\n if (!points) {\n return;\n }\n const vertexBuffer = this.getBuffer('aVertexPosition');\n const uvBuffer = this.getBuffer('aTextureCoord');\n const indexBuffer = this.getIndex();\n // if too little points, or texture hasn't got UVs set yet just move on.\n if (points.length < 1) {\n return;\n }\n // if the number of points has changed we will need to recreate the arraybuffers\n if (vertexBuffer.data.length / 4 !== points.length) {\n // @ts-expect-error Temporary fix until pixi.js is updated\n vertexBuffer.data = new Float32Array(points.length * 4);\n // @ts-expect-error Temporary fix until pixi.js is updated\n uvBuffer.data = new Float32Array(points.length * 4);\n // @ts-expect-error Temporary fix until pixi.js is updated\n indexBuffer.data = new Uint16Array((points.length - 1) * 6);\n }\n const uvs = uvBuffer.data;\n const indices = indexBuffer.data;\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n let amount = 0;\n let prev = points[0]!;\n const total = points.length; // - 1;\n for (let i = 0; i < total; i++) {\n // time to do some smart drawing!\n const index = i * 4;\n\n // calculate pixel distance from previous point\n const dx = prev.x - points[i]?.x!;\n const dy = prev.y - points[i]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n prev = points[i]!;\n amount += distance / this._width;\n\n uvs[index] = amount;\n uvs[index + 1] = 0;\n uvs[index + 2] = amount;\n uvs[index + 3] = 1;\n }\n let indexCount = 0;\n for (let i = 0; i < total - 1; i++) {\n const index = i * 2;\n indices[indexCount++] = index;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 2;\n indices[indexCount++] = index + 2;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 3;\n }\n // ensure that the changes are uploaded\n uvBuffer.update();\n indexBuffer.update();\n this.updateVertices();\n }\n /**\n * refreshes vertices of Rope mesh\n */\n public updateVertices(): void {\n const points = this.points;\n if (points.length < 1) {\n return;\n }\n let lastPoint = points[0]!;\n let nextPoint;\n let perpX = 0;\n let perpY = 0;\n const vertices = this.buffers[0]?.data!;\n const total = points.length;\n for (let i = 0; i < total; i++) {\n const point = points[i]!;\n const index = i * 4;\n if (i < points.length - 1) {\n nextPoint = points[i + 1]!;\n } else {\n nextPoint = point;\n }\n perpY = -(nextPoint.x - lastPoint.x);\n perpX = nextPoint.y - lastPoint.y;\n\n let ratio = (1 - i / (total - 1)) * 10;\n if (ratio > 1) {\n ratio = 1;\n }\n const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);\n const num = this._width / 2;\n perpX /= perpLength;\n perpY /= perpLength;\n perpX *= num;\n perpY *= num;\n vertices[index] = point.x + perpX;\n vertices[index + 1] = point.y + perpY;\n vertices[index + 2] = point.x - perpX;\n vertices[index + 3] = point.y - perpY;\n lastPoint = point;\n }\n this.buffers[0]?.update();\n }\n\n public update(): void {\n this.build();\n }\n}\n","import { IPoint, Mesh, MeshMaterial, Renderer, RopeGeometry, Texture, WRAP_MODES } from 'pixi.js';\nimport { FixedWidthSimpleRopeGeometry } from './FixedWidthSimpleRopeGeometry';\n\n/**\n * The rope allows you to draw a texture across several points and then manipulate these points\n * Width of rope is given in constructor\n */\nexport class FixedWidthSimpleRope extends Mesh {\n /**\n * re-calculate vertices by rope points each frame\n * @member {boolean}\n */\n public autoUpdate: boolean;\n\n /**\n * Note: The wrap mode of the texture is set to REPEAT if `textureScale` is positive.\n * @param texture - The texture to use on the rope. (attempt to set UV wrapping, will fail on non-power of two textures)\n * @param points - An array of {@link PIXI.Point} objects to construct this rope.\n * @param width - Width of rope\n */\n constructor(texture: Texture, points: IPoint[], width: number) {\n const ropeGeometry = new FixedWidthSimpleRopeGeometry(points, width);\n const meshMaterial = new MeshMaterial(texture);\n\n texture.baseTexture.wrapMode = WRAP_MODES.REPEAT;\n\n super(ropeGeometry, meshMaterial);\n\n this.autoUpdate = true;\n }\n\n override _render(renderer: Renderer): void {\n const geometry: RopeGeometry = this.geometry as RopeGeometry;\n\n if (this.autoUpdate) {\n geometry.update();\n }\n\n super._render(renderer);\n }\n}\n","import { MeshGeometry } from 'pixi.js';\nimport type { IPoint } from 'pixi.js';\n\n/**\n * UniformTextureStretchRopeGeometry allows you to draw a geometry across several points and then manipulate these points.\n */\nexport class UniformTextureStretchRopeGeometry extends MeshGeometry {\n /** An array of points that determine the rope. */\n public points: IPoint[];\n\n /**\n * The width (i.e., thickness) of the rope.\n * @readonly\n */\n _width: number;\n\n /**\n * @param width - The width (i.e., thickness) of the rope.\n * @param points - An array of PIXI.Point objects to construct this rope.\n */\n constructor(points: IPoint[], width = 200) {\n // @ts-expect-error Temporary fix until pixi.js is updated\n super(new Float32Array(points.length * 4), new Float32Array(points.length * 4), new Uint16Array((points.length - 1) * 6));\n\n this.points = points;\n this._width = width;\n\n this.build();\n }\n\n /** Refreshes Rope indices and uvs */\n private build(): void {\n const points = this.points;\n\n if (!points) {\n return;\n }\n\n const vertexBuffer = this.getBuffer('aVertexPosition');\n const uvBuffer = this.getBuffer('aTextureCoord');\n const indexBuffer = this.getIndex();\n\n // if too few points, or texture hasn't got UVs set yet just move on.\n if (points.length < 1) {\n return;\n }\n\n // if the number of points has changed we will need to recreate the arraybuffers\n if (vertexBuffer.data.length / 4 !== points.length) {\n // @ts-expect-error Temporary fix until pixi.js is updated\n vertexBuffer.data = new Float32Array(points.length * 4);\n // @ts-expect-error Temporary fix until pixi.js is updated\n uvBuffer.data = new Float32Array(points.length * 4);\n // @ts-expect-error Temporary fix until pixi.js is updated\n indexBuffer.data = new Uint16Array((points.length - 1) * 6);\n }\n\n const total = points.length; // - 1;\n\n let totalLength = 0;\n let prevPoint = points[0]!;\n\n for (let i = 0; i < total; i++) {\n const dx = prevPoint.x - points[i]?.x!;\n const dy = prevPoint.y - points[i]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n prevPoint = points[i]!;\n totalLength += distance;\n }\n\n const uvs = uvBuffer.data;\n const indices = indexBuffer.data;\n\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n\n let amount = 0;\n let prev = points[0]!;\n\n for (let i = 0; i < total; i++) {\n // time to do some smart drawing!\n const index = i * 4;\n\n // calculate pixel distance from previous point\n const dx = prev.x - points[i]?.x!;\n const dy = prev.y - points[i]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n prev = points[i]!;\n\n // strech texture on distance/length instead of point/points.length to get a more correct strech\n amount += distance / totalLength;\n\n uvs[index] = amount;\n uvs[index + 1] = 0;\n\n uvs[index + 2] = amount;\n uvs[index + 3] = 1;\n }\n\n let indexCount = 0;\n\n for (let i = 0; i < total - 1; i++) {\n const index = i * 2;\n\n indices[indexCount++] = index;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 2;\n\n indices[indexCount++] = index + 2;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 3;\n }\n\n // ensure that the changes are uploaded\n uvBuffer.update();\n indexBuffer.update();\n\n this.updateVertices();\n }\n\n /** refreshes vertices of Rope mesh */\n public updateVertices(): void {\n const points = this.points;\n\n if (points.length < 1) {\n return;\n }\n\n let lastPoint = points[0]!;\n let nextPoint;\n let perpX = 0;\n let perpY = 0;\n\n const vertices = this.buffers[0]?.data!;\n const total = points.length;\n\n for (let i = 0; i < total; i++) {\n const point = points[i]!;\n const index = i * 4;\n\n if (i < points.length - 1) {\n nextPoint = points[i + 1]!;\n } else {\n nextPoint = point;\n }\n\n perpY = -(nextPoint.x - lastPoint.x);\n perpX = nextPoint.y - lastPoint.y;\n\n const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);\n const num = this._width / 2;\n\n perpX /= perpLength;\n perpY /= perpLength;\n\n perpX *= num;\n perpY *= num;\n\n vertices[index] = point.x + perpX;\n vertices[index + 1] = point.y + perpY;\n vertices[index + 2] = point.x - perpX;\n vertices[index + 3] = point.y - perpY;\n\n lastPoint = point;\n }\n\n this.buffers[0]?.update();\n }\n\n public update(): void {\n this.updateVertices();\n }\n}\n","import { IPoint, Mesh, MeshMaterial, Renderer, Texture } from 'pixi.js';\nimport { UniformTextureStretchRopeGeometry } from './UniformTextureStretchRopeGeometry';\n\n/**\n * The UniformTextureStretchRope allows you to draw a texture across several points and then manipulate these points\n */\nexport class UniformTextureStretchRope extends Mesh {\n /**\n * re-calculate vertices by rope points each frame\n * @member {boolean}\n */\n public autoUpdate: boolean;\n\n /**\n * @param texture - The texture to use on the rope.\n * @param points - An array of {@link PIXI.Point} objects to construct this rope.\n */\n constructor(texture: Texture, points: IPoint[]) {\n const ropeGeometry = new UniformTextureStretchRopeGeometry(points, texture.height);\n const meshMaterial = new MeshMaterial(texture);\n\n super(ropeGeometry, meshMaterial);\n\n this.autoUpdate = true;\n }\n\n override _render(renderer: Renderer): void {\n const geometry: UniformTextureStretchRopeGeometry = this.geometry as UniformTextureStretchRopeGeometry;\n\n // TODO: Possible optimiztion here\n // Find correct check for when to update geometry\n if (this.autoUpdate || geometry._width !== this.shader.texture.height) {\n geometry._width = this.shader.texture.height;\n geometry.update();\n }\n\n super._render(renderer);\n }\n}\n","import { max } from 'd3-array';\nimport { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { Graphics, groupD8, IPoint, Point, Rectangle, SimpleRope, Texture } from 'pixi.js';\nimport { DashLine } from '../vendor/pixi-dashed-line';\nimport { LayerOptions, PixiLayer, PixiRenderApplication } from '.';\nimport { DEFAULT_TEXTURE_SIZE, EXAGGERATED_DIAMETER, HOLE_OUTLINE, SCREEN_OUTLINE } from '../constants';\nimport {\n assertNever,\n Casing,\n CasingOptions,\n Cement,\n CementOptions,\n CementPlugOptions,\n CementSqueeze,\n CementSqueezeOptions,\n foldCompletion,\n HoleOptions,\n HoleSize,\n isCementSqueeze,\n PAndA,\n SchematicData,\n ScreenOptions,\n TubingOptions,\n Screen,\n Tubing,\n CompletionSymbol,\n isPAndASymbol,\n isCementPlug,\n CementPlug,\n PAndASymbol,\n InternalLayerOptions,\n defaultHoleOptions,\n defaultCasingOptions,\n defaultCementOptions,\n defaultCementSqueezeOptions,\n defaultCementPlugOptions,\n defaultScreenOptions,\n defaultTubingOptions,\n defaultInternalLayerOptions,\n Perforation,\n PerforationOptions,\n defaultPerforationOptions,\n Completion,\n OutlineClosure,\n hasPacking,\n hasFracLines,\n hasSpikes,\n} from './schematicInterfaces';\nimport {\n CasingRenderObject,\n createCementTexture,\n createComplexRopeSegmentsForCement,\n createComplexRopeSegmentsForCementSqueeze,\n createComplexRopeSegmentsForCementPlug,\n createHoleBaseTexture,\n createScreenTexture,\n createTubingTexture,\n createTubularRenderingObject,\n prepareCasingRenderObject,\n createCementPlugTexture,\n createComplexRopeSegmentsForPerforation,\n createPerforationPackingTexture,\n PerforationShape,\n createCementSqueezeTexture,\n createPerforationFracLineTexture,\n createPerforationSpikeTexture,\n} from '../datautils/schematicShapeGenerator';\nimport { OnUpdateEvent, OnRescaleEvent, OnUnmountEvent } from '../interfaces';\nimport { convertColor } from '../utils/color';\nimport { createNormals, offsetPoint, offsetPoints } from '../utils/vectorUtils';\nimport { ComplexRope, ComplexRopeSegment } from './CustomDisplayObjects/ComplexRope';\nimport { FixedWidthSimpleRope } from './CustomDisplayObjects/FixedWidthSimpleRope';\nimport { UniformTextureStretchRope } from './CustomDisplayObjects/UniformTextureStretchRope';\n\ninterface ScalingFactors {\n height: number;\n zFactor: number;\n yScale: ScaleLinear<number, number, never>;\n}\n\ninterface SymbolRenderObject {\n pathPoints: Point[];\n referenceDiameter: number;\n symbolKey: string;\n}\n\ninterface CementRenderObject {\n kind: 'cement';\n segments: ComplexRopeSegment[];\n casingIds: string[];\n zIndex?: number;\n}\n\ninterface CementSqueezeRenderObject {\n kind: 'cementSqueeze';\n segments: ComplexRopeSegment[];\n casingIds: string[];\n zIndex?: number;\n}\n\ntype InterlacedRenderObjects = CasingRenderObject | CementRenderObject | CementSqueezeRenderObject;\n\nconst foldInterlacedRenderObjects =\n <T>(fCasing: (obj: CasingRenderObject) => T, fCement: (obj: CementRenderObject) => T, fCementSqueeze: (obj: CementSqueezeRenderObject) => T) =>\n (renderObject: InterlacedRenderObjects): T => {\n switch (renderObject.kind) {\n case 'casing':\n return fCasing(renderObject);\n case 'cement':\n return fCement(renderObject);\n case 'cementSqueeze':\n return fCementSqueeze(renderObject);\n default:\n return assertNever(renderObject);\n }\n };\n\nexport interface SchematicLayerOptions<T extends SchematicData> extends LayerOptions<T> {\n exaggerationFactor?: number;\n internalLayerOptions?: InternalLayerOptions;\n holeOptions?: HoleOptions;\n casingOptions?: CasingOptions;\n cementOptions?: CementOptions;\n cementSqueezeOptions?: CementSqueezeOptions;\n screenOptions?: ScreenOptions;\n tubingOptions?: TubingOptions;\n cementPlugOptions?: CementPlugOptions;\n perforationOptions?: PerforationOptions;\n}\n\nconst defaultSchematicLayerOptions = (layerId: string): SchematicLayerOptions<SchematicData> => ({\n exaggerationFactor: 2,\n internalLayerOptions: defaultInternalLayerOptions(layerId),\n holeOptions: defaultHoleOptions,\n casingOptions: defaultCasingOptions,\n cementOptions: defaultCementOptions,\n cementSqueezeOptions: defaultCementSqueezeOptions,\n screenOptions: defaultScreenOptions,\n tubingOptions: defaultTubingOptions,\n cementPlugOptions: defaultCementPlugOptions,\n perforationOptions: defaultPerforationOptions,\n});\n\ntype InternalLayerVisibility = { [K in keyof InternalLayerOptions]: boolean };\n\nexport class SchematicLayer<T extends SchematicData> extends PixiLayer<T> {\n private internalLayerVisibility: InternalLayerVisibility = {\n holeLayerId: true,\n casingLayerId: true,\n completionLayerId: true,\n cementLayerId: true,\n pAndALayerId: true,\n perforationLayerId: true,\n };\n\n private cementTextureCache: Texture | null = null;\n private cementSqueezeTextureCache: Texture | null = null;\n private cementPlugTextureCache: Texture | null = null;\n private holeTextureCache: Texture | null = null;\n private screenTextureCache: Texture | null = null;\n private tubingTextureCache: Texture | null = null;\n private textureSymbolCacheArray: { [key: string]: Texture } | null = null;\n\n protected scalingFactors: ScalingFactors = {\n height: 600,\n zFactor: 1,\n yScale: scaleLinear(),\n };\n\n constructor(ctx: PixiRenderApplication, id?: string, options?: SchematicLayerOptions<T>) {\n super(ctx, id, options);\n this.options = <SchematicLayerOptions<T>>{\n ...this.options,\n ...defaultSchematicLayerOptions(this.id),\n ...options,\n };\n }\n\n public override onUnmount(event?: OnUnmountEvent): void {\n super.onUnmount(event);\n this.cementTextureCache = null;\n this.cementSqueezeTextureCache = null;\n this.holeTextureCache = null;\n this.screenTextureCache = null;\n this.tubingTextureCache = null;\n this.textureSymbolCacheArray = null;\n }\n\n public override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.clearLayer();\n this.preRender();\n this.render();\n }\n\n public override onRescale(event: OnRescaleEvent): void {\n const shouldRecalculate = this.scalingFactors.zFactor !== event.zFactor;\n\n this.scalingFactors = { height: event.height, zFactor: event.zFactor, yScale: event.yScale };\n super.optionsRescale(event);\n const yRatio = this.yRatio();\n const flippedX = event.xBounds[0] > event.xBounds[1];\n const flippedY = event.yBounds[0] > event.yBounds[1];\n this.setContainerPosition(event.xScale(0), event.yScale(0));\n this.setContainerScale(event.xRatio * (flippedX ? -1 : 1), yRatio * (flippedY ? -1 : 1));\n if (shouldRecalculate) {\n this.clearLayer();\n this.preRender();\n }\n\n this.render();\n }\n\n public override setVisibility(isVisible: boolean, layerId: string) {\n if (layerId === this.id) {\n super.setVisibility(isVisible, layerId);\n return;\n }\n\n const { internalLayerOptions } = this.options as SchematicLayerOptions<T>;\n const entries = internalLayerOptions ? Object.entries(internalLayerOptions) : [];\n const entryFound = entries.find(([_key, id]: [string, string]) => id === layerId);\n const keyFound = entryFound?.[0];\n\n if (keyFound) {\n this.internalLayerVisibility[keyFound as keyof InternalLayerVisibility] = isVisible;\n this.clearLayer();\n this.preRender();\n this.render();\n }\n }\n\n public override getInternalLayerIds(): string[] {\n const { internalLayerOptions } = this.options as SchematicLayerOptions<T>;\n return internalLayerOptions ? Object.values(internalLayerOptions) : [];\n }\n\n /**\n * Calculate yRatio without zFactor\n * TODO consider to move this into ZoomPanHandler\n */\n protected yRatio(): number {\n const domain = this.scalingFactors.yScale.domain() as [number, number];\n const ySpan = domain[1] - domain[0];\n const baseYSpan = ySpan * this.scalingFactors.zFactor;\n const baseDomain: [number, number] = [domain[0], domain[0] + baseYSpan];\n return Math.abs(this.scalingFactors.height / (baseDomain[1] - baseDomain[0]));\n }\n\n protected getZFactorScaledPathForPoints = (start: number, end: number): Point[] => {\n const y = (y: number): number => y * this.scalingFactors.zFactor;\n\n const path = this.referenceSystem?.getCurtainPath(start, end, true) ?? [];\n return path.map((p) => new Point(p.point[0], y(p.point[1]!)));\n };\n\n protected drawBigPolygon = (coords: IPoint[], color = 0x000000) => {\n const polygon = new Graphics();\n polygon.beginFill(color);\n polygon.drawPolygon(coords);\n polygon.endFill();\n\n this.addChild(polygon);\n };\n\n protected drawRope(path: Point[], texture: Texture, tint?: number): void {\n if (path.length === 0) {\n return undefined;\n }\n\n const rope: SimpleRope = new SimpleRope(texture, path, 1);\n rope.tint = tint || rope.tint;\n this.addChild(rope);\n }\n\n /**\n *\n * @param leftPath Points for line on left side\n * @param rightPath Points for line on right side\n * @param lineColor Color of line\n * @param lineWidth Width of line\n * @param outlineClosure If line should be drawn at top and/or bottom of the paths\n * @param lineAlignment alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n */\n protected drawOutline(\n leftPath: Point[],\n rightPath: Point[],\n lineColor: number,\n lineWidth = 1,\n outlineClosure: OutlineClosure = 'None',\n lineAlignment = 1,\n ): void {\n const leftPathReverse = leftPath.map<Point>((d) => d.clone()).reverse();\n\n const startPointRight = rightPath[0]!;\n const startPointLeft = leftPathReverse[0]!;\n\n const line = new Graphics();\n line.lineStyle(lineWidth, lineColor, undefined, lineAlignment);\n line.moveTo(startPointRight.x, startPointRight.y);\n rightPath.forEach((p: Point) => line.lineTo(p.x, p.y));\n\n if (outlineClosure === 'None' || outlineClosure === 'Top') {\n line.moveTo(startPointLeft.x, startPointLeft.y);\n }\n\n leftPathReverse.forEach((p: Point) => line.lineTo(p.x, p.y));\n\n if (outlineClosure === 'TopAndBottom' || outlineClosure === 'Top') {\n line.lineTo(startPointRight.x, startPointRight.y);\n }\n\n this.addChild(line);\n }\n\n /**\n * Uses a dashed outline on one side to represent casing window\n * The casing window should be visualized at the upper side of the wellbore path\n * @param leftPath Points for line on left side\n * @param pointPath Points for line on right side\n * @param lineColor Color of line\n * @param lineWidth Width of line\n * @param lineAlignment alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n */\n protected drawCasingWindowOutline(leftPath: Point[], rightPath: Point[], { lineColor, windowOptions }: CasingOptions, lineWidth = 1): void {\n // Correct the dashed path. Should always be displayed on the upper side of the wellbore path.\n const flippedPaths = !!this.referenceSystem?.options?.calculateDisplacementFromBottom;\n const [linePath, dashedPath] = flippedPaths ? [leftPath, rightPath] : [rightPath, leftPath];\n const [dashedAlignment, solidAlignment] = flippedPaths ? [1, 0] : [0, 1];\n\n const graphics = new Graphics();\n graphics.lineStyle(lineWidth, convertColor(lineColor), undefined, solidAlignment);\n\n const startPointLinePath = linePath[0]!;\n graphics.moveTo(startPointLinePath.x, startPointLinePath.y);\n linePath.forEach((p: Point) => graphics.lineTo(p.x, p.y));\n\n const dashedLine = new DashLine(graphics, {\n dash: [windowOptions.dashLength, windowOptions.spaceLength],\n color: convertColor(windowOptions.dashColor),\n width: lineWidth,\n alignment: dashedAlignment,\n });\n\n const startPointDashedPath = dashedPath[0]!;\n dashedLine.moveTo(startPointDashedPath.x, startPointDashedPath.y);\n dashedPath.forEach((currentPoint: Point) => {\n dashedLine.lineTo(currentPoint.x, currentPoint.y);\n });\n\n this.addChild(graphics);\n }\n\n private perforationRopeAndTextureReferences: { rope: ComplexRope; texture: Texture }[] = [];\n\n public preRender(): void {\n if (!this.data || !this.referenceSystem) {\n return;\n }\n\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n const { holeSizes, casings, cements, completion, symbols, pAndA, perforations } = this.data;\n\n this.updateSymbolCache(symbols);\n\n holeSizes.sort((a: HoleSize, b: HoleSize) => b.diameter - a.diameter);\n const maxHoleDiameter =\n holeSizes.length > 0 ? (max(holeSizes, (d) => d.diameter) ?? 0) * exaggerationFactor : EXAGGERATED_DIAMETER * exaggerationFactor;\n if (this.internalLayerVisibility.holeLayerId) {\n holeSizes.forEach((hole: HoleSize) => this.drawHoleSize(maxHoleDiameter, hole));\n }\n\n casings.sort((a: Casing, b: Casing) => b.diameter - a.diameter);\n const casingRenderObjects: CasingRenderObject[] = casings.map((casing: Casing) => this.createCasingRenderObject(casing));\n\n const cementShapes: CementRenderObject[] = cements.map(\n (cement: Cement): CementRenderObject => ({\n kind: 'cement',\n segments: createComplexRopeSegmentsForCement(cement, casings, completion, holeSizes, exaggerationFactor, this.getZFactorScaledPathForPoints),\n casingIds: (cement.referenceIds || []).filter((id) => id),\n }),\n );\n\n const [cementSqueezes, remainingPAndA] = pAndA.reduce<[CementSqueeze[], Exclude<PAndA, CementSqueeze>[]]>(\n ([squeezes, remaining], current: PAndA) =>\n isCementSqueeze(current) ? [[current, ...squeezes], remaining] : [squeezes, [current, ...remaining]],\n [[], []],\n );\n\n const cementSqueezesShape: CementSqueezeRenderObject[] = cementSqueezes.map((squeeze) => ({\n kind: 'cementSqueeze',\n segments: this.createCementSqueezeShape(squeeze, casings, completion, holeSizes),\n casingIds: squeeze.referenceIds,\n }));\n\n this.sortCementAndCasingRenderObjects(casingRenderObjects, cementShapes, cementSqueezesShape).forEach(\n foldInterlacedRenderObjects(\n (casingRO: CasingRenderObject) => {\n if (this.internalLayerVisibility.casingLayerId) {\n this.drawCasing(casingRO);\n\n if (casingRO.hasShoe) {\n this.drawShoe(casingRO.bottom, casingRO.referenceRadius);\n }\n }\n },\n (cementRO: CementRenderObject) => {\n if (this.internalLayerVisibility.cementLayerId) {\n const texture = this.getCementTexture();\n texture && this.drawComplexRope(cementRO.segments, texture);\n }\n },\n (cementSqueezesRO: CementSqueezeRenderObject) => {\n if (this.internalLayerVisibility.pAndALayerId) {\n const texture = this.getCementSqueezeTexture();\n texture && this.drawComplexRope(cementSqueezesRO.segments, texture);\n }\n },\n ),\n );\n\n this.perforationRopeAndTextureReferences.forEach(({ rope, texture }) => {\n rope.destroy({\n children: true,\n texture: true,\n baseTexture: true,\n });\n texture.destroy(true);\n });\n this.perforationRopeAndTextureReferences = [];\n\n if (this.internalLayerVisibility.perforationLayerId) {\n const { perforationOptions } = this.options as SchematicLayerOptions<T>;\n const packings = perforations.filter(hasPacking);\n const fracLines = perforations.filter(hasFracLines);\n const spikes = perforations.filter(hasSpikes);\n packings.forEach((perforation) => {\n const perfShapes = this.createPerforationShape(perforation, casings, holeSizes);\n const perfShapesByDiameter: { [key: number]: ComplexRopeSegment[] } = perfShapes.reduce(\n (dict: { [key: number]: ComplexRopeSegment[] }, ps) => {\n if (!dict[ps.diameter]) {\n dict[ps.diameter] = [];\n }\n dict[ps.diameter] = [...(dict[ps.diameter] ?? []), ps];\n return dict;\n },\n {},\n );\n Object.values(perfShapesByDiameter).forEach((perfShapesWithSameDiameter) => {\n const texture = createPerforationPackingTexture(perforation, perfShapesWithSameDiameter[0]!, perforationOptions!);\n const rope = this.drawComplexRope(perfShapesWithSameDiameter, texture);\n rope && this.perforationRopeAndTextureReferences.push({ rope, texture });\n });\n });\n\n spikes.forEach((perforation) => {\n const perfShapes = this.createPerforationShape(perforation, casings, holeSizes);\n const thiccPerfShapes = perfShapes.map((ps) => ({ ...ps, diameter: ps.diameter * 3 }));\n const perfShapesByDiameter: { [key: number]: ComplexRopeSegment[] } = thiccPerfShapes.reduce(\n (dict: { [key: number]: ComplexRopeSegment[] }, ps) => {\n if (!dict[ps.diameter]) {\n dict[ps.diameter] = [];\n }\n dict[ps.diameter] = [...(dict[ps.diameter] ?? []), ps];\n return dict;\n },\n {},\n );\n Object.values(perfShapesByDiameter).forEach((perfShapesWithSameDiameter) => {\n perfShapesWithSameDiameter.forEach((perfShape) => {\n const texture = createPerforationSpikeTexture(perforation, perforations, perfShape, perforationOptions!);\n const rope = this.drawComplexRope([perfShape], texture);\n rope && this.perforationRopeAndTextureReferences.push({ rope, texture });\n });\n });\n });\n\n fracLines.forEach((perforation) => {\n const perfShapes = this.createPerforationShape(perforation, casings, holeSizes);\n const thiccPerfShapes = perfShapes.map((ps) => ({ ...ps, diameter: ps.diameter * 3 }));\n const perfShapesByDiameter: { [key: number]: ComplexRopeSegment[] } = thiccPerfShapes.reduce(\n (dict: { [key: number]: ComplexRopeSegment[] }, ps) => {\n if (!dict[ps.diameter]) {\n dict[ps.diameter] = [];\n }\n dict[ps.diameter] = [...(dict[ps.diameter] ?? []), ps];\n return dict;\n },\n {},\n );\n Object.values(perfShapesByDiameter).forEach((perfShapesWithSameDiameter) => {\n perfShapesWithSameDiameter.forEach((perfShape) => {\n const texture = createPerforationFracLineTexture(perforation, perfShape, perforationOptions!);\n const rope = this.drawComplexRope([perfShape], texture);\n rope && this.perforationRopeAndTextureReferences.push({ rope, texture });\n });\n });\n });\n }\n\n if (this.internalLayerVisibility.completionLayerId) {\n completion.forEach(\n foldCompletion(\n (obj: Screen) => this.drawScreen(obj),\n (obj: Tubing) => this.drawTubing(obj),\n (obj: CompletionSymbol) => {\n const symbolRenderObject = this.prepareSymbolRenderObject(obj);\n this.drawSymbolComponent(symbolRenderObject);\n },\n ),\n );\n }\n\n if (this.internalLayerVisibility.pAndALayerId) {\n remainingPAndA.forEach((obj) => {\n if (isPAndASymbol(obj)) {\n const symbolRenderObject = this.prepareSymbolRenderObject(obj);\n this.drawSymbolComponent(symbolRenderObject);\n }\n if (isCementPlug(obj)) {\n this.drawCementPlug(obj, casings, completion, holeSizes);\n }\n });\n }\n }\n\n private updateSymbolCache(symbols: { [key: string]: string }) {\n if (!this.textureSymbolCacheArray) {\n this.textureSymbolCacheArray = {};\n }\n if (!symbols) {\n return;\n }\n\n const existingKeys = Object.keys(this.textureSymbolCacheArray);\n Object.entries(symbols).forEach(([key, symbol]: [string, string]) => {\n if (!existingKeys.includes(key) && this.textureSymbolCacheArray) {\n this.textureSymbolCacheArray[key] = Texture.from(symbol);\n }\n });\n }\n\n private drawCementPlug(cementPlug: CementPlug, casings: Casing[], completion: Completion[], holes: HoleSize[]) {\n const { exaggerationFactor = 1, cementPlugOptions } = this.options as SchematicLayerOptions<T>;\n\n const cementPlugSegments = createComplexRopeSegmentsForCementPlug(\n cementPlug,\n casings,\n completion,\n holes,\n exaggerationFactor,\n this.getZFactorScaledPathForPoints,\n );\n cementPlugOptions && this.drawComplexRope(cementPlugSegments, this.getCementPlugTexture(cementPlugOptions));\n\n const { rightPath, leftPath } = cementPlugSegments.reduce<{ rightPath: Point[]; leftPath: Point[] }>(\n (acc, current) => {\n const { leftPath, rightPath } = createTubularRenderingObject(current.diameter / 2, current.points);\n\n return {\n rightPath: [...acc.rightPath, ...rightPath],\n leftPath: [...acc.leftPath, ...leftPath],\n };\n },\n { rightPath: [], leftPath: [] },\n );\n this.drawOutline(leftPath, rightPath, convertColor('black'), 0.25, 'TopAndBottom');\n }\n\n private createCasingRenderObject(casing: Casing): CasingRenderObject {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n return prepareCasingRenderObject(exaggerationFactor, casing, this.getZFactorScaledPathForPoints);\n }\n\n private getCementPlugTexture(cementPlugOptions: CementPlugOptions): Texture {\n if (!this.cementPlugTextureCache) {\n this.cementPlugTextureCache = createCementPlugTexture(cementPlugOptions);\n }\n return this.cementPlugTextureCache;\n }\n\n private prepareSymbolRenderObject = (component: CompletionSymbol | PAndASymbol): SymbolRenderObject => {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n\n const exaggeratedDiameter = component.diameter * exaggerationFactor;\n\n const pathPoints = this.getZFactorScaledPathForPoints(component.start, component.end);\n\n return {\n pathPoints,\n referenceDiameter: exaggeratedDiameter,\n symbolKey: component.symbolKey,\n };\n };\n\n private drawSymbolComponent = ({ pathPoints, referenceDiameter, symbolKey }: SymbolRenderObject): void => {\n const texture = this.getSymbolTexture(symbolKey, referenceDiameter);\n // The rope renders fine in CANVAS/fallback mode\n this.drawSVGRope(pathPoints, texture!);\n };\n\n private drawSVGRope(path: Point[], texture: Texture): void {\n if (path.length === 0) {\n return undefined;\n }\n\n const rope: UniformTextureStretchRope = new UniformTextureStretchRope(texture, path);\n\n this.addChild(rope);\n }\n\n private getSymbolTexture(symbolKey: string, diameter: number): Texture | undefined {\n const baseTexture = this.textureSymbolCacheArray?.[symbolKey]?.baseTexture;\n return baseTexture ? new Texture(baseTexture, undefined, new Rectangle(0, 0, 0, diameter), undefined, groupD8.MAIN_DIAGONAL) : undefined;\n }\n\n private drawHoleSize = (maxHoleDiameter: number, holeObject: HoleSize): void => {\n if (holeObject == null) {\n return;\n }\n\n const pathPoints = this.getZFactorScaledPathForPoints(holeObject.start, holeObject.end);\n if (pathPoints.length === 0) {\n return;\n }\n\n const { exaggerationFactor = 1, holeOptions } = this.options as SchematicLayerOptions<T>;\n const exaggeratedDiameter = holeObject.diameter * exaggerationFactor;\n const { rightPath, leftPath } = createTubularRenderingObject(exaggeratedDiameter / 2, pathPoints);\n const texture = this.getHoleTexture(holeOptions!, exaggeratedDiameter, maxHoleDiameter);\n\n this.drawHoleRope(pathPoints, texture, maxHoleDiameter);\n\n this.drawOutline(leftPath, rightPath, convertColor(holeOptions!.lineColor), HOLE_OUTLINE * exaggerationFactor, 'TopAndBottom', 0);\n };\n\n private drawHoleRope(path: Point[], texture: Texture, maxHoleDiameter: number): void {\n if (path.length === 0) {\n return undefined;\n }\n\n const rope: SimpleRope = new SimpleRope(texture, path, maxHoleDiameter / DEFAULT_TEXTURE_SIZE);\n\n this.addChild(rope);\n }\n\n private getHoleTexture(holeOptions: HoleOptions, diameter: number, maxHoleDiameter: number): Texture {\n const size = DEFAULT_TEXTURE_SIZE;\n const height = size;\n const width = size;\n\n const textureDiameter = (diameter / maxHoleDiameter) * size;\n\n if (!this.holeTextureCache) {\n this.holeTextureCache = createHoleBaseTexture(holeOptions, width, height);\n }\n\n const baseTexture = this.holeTextureCache.baseTexture;\n const sidePadding = (height - textureDiameter) / 2;\n const frame = new Rectangle(0, sidePadding, width, textureDiameter);\n const texture = new Texture(baseTexture, frame);\n\n return texture;\n }\n\n /**\n * The rendering order of these components needs to be aligned\n * @param casingRenderObjects\n * @param cementRenderObject\n * @param cementSqueezes\n * @returns ordered rendering list\n */\n private sortCementAndCasingRenderObjects(\n casingRenderObjects: CasingRenderObject[],\n cementRenderObject: CementRenderObject[],\n cementSqueezes: CementSqueezeRenderObject[],\n ): InterlacedRenderObjects[] {\n type InterlaceReducerAcc = {\n result: InterlacedRenderObjects[];\n remainingCement: CementRenderObject[];\n remainingCementSqueezes: CementSqueezeRenderObject[];\n };\n\n let zIndex = 0;\n\n const { result } = casingRenderObjects.reduce(\n (acc: InterlaceReducerAcc, casingRenderObject: CasingRenderObject): InterlaceReducerAcc => {\n const foundCementShape = acc.remainingCement.find((cement) => cement.casingIds.includes(casingRenderObject.id));\n const foundCementSqueezes = acc.remainingCementSqueezes.filter((squeeze) => squeeze.casingIds.includes(casingRenderObject.id));\n\n if (foundCementShape) {\n foundCementShape.zIndex = zIndex++;\n }\n foundCementSqueezes.forEach((item) => (item.zIndex = zIndex++));\n casingRenderObject.zIndex = zIndex++;\n\n return {\n result: [...acc.result, foundCementShape!, casingRenderObject, ...foundCementSqueezes],\n remainingCement: acc.remainingCement.filter((c) => c !== foundCementShape),\n remainingCementSqueezes: acc.remainingCementSqueezes.filter((squeeze) => !foundCementSqueezes.includes(squeeze)),\n };\n },\n { result: [], remainingCement: cementRenderObject, remainingCementSqueezes: cementSqueezes },\n );\n\n return result.filter((item): item is InterlacedRenderObjects => item != null).sort((a, b) => a.zIndex! - b.zIndex!);\n }\n\n /**\n *\n * @param intervals\n * @param texture\n * optionally fetch the exaggerationFactor from a different options prop\n * options.perforationOptions for example\n * @param getExaggerationFactor\n * @returns\n */\n private drawComplexRope(intervals: ComplexRopeSegment[], texture: Texture): ComplexRope | undefined {\n if (intervals.length === 0) {\n return undefined;\n }\n const rope = new ComplexRope(texture, intervals);\n\n this.addChild(rope);\n\n return rope;\n }\n\n private static getOutlineClosureType = (index: number, maxIndex: number): OutlineClosure => {\n if (index === 0) {\n if (index === maxIndex) {\n return 'TopAndBottom';\n }\n return 'Top';\n }\n if (index === maxIndex) {\n return 'Bottom';\n }\n\n return 'None';\n };\n\n private drawCasing = (casingRenderObject: CasingRenderObject): void => {\n const { casingOptions } = this.options as SchematicLayerOptions<T>;\n const casingSolidColorNumber = convertColor(casingOptions!.solidColor);\n const casingLineColorNumber = convertColor(casingOptions!.lineColor);\n\n casingRenderObject.sections.forEach((section, index, list) => {\n const outlineClosureType = SchematicLayer.getOutlineClosureType(index, list.length - 1);\n\n const texture = this.createCasingTexture(casingRenderObject.referenceDiameter);\n this.drawRope(section.pathPoints, texture, casingSolidColorNumber);\n\n if (section.kind === 'casing-window') {\n this.drawCasingWindowOutline(section.leftPath, section.rightPath, casingOptions!, casingRenderObject.casingWallWidth);\n } else {\n this.drawOutline(section.leftPath, section.rightPath, casingLineColorNumber, casingRenderObject.casingWallWidth, outlineClosureType);\n }\n });\n };\n\n private createCasingTexture(diameter: number): Texture {\n const textureWidthPO2 = 16;\n return new Texture(Texture.WHITE.baseTexture, undefined, new Rectangle(0, 0, textureWidthPO2, diameter));\n }\n\n private drawShoe(casingEnd: number, casingRadius: number): void {\n const { exaggerationFactor = 1, casingOptions } = this.options as SchematicLayerOptions<T>;\n const shoeWidth = casingOptions!.shoeSize.width * exaggerationFactor;\n const shoeLength = casingOptions!.shoeSize.length * exaggerationFactor;\n\n const shoeCoords = this.generateShoe(casingEnd, casingRadius, shoeLength, shoeWidth);\n const shoeCoords2 = this.generateShoe(casingEnd, casingRadius, shoeLength, -shoeWidth);\n this.drawBigPolygon(shoeCoords2);\n this.drawBigPolygon(shoeCoords);\n }\n\n private generateShoe = (casingEnd: number, casingRadius: number, length: number, width: number): Point[] => {\n const start = casingEnd - length;\n const end = casingEnd;\n\n const points = this.getZFactorScaledPathForPoints(start, end);\n\n const normal = createNormals(points);\n const shoeEdge: Point[] = offsetPoints(points, normal, casingRadius * (width < 0 ? -1 : 1));\n\n const shoeTipPoint = points[points.length - 1]!;\n const shoeTipNormal = normal[normal.length - 1]!;\n const shoeTip: Point = offsetPoint(shoeTipPoint, shoeTipNormal, width + casingRadius * (width < 0 ? -1 : 1));\n\n return [...shoeEdge, shoeTip];\n };\n\n private createCementSqueezeShape = (\n squeeze: CementSqueeze,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n ): ComplexRopeSegment[] => {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n return createComplexRopeSegmentsForCementSqueeze(squeeze, casings, completion, holes, exaggerationFactor, this.getZFactorScaledPathForPoints);\n };\n\n private getCementTexture(): Texture | null {\n if (!this.cementTextureCache) {\n const { cementOptions } = this.options as SchematicLayerOptions<T>;\n cementOptions && (this.cementTextureCache = createCementTexture(cementOptions));\n }\n return this.cementTextureCache;\n }\n\n private createPerforationShape = (perforation: Perforation, casings: Casing[], holes: HoleSize[]): PerforationShape[] => {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n return createComplexRopeSegmentsForPerforation(perforation, casings, holes, exaggerationFactor, this.getZFactorScaledPathForPoints);\n };\n\n private getCementSqueezeTexture(): Texture | null {\n if (!this.cementSqueezeTextureCache) {\n const { cementSqueezeOptions } = this.options as SchematicLayerOptions<T>;\n cementSqueezeOptions && (this.cementSqueezeTextureCache = createCementSqueezeTexture(cementSqueezeOptions));\n }\n return this.cementSqueezeTextureCache;\n }\n\n private drawScreen({ start, end, diameter }: Screen): void {\n const { exaggerationFactor = 1, screenOptions } = this.options as SchematicLayerOptions<T>;\n const exaggeratedDiameter = exaggerationFactor * diameter;\n\n const pathPoints = this.getZFactorScaledPathForPoints(start, end);\n const { leftPath, rightPath } = createTubularRenderingObject(exaggeratedDiameter / 2, pathPoints);\n\n const texture = this.getScreenTexture();\n if (texture) {\n this.drawCompletionRope(pathPoints, texture, exaggeratedDiameter);\n this.drawOutline(leftPath, rightPath, convertColor(screenOptions!.lineColor), SCREEN_OUTLINE * exaggerationFactor, 'TopAndBottom');\n }\n }\n\n private drawTubing({ diameter, start, end }: Tubing): void {\n const { exaggerationFactor = 1, tubingOptions } = this.options as SchematicLayerOptions<T>;\n const exaggeratedDiameter = exaggerationFactor * diameter;\n\n const pathPoints = this.getZFactorScaledPathForPoints(start, end);\n const texture = this.getTubingTexture(tubingOptions!);\n\n this.drawCompletionRope(pathPoints, texture, exaggeratedDiameter);\n }\n\n private getTubingTexture(tubingOptions: TubingOptions): Texture {\n if (!this.tubingTextureCache) {\n this.tubingTextureCache = createTubingTexture(tubingOptions);\n }\n return this.tubingTextureCache;\n }\n\n private getScreenTexture(): Texture | null {\n if (!this.screenTextureCache) {\n const { screenOptions } = this.options as SchematicLayerOptions<T>;\n screenOptions && (this.screenTextureCache = createScreenTexture(screenOptions));\n }\n return this.screenTextureCache;\n }\n\n private drawCompletionRope(path: Point[], texture: Texture, diameter: number): void {\n if (path.length === 0) {\n return;\n }\n\n const rope: FixedWidthSimpleRope = new FixedWidthSimpleRope(texture, path, diameter);\n this.addChild(rope);\n }\n}\n","import { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnMountEvent, OnRescaleEvent } from '../interfaces';\n\nexport type SeismicCanvasDataOptions = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type SeismicCanvasData = {\n image: CanvasImageSource | OffscreenCanvas;\n options: SeismicCanvasDataOptions;\n};\n\nexport class SeismicCanvasLayer extends CanvasLayer<SeismicCanvasData> {\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n }\n\n override onUpdate(event: OnUpdateEvent<SeismicCanvasData>): void {\n super.onUpdate(event);\n\n this.clearCanvas();\n\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n this.setTransform(event);\n this.render();\n }\n\n render(): void {\n if (!this.data || !this.ctx || !this.data.image) {\n return;\n }\n const { ctx } = this;\n const { options, image } = this.data;\n\n this.clearCanvas();\n\n ctx.drawImage(image, options.x, options.y, options.width, options.height);\n }\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import {\n line,\n curveCatmullRom,\n curveLinear,\n curveBasis,\n curveBasisClosed,\n curveBundle,\n curveCardinal,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n} from 'd3-shape';\nimport { SVGLayer } from './base/SVGLayer';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { LayerOptions } from '..';\n\nconst CURVE_CATMULL_ROM_ALPHA = 0.7;\nconst CURVE_CARDINAL_TENSION = 0.9;\nconst CURVE_BUNDLE_BETA = 1.0;\n\nexport interface WellborepathLayerOptions<T extends [number, number][]> extends LayerOptions<T> {\n stroke: string;\n strokeWidth: string;\n curveType?: string;\n tension?: number;\n}\n\nexport class WellborepathLayer<T extends [number, number][]> extends SVGLayer<T> {\n rescaleEvent: OnRescaleEvent | undefined;\n\n constructor(id?: string, options?: WellborepathLayerOptions<T>) {\n super(id, options);\n this.options = {\n ...this.options,\n ...options,\n };\n this.render = this.render.bind(this);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n if (!this.elm) {\n return;\n }\n this.rescaleEvent = event;\n this.render();\n }\n\n render(): void {\n const { strokeWidth, stroke } = this.options as WellborepathLayerOptions<T>;\n\n if (!this.elm) {\n return;\n }\n this.elm.select('g').remove();\n\n const data = this.data || (this.referenceSystem && (this.referenceSystem.projectedPath as [number, number][]));\n if (!data || !this.rescaleEvent) {\n return;\n }\n\n this.elm\n .append('g')\n .attr('class', 'well-path')\n .append('path')\n .attr('d', this.renderWellborePath(data))\n .attr('stroke-width', strokeWidth || '2px')\n .attr('stroke', stroke || 'red')\n .attr('fill', 'none');\n }\n\n private renderWellborePath(data: [number, number][]): string {\n if (this.rescaleEvent != null) {\n const { xScale, yScale } = this.rescaleEvent;\n const transformedData: [number, number][] = data.map((d) => [xScale(d[0]), yScale(d[1])]);\n\n // TODO: Might be a good idea to move something like this to a shared function in a base class\n let curveFactory;\n const { curveType, tension } = this.options as WellborepathLayerOptions<T>;\n switch (curveType) {\n default:\n case 'curveCatmullRom':\n curveFactory = curveCatmullRom.alpha(tension || CURVE_CATMULL_ROM_ALPHA);\n break;\n case 'curveLinear':\n curveFactory = curveLinear;\n break;\n case 'curveBasis':\n curveFactory = curveBasis;\n break;\n case 'curveBasisClosed':\n curveFactory = curveBasisClosed;\n break;\n case 'curveBundle':\n curveFactory = curveBundle.beta(tension || CURVE_BUNDLE_BETA);\n break;\n case 'curveCardinal':\n curveFactory = curveCardinal.tension(tension || CURVE_CARDINAL_TENSION);\n break;\n case 'curveMonotoneX':\n curveFactory = curveMonotoneX;\n break;\n case 'curveMonotoneY':\n curveFactory = curveMonotoneY;\n break;\n case 'curveNatural':\n curveFactory = curveNatural;\n break;\n case 'curveStep':\n curveFactory = curveStep;\n break;\n case 'curveStepAfter':\n curveFactory = curveStepAfter;\n break;\n case 'curveStepBefore':\n curveFactory = curveStepBefore;\n break;\n }\n return line().curve(curveFactory)(transformedData) ?? '';\n }\n return '';\n }\n}\n","import { calcSize } from '../utils';\nimport { CanvasLayer, LayerOptions } from './base';\nimport { assertNever } from './schematicInterfaces';\nimport { OnUpdateEvent, OnRescaleEvent, OnMountEvent } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\n\nexport type ReferenceLineType = 'wavy' | 'dashed' | 'solid';\n\nexport type ReferenceLine = {\n text?: string;\n lineType: ReferenceLineType;\n color: string;\n depth: number;\n lineWidth?: number;\n textColor?: string;\n fontSize?: string;\n};\n\nexport type ReferenceLineLayerOptions = LayerOptions<ReferenceLine[]>;\n\nconst foldReferenceLine = <T>(\n options: {\n wavy: (wavy: ReferenceLine) => T;\n dashed: (dashed: ReferenceLine) => T;\n solid: (solid: ReferenceLine) => T;\n },\n refLine: ReferenceLine,\n): T => {\n switch (refLine.lineType) {\n case 'wavy':\n return options.wavy(refLine);\n\n case 'dashed':\n return options.dashed(refLine);\n\n case 'solid':\n return options.solid(refLine);\n\n default:\n return assertNever(refLine.lineType);\n }\n};\n\nexport class ReferenceLineLayer extends CanvasLayer<ReferenceLine[]> {\n yScale: ScaleLinear<number, number, never> | null = null;\n xScale: ScaleLinear<number, number, never> | null = null;\n\n override onMount(event: OnMountEvent) {\n super.onMount(event);\n }\n\n override onUpdate(event: OnUpdateEvent<ReferenceLine[]>) {\n super.onUpdate(event);\n this.clearCanvas();\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent) {\n super.onRescale(event);\n this.yScale = event.yScale;\n this.xScale = event.xScale;\n this.resetTransform();\n this.render();\n }\n\n private drawDashed(dashed: ReferenceLine) {\n const { ctx } = this;\n const { canvas } = this;\n\n if (ctx != null && canvas != null) {\n const y = this.yScale?.(dashed.depth)!;\n ctx.save();\n ctx.strokeStyle = dashed.color;\n this.setCtxLineStyle(ctx, dashed);\n this.setCtxLineWidth(ctx, dashed);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(canvas.width, y);\n ctx.stroke();\n ctx.restore();\n if (dashed.text) {\n this.drawText(ctx, dashed, ctx.canvas.width, y);\n }\n }\n }\n\n private drawSolid(solid: ReferenceLine) {\n const { ctx } = this;\n const { canvas } = this;\n const y = this.yScale!(solid.depth);\n if (ctx != null && canvas != null) {\n ctx.save();\n ctx.strokeStyle = solid.color;\n this.setCtxLineStyle(ctx, solid);\n this.setCtxLineWidth(ctx, solid);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(canvas.width, y);\n ctx.stroke();\n ctx.restore();\n if (solid.text) {\n this.drawText(ctx, solid, ctx.canvas.width, y);\n }\n }\n }\n\n private drawWavy(wavy: ReferenceLine): void {\n const factor = 4;\n const min = 2.5;\n const max = 500;\n const { ctx, canvas } = this;\n\n if (this.xScale != null && this.yScale != null && canvas != null && ctx != null) {\n const waveHeight = calcSize(factor, min, max, this.yScale);\n const wavePeriod = waveHeight * 2;\n const y = this.yScale(wavy.depth) - waveHeight;\n const steps = Math.ceil(canvas.width / wavePeriod) + 1;\n const xOffset = this.xScale(0) % wavePeriod;\n ctx.save();\n ctx.strokeStyle = wavy.color;\n this.setCtxLineStyle(ctx, wavy);\n this.setCtxLineWidth(ctx, wavy);\n for (let i = -1; i < steps; i++) {\n ctx.beginPath();\n ctx.arc(i * wavePeriod + xOffset + waveHeight, y, waveHeight, 0, Math.PI);\n ctx.stroke();\n }\n ctx.restore();\n if (wavy.text) {\n this.drawText(ctx, wavy, ctx.canvas.width, y);\n }\n }\n }\n\n private drawText(ctx: CanvasRenderingContext2D, refLine: ReferenceLine, x: number, y: number) {\n const textColor = refLine.textColor || '#000';\n const fontSize = refLine.fontSize || '10px sans-serif';\n const textOffsetX = 10;\n\n ctx.save();\n ctx.strokeStyle = textColor;\n ctx.font = fontSize;\n ctx.textAlign = 'end';\n ctx.textBaseline = 'bottom';\n ctx.fillText(refLine.text ?? '', x - textOffsetX, y);\n ctx.restore();\n }\n\n private setCtxLineStyle(ctx: CanvasRenderingContext2D, refLine: ReferenceLine): void {\n const a = 8;\n const b = 10;\n foldReferenceLine(\n {\n solid: () => {\n ctx.setLineDash([]);\n },\n dashed: () => {\n ctx.setLineDash([a, b]);\n },\n wavy: () => {\n ctx.setLineDash([]);\n },\n },\n refLine,\n );\n }\n\n private setCtxLineWidth(ctx: CanvasRenderingContext2D, refLine: ReferenceLine) {\n const defaultLineWidth = 1;\n ctx.lineWidth = refLine.lineWidth || defaultLineWidth;\n }\n\n private render() {\n if (!this.ctx || !this.yScale || !this.xScale) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.clearCanvas();\n\n this.data?.forEach((refLine) => {\n foldReferenceLine(\n {\n solid: (solid) => this.drawSolid(solid),\n dashed: (dashed) => this.drawDashed(dashed),\n wavy: (wavy) => this.drawWavy(wavy),\n },\n refLine,\n );\n });\n });\n }\n}\n","import { select, Selection } from 'd3-selection';\nimport { ZoomPanHandler } from './ZoomPanHandler';\nimport { Layer, GridLayer, LayerOptions } from '../layers';\nimport { ScaleOptions, OnMountEvent, OnRescaleEvent } from '../interfaces';\nimport { Axis } from '../components';\nimport { IntersectionReferenceSystem } from './IntersectionReferenceSystem';\nimport { HORIZONTAL_AXIS_MARGIN, VERTICAL_AXIS_MARGIN } from '../constants';\nimport { AxisOptions } from './interfaces';\n\nexport class LayerManager {\n private container: HTMLElement;\n\n private layerContainer: HTMLElement;\n\n private _zoomPanHandler: ZoomPanHandler;\n\n private layers: Layer<unknown>[] = [];\n\n private _axis: Axis | undefined;\n private _svgContainer: Selection<HTMLDivElement, unknown, null, undefined> | undefined;\n\n /**\n * Handles layers and axis also holds a zoom and pan handler object\n * @param container root container\n * @param scaleOptions\n * @param axisOptions\n */\n constructor(container: HTMLElement, scaleOptions?: ScaleOptions, axisOptions?: AxisOptions) {\n this.container = container;\n this.layerContainer = document.createElement('div');\n this.layerContainer.className = 'layer-container';\n this.container.appendChild(this.layerContainer);\n this.adjustToSize(+(this.container.getAttribute('width') ?? 0), +(this.container.getAttribute('height') ?? 0));\n this._zoomPanHandler = new ZoomPanHandler(container, (event) => this.rescale(event));\n if (scaleOptions) {\n const { xMin, xMax, yMin, yMax, xBounds, yBounds } = scaleOptions;\n if (xMin !== undefined && xMax !== undefined && yMin !== undefined && yMax !== undefined) {\n this._zoomPanHandler.setBounds([xMin, xMax], [yMin, yMax]);\n }\n if (xBounds && yBounds) {\n this._zoomPanHandler.setBounds(xBounds, yBounds);\n }\n } else {\n this._zoomPanHandler.setBounds([0, 1], [0, 1]);\n }\n\n if (axisOptions) {\n this._axis = this.createAxis(axisOptions);\n }\n\n this.rescale = this.rescale.bind(this);\n }\n\n /**\n * Adds and mounts an array of layers\n * @param layers array of layers\n */\n addLayers(layers: Layer<unknown>[]): LayerManager {\n layers.forEach((layer) => this.addLayer(layer));\n return this;\n }\n\n /**\n * Gets all layers currently mounted\n */\n getLayers(): Layer<unknown>[] {\n return this.layers;\n }\n\n /**\n * Clears data from all mounted layers\n * @param includeReferenceSystem - (optional) if true also removes reference system, default is true\n */\n clearAllData(includeReferenceSystem = true): LayerManager {\n this.layers.forEach((l) => l.clearData(includeReferenceSystem));\n return this;\n }\n\n /**\n * Adds the layer to the manager, and mounts it\n * @param layer Layer\n * @param params extra params to pass to the onUpdate method\n */\n addLayer(layer: Layer<unknown>, params?: LayerOptions<unknown>): LayerManager {\n this.layers.push(layer);\n this.initLayer(layer, params);\n\n return this;\n }\n\n /**\n * Remove and unmount layer from manager\n * @param layerId name of layer\n */\n removeLayer(layerId: string): LayerManager {\n const layer = this.layers.find((l) => l.id === layerId);\n if (layer) {\n layer.onUnmount();\n this.layers = this.layers.filter((l) => l.id !== layerId);\n }\n\n return this;\n }\n\n /**\n * Remove and unmount all layers from manager\n */\n removeAllLayers(): LayerManager {\n const { layers } = this;\n layers.forEach((layer) => {\n this.removeLayer(layer.id);\n });\n return this;\n }\n\n getLayer(layerId: string): Layer<unknown> | undefined {\n return this.layers.find((l) => l.id === layerId || l.getInternalLayerIds().includes(layerId));\n }\n\n initLayer(layer: Layer<unknown>, params?: LayerOptions<unknown>): LayerManager {\n const event: OnMountEvent = {\n elm: this.layerContainer,\n };\n layer.onMount(event);\n const rescaleEvent = this.zoomPanHandler.currentStateAsEvent();\n layer.onUpdate({ ...rescaleEvent, ...params });\n layer.onRescale(rescaleEvent);\n\n if (this._svgContainer) {\n const highestZIndex = this.layers.length > 0 ? this.layers.reduce((max, layers) => (max.order > layers.order ? max : layers)).order : 1;\n this._svgContainer.style('z-index', `${highestZIndex + 1}`);\n }\n\n return this;\n }\n\n showLayer(layerId: string): LayerManager {\n const layer = this.getLayer(layerId);\n if (!layer) {\n return this;\n }\n layer.setVisibility(true, layerId);\n layer.onRescale(this.zoomPanHandler.currentStateAsEvent());\n return this;\n }\n\n hideLayer(layerId: string): LayerManager {\n const layer = this.getLayer(layerId);\n if (!layer) {\n return this;\n }\n layer.setVisibility(false, layerId);\n layer.onRescale(this.zoomPanHandler.currentStateAsEvent());\n return this;\n }\n\n /**\n * Adjust layers, axis, and zoom according to inputted dimensions\n * @param width (required)\n * @param height (required)\n */\n adjustToSize(width: number, height: number): void {\n const layersWidth = Math.max(this._axis ? width - HORIZONTAL_AXIS_MARGIN : width, 0);\n const layersHeight = Math.max(this._axis ? height - VERTICAL_AXIS_MARGIN : height, 0);\n\n if (this._axis) {\n const resizeEvent = { width, height };\n this._axis.onResize(resizeEvent);\n }\n if (this.layers) {\n const resizeEvent = { width: layersWidth, height: layersHeight };\n this.layers.forEach((layer) => layer.onResize(resizeEvent));\n }\n if (this._zoomPanHandler) {\n this._zoomPanHandler.adjustToSize(layersWidth, layersHeight, true);\n }\n }\n\n setReferenceSystem(irs: IntersectionReferenceSystem): void {\n this.layers.forEach((layer) => (layer.referenceSystem = irs));\n }\n\n showAxis(): LayerManager {\n this._axis?.show();\n return this;\n }\n\n hideAxis(): LayerManager {\n this._axis?.hide();\n return this;\n }\n\n showAxisLabels(): LayerManager {\n this._axis?.showLabels();\n return this;\n }\n\n hideAxisLabels(): LayerManager {\n this._axis?.hideLabels();\n return this;\n }\n\n setAxisOffset(x: number, y: number): LayerManager {\n if (this._axis) {\n this._axis.offsetX = x;\n this._axis.offsetY = y;\n const gridLayers = this.layers.filter((l: Layer<unknown>): l is GridLayer<unknown> => l instanceof GridLayer);\n gridLayers.forEach((l: GridLayer<unknown>) => {\n l.offsetX = x;\n l.offsetY = y;\n });\n }\n return this;\n }\n\n setXAxisOffset(x: number): LayerManager {\n if (this._axis) {\n this._axis.offsetX = x;\n const gridLayers = this.layers.filter((l: Layer<unknown>): l is GridLayer<unknown> => l instanceof GridLayer);\n gridLayers.forEach((l: GridLayer<unknown>) => {\n l.offsetX = x;\n });\n }\n return this;\n }\n\n setYAxisOffset(y: number): LayerManager {\n if (this._axis) {\n this._axis.offsetY = y;\n const gridLayers = this.layers.filter((l: Layer<unknown>): l is GridLayer<unknown> => l instanceof GridLayer);\n gridLayers.forEach((l: GridLayer<unknown>) => {\n l.offsetY = y;\n });\n }\n return this;\n }\n\n setZoomLevelBoundary(zoomlevels: [number, number]): LayerManager {\n this._zoomPanHandler.setZoomLevelBoundary(zoomlevels);\n return this;\n }\n\n setMaxZoomLevel(zoomlevel: number): LayerManager {\n this._zoomPanHandler.setMaxZoomLevel(zoomlevel);\n return this;\n }\n\n setMinZoomLevel(zoomlevel: number): LayerManager {\n this._zoomPanHandler.setMinZoomLevel(zoomlevel);\n return this;\n }\n\n destroy(): LayerManager {\n this.removeAllLayers();\n this.layerContainer.remove();\n this._axis = undefined;\n this._svgContainer = undefined;\n\n return this;\n }\n\n get zoomPanHandler(): ZoomPanHandler {\n return this._zoomPanHandler;\n }\n\n get axis(): Axis | undefined {\n return this._axis;\n }\n\n private rescale(event: OnRescaleEvent): void {\n if (this._axis) {\n this._axis.onRescale(event);\n }\n if (this.layers) {\n this.layers.forEach((layer) => (layer.isVisible === true ? layer.onRescale(event) : {}));\n }\n }\n\n private createAxis = (options: AxisOptions): Axis => {\n const { container } = this;\n this._svgContainer = select(container)\n .append('div')\n .attr('class', 'axis')\n .style('position', 'absolute')\n .style('z-index', '10')\n .style('pointer-events', 'none');\n\n const svg = this._svgContainer.append('svg').attr('height', `${container.offsetHeight}px`).attr('width', `${container.offsetWidth}px`);\n\n const showLabels = true;\n\n const axis = new Axis(svg, showLabels, options.xLabel, options.yLabel, options.unitOfMeasure);\n\n return axis;\n };\n}\n","import { select, Selection, pointer, ContainerElement } from 'd3-selection';\nimport { OverlayCallbacks } from './interfaces';\n\nexport class Overlay<T> {\n elm: Selection<HTMLDivElement, unknown, null, undefined>;\n source: HTMLDivElement | undefined;\n elements: { [propName: string]: Element } = {};\n listeners: { [propName: string]: OverlayCallbacks<T> } = {};\n enabled = true;\n\n constructor(caller: T, container: HTMLElement) {\n const con = select(container);\n this.elm = con.append('div').attr('id', 'overlay').style('z-index', '11').style('position', 'absolute');\n this.source = this.elm.node() ?? undefined;\n\n const { elm } = this;\n elm.on('resize', (event) => {\n const { width, height } = event.detail;\n elm.style('width', `${width}px`).style('height', `${height}px`);\n\n if (!this.enabled) {\n return;\n }\n\n Object.keys(this.listeners).forEach((key: string) => {\n const target = this.elements[key] ?? undefined;\n const ops = this.listeners[key];\n if (ops && ops.onResize) {\n requestAnimationFrame(() =>\n ops.onResize?.({\n target,\n source: this.source,\n caller,\n width,\n height,\n }),\n );\n }\n });\n });\n\n elm.on('mousemove', (event) => {\n if (!this.enabled) {\n return;\n }\n\n const [mx, my] = pointer(event, this.elm.node() as ContainerElement);\n Object.keys(this.listeners).forEach((key: string) => {\n const target = this.elements[key] ?? undefined;\n const ops = this.listeners[key];\n\n if (ops && ops.onMouseMove) {\n requestAnimationFrame(() =>\n ops.onMouseMove?.({\n x: mx,\n y: my,\n target,\n source: this.source,\n caller,\n }),\n );\n }\n });\n });\n\n elm.on('mouseout', () => {\n if (!this.enabled) {\n return;\n }\n Object.keys(this.listeners).forEach((key: string) => {\n const target = this.elements[key] || undefined;\n const ops = this.listeners[key];\n if (ops && ops.onMouseExit) {\n requestAnimationFrame(() =>\n ops.onMouseExit?.({\n target,\n source: this.source,\n caller,\n }),\n );\n }\n });\n });\n }\n\n create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement | undefined {\n const newElm = this.elm.append('div').style('position', 'relative').style('pointer-events', 'none').node();\n\n if (newElm != null) {\n this.elements[key] = newElm;\n if (callbacks) {\n this.listeners[key] = callbacks;\n }\n return newElm;\n } else {\n return undefined;\n }\n }\n\n register(key: string, callbacks: OverlayCallbacks<T>): void {\n this.listeners[key] = callbacks;\n }\n\n remove(key: string): void {\n const el = this.elements[key];\n if (el) {\n select(el).remove();\n delete this.elements[key];\n }\n delete this.listeners[key];\n }\n\n setZIndex(zIndex: number): void {\n this.elm.style('z-index', zIndex);\n }\n\n destroy(): void {\n this.source?.remove();\n }\n}\n\nexport const overlay = <T>(caller: T, container: HTMLElement): Overlay<T> => new Overlay<T>(caller, container);\n","import { IntersectionReferenceSystem } from './IntersectionReferenceSystem';\nimport { LayerManager } from './LayerManager';\nimport { Layer } from '../layers';\nimport { ControllerOptions } from './interfaces';\nimport { ZoomPanHandler } from './ZoomPanHandler';\nimport { LayerOptions, OnRescaleEvent, ReferenceSystemOptions } from '..';\nimport { Axis } from '../components';\nimport { overlay, Overlay } from './overlay';\nimport { HORIZONTAL_AXIS_MARGIN, VERTICAL_AXIS_MARGIN } from '../constants';\n\n/**\n * API for controlling data and layers\n */\nexport class Controller {\n private _referenceSystem: IntersectionReferenceSystem | undefined;\n\n private layerManager: LayerManager;\n private _overlay: Overlay<Controller>;\n\n /**\n * Interface to control layers, reference system, axis and overlay. overlay is created on instantiation, does not currently support opt-out.\n * @param options\n * @param options.container (required) Currently only supports HTMLElement\n * @param options.scaleOptions (optional) currently supports formats listed in examples below\n * @example scaleOptions = { xMin: 0, xMax: 100, yMin: 0, yMax: 100 }\n * @example scaleOptions = { xBounds: [0 , 100], yBounds: [0, 100] }\n * @param options.axisOptions (optional) creates axis with supplied labels, currently only supports creating axis on instantiation\n * @param options.layers (optional) list of layers\n * @param options.path (optional) creates a reference system based on an array of 3d coordinates\n * @param options.referenceSystem (optional) sets reference system, takes priority over path if both are supplied\n */\n constructor(options: ControllerOptions) {\n const { container, axisOptions, scaleOptions, referenceSystem, layers, path } = options;\n\n this._referenceSystem = referenceSystem || (path && new IntersectionReferenceSystem(path));\n\n this._overlay = overlay(this, container);\n\n this.layerManager = new LayerManager(this._overlay.elm.node() as HTMLElement, scaleOptions, axisOptions);\n if (layers) {\n this.layerManager.addLayers(layers);\n this.setOverlayZIndex(layers);\n }\n }\n\n /**\n * Sets reference system, overrides any existing reference systems in place\n * @param referenceSystem IntersectionReferenceSystem\n */\n setReferenceSystem(referenceSystem: IntersectionReferenceSystem): Controller {\n this._referenceSystem = referenceSystem;\n this.layerManager.setReferenceSystem(referenceSystem);\n return this;\n }\n\n /**\n * Creates new reference system based on path, overrides any existing reference systems in place\n * @param path array of coords\n * @param options optional\n * @param options.trajectoryAngle (optional) angle in degrees\n */\n updatePath(path: number[][], options?: ReferenceSystemOptions): Controller {\n this.setReferenceSystem(new IntersectionReferenceSystem(path, options));\n\n return this;\n }\n\n /**\n * Clears data from all mounted layers\n * @param includeReferenceSystem - (optional) if true also removes reference system, default is true\n */\n clearAllData(includeReferenceSystem = true): Controller {\n this.layerManager.clearAllData(includeReferenceSystem);\n return this;\n }\n\n /**\n * Adds layer to list, and initializes it\n * @param layer layer object\n * @param params (optional) adds additional parameters to the onUpdateEvent\n */\n addLayer(layer: Layer<unknown>, params?: LayerOptions<unknown>): Controller {\n this.layerManager.addLayer(layer, params);\n this.setOverlayZIndex(this.layerManager.getLayers());\n return this;\n }\n\n /**\n * Remove and unmount layer from list\n * @param layerId string id\n */\n removeLayer(layerId: string): Controller {\n this.layerManager.removeLayer(layerId);\n return this;\n }\n\n /**\n * Remove and unmount all layers from list\n */\n removeAllLayers(): Controller {\n this.layerManager.removeAllLayers();\n return this;\n }\n\n /**\n * Find first layer with given id, returns undefined if none are found\n * @param layerId string id\n */\n getLayer(layerId: string): Layer<unknown> | undefined {\n return this.layerManager.getLayer(layerId);\n }\n\n /**\n * Sets visibility to true and rescales the layer\n * @param layerId string id\n */\n showLayer(layerId: string): Controller {\n this.layerManager.showLayer(layerId);\n return this;\n }\n\n /**\n * Sets visibility to false\n * @param layerId string id\n */\n hideLayer(layerId: string): Controller {\n this.layerManager.hideLayer(layerId);\n return this;\n }\n\n /**\n * Adjust layers, axis, overlay, and zoom according to inputted dimensions\n * @param width (required)\n * @param height (required)\n */\n adjustToSize(width: number, height: number): Controller {\n this.layerManager.adjustToSize(width, height);\n\n const dimensions = { width: Math.max(width - HORIZONTAL_AXIS_MARGIN, 0), height: Math.max(height - VERTICAL_AXIS_MARGIN, 0) };\n this.overlay.elm.dispatch('resize', { detail: dimensions, bubbles: true, cancelable: true });\n\n return this;\n }\n\n /**\n * Set new viewport\n * @param cx - center X pos\n * @param cy - center Y pos\n * @param displ - displacement\n * @param duration - duration of transition\n */\n setViewport(cx?: number, cy?: number, displacement?: number, duration?: number): Controller {\n this.zoomPanHandler.setViewport(cx, cy, displacement, duration);\n return this;\n }\n\n /**\n * Sets bounds for zoom and pan handler\n * @param xBounds - domain in x-direction\n * @param yBounds - domain in y-direction\n */\n setBounds(xBounds: [number, number], yBounds: [number, number]): Controller {\n this.zoomPanHandler.setBounds(xBounds, yBounds);\n return this;\n }\n\n /**\n * Display both axes\n */\n showAxis(): Controller {\n this.layerManager.showAxis();\n return this;\n }\n\n /**\n * Hide both axes\n */\n hideAxis(): Controller {\n this.layerManager.hideAxis();\n return this;\n }\n\n /**\n * Shows labels in x and y\n */\n showAxisLabels(): Controller {\n this.layerManager.showAxisLabels();\n return this;\n }\n\n /**\n * Hide labels in x and y\n */\n hideAxisLabels(): Controller {\n this.layerManager.hideAxisLabels();\n return this;\n }\n\n /**\n * Sets domain offset, offset is subtracted from domain\n * @param x\n * @param y\n */\n setAxisOffset(x: number, y: number): Controller {\n this.layerManager.setAxisOffset(x, y);\n return this;\n }\n\n /**\n * Sets domain offset in x-direction, offset is subtracted from domain\n * @param x\n */\n setXAxisOffset(x: number): Controller {\n this.layerManager.setXAxisOffset(x);\n return this;\n }\n\n /**\n * Sets domain offset in y-direction, offset is subtracted from domain\n * @param y\n */\n setYAxisOffset(y: number): Controller {\n this.layerManager.setYAxisOffset(y);\n return this;\n }\n\n /**\n * Defines min and max of how much one can zoom\n * @param zoomlevels\n */\n setZoomLevelBoundary(zoomlevels: [number, number]): Controller {\n this.zoomPanHandler.setZoomLevelBoundary(zoomlevels);\n return this;\n }\n\n /**\n * Defines how far in one can zoom\n * @param zoomlevel\n */\n setMaxZoomLevel(zoomlevel: number): Controller {\n this.zoomPanHandler.setMaxZoomLevel(zoomlevel);\n return this;\n }\n\n /**\n * Defines how far out one can zoom\n * @param zoomlevel\n */\n setMinZoomLevel(zoomlevel: number): Controller {\n this.zoomPanHandler.setMinZoomLevel(zoomlevel);\n return this;\n }\n\n /**\n * Destroy Controller\n * Convenience method for removing from DOM and clearing references\n */\n destroy(): Controller {\n this.layerManager.destroy();\n this._overlay.destroy();\n this._referenceSystem = undefined;\n return this;\n }\n\n private getHighestZIndex(layers: Layer<unknown>[]): number {\n const highestZIndex = layers.length > 0 ? layers.reduce((max, layers) => (max.order > layers.order ? max : layers)).order : 1;\n return highestZIndex;\n }\n\n private setOverlayZIndex(layers: Layer<unknown>[]): void {\n const highestZIndex = this.getHighestZIndex(layers);\n this.overlay.setZIndex(highestZIndex + 2);\n }\n\n get overlay(): Overlay<Controller> {\n return this._overlay;\n }\n\n get referenceSystem(): IntersectionReferenceSystem | undefined {\n return this._referenceSystem;\n }\n\n get zoomPanHandler(): ZoomPanHandler {\n return this.layerManager.zoomPanHandler;\n }\n\n get axis(): Axis | undefined {\n return this.layerManager.axis;\n }\n\n get currentStateAsEvent(): OnRescaleEvent {\n return this.zoomPanHandler.currentStateAsEvent();\n }\n}\n"],"names":["identity$4","x","top","right","bottom","left","epsilon","translateX","translateY","y","number","scale","d","center","offset","entering","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","values","format","identity","spacing","range","range0","range1","position","selection","path","tick","tickExit","tickEnter","line","text","p","_","axisRight","axisBottom","ascending","a","b","descending","bisector","f","compare1","compare2","delta","zero","lo","hi","mid","i","ascendingBisect","bisectRight","InternMap","entries","key","keyof","value","intern_get","intern_set","intern_delete","_intern","_key","e10","e5","e2","tickSpec","start","stop","count","step","power","error","factor","i1","i2","inc","ticks","reverse","n","tickIncrement","tickStep","max","valueof","index","sum","initRange","domain","implicit","ordinal","unknown","define","constructor","factory","prototype","extend","parent","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","m","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","o","rgb","opacity","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","min","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$3","linear","t","exponential","gamma","nogamma","constant","interpolateRgb","rgbGamma","end","colorRgb","numberArray","c","isNumberArray","genericArray","nb","na","date","interpolateNumber","object","reA","reB","one","interpolateString","bi","am","bm","bs","q","interpolate$1","string","interpolateRound","degrees","decompose","e","scaleX","scaleY","skewX","svgNode","parseCss","parseSvg","interpolateTransform","parse","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","rotate","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","p1","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","S","d1","b0","b1","r0","r1","coshr0","u","_1","_2","_4","quantize","interpolator","samples","constants","unit","normalize","clamper","bimap","interpolate","d0","polymap","j","bisect","copy","source","target","transformer","interpolateValue","untransform","clamp","piecewise","output","input","rescale","continuous","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","width","length","formatNumerals","numerals","re","formatSpecifier","specifier","match","FormatSpecifier","formatTrim","out","i0","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$1","map","prefixes","formatLocale","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","defaultLocale","precisionFixed","precisionPrefix","precisionRound","linearish","prestep","maxIter","Axis","mainGroup","showLabels","labelXDesc","labelYDesc","unitOfMeasure","options","name","res","scaleLinear","_showLabels","gx","labelx","_scaleY","height","gy","labely","_scaleX","yAxis","xAxis","event","offsetX","offsetY","xScale","yScale","xBounds","yBounds","xRange","yRange","flipX","flip","flipY","label","uom","labelX","labelY","DEG2RAD","radians","deg","seqI","steps","incr","add","sub","sumsqr","magnitude","sq","len","dist","dot","mix","clamp$1","modify","modifier","isZeroVector","RAD2DEG","v","rad","cr","sr","angleRight","signedAngle","phi","Vector2","_i","val","vector","_this","extendStatics","__extends","__","__assign","extrapolateControlPoint","getControlPoints","idx","points","closed","p2","p3","maxIndex","getSegmentIndexAndT","ct","nPoints","func","reduce","copyValues","binarySearch","targetValue","accumulatedValues","lMid","EPS","cuberoot","getQuadRoots","D","getCubicRoots","roots","v1","v2","cross","ax","ay","az","bx","by","bz","sumOfSquares","distance","sqrs","squared","rotate3d","angle","vx","vy","vz","tx","ty","calcKnotSequence","alpha","deltaT","t1","t2","calculateCoefficients","tension","knotSequence","coefficientsList","v0","v3","t0","t3","valueAtT","coefficients","derivativeAtT","secondDerivativeAtT","findRootsOfT","lookup","evaluateForT","AbstractCurveMapper","onInvalidateCache","_a","SegmentedCurveMapper","_super","subDivisions","current","lengths","last","arcLengths","il","targetArcLength","lengthBefore","al","totalLength","tIdx","subIdx","l1","lut","maxOrder","NumericalCurveMapper","nQuadraturePoints","nInverseSamples","order","slopes","ti","dtln","slope","nCoeff","dis","cis","li_prev","tdi_prev","li","lDiff","tdi","tdi_next","si","di","ci","z","T","tl","ld","CurveInterpolator","curveMapper","clampInput","dt","normal","ddt","segments","from","to","tangents","normals","binormals","vec","theta","tangent","curvature","direction","denominator","signedCurvature","cp","dotProduct","_loop_1","this_1","w0_1","w1_1","valid","coefficients_1","_loop_2","_b","bbox","returnType","pts","point","threshold","pu","minDist","minU","minT","margin","solutions","vmin","vmax","ts","nt","cacheKey","cacheForceUpdate","positions","nSamples","prev","initialValue","acc","isClosed","RootFinder","maxIterations","minLimit","maxLimit","th","ArcLength","tolerance","minDepth","maxDepth","calcRec","aVal","bVal","span","depth","midVal","spanA","spanB","tol","lastPos","pos","BinarySearch","searchValue","ih","ExtendedCurveInterpolator","arcLength","iterations","normalizedLength","fromLength","toLength","fromIndex","fromLl","fromLh","toIndex","toLl","toLh","TENSION","ARC_DIVISIONS","THRESHOLD_DIRECTION_DISTANCE","DEFAULT_START_EXTEND_LENGTH","DEFAULT_END_EXTEND_LENGTH","CURTAIN_SAMPLING_ANGLE_THRESHOLD","CURTAIN_SAMPLING_INTERVAL","defaultOptions","IntersectionReferenceSystem","arcDivisions","calculateDisplacementFromBottom","displacement","trajVector","negativeTrajVector","curtain","cl","startMd","endMd","includeStartEnd","prevAngle","startPoint","pointsBetween","endPoint","displacementFromStart","ls","trajectory","extensionStart","extensionEnd","refStart","refEnd","preSteps","curveSteps","postSteps","curvePoints","numPoints","startExtensionLength","endExtensionLength","startExtensionNumPoints","endExtensionNumPoints","startVec","startExtensionStepLength","curveStepPoints","endVec","endExtensionStepLength","trajectoryAngle","angleInRad","xhtml","namespaces","namespace","creatorInherit","document","uri","creatorFixed","fullname","creator","none","selector","selection_select","select","groups","subgroups","subgroup","node","subnode","Selection","array","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","childFirst","selection_selectChild","filter","children","childrenFilter","selection_selectChildren","selection_filter","sparse","update","selection_enter","EnterNode","datum","child","next","constant$2","bindIndex","enter","exit","data","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","selection_data","bind","arraylike","enterGroup","updateGroup","exitGroup","previous","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","groups0","groups1","m0","merges","group0","group1","merge","selection_order","selection_sort","compare","compareNode","sortgroups","sortgroup","selection_call","callback","selection_nodes","selection_node","selection_size","size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","create","constantNull","selection_insert","before","remove","selection_remove","selection_cloneShallow","clone","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","listener","parseTypenames","typenames","onRemove","typename","on","onAdd","selection_on","dispatchEvent","params","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","root","selection_selection","sourceEvent","pointer","svg","rect","noop","dispatch","Dispatch","types","get","set","that","args","nonpassivecapture","noevent$1","dragDisable","view","noevent","yesdrag","noclick","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","now","clearNow","Timer","timer","delay","time","sleep","timerFlush","wake","nap","poke","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","id","timing","schedules","init","self","tween","interrupt","active","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","value1","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","styleNull","style","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","resolve","reject","cancel","selection_prototype","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","constant$1","ZoomEvent","Transform","location","nopropagation","defaultFilter","defaultExtent","defaultTransform","defaultWheelDelta","defaultTouchable","defaultConstrain","extent","translateExtent","dx0","dx1","dy0","dy1","constrain","wheelDelta","touchable","scaleExtent","duration","listeners","touchstarting","touchfirst","touchending","touchDelay","wheelDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","collection","gesture","k0","k1","centroid","w","clean","Gesture","wheelidled","currentTarget","mousemoved","mouseupped","x0","y0","dragEnable","touches","started","l0","dp","dl","DEFAULT_MIN_ZOOM_LEVEL","DEFAULT_MAX_ZOOM_LEVEL","ZoomPanHandler","elm","onRescale","enabled","xSpan","zFactor","enableTranslateExtent","translateBoundsX","translateBoundsY","x1","y1","x2","y2","ppu","viewportRatio","currentTransform","xRatio","yRatio","currentStateAsEvent","ratio","isXInverted","isYInverted","newWidth","unitsPerPixels","newXSpan","newYSpan","shiftx","shifty","cx","cy","displ","container","calculateTransform","xd","dspan","yd","xdispl","widthOrAutoAdjust","force","oldWidth","oldHeight","recalculateZoomTransform","containerEl","containerWidth","containerHeight","newHeight","rx1","rx2","zoomIdentity","updateTranslateExtent","zoomlevels","zoomlevel","zoomLevels","Layer","opts","loading","shouldBeInteractive","referenceSystem","includeReferenceSystem","visible","_layerId","DEFAULT_LAYER_WIDTH","DEFAULT_LAYER_HEIGHT","HORIZONTAL_AXIS_MARGIN","VERTICAL_AXIS_MARGIN","EXAGGERATED_DIAMETER","HOLE_OUTLINE","SCREEN_OUTLINE","SHOE_WIDTH","SHOE_LENGTH","DEFAULT_TEXTURE_SIZE","SURFACE_LINE_WIDTH","CanvasLayer","_opacity","_order","_interactive","visibility","interactive","canvas","ctx","flippedX","flippedY","HTMLLayer","SVGLayer","PixiRenderApplication","pixiRenderOptions","autoDetectRenderer","Container","renderType","glContext","Renderer","_c","RENDERER_TYPE","_d","_e","PixiLayer","isVisible","styles","pair","layerId","assertNever","isPAndASymbol","item","isCementSqueeze","isCementPlug","foldCompletion","fScreen","fTubing","fSymbol","completion","foldPerforationSubKind","subKind","shouldPerforationStartAtHoleDiameter","perf","shouldPerforationStartAtCasingDiameter","hasPacking","hasFracLines","hasSpikes","isSubkindCasedHoleGravelPack","isSubKindPerforation","isSubKindCasedHoleFracPack","isOpenHoleFracPack","isSubKindCasedHoleFracturation","intersect","defaultInternalLayerOptions","defaultHoleOptions","defaultCasingOptions","defaultPerforationOptions","defaultCementOptions","defaultCementSqueezeOptions","defaultScreenOptions","defaultTubingOptions","defaultCementPlugOptions","DEFAULT_HORIZONTAL_PADDING","DEFAULT_VERTICAL_PADDING","pixelsPerUnit","calcSize","isOverlappingHorizontally","r2","r1x2","r2x2","isOverlapping","horizontalPadding","verticalPadding","r1y2","r2y2","getOverlap","getOverlapOffset","DEFAULT_MIN_FONT_SIZE","DEFAULT_MAX_FONT_SIZE","DEFAULT_FONT_SIZE_FACTOR","DEFAULT_OFFSET_MIN","DEFAULT_OFFSET_MAX","DEFAULT_OFFSET_FACTOR","DEFAULT_BACKGROUND_COLOR","DEFAULT_BACKGROUND_PADDING","DEFAULT_BACKGROUND_BORDER_RADIUS","getValueOrDefault","defaultValue","Location","CalloutCanvasLayer","title","fontSize","dotX","dotY","placeLeft","textX","inverseTextX","textY","isPanning","groupFilter","isLeftToRight","filtered","callout","calloutBB","borderRadius","titleWidth","labelWidth","xMin","yMin","xMax","yMax","font","fontStyle","radius","boundingBox","annotations","_scale","alignment","nodes","ax1","ay1","prevNode","currentNode","overlap","RADIX_SIXTEEN","HEX_STRING_LENGTH","convertColor","colorStr","colorToCSSColor","DEFAULT_MAX_DEPTH","GeomodelCanvasLayer","polygons","polygon","topIsValid","endIsReached","_f","paths","penDown","mapped","findIndexOfSample","linearSearchLimit","aPos","bPos","splitAt","splitPos","_g","_h","findSampleAtPos","topLimit","bottomLimit","mapPick","groupName","getReferencePicks","picks","getEntryPicks","formationPicks","getFilteredExitPicks","obj","getPicksData","picksData","unitDto","findGaps","arr","gaps","itm","transformStratColumn","units","joinPicksAndStratColumn","stratColumn","transformed","nonUnitPicks","joined","matches","pairJoinedPicks","pairs","sorted","pairWithName","isTop","isBase","base","pairWith","transformFormationData","itemstack","unitPicks","first","createColorTable","colorMap","colorDomain","_v","colorScale","getSeismicOptions","info","getSeismicInfo","minX","maxX","minTvdMsl","maxTvdMsl","absMax","dmin","dmax","generateSeismicSliceImage","colormap","colorTableSize","colorTable","colorFactor","val1","val2","col","black","imageData","TRANSLUCENT_RED","WHITE","generateSurfaceData","surfaceData","filteredSurfaces","mappedSurfaces","mapSurfaceData","stratGroups","stratigraphies","combineSurfacesAndStratColumn","sortStratigraphies","lines","getSurfaceLines","surfaceAreas","generateSurfaceAreas","mapGroups","areas","generateGroupAreas","surfaces","isValid","unassignedColorScale","firstUnit","defaultGroupName","stratUnit","findStratcolumnUnit","stratigrafies","aAge","bAge","unitname","temp","displayName","getColorFromUnit","scaleOrdinal","findBestMatchingBaseIndex","nextIndex","baseSurfaceIndex","candidate","isAnchestor","descendant","projection","surface","baseIndex","baseValue","getBaseValue","datapoint","stepSize","extensionLength","thresholdRelativeDist","thresholdDirectionDist","pathSteps","generateProjectedWellborePath","poslog","simplify","projectCurtain","generateProjectedTrajectory","defaultIntersectionAngle","relativeDist","radCurtainDirection","getDirectionVector","extensionLengthStart","firstPoints","initial","endPoints","inputArr","maxOffset","maxDistance","o0","o1","a0","a1","sim","proximity","dir","origin","DEFAULT_MARGINS","DEFAULT_TEXT_COLOR","DEFAULT_FONT","MAX_FONT_SIZE_IN_WORLD_COORDINATES","GeomodelLabelsLayer","surfaceArea","nextSurfaceArea","maxFontSizeInWorldCoordinates","isXFlipped","isLabelsOnLeftSide","marginsInWorldCoords","minFontSize","fontSizeInWorldCoords","leftEdge","rightEdge","surfaceAreaLeftEdge","surfaceAreaRightEdge","labelMetrics","labelLengthInWorldCoords","labelRightEdge","labelLeftEdge","startPos","portionOfLabelLengthUsedForPosCalc","topEdge","bottomEdge","dirSteps","posSteps","posStep","dirStep","topData","topPos","bottomData","bottomPos","thickness","initialDirVec","areaDir","scaledAngle","textAngle","textDir","area","sumAndCount","avgTopDepth","topmostSurfaceNotDrawnYet","surfaceLine","hexString","alternativeSurfaceData","currentSurfaceIndex","alternativeY","usedY","altY","altSurface","initalVector","startY","vecAtEnd","tmpVec","minReductionAngle","maxReductionAngle","angleReductionExponent","alternativeSurfaceBottomData","angles","topY","bottomY","alternativeBottomY","usedBottomY","refAngle","offsetAngles","factors","firstValidPoint","dx2","dy2","wbBBox","screenLeftEdge","screenRightEdge","leftLimit","rightLimit","spaceOnLeftSide","spaceOnRightSide","spaceOnLeftSideInScreenCoordinates","spaceOnRightSideInScreenCoordinates","DEFAULT_Y_BOTTOM","GeomodelLayerV2","Graphics","lineData","MINORCOLOR","MAJORCOLOR","MINORWIDTH","MAJORWIDTH","GridLayer","minorWidth","minorColor","majorWidth","majorColor","xDomain","yDomain","ry1","ry2","xminticks","yminticks","xscale","xticks","yscale","yticks","ImageLayer","img","calcWidth","calcHeight","dashLineOptionsDefault","_DashLine","graphics","PIXI","texture","closePath","gap","cos","sin","place","dashIndex","dashStart","dashX","dashSize","remaining","lastDash","matrix","radiusX","radiusY","lineStyle","textureStart","DashLine","pointToVector","vectorToPoint","Point","createNormals","_coord","curr","offsetPoint","offsetPoints","vectors","overlaps","top1","bottom1","top2","bottom2","strictlyOverlaps","uniq","findIntersectingItems","otherStrings","holes","overlappingHoles","hole","overlappingOuterStrings","casing","getUniqueDiameterChangeDepths","intervalStart","intervalEnd","diameterIntervals","trimmedChangedDepths","getInnerStringDiameter","stringType","findCementOuterDiameterAtDepth","attachedStrings","nonAttachedStrings","attachedStringAtDepth","casingOrCompletion","attachedOuterDiameter","outerCasingAtDepth","holeAtDepth","findPerforationOuterDiameterAtDepth","perforationSubKind","findCementPlugInnerDiameterAtDepth","minimumDiameter","nonAttachedStringAtDepth","createComplexRopeSegmentsForCement","cement","casings","exaggerationFactor","getPoints","splitByReferencedStrings","bottomOfCement","outerDiameterIntervals","nextDepth","diameterAtChangeDepth","referenceIds","createComplexRopeSegmentsForCementSqueeze","squeeze","diameterAtDepth","createComplexRopeSegmentsForCementPlug","plug","innerDiameterIntervals","createGradientFill","canvasCtx","firstColor","secondColor","startPctOffset","gradient","createHoleBaseTexture","Texture","createScreenTexture","scalingFactor","baseLineWidth","distanceBetweenLines","createTubingTexture","innerColor","outerColor","innerColorStart","innerColorEnd","createCementTexture","lineWidth","createCementPlugTexture","createCementSqueezeTexture","createTubularRenderingObject","pathPoints","rightPath","createCasingInterval","createCasingWindowInterval","getCasingIntervalsWithWindows","result","cw","intervals","lastBottom","currentWindow","startCasingInterval","updatedLastBottom","windowStart","windowEnd","windowInterval","nextLastBottom","endCasingInterval","newIntervals","prepareCasingRenderObject","getPathPoints","exaggeratedDiameter","exaggeratedRadius","exaggeratedInnerRadius","casingWallWidth","sections","casingInterval","leftPath","createComplexRopeSegmentsForPerforation","perforation","drawPacking","perforationOptions","packingOpacity","yellow","xy","wh","drawFracLines","extendedPerfShapeDiameter","startAt","fracLineCurve","amountOfSpikes","spikeWidth","diameter","fracLineLength","spikeLength","fracLines","controlPoint1","middle","controlPoint2","drawSpikes","errorTexture","errorMessage","existingContext","WRAP_MODES","Rectangle","groupD8","createPerforationCanvas","perfShape","createPerforationTexture","compareIntersectingPerforationsBy","targetPerf","comparedPerforations","compareFunc","createSubkindPerforationTexture","otherPerforations","compareBy","intersectionsWithCasedHoleGravel","intersectsWithCasedHoleFracturation","intersectionsWithCasedHoleFracPack","openPerforationSpikeColor","createSubkindCasedHoleFracturationTexture","createSubkindCasedHoleFracPackTexture","createSubkindCasedHoleGravelPackTexture","createSubkindOpenHoleGravelPackTexture","createSubkindOpenHoleFracPackTexture","_perforation","createPerforationPackingTexture","createPerforationFracLineTexture","createPerforationSpikeTexture","ComplexRopeGeometry","MeshGeometry","pointCount","segment","vertexBuffer","uvBuffer","indexBuffer","uvs","indices","segmentCount","maxDiameter","amount","uvIndex","indicesIndex","indexCount","textureWidth","total","lastIndex","lastPoint","nextPoint","perpX","perpY","vertices","perpLength","num","ComplexRope","Mesh","ropeGeometry","meshMaterial","MeshMaterial","renderer","geometry","FixedWidthSimpleRopeGeometry","FixedWidthSimpleRope","UniformTextureStretchRopeGeometry","prevPoint","UniformTextureStretchRope","foldInterlacedRenderObjects","fCasing","fCement","fCementSqueeze","renderObject","defaultSchematicLayerOptions","_SchematicLayer","coords","component","referenceDiameter","symbolKey","maxHoleDiameter","holeObject","holeOptions","casingRenderObject","casingOptions","casingSolidColorNumber","casingLineColorNumber","section","outlineClosureType","casingEnd","casingRadius","shoeEdge","shoeTipPoint","shoeTipNormal","shoeTip","shouldRecalculate","internalLayerOptions","entryFound","keyFound","baseYSpan","baseDomain","tint","rope","SimpleRope","lineColor","outlineClosure","lineAlignment","leftPathReverse","startPointRight","startPointLeft","windowOptions","flippedPaths","linePath","dashedPath","dashedAlignment","solidAlignment","startPointLinePath","dashedLine","startPointDashedPath","currentPoint","holeSizes","cements","symbols","pAndA","perforations","casingRenderObjects","cementShapes","cementSqueezes","remainingPAndA","squeezes","cementSqueezesShape","casingRO","cementRO","cementSqueezesRO","packings","spikes","perfShapesByDiameter","dict","ps","perfShapesWithSameDiameter","symbolRenderObject","existingKeys","cementPlug","cementPlugOptions","cementPlugSegments","baseTexture","textureDiameter","sidePadding","cementRenderObject","zIndex","foundCementShape","foundCementSqueezes","shoeWidth","shoeLength","shoeCoords","shoeCoords2","cementOptions","cementSqueezeOptions","screenOptions","tubingOptions","SchematicLayer","SeismicCanvasLayer","image","pi","tau","tauEpsilon","append","strings","appendRound","digits","Path","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","da","withPath","shape","Linear","curveLinear","defined","curve","pointX","pointY","defined0","buffer","Basis","curveBasis","BasisClosed","curveBasisClosed","Bundle","beta","curveBundle","custom","bundle","Cardinal","curveCardinal","cardinal","CatmullRom","x23","y23","curveCatmullRom","catmullRom","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","px","controlPoints","py","curveNatural","Step","curveStep","stepBefore","stepAfter","CURVE_CATMULL_ROM_ALPHA","CURVE_CARDINAL_TENSION","CURVE_BUNDLE_BETA","WellborepathLayer","strokeWidth","stroke","transformedData","curveFactory","curveType","curveMonotoneX","curveMonotoneY","curveStepAfter","curveStepBefore","foldReferenceLine","refLine","ReferenceLineLayer","dashed","solid","wavy","waveHeight","wavePeriod","xOffset","textColor","textOffsetX","LayerManager","scaleOptions","axisOptions","layers","layer","rescaleEvent","highestZIndex","layersWidth","layersHeight","resizeEvent","irs","Overlay","caller","con","ops","mx","my","callbacks","newElm","el","overlay","Controller","dimensions"],"mappings":"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B,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,kBAAgB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,qBAAmB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,o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AAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,gBAAe,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,kBAAgB,gBAAe,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,qBAAmB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,kBAAgB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,kBAAgB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,CAAC,GAAE,CAAC,CAAC,oBAAkB,mBAAkB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,mBAAkB,CAAC,GAAE,CAAC,CAAC,oBAAkB,mBAAkB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,52,53,54,55,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196]}
1
+ {"version":3,"file":"index.mjs","sources":["../node_modules/d3-axis/src/identity.js","../node_modules/d3-axis/src/axis.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/sum.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/quantize.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../src/components/axis.ts","../node_modules/@equinor/videx-math/dist/index.esm.js","../node_modules/@equinor/videx-linear-algebra/dist/index.esm.js","../node_modules/@equinor/videx-vector2/dist/index.esm.js","../node_modules/curve-interpolator/dist/index.esm.js","../src/utils/root-finder.ts","../src/utils/arc-length.ts","../src/utils/binary-search.ts","../src/control/ExtendedCurveInterpolator.ts","../src/control/IntersectionReferenceSystem.ts","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../src/control/ZoomPanHandler.ts","../src/layers/base/Layer.ts","../src/constants.ts","../src/layers/base/CanvasLayer.ts","../src/layers/base/HTMLLayer.ts","../src/layers/base/SVGLayer.ts","../src/layers/base/PixiLayer.ts","../src/layers/schematicInterfaces.ts","../src/utils/text.ts","../src/layers/CalloutCanvasLayer.ts","../src/utils/color.ts","../src/layers/GeomodelCanvasLayer.ts","../src/datautils/findsample.ts","../src/datautils/picks.ts","../src/datautils/colortable.ts","../src/datautils/seismicimage.ts","../src/datautils/surfacedata.ts","../src/datautils/trajectory.ts","../src/layers/GeomodelLabelsLayer.ts","../src/layers/GeomodelLayerV2.ts","../src/layers/GridLayer.ts","../src/layers/ImageCanvasLayer.ts","../src/vendor/pixi-dashed-line/index.ts","../src/utils/vectorUtils.ts","../src/datautils/schematicShapeGenerator.ts","../src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts","../src/layers/CustomDisplayObjects/ComplexRope.ts","../src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts","../src/layers/CustomDisplayObjects/FixedWidthSimpleRope.ts","../src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts","../src/layers/CustomDisplayObjects/UniformTextureStretchRope.ts","../src/layers/SchematicLayer.ts","../src/layers/SeismicCanvasLayer.ts","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/bundle.js","../node_modules/d3-shape/src/curve/cardinal.js","../node_modules/d3-shape/src/curve/catmullRom.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../src/layers/WellborePathLayer.ts","../src/layers/ReferenceLineLayer.ts","../src/control/LayerManager.ts","../src/control/overlay.ts","../src/control/MainController.ts"],"sourcesContent":["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 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","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(value);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\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 sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\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","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\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 number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\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","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\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","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","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","import { axisRight, axisBottom } from 'd3-axis';\nimport { Selection } from 'd3-selection';\nimport { ScaleLinear, scaleLinear } from 'd3-scale';\nimport { OnResizeEvent, OnRescaleEvent } from '../interfaces';\n\nexport type Options = {\n offsetX: number;\n offsetY: number;\n visible: boolean;\n};\n\nexport class Axis {\n private mainGroup: Selection<SVGSVGElement, unknown, null, undefined>;\n private _scaleX: ScaleLinear<number, number>;\n private _scaleY: ScaleLinear<number, number>;\n private _showLabels = true;\n private _labelXDesc: string;\n private _labelYDesc: string;\n private _unitOfMeasure: string;\n private _offsetX = 0;\n private _offsetY = 0;\n private _flipX = false;\n private _flipY = false;\n private visible = true;\n\n constructor(mainGroup: Axis['mainGroup'], showLabels = true, labelXDesc: string, labelYDesc: string, unitOfMeasure: string, options?: Options) {\n this.mainGroup = mainGroup;\n this._showLabels = showLabels;\n this._labelXDesc = labelXDesc;\n this._labelYDesc = labelYDesc;\n this._unitOfMeasure = unitOfMeasure;\n if (options && options.offsetX) {\n this._offsetX = options.offsetX;\n }\n if (options && options.offsetX) {\n this._offsetY = options.offsetY;\n }\n if (options && options.visible) {\n this.visible = options.visible;\n }\n this.mainGroup.style('pointer-events', 'none');\n\n this._scaleX = scaleLinear().domain([0, 1]).range([0, 1]);\n this._scaleY = scaleLinear().domain([0, 1]).range([0, 1]);\n }\n\n private renderLabelx(): Selection<SVGTextElement, unknown, null, undefined> {\n const { _labelXDesc: labelXDesc, _unitOfMeasure: unitOfMeasure, _showLabels, _scaleX: scaleX } = this;\n const [, width] = scaleX.range();\n const gx = this.renderGx();\n\n let labelx: Selection<SVGTextElement, unknown, null, undefined> = gx.select('text.axis-labelx');\n if (_showLabels) {\n if (labelx.empty()) {\n labelx = gx\n .append('text')\n .attr('class', 'axis-labelx')\n .attr('fill', 'rgba(0,0,0,0.3)')\n .style('text-anchor', 'middle')\n .style('font-weight', '800')\n .style('font-size', '10px')\n .text(`${labelXDesc} (${unitOfMeasure})`);\n }\n } else {\n labelx.remove();\n }\n labelx.attr('transform', `translate(${width! / 2},-4)`);\n return labelx;\n }\n\n private renderLabely(): Selection<SVGTextElement, unknown, null, undefined> {\n const { _labelYDesc: labelYDesc, _unitOfMeasure: unitOfMeasure, _showLabels, _scaleY } = this;\n const [, height] = _scaleY.range();\n const gy = this.renderGy();\n\n let labely: Selection<SVGTextElement, unknown, null, undefined> = gy.select('text.axis-labely');\n if (_showLabels) {\n if (labely.empty()) {\n labely = gy\n .append('text')\n .attr('class', 'axis-labely')\n .attr('fill', 'rgba(0,0,0,0.3)')\n .style('text-anchor', 'middle')\n .style('font-weight', '800')\n .style('font-size', '10px')\n .text(`${labelYDesc} (${unitOfMeasure})`);\n }\n labely.attr('transform', `translate(-10,${height! / 2})rotate(90)`);\n } else {\n labely.remove();\n }\n return labely;\n }\n\n private renderGy(): Selection<SVGGElement, unknown, null, undefined> {\n const { _scaleX, _scaleY } = this;\n const yAxis = axisRight(_scaleY) as (selection: Selection<SVGGElement, unknown, null, undefined>, ...args: unknown[]) => void;\n const [, width] = _scaleX.range();\n const gy = this.createOrGet('y-axis');\n gy.call(yAxis);\n gy.attr('transform', `translate(${width},0)`);\n\n return gy;\n }\n\n private renderGx(): Selection<SVGGElement, unknown, null, undefined> {\n const { _scaleX, _scaleY } = this;\n const xAxis = axisBottom(_scaleX) as (selection: Selection<SVGGElement, unknown, null, undefined>, ...args: unknown[]) => void;\n const [, height] = _scaleY.range();\n\n const gx = this.createOrGet('x-axis');\n gx.attr('transform', `translate(0 ${height})`);\n gx.call(xAxis);\n return gx;\n }\n\n private createOrGet = (name: string): Selection<SVGGElement, unknown, null, undefined> => {\n const { mainGroup } = this;\n let res: Selection<SVGGElement, unknown, null, undefined> = mainGroup.select(`g.${name}`);\n if (res.empty()) {\n res = mainGroup.append('g').attr('class', name);\n }\n return res;\n };\n\n render(): void {\n this.renderLabelx();\n this.renderLabely();\n }\n\n onResize(event: OnResizeEvent): void {\n this.mainGroup.attr('height', `${event.height}px`).attr('width', `${event.width}px`);\n }\n\n onRescale(event: OnRescaleEvent): void {\n const { _scaleX, _scaleY, offsetX, offsetY } = this;\n const { xScale, yScale } = event;\n const xBounds = xScale.domain() as [number, number];\n const yBounds = yScale.domain() as [number, number];\n\n const xRange = xScale.range();\n const yRange = yScale.range();\n\n _scaleX.domain([xBounds[0] - offsetX, xBounds[1] - offsetX]).range(xRange);\n _scaleY.domain([yBounds[0] - offsetY, yBounds[1] - offsetY]).range(yRange);\n this.flipX(this._flipX);\n this.flipY(this._flipY);\n\n if (this.visible) {\n this.render();\n }\n }\n\n show(): Axis {\n this.visible = true;\n this.mainGroup.attr('visibility', 'visible');\n this.render();\n return this;\n }\n\n hide(): Axis {\n this.visible = false;\n this.mainGroup.attr('visibility', 'hidden');\n return this;\n }\n\n flipX(flipX: boolean): Axis {\n this._flipX = flipX;\n const domain = this._scaleX.domain() as [number, number];\n const flip = flipX ? -1 : 1;\n this._scaleX.domain([flip * domain[0], flip * domain[1]]);\n return this;\n }\n\n flipY(flipY: boolean): Axis {\n this._flipY = flipY;\n const domain = this._scaleY.domain() as [number, number];\n const flip = flipY ? -1 : 1;\n this._scaleY.domain([flip * domain[0], flip * domain[1]]);\n return this;\n }\n\n showLabels(): Axis {\n this._showLabels = true;\n this.render();\n return this;\n }\n\n hideLabels(): Axis {\n this._showLabels = false;\n this.render();\n return this;\n }\n\n setLabelX(label: string): Axis {\n this._labelXDesc = label;\n return this;\n }\n\n setLabelY(label: string): Axis {\n this._labelYDesc = label;\n return this;\n }\n\n setUnitOfMeasure(uom: string): Axis {\n this._unitOfMeasure = uom;\n return this;\n }\n\n setLabels(labelX: string, labelY: string, unitOfMeasure: string): Axis {\n this._labelXDesc = labelX;\n this._labelYDesc = labelY;\n this._unitOfMeasure = unitOfMeasure;\n return this;\n }\n\n get offsetX(): number {\n return this._offsetX;\n }\n\n set offsetX(offset: number) {\n this._offsetX = offset;\n }\n\n get offsetY(): number {\n return this._offsetY;\n }\n\n set offsetY(offset: number) {\n this._offsetY = offset;\n }\n\n get scaleX(): ScaleLinear<number, number> {\n return this._scaleX.copy();\n }\n\n get scaleY(): ScaleLinear<number, number> {\n return this._scaleY.copy();\n }\n}\n","const RAD2DEG=180/Math.PI,DEG2RAD=Math.PI/180,TAU=2*Math.PI;function clamp(value,min=0,max=1){return value<min?min:value>max?max:value}function step(edge,x){return x>=edge?1:0}function smoothstep(edge0,edge1,x){const t=clamp((x-edge0)/(edge1-edge0));return t*t*(3-2*t)}function lerp(a,b,t){const m=clamp(t,0,1);return a*(1-m)+b*m}function inverseLerp(a,b,value){return clamp((value-a)/(b-a),0,1)}function round(value,digits=1){const f=Math.pow(10,digits);return Math.round(value*f)/f}function radians(deg){return deg*DEG2RAD}function degrees(rad){return rad*RAD2DEG}function nrad(rad){const v=rad%TAU;return v<0?v+TAU:v}function seq(start,end,steps){const target=new Array(steps),incr=(end-start)/(steps-1);target[0]=start;for(let i=1;i<steps-1;i++)target[i]=start+i*incr;return target[steps-1]=end,target}function seqI(steps){const target=new Array(steps),incr=1/(steps-1);target[0]=0;for(let i=1;i<steps-1;i++)target[i]=i*incr;return target[steps-1]=1,target}function min(a,...b){let min;if(Array.isArray(a)){min=a[0];for(let i=1;i<a.length;i++)a[i]<min&&(min=a[i])}else{min=a;for(let i=0;i<b.length;i++)b[i]<min&&(min=b[i])}return min}function max(a,...b){let max;if(Array.isArray(a)){max=a[0];for(let i=1;i<a.length;i++)a[i]>max&&(max=a[i])}else{max=a;for(let i=0;i<b.length;i++)b[i]>max&&(max=b[i])}return max}function extent(a,...b){let min,max;if(Array.isArray(a)){min=max=a[0];for(let i=1;i<a.length;i++)a[i]<min&&(min=a[i]),a[i]>max&&(max=a[i])}else{min=max=a;for(let i=0;i<b.length;i++)b[i]<min&&(min=b[i]),b[i]>max&&(max=b[i])}return[min,max]}function mean(a,...b){let sum=0;if(Array.isArray(a)){for(let i=0;i<a.length;i++)sum+=a[i];return sum/a.length}for(let i=0;i<b.length;i++)sum+=b[i];return(sum+a)/(b.length+1)}export{clamp,degrees,extent,inverseLerp,lerp,max,mean,min,nrad,radians,round,seq,seqI,smoothstep,step};\n","import{clamp as clamp$1,step as step$1}from\"@equinor/videx-math\";function copy(source,target){for(var i=0;i<source.length;i++)target[i]=source[i];return target}function add(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]+b[i];return target}function addAll(vectors,target){void 0===target&&(target=vectors[0]),copy(vectors[0],target);for(var m=1;m<vectors.length;m++)for(var n=0;n<target.length;n++)target[n]+=vectors[m][n];return target}function sub(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]-b[i];return target}function subAll(a,vectors,target){void 0===target&&(target=a),copy(a,target);for(var m=0;m<vectors.length;m++)for(var n=0;n<target.length;n++)target[n]-=vectors[m][n];return target}function scale(a,factor,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]*factor;return target}function sumsqr(a){for(var sum=0,i=0;i<a.length;i++)sum+=Math.pow(a[i],2);return sum}function magnitude(a){var sq=sumsqr(a);return 0===sq?sq:Math.sqrt(sq)}function normalize(a,target){void 0===target&&(target=a);var len=magnitude(a);return 0===len?fill(0,target):scale(a,1/len,target)}function fill(value,target){for(var i=0;i<target.length;i++)target[i]=value;return target}function dir(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=b[i]-a[i];return target}function dist(a,b){for(var sq=0,i=0;i<a.length;i++)sq+=Math.pow(b[i]-a[i],2);return 0===sq?sq:Math.sqrt(sq)}function dot(a,b){for(var sum=0,i=0;i<a.length;i++)sum+=a[i]*b[i];return sum}function cross(a,b,target){void 0===target&&(target=a);var y=a[2]*b[0]-a[0]*b[2],z=a[0]*b[1]-a[1]*b[0];return target[0]=a[1]*b[2]-a[2]*b[1],target[1]=y,target[2]=z,target}function triple(a,b,c){return dot(a,cross(b,c))}function clamp(a,min,max,target){void 0===min&&(min=0),void 0===max&&(max=1),void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=clamp$1(a[i],min,max);return target}function step(edges,x,target){void 0===target&&(target=edges);for(var i=0;i<edges.length;i++)target[i]=step$1(edges[i],x);return target}function mix(a,b,t,target){void 0===target&&(target=a);for(var n=clamp$1(t,0,1),m=1-n,i=0;i<a.length;i++)target[i]=a[i]*m+b[i]*n;return target}function modify(a,modifier,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=modifier(a[i],i);return target}function isZeroVector(a,epsilon){void 0===epsilon&&(epsilon=0),void 0===epsilon&&(epsilon=0);for(var i=0;i<a.length;i++)if(Math.abs(a[i])>epsilon)return!1;return!0}function reverse(vector){for(var temp,tempIdx,end=vector.length-1,i=0;i<Math.ceil(end/2);i++)temp=vector[tempIdx=end-i],vector[tempIdx]=vector[i],vector[i]=temp;return vector}function flatten(vectors){for(var output=[],m=0;m<vectors.length;m++)for(var n=0;n<vectors[m].length;n++)output.push(vectors[m][n]);return output}function reshape(array,dimensions){for(var output=[],i=0;i<array.length;i+=dimensions){for(var vector=new Array(dimensions),n=0;n<dimensions;n++)vector[n]=array[i+n];output.push(vector)}return output}function isPointInTriangle(p,a,b,c,inwardAdjustment){void 0===inwardAdjustment&&(inwardAdjustment=1e-6);var centerX=.33333*(a[0]+b[0]+c[0]),centerY=.33333*(a[1]+b[1]+c[1]),adjPx=p[0]+(centerX-p[0])*inwardAdjustment,adjPy=p[1]+(centerY-p[1])*inwardAdjustment,APx=adjPx-a[0],APy=adjPy-a[1],leftOfAB=(b[0]-a[0])*APy-(b[1]-a[1])*APx>0;return leftOfAB!==(c[0]-a[0])*APy-(c[1]-a[1])*APx>0&&leftOfAB===(c[0]-b[0])*(adjPy-b[1])-(c[1]-b[1])*(adjPx-b[0])>0}function isPointInTriangleArray(p,triangle,tolerance){return void 0===tolerance&&(tolerance=1e-4),isPointInTriangle(p,triangle[0],triangle[1],triangle[2],tolerance)}export{add,addAll,clamp,copy,cross,dir,dist,dot,fill,flatten,isPointInTriangle,isPointInTriangleArray,isZeroVector,magnitude,mix,modify,normalize,reshape,reverse,scale,step,sub,subAll,sumsqr,triple};\n","import{add,sub,scale,magnitude,normalize,dist,dot,mix,isZeroVector,modify}from\"@equinor/videx-linear-algebra\";var RAD2DEG=180/Math.PI,DEG2RAD=Math.PI/180;function rotate(v,rad,target){var cr=Math.cos(rad),sr=Math.sin(rad),x=v[0];return target[0]=cr*x-sr*v[1],target[1]=sr*x+cr*v[1],target}function angleRight(v){return Math.atan2(v[1],v[0])}function signedAngle(a,b){var phi=Math.atan2(b[1],b[0])-Math.atan2(a[1],a[0]);return phi>Math.PI?phi-=2*Math.PI:phi<=-Math.PI&&(phi+=2*Math.PI),phi}var Vector2=function(){function Vector2(a){for(var b=[],_i=1;_i<arguments.length;_i++)b[_i-1]=arguments[_i];this.isMutating=!1,this.length=2,\"number\"==typeof a?\"number\"==typeof b[0]?(this[0]=a,this[1]=b[0]):(this[0]=a,this[1]=a):\"x\"in a&&\"y\"in a?(this[0]=a.x,this[1]=a.y):(this[0]=a[0],this[1]=a[1])}return Object.defineProperty(Vector2.prototype,\"x\",{get:function(){return this[0]},set:function(value){this[0]=value},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"y\",{get:function(){return this[1]},set:function(value){this[1]=value},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"magnitude\",{get:function(){return magnitude(this)},set:function(val){var len=magnitude(this);scale(this,val/len,this)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"mutable\",{get:function(){return this.isMutating=!0,this},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,\"immutable\",{get:function(){return this.isMutating=!1,this},enumerable:!1,configurable:!0}),Vector2.prototype.set=function(a,b){return\"number\"==typeof a?\"number\"==typeof b?(this[0]=a,this[1]=b):(this[0]=a,this[1]=a):(this[0]=a[0],this[1]=a[1]),this},Vector2.prototype.add=function(a,b){return void 0===b&&(b=0),\"number\"==typeof a?this.isMutating?add(this,[a,b]):add(this.clone(),[a,b]):this.isMutating?add(this,a):add(this.clone(),a)},Vector2.add=function(a,b){var output=new Vector2(a);return add(output,b)},Vector2.prototype.sub=function(a,b){return void 0===b&&(b=0),\"number\"==typeof a?this.isMutating?sub(this,[a,b]):sub(this.clone(),[a,b]):this.isMutating?sub(this,a):sub(this.clone(),a)},Vector2.sub=function(a,b){var output=new Vector2(a);return sub(output,b)},Vector2.prototype.subFrom=function(a,b){return void 0===b&&(b=0),\"number\"==typeof a?this.isMutating?(this[0]=a-this[0],this[1]=b-this[1],this):new Vector2(a-this[0],b-this[1]):this.isMutating?(this[0]=a[0]-this[0],this[1]=a[1]-this[1],this):new Vector2(a[0]-this[0],a[1]-this[1])},Vector2.divide=function(v,n){var output=new Vector2(v);return scale(output,1/n)},Vector2.multiply=function(v,n){var output=new Vector2(v);return scale(output,n)},Vector2.prototype.scale=function(n){return scale(this,n,this.isMutating?this:Vector2.zero)},Vector2.prototype.rescale=function(n){var len=magnitude(this);return len<=0?this.isMutating?this:Vector2.zero:scale(this,n/len,this.isMutating?this:Vector2.zero)},Vector2.prototype.clampMagnitude=function(n){var len=magnitude(this);return len>n?scale(this,n/len,this.isMutating?this:Vector2.zero):this.isMutating?this:this.clone()},Vector2.prototype.rotate=function(rad){return rotate(this,rad,this.isMutating?this:Vector2.zero)},Vector2.prototype.rotateDeg=function(deg){return rotate(this,deg*DEG2RAD,this.isMutating?this:Vector2.zero)},Vector2.prototype.rotate90=function(){return v=this,target=this.isMutating?this:Vector2.zero,x=v[0],target[0]=-v[1],target[1]=x,target;var v,target,x},Vector2.prototype.rotate180=function(){return v=this,(target=this.isMutating?this:Vector2.zero)[0]=-v[0],target[1]=-v[1],target;var v,target},Vector2.prototype.rotate270=function(){return v=this,target=this.isMutating?this:Vector2.zero,x=v[0],target[0]=v[1],target[1]=-x,target;var v,target,x},Vector2.prototype.normalize=function(){return normalize(this)},Vector2.prototype.normalized=function(){return normalize(this,Vector2.zero)},Vector2.distance=function(a,b){return dist(a,b)},Vector2.dot=function(a,b){return dot(a,b)},Vector2.cross=function(a,b){return function(a,b){return a[0]*b[1]-a[1]*b[0]}(a,b)},Vector2.angleRight=function(v){return angleRight(v)},Vector2.angleRightDeg=function(v){return angleRight(v)*RAD2DEG},Vector2.angle=function(a,b){return Math.abs(signedAngle(a,b))},Vector2.angleDeg=function(a,b){return Math.abs(signedAngle(a,b))*RAD2DEG},Vector2.signedAngle=function(a,b){return signedAngle(a,b)},Vector2.signedAngleDeg=function(a,b){return signedAngle(a,b)*RAD2DEG},Vector2.lerp=function(a,b,t){var output=new Vector2(a);return mix(output,b,t)},Vector2.lerpRot=function(a,b,t){return function(a,b,n,target){return void 0===target&&(target=a),rotate(a,n*signedAngle(a,b),target)}(a,b,t,Vector2.zero)},Vector2.prototype.clone=function(){return new Vector2(this[0],this[1])},Vector2.equals=function(a,b,epsilon){return void 0===epsilon&&(epsilon=0),!(Math.abs(a[0]-b[0])>epsilon)&&!(Math.abs(a[1]-b[1])>epsilon)},Vector2.prototype.equals=function(vector,epsilon){return void 0===epsilon&&(epsilon=0),Vector2.equals(this,vector,epsilon)},Vector2.isZeroVector=function(vector,epsilon){return void 0===epsilon&&(epsilon=0),isZeroVector(vector,epsilon)},Vector2.prototype.isZeroVector=function(epsilon){return void 0===epsilon&&(epsilon=0),isZeroVector(this,epsilon)},Vector2.prototype.toArray=function(){return[this[0],this[1]]},Vector2.prototype.modify=function(modifier){return modify(this,modifier)},Vector2.prototype[Symbol.iterator]=function(){var _this=this,i=0;return{next:function(){switch(i++){case 0:return{value:_this[0],done:!1};case 1:return{value:_this[1],done:!1};default:return{value:-1,done:!0}}}}},Object.defineProperty(Vector2,\"zero\",{get:function(){return new Vector2(0,0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"one\",{get:function(){return new Vector2(1,1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"positiveInfinity\",{get:function(){return new Vector2(1/0,1/0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"negativeInfinity\",{get:function(){return new Vector2(-1/0,-1/0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"up\",{get:function(){return new Vector2(0,1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"right\",{get:function(){return new Vector2(1,0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"down\",{get:function(){return new Vector2(0,-1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,\"left\",{get:function(){return new Vector2(-1,0)},enumerable:!1,configurable:!0}),Vector2}();export{Vector2 as default};\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar extendStatics=function(d,b){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)b.hasOwnProperty(p)&&(d[p]=b[p])},extendStatics(d,b)};function __extends(d,b){function __(){this.constructor=d}extendStatics(d,b),d.prototype=null===b?Object.create(b):(__.prototype=b.prototype,new __)}var __assign=function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++)for(var p in s=arguments[i])Object.prototype.hasOwnProperty.call(s,p)&&(t[p]=s[p]);return t},__assign.apply(this,arguments)};function extrapolateControlPoint(u,v){for(var e=new Array(u.length),i=0;i<u.length;i++)e[i]=2*u[i]-v[i];return e}function getControlPoints(idx,points,closed){var p0,p1,p2,p3,maxIndex=points.length-1;if(closed)p0=points[idx-1<0?maxIndex:idx-1],p1=points[idx%points.length],p2=points[(idx+1)%points.length],p3=points[(idx+2)%points.length];else{if(idx===maxIndex)throw Error(\"There is no spline segment at this index for a closed curve!\");p1=points[idx],p2=points[idx+1],p0=idx>0?points[idx-1]:extrapolateControlPoint(p1,p2),p3=idx<maxIndex-1?points[idx+2]:extrapolateControlPoint(p2,p1)}return[p0,p1,p2,p3]}function getSegmentIndexAndT(ct,points,closed){void 0===closed&&(closed=!1);var nPoints=closed?points.length:points.length-1;if(1===ct)return{index:nPoints-1,weight:1};var p=nPoints*ct,index=Math.floor(p);return{index:index,weight:p-index}}function fill(v,val){for(var i=0;i<v.length;i++)v[i]=val;return v}function map(v,func){for(var i=0;i<v.length;i++)v[i]=func(v[i],i);return v}function reduce(v,func,r){void 0===r&&(r=0);for(var i=0;i<v.length;i++)r=func(r,v[i],i);return r}function copyValues(source,target){target=target||new Array(source.length);for(var i=0;i<source.length;i++)target[i]=source[i];return target}function simplify2d(inputArr,maxOffset,maxDistance){var _a;if(void 0===maxOffset&&(maxOffset=.001),void 0===maxDistance&&(maxDistance=10),inputArr.length<=4)return inputArr;for(var _b=inputArr[0],o0=_b[0],o1=_b[1],arr=inputArr.map((function(d){return[d[0]-o0,d[1]-o1]})),_c=arr[0],a0=_c[0],a1=_c[1],sim=[inputArr[0]],i=1;i+1<arr.length;i++){var _d=arr[i],t0=_d[0],t1=_d[1],_e=arr[i+1],b0=_e[0],b1=_e[1];if(b0-t0!=0||b1-t1!=0){var proximity=Math.abs(a0*b1-a1*b0+b0*t1-b1*t0+a1*t0-a0*t1)/Math.sqrt(Math.pow(b0-a0,2)+Math.pow(b1-a1,2)),dir=[a0-t0,a1-t1],len=Math.sqrt(Math.pow(dir[0],2)+Math.pow(dir[1],2));(proximity>maxOffset||len>=maxDistance)&&(sim.push([t0+o0,t1+o1]),a0=(_a=[t0,t1])[0],a1=_a[1])}}var last=arr[arr.length-1];return sim.push([last[0]+o0,last[1]+o1]),sim}function clamp(value,min,max){return void 0===min&&(min=0),void 0===max&&(max=1),value<min?min:value>max?max:value}function binarySearch(targetValue,accumulatedValues){var min=accumulatedValues[0];if(targetValue>=accumulatedValues[accumulatedValues.length-1])return accumulatedValues.length-1;if(targetValue<=min)return 0;for(var left=0,right=accumulatedValues.length-1;left<=right;){var mid=Math.floor((left+right)/2),lMid=accumulatedValues[mid];if(lMid<targetValue)left=mid+1;else{if(!(lMid>targetValue))return mid;right=mid-1}}return Math.max(0,right)}var EPS=Math.pow(2,-42);function cuberoot(x){var y=Math.pow(Math.abs(x),1/3);return x<0?-y:y}function getQuadRoots(a,b,c){if(Math.abs(a)<EPS)return Math.abs(b)<EPS?[]:[-c/b];var D=b*b-4*a*c;return Math.abs(D)<EPS?[-b/(2*a)]:D>0?[(-b+Math.sqrt(D))/(2*a),(-b-Math.sqrt(D))/(2*a)]:[]}function getCubicRoots(a,b,c,d){if(Math.abs(a)<EPS)return getQuadRoots(b,c,d);var roots,p=(3*a*c-b*b)/(3*a*a),q=(2*b*b*b-9*a*b*c+27*a*a*d)/(27*a*a*a);if(Math.abs(p)<EPS)roots=[cuberoot(-q)];else if(Math.abs(q)<EPS)roots=[0].concat(p<0?[Math.sqrt(-p),-Math.sqrt(-p)]:[]);else{var D=q*q/4+p*p*p/27;if(Math.abs(D)<EPS)roots=[-1.5*q/p,3*q/p];else if(D>0){roots=[(u=cuberoot(-q/2-Math.sqrt(D)))-p/(3*u)]}else{var u=2*Math.sqrt(-p/3),t=Math.acos(3*q/p/u)/3,k=2*Math.PI/3;roots=[u*Math.cos(t),u*Math.cos(t-k),u*Math.cos(t-2*k)]}}for(var i=0;i<roots.length;i++)roots[i]-=b/(3*a);return roots}function dot(v1,v2){if(v1.length!==v2.length)throw Error(\"Vectors must be of equal length!\");for(var p=0,k=0;k<v1.length;k++)p+=v1[k]*v2[k];return p}function cross(v1,v2,target){if(!(v1.length>3)){target=target||new Array(3);var ax=v1[0],ay=v1[1],az=v1[2]||0,bx=v2[0],by=v2[1],bz=v2[2]||0;return target[0]=ay*bz-az*by,target[1]=az*bx-ax*bz,target[2]=ax*by-ay*bx,target}}function add(v1,v2,target){target=target||new Array(v1.length);for(var k=0;k<v1.length;k++)target[k]=v1[k]+v2[k];return target}function sub(v1,v2,target){target=target||new Array(v1.length);for(var k=0;k<v1.length;k++)target[k]=v1[k]-v2[k];return target}function sumOfSquares(v1,v2){for(var sumOfSquares=0,i=0;i<v1.length;i++)sumOfSquares+=(v1[i]-v2[i])*(v1[i]-v2[i]);return sumOfSquares}function magnitude(v){for(var sumOfSquares=0,i=0;i<v.length;i++)sumOfSquares+=v[i]*v[i];return Math.sqrt(sumOfSquares)}function distance(p1,p2){var sqrs=sumOfSquares(p1,p2);return 0===sqrs?0:Math.sqrt(sqrs)}function normalize(v,target){var u=target?copyValues(v,target):v,squared=reduce(u,(function(s,c){return s+Math.pow(c,2)})),l=Math.sqrt(squared);return 0===l?fill(u,0):map(u,(function(c){return c/l}))}function orthogonal(v,target){if(v.length>2)throw Error(\"Only supported for 2d vectors\");var u=target?copyValues(v,target):v,x=-u[1];return u[1]=u[0],u[0]=x,u}function rotate2d(vector,angle,anchor,target){void 0===angle&&(angle=0),void 0===anchor&&(anchor=[0,0]);var c=Math.cos(angle),s=Math.sin(angle),vx=vector[0]-anchor[0],vy=vector[1]-anchor[1];return(target=target||vector)[0]=vx*c-vy*s+anchor[0],target[1]=vx*s+vy*c+anchor[1],target}function rotate3d(vector,axis,angle,target){void 0===axis&&(axis=[0,1,0]),void 0===angle&&(angle=0);var c=Math.cos(angle),s=Math.sin(angle),t=1-c,vx=vector[0],vy=vector[1],vz=vector[2],ax=axis[0],ay=axis[1],az=axis[2],tx=t*ax,ty=t*ay;return(target=target||vector)[0]=(tx*ax+c)*vx+(tx*ay-s*az)*vy+(tx*az+s*ay)*vz,target[1]=(tx*ay+s*az)*vx+(ty*ay+c)*vy+(ty*az-s*ax)*vz,target[2]=(tx*az-s*ay)*vx+(ty*az+s*ax)*vy+(t*az*az+c)*vz,target}function calcKnotSequence(p0,p1,p2,p3,alpha){if(void 0===alpha&&(alpha=0),0===alpha)return[0,1,2,3];var deltaT=function(u,v){return Math.pow(sumOfSquares(u,v),.5*alpha)},t1=deltaT(p1,p0),t2=deltaT(p2,p1)+t1;return[0,t1,t2,deltaT(p3,p2)+t2]}function calculateCoefficients(p0,p1,p2,p3,options){for(var tension=Number.isFinite(options.tension)?options.tension:.5,alpha=Number.isFinite(options.alpha)?options.alpha:null,knotSequence=alpha>0?calcKnotSequence(p0,p1,p2,p3,alpha):null,coefficientsList=new Array(p0.length),k=0;k<p0.length;k++){var u=0,v=0,v0=p0[k],v1=p1[k],v2=p2[k],v3=p3[k];if(knotSequence){var t0=knotSequence[0],t1=knotSequence[1],t2=knotSequence[2],t3=knotSequence[3];t1-t2!=0&&(t0-t1!=0&&t0-t2!=0&&(u=(1-tension)*(t2-t1)*((v0-v1)/(t0-t1)-(v0-v2)/(t0-t2)+(v1-v2)/(t1-t2))),t1-t3!=0&&t2-t3!=0&&(v=(1-tension)*(t2-t1)*((v1-v2)/(t1-t2)-(v1-v3)/(t1-t3)+(v2-v3)/(t2-t3))))}else u=(1-tension)*(v2-v0)*.5,v=(1-tension)*(v3-v1)*.5;var a=2*v1-2*v2+u+v,b=-3*v1+3*v2-2*u-v,c=u,d=v1;coefficientsList[k]=[a,b,c,d]}return coefficientsList}function valueAtT(t,coefficients){var t2=t*t,t3=t*t2;return coefficients[0]*t3+coefficients[1]*t2+coefficients[2]*t+coefficients[3]}function derivativeAtT(t,coefficients){var t2=t*t;return 3*coefficients[0]*t2+2*coefficients[1]*t+coefficients[2]}function secondDerivativeAtT(t,coefficients){return 6*coefficients[0]*t+2*coefficients[1]}function findRootsOfT(lookup,coefficients){var a=coefficients[0],b=coefficients[1],c=coefficients[2],x=coefficients[3]-lookup;return 0===a&&0===b&&0===c&&0===x?[0]:getCubicRoots(a,b,c,x).filter((function(t){return t>-EPS&&t<=1+EPS})).map((function(t){return clamp(t,0,1)}))}function evaluateForT(func,t,coefficients,target){void 0===target&&(target=null),target=target||new Array(coefficients.length);for(var k=0;k<coefficients.length;k++)target[k]=func(t,coefficients[k]);return target}var AbstractCurveMapper=function(){function AbstractCurveMapper(onInvalidateCache){void 0===onInvalidateCache&&(onInvalidateCache=null),this._alpha=0,this._tension=.5,this._closed=!1,this._onInvalidateCache=null,this._onInvalidateCache=onInvalidateCache,this._cache={arcLengths:null,coefficients:null}}return AbstractCurveMapper.prototype._invalidateCache=function(){this.points&&(this._cache={arcLengths:null,coefficients:null},this._onInvalidateCache&&this._onInvalidateCache())},Object.defineProperty(AbstractCurveMapper.prototype,\"alpha\",{get:function(){return this._alpha},set:function(alpha){Number.isFinite(alpha)&&alpha!==this._alpha&&(this._invalidateCache(),this._alpha=alpha)},enumerable:!1,configurable:!0}),Object.defineProperty(AbstractCurveMapper.prototype,\"tension\",{get:function(){return this._tension},set:function(tension){Number.isFinite(tension)&&tension!==this._tension&&(this._invalidateCache(),this._tension=tension)},enumerable:!1,configurable:!0}),Object.defineProperty(AbstractCurveMapper.prototype,\"points\",{get:function(){return this._points},set:function(points){if(!points||points.length<2)throw Error(\"At least 2 control points are required!\");this._points=points,this._invalidateCache()},enumerable:!1,configurable:!0}),Object.defineProperty(AbstractCurveMapper.prototype,\"closed\",{get:function(){return this._closed},set:function(closed){closed=!!closed,this._closed!==closed&&(this._invalidateCache(),this._closed=closed)},enumerable:!1,configurable:!0}),AbstractCurveMapper.prototype.reset=function(){this._invalidateCache()},AbstractCurveMapper.prototype.evaluateForT=function(func,t,target){var _a=getSegmentIndexAndT(t,this.points,this.closed),index=_a.index;return evaluateForT(func,_a.weight,this.getCoefficients(index),target)},AbstractCurveMapper.prototype.getCoefficients=function(idx){if(this.points){if(this._cache.coefficients||(this._cache.coefficients=new Map),!this._cache.coefficients.has(idx)){var _a=getControlPoints(idx,this.points,this.closed),coefficients=calculateCoefficients(_a[0],_a[1],_a[2],_a[3],{tension:this.tension,alpha:this.alpha});this._cache.coefficients.set(idx,coefficients)}return this._cache.coefficients.get(idx)}},AbstractCurveMapper}(),SegmentedCurveMapper=function(_super){function SegmentedCurveMapper(subDivisions,onInvalidateCache){void 0===subDivisions&&(subDivisions=300),void 0===onInvalidateCache&&(onInvalidateCache=null);var _this=_super.call(this,onInvalidateCache)||this;return _this._subDivisions=subDivisions,_this}return __extends(SegmentedCurveMapper,_super),Object.defineProperty(SegmentedCurveMapper.prototype,\"arcLengths\",{get:function(){return this._cache.arcLengths||(this._cache.arcLengths=this.computeArcLengths()),this._cache.arcLengths},enumerable:!1,configurable:!0}),SegmentedCurveMapper.prototype._invalidateCache=function(){_super.prototype._invalidateCache.call(this),this._cache.arcLengths=null},SegmentedCurveMapper.prototype.computeArcLengths=function(){var current,lengths=[],last=this.evaluateForT(valueAtT,0),sum=0;lengths.push(0);for(var p=1;p<=this._subDivisions;p++)sum+=distance(current=this.evaluateForT(valueAtT,p/this._subDivisions),last),lengths.push(sum),last=current;return lengths},SegmentedCurveMapper.prototype.lengthAt=function(u){var arcLengths=this.arcLengths;return u*arcLengths[arcLengths.length-1]},SegmentedCurveMapper.prototype.getT=function(u){var arcLengths=this.arcLengths,il=arcLengths.length,targetArcLength=u*arcLengths[il-1],i=binarySearch(targetArcLength,arcLengths);if(arcLengths[i]===targetArcLength)return i/(il-1);var lengthBefore=arcLengths[i];return(i+(targetArcLength-lengthBefore)/(arcLengths[i+1]-lengthBefore))/(il-1)},SegmentedCurveMapper.prototype.getU=function(t){if(0===t)return 0;if(1===t)return 1;var arcLengths=this.arcLengths,al=arcLengths.length-1,totalLength=arcLengths[al],tIdx=t*al,subIdx=Math.floor(tIdx),l1=arcLengths[subIdx];if(tIdx===subIdx)return l1/totalLength;var t0=subIdx/al;return(l1+distance(this.evaluateForT(valueAtT,t0),this.evaluateForT(valueAtT,t)))/totalLength},SegmentedCurveMapper}(AbstractCurveMapper),lut=[[[-.906179845938664,.23692688505618908],[-.5384693101056831,.47862867049936647],[0,.5688888888888889],[.5384693101056831,.47862867049936647],[.906179845938664,.23692688505618908]],[[-.932469514203152,.17132449237917036],[-.6612093864662645,.3607615730481386],[-.2386191860831969,.46791393457269104],[.2386191860831969,.46791393457269104],[.6612093864662645,.3607615730481386],[.932469514203152,.17132449237917036]],[[-.9491079123427585,.1294849661688697],[-.7415311855993945,.27970539148927664],[-.4058451513773972,.3818300505051189],[0,.4179591836734694],[.4058451513773972,.3818300505051189],[.7415311855993945,.27970539148927664],[.9491079123427585,.1294849661688697]],[[-.9602898564975363,.10122853629037626],[-.7966664774136267,.22238103445337448],[-.525532409916329,.31370664587788727],[-.1834346424956498,.362683783378362],[.1834346424956498,.362683783378362],[.525532409916329,.31370664587788727],[.7966664774136267,.22238103445337448],[.9602898564975363,.10122853629037626]],[[-.9681602395076261,.08127438836157441],[-.8360311073266358,.1806481606948574],[-.6133714327005904,.26061069640293544],[-.3242534234038089,.31234707704000286],[0,.3302393550012598],[.3242534234038089,.31234707704000286],[.6133714327005904,.26061069640293544],[.8360311073266358,.1806481606948574],[.9681602395076261,.08127438836157441]],[[-.9739065285171717,.06667134430868814],[-.8650633666889845,.1494513491505806],[-.6794095682990244,.21908636251598204],[-.4333953941292472,.26926671930999635],[-.14887433898163122,.29552422471475287],[.14887433898163122,.29552422471475287],[.4333953941292472,.26926671930999635],[.6794095682990244,.21908636251598204],[.8650633666889845,.1494513491505806],[.9739065285171717,.06667134430868814]],[[-.978228658146056,.0556685671161736],[-.887062599768095,.125580369464904],[-.730152005574049,.186290210927734],[-.519096129206811,.23319376459199],[-.269543155952344,.262804544510246],[0,.2729250867779],[.269543155952344,.262804544510246],[.519096129206811,.23319376459199],[.730152005574049,.186290210927734],[.887062599768095,.125580369464904],[.978228658146056,.0556685671161736]],[[-.981560634246719,.0471753363865118],[-.904117256370474,.106939325995318],[-.769902674194304,.160078328543346],[-.587317954286617,.203167426723065],[-.36783149899818,.233492536538354],[-.125233408511468,.249147045813402],[.125233408511468,.249147045813402],[.36783149899818,.233492536538354],[.587317954286617,.203167426723065],[.769902674194304,.160078328543346],[.904117256370474,.106939325995318],[.981560634246719,.0471753363865118]],[[-.984183054718588,.0404840047653158],[-.917598399222977,.0921214998377284],[-.801578090733309,.138873510219787],[-.64234933944034,.178145980761945],[-.448492751036446,.207816047536888],[-.230458315955134,.226283180262897],[0,.232551553230873],[.230458315955134,.226283180262897],[.448492751036446,.207816047536888],[.64234933944034,.178145980761945],[.801578090733309,.138873510219787],[.917598399222977,.0921214998377284],[.984183054718588,.0404840047653158]],[[-.986283808696812,.0351194603317518],[-.928434883663573,.0801580871597602],[-.827201315069764,.121518570687903],[-.687292904811685,.157203167158193],[-.515248636358154,.185538397477937],[-.319112368927889,.205198463721295],[-.108054948707343,.215263853463157],[.108054948707343,.215263853463157],[.319112368927889,.205198463721295],[.515248636358154,.185538397477937],[.687292904811685,.157203167158193],[.827201315069764,.121518570687903],[.928434883663573,.0801580871597602],[.986283808696812,.0351194603317518]],[[-.987992518020485,.0307532419961172],[-.937273392400705,.0703660474881081],[-.848206583410427,.107159220467171],[-.72441773136017,.139570677926154],[-.570972172608538,.166269205816993],[-.394151347077563,.186161000015562],[-.201194093997434,.198431485327111],[0,.202578241925561],[.201194093997434,.198431485327111],[.394151347077563,.186161000015562],[.570972172608538,.166269205816993],[.72441773136017,.139570677926154],[.848206583410427,.107159220467171],[.937273392400705,.0703660474881081],[.987992518020485,.0307532419961172]],[[-.989400934991649,.027152459411754],[-.944575023073232,.0622535239386478],[-.865631202387831,.0951585116824927],[-.755404408355003,.124628971255533],[-.617876244402643,.149595988816576],[-.458016777657227,.169156519395002],[-.281603550779258,.182603415044923],[-.0950125098376374,.189450610455068],[.0950125098376374,.189450610455068],[.281603550779258,.182603415044923],[.458016777657227,.169156519395002],[.617876244402643,.149595988816576],[.755404408355003,.124628971255533],[.865631202387831,.0951585116824927],[.944575023073232,.0622535239386478],[.989400934991649,.027152459411754]],[[-.990575475314417,.0241483028685479],[-.950675521768767,.0554595293739872],[-.880239153726985,.0850361483171791],[-.781514003896801,.111883847193403],[-.65767115921669,.135136368468525],[-.512690537086476,.15404576107681],[-.351231763453876,.16800410215645],[-.178484181495847,.176562705366992],[0,.179446470356206],[.178484181495847,.176562705366992],[.351231763453876,.16800410215645],[.512690537086476,.15404576107681],[.65767115921669,.135136368468525],[.781514003896801,.111883847193403],[.880239153726985,.0850361483171791],[.950675521768767,.0554595293739872],[.990575475314417,.0241483028685479]],[[-.99156516842093,.0216160135264833],[-.955823949571397,.0497145488949698],[-.892602466497555,.076425730254889],[-.803704958972523,.100942044106287],[-.691687043060353,.122555206711478],[-.559770831073947,.14064291467065],[-.411751161462842,.154684675126265],[-.251886225691505,.164276483745832],[-.0847750130417353,.169142382963143],[.0847750130417353,.169142382963143],[.251886225691505,.164276483745832],[.411751161462842,.154684675126265],[.559770831073947,.14064291467065],[.691687043060353,.122555206711478],[.803704958972523,.100942044106287],[.892602466497555,.076425730254889],[.955823949571397,.0497145488949697],[.99156516842093,.0216160135264833]],[[-.992406843843584,.0194617882297264],[-.96020815213483,.0448142267656996],[-.903155903614817,.0690445427376412],[-.822714656537142,.0914900216224499],[-.720966177335229,.111566645547333],[-.600545304661681,.128753962539336],[-.46457074137596,.142606702173606],[-.316564099963629,.152766042065859],[-.160358645640225,.158968843393954],[0,.161054449848783],[.160358645640225,.158968843393954],[.316564099963629,.152766042065859],[.46457074137596,.142606702173606],[.600545304661681,.128753962539336],[.720966177335229,.111566645547333],[.822714656537142,.0914900216224499],[.903155903614817,.0690445427376412],[.96020815213483,.0448142267656996],[.992406843843584,.0194617882297264]],[[-.993128599185094,.0176140071391521],[-.963971927277913,.0406014298003869],[-.912234428251325,.062672048334109],[-.839116971822218,.0832767415767047],[-.74633190646015,.10193011981724],[-.636053680726515,.118194531961518],[-.510867001950827,.131688638449176],[-.373706088715419,.142096109318382],[-.227785851141645,.149172986472603],[-.0765265211334973,.152753387130725],[.0765265211334973,.152753387130725],[.227785851141645,.149172986472603],[.373706088715419,.142096109318382],[.510867001950827,.131688638449176],[.636053680726515,.118194531961518],[.74633190646015,.10193011981724],[.839116971822218,.0832767415767047],[.912234428251325,.062672048334109],[.963971927277913,.0406014298003869],[.993128599185094,.0176140071391521]],[[-.993752170620389,.0160172282577743],[-.967226838566306,.0369537897708524],[-.9200993341504,.0571344254268572],[-.853363364583317,.0761001136283793],[-.768439963475677,.0934444234560338],[-.667138804197412,.108797299167148],[-.551618835887219,.121831416053728],[-.424342120207438,.132268938633337],[-.288021316802401,.139887394791073],[-.145561854160895,.14452440398997],[0,.14608113364969],[.145561854160895,.14452440398997],[.288021316802401,.139887394791073],[.424342120207438,.132268938633337],[.551618835887219,.121831416053728],[.667138804197412,.108797299167148],[.768439963475677,.0934444234560338],[.853363364583317,.0761001136283793],[.9200993341504,.0571344254268572],[.967226838566306,.0369537897708524],[.993752170620389,.0160172282577743]],[[-.994294585482399,.0146279952982722],[-.970060497835428,.0337749015848141],[-.926956772187174,.0522933351526832],[-.8658125777203,.0697964684245204],[-.787816805979208,.0859416062170677],[-.694487263186682,.10041414444288],[-.587640403506911,.112932296080539],[-.469355837986757,.123252376810512],[-.341935820892084,.131173504787062],[-.207860426688221,.136541498346015],[-.0697392733197222,.139251872855631],[.0697392733197222,.139251872855631],[.207860426688221,.136541498346015],[.341935820892084,.131173504787062],[.469355837986757,.123252376810512],[.587640403506911,.112932296080539],[.694487263186682,.10041414444288],[.787816805979208,.0859416062170677],[.8658125777203,.0697964684245204],[.926956772187174,.0522933351526832],[.970060497835428,.0337749015848141],[.994294585482399,.0146279952982722]],[[-.994769334997552,.0134118594871417],[-.972542471218115,.0309880058569794],[-.932971086826016,.0480376717310846],[-.876752358270441,.0642324214085258],[-.804888401618839,.0792814117767189],[-.71866136313195,.0929157660600351],[-.619609875763646,.104892091464541],[-.509501477846007,.114996640222411],[-.39030103803029,.123049084306729],[-.264135680970344,.128905722188082],[-.133256824298466,.132462039404696],[0,.133654572186106],[.133256824298466,.132462039404696],[.264135680970344,.128905722188082],[.39030103803029,.123049084306729],[.509501477846007,.114996640222411],[.619609875763646,.104892091464541],[.71866136313195,.0929157660600351],[.804888401618839,.0792814117767189],[.876752358270441,.0642324214085258],[.932971086826016,.0480376717310846],[.972542471218115,.0309880058569794],[.994769334997552,.0134118594871417]],[[-.995187219997021,.0123412297999872],[-.974728555971309,.0285313886289336],[-.938274552002732,.0442774388174198],[-.886415527004401,.0592985849154367],[-.820001985973902,.0733464814110803],[-.740124191578554,.0861901615319532],[-.648093651936975,.0976186521041138],[-.545421471388839,.107444270115965],[-.433793507626045,.115505668053725],[-.315042679696163,.121670472927803],[-.191118867473616,.125837456346828],[-.0640568928626056,.127938195346752],[.0640568928626056,.127938195346752],[.191118867473616,.125837456346828],[.315042679696163,.121670472927803],[.433793507626045,.115505668053725],[.545421471388839,.107444270115965],[.648093651936975,.0976186521041138],[.740124191578554,.0861901615319532],[.820001985973902,.0733464814110803],[.886415527004401,.0592985849154367],[.938274552002732,.0442774388174198],[.974728555971309,.0285313886289336],[.995187219997021,.0123412297999872]],[[-.995556969790498,.0113937985010262],[-.976663921459517,.0263549866150321],[-.942974571228974,.0409391567013063],[-.894991997878275,.0549046959758351],[-.833442628760834,.0680383338123569],[-.759259263037357,.080140700335001],[-.673566368473468,.0910282619829636],[-.577662930241222,.10053594906705],[-.473002731445714,.108519624474263],[-.361172305809387,.114858259145711],[-.243866883720988,.119455763535784],[-.12286469261071,.12224244299031],[0,.123176053726715],[.12286469261071,.12224244299031],[.243866883720988,.119455763535784],[.361172305809387,.114858259145711],[.473002731445714,.108519624474263],[.577662930241222,.10053594906705],[.673566368473468,.0910282619829636],[.759259263037357,.080140700335001],[.833442628760834,.0680383338123569],[.894991997878275,.0549046959758351],[.942974571228974,.0409391567013063],[.976663921459517,.0263549866150321],[.995556969790498,.0113937985010262]],[[-.995885701145616,.010551372617343],[-.97838544595647,.0244178510926319],[-.947159066661714,.0379623832943627],[-.902637861984307,.0509758252971478],[-.845445942788498,.0632740463295748],[-.776385948820678,.0746841497656597],[-.696427260419957,.0850458943134852],[-.606692293017618,.0942138003559141],[-.508440714824505,.102059161094425],[-.403051755123486,.108471840528576],[-.292004839485956,.113361816546319],[-.17685882035689,.116660443485296],[-.0592300934293132,.118321415279262],[.0592300934293132,.118321415279262],[.17685882035689,.116660443485296],[.292004839485956,.113361816546319],[.403051755123486,.108471840528576],[.508440714824505,.102059161094425],[.606692293017618,.0942138003559141],[.696427260419957,.0850458943134852],[.776385948820678,.0746841497656597],[.845445942788498,.0632740463295748],[.902637861984307,.0509758252971478],[.947159066661714,.0379623832943627],[.97838544595647,.0244178510926319],[.995885701145616,.010551372617343]],[[-.996179262888988,.00979899605129436],[-.979923475961501,.0226862315961806],[-.950900557814705,.0352970537574197],[-.909482320677491,.047449412520615],[-.856207908018294,.0589835368598335],[-.791771639070508,.0697488237662455],[-.717013473739423,.0796048677730577],[-.632907971946495,.0884231585437569],[-.540551564579456,.0960887273700285],[-.441148251750026,.102501637817745],[-.335993903638508,.107578285788533],[-.226459365439536,.111252488356845],[-.113972585609529,.113476346108965],[0,.114220867378956],[.113972585609529,.113476346108965],[.226459365439536,.111252488356845],[.335993903638508,.107578285788533],[.441148251750026,.102501637817745],[.540551564579456,.0960887273700285],[.632907971946495,.0884231585437569],[.717013473739423,.0796048677730577],[.791771639070508,.0697488237662455],[.856207908018294,.0589835368598336],[.909482320677491,.047449412520615],[.950900557814705,.0352970537574197],[.979923475961501,.0226862315961806],[.996179262888988,.00979899605129436]],[[-.996442497573954,.00912428259309452],[-.981303165370872,.0211321125927712],[-.954259280628938,.0329014277823043],[-.915633026392132,.0442729347590042],[-.865892522574395,.0551073456757167],[-.805641370917179,.0652729239669995],[-.735610878013631,.0746462142345687],[-.656651094038864,.0831134172289012],[-.569720471811401,.0905717443930328],[-.475874224955118,.0969306579979299],[-.376251516089078,.10211296757806],[-.272061627635178,.106055765922846],[-.16456928213338,.108711192258294],[-.0550792898840342,.110047013016475],[.0550792898840342,.110047013016475],[.16456928213338,.108711192258294],[.272061627635178,.106055765922846],[.376251516089078,.10211296757806],[.475874224955118,.0969306579979299],[.569720471811401,.0905717443930328],[.656651094038864,.0831134172289012],[.735610878013631,.0746462142345687],[.805641370917179,.0652729239669995],[.865892522574395,.0551073456757167],[.915633026392132,.0442729347590042],[.954259280628938,.0329014277823043],[.981303165370872,.0211321125927712],[.996442497573954,.00912428259309452]],[[-.996679442260596,.00851690387874641],[-.982545505261413,.0197320850561227],[-.957285595778087,.0307404922020936],[-.921180232953058,.0414020625186828],[-.874637804920102,.0515948269024979],[-.818185487615252,.0612030906570791],[-.752462851734477,.0701179332550512],[-.678214537602686,.0782383271357637],[-.596281797138227,.0854722573661725],[-.507592955124227,.0917377571392587],[-.413152888174008,.0969638340944086],[-.314031637867639,.101091273759914],[-.211352286166001,.104073310077729],[-.106278230132679,.10587615509732],[0,.106479381718314],[.106278230132679,.10587615509732],[.211352286166001,.104073310077729],[.314031637867639,.101091273759914],[.413152888174008,.0969638340944086],[.507592955124227,.0917377571392587],[.596281797138227,.0854722573661725],[.678214537602686,.0782383271357637],[.752462851734477,.0701179332550512],[.818185487615252,.0612030906570791],[.874637804920102,.0515948269024979],[.921180232953058,.0414020625186828],[.957285595778087,.0307404922020936],[.982545505261413,.0197320850561227],[.996679442260596,.00851690387874641]],[[-.996893484074649,.0079681924961666],[-.983668123279747,.0184664683110909],[-.960021864968307,.0287847078833233],[-.926200047429274,.038799192569627],[-.882560535792052,.048402672830594],[-.829565762382768,.057493156217619],[-.767777432104826,.0659742298821805],[-.697850494793315,.0737559747377052],[-.620526182989242,.0807558952294202],[-.536624148142019,.0868997872010829],[-.447033769538089,.0921225222377861],[-.352704725530878,.0963687371746442],[-.254636926167889,.0995934205867952],[-.153869913608583,.101762389748405],[-.0514718425553176,.102852652893558],[.0514718425553176,.102852652893558],[.153869913608583,.101762389748405],[.254636926167889,.0995934205867952],[.352704725530878,.0963687371746442],[.447033769538089,.0921225222377861],[.536624148142019,.0868997872010829],[.620526182989242,.0807558952294202],[.697850494793315,.0737559747377052],[.767777432104826,.0659742298821805],[.829565762382768,.057493156217619],[.882560535792052,.048402672830594],[.926200047429274,.038799192569627],[.960021864968307,.0287847078833233],[.983668123279747,.0184664683110909],[.996893484074649,.0079681924961666]]],maxOrder=lut.length+5;var NumericalCurveMapper=function(_super){function NumericalCurveMapper(nQuadraturePoints,nInverseSamples,onInvalidateCache){void 0===nQuadraturePoints&&(nQuadraturePoints=24),void 0===nInverseSamples&&(nInverseSamples=21);var _this=_super.call(this,onInvalidateCache)||this;return _this._nSamples=21,_this._gauss=function(order){if(order<5||order>maxOrder)throw Error(\"Order for Gaussian Quadrature must be in the range of \".concat(5,\" and \").concat(maxOrder,\".\"));return lut[order-5]}(nQuadraturePoints),_this._nSamples=nInverseSamples,_this}return __extends(NumericalCurveMapper,_super),NumericalCurveMapper.prototype._invalidateCache=function(){_super.prototype._invalidateCache.call(this),this._cache.arcLengths=null,this._cache.samples=null},Object.defineProperty(NumericalCurveMapper.prototype,\"arcLengths\",{get:function(){return this._cache.arcLengths||(this._cache.arcLengths=this.computeArcLengths()),this._cache.arcLengths},enumerable:!1,configurable:!0}),NumericalCurveMapper.prototype.getSamples=function(idx){if(this.points){if(this._cache.samples||(this._cache.samples=new Map),!this._cache.samples.has(idx)){for(var samples=this._nSamples,lengths=[],slopes=[],coefficients=this.getCoefficients(idx),i=0;i<samples;++i){var ti=i/(samples-1);lengths.push(this.computeArcLength(idx,0,ti));var dtln=magnitude(evaluateForT(derivativeAtT,ti,coefficients)),slope=0===dtln?0:1/dtln;this.tension>.95&&(slope=clamp(slope,-1,1)),slopes.push(slope)}var nCoeff=samples-1,dis=[],cis=[],li_prev=lengths[0],tdi_prev=slopes[0],step=1/nCoeff;for(i=0;i<nCoeff;++i){var li=li_prev,lDiff=(li_prev=lengths[i+1])-li,tdi=tdi_prev,tdi_next=slopes[i+1];tdi_prev=tdi_next;var si=step/lDiff,di=(tdi+tdi_next-2*si)/(lDiff*lDiff),ci=(3*si-2*tdi-tdi_next)/lDiff;dis.push(di),cis.push(ci)}this._cache.samples.set(idx,[lengths,slopes,cis,dis])}return this._cache.samples.get(idx)}},NumericalCurveMapper.prototype.computeArcLength=function(index,t0,t1){if(void 0===t0&&(t0=0),void 0===t1&&(t1=1),t0===t1)return 0;for(var coefficients=this.getCoefficients(index),z=.5*(t1-t0),sum=0,i=0;i<this._gauss.length;i++){var _a=this._gauss[i],T=_a[0];sum+=_a[1]*magnitude(evaluateForT(derivativeAtT,z*T+z+t0,coefficients))}return z*sum},NumericalCurveMapper.prototype.computeArcLengths=function(){if(this.points){var lengths=[];lengths.push(0);for(var nPoints=this.closed?this.points.length:this.points.length-1,tl=0,i=0;i<nPoints;i++){tl+=this.computeArcLength(i),lengths.push(tl)}return lengths}},NumericalCurveMapper.prototype.inverse=function(idx,len){var step=1/(this._nSamples-1),_a=this.getSamples(idx),lengths=_a[0],slopes=_a[1],cis=_a[2],dis=_a[3];if(len>=lengths[lengths.length-1])return 1;if(len<=0)return 0;var i=Math.max(0,binarySearch(len,lengths)),ti=i*step;if(lengths[i]===len)return ti;var tdi=slopes[i],di=dis[i],ci=cis[i],ld=len-lengths[i];return((di*ld+ci)*ld+tdi)*ld+ti},NumericalCurveMapper.prototype.lengthAt=function(u){return u*this.arcLengths[this.arcLengths.length-1]},NumericalCurveMapper.prototype.getT=function(u){var arcLengths=this.arcLengths,il=arcLengths.length,targetArcLength=u*arcLengths[il-1],i=binarySearch(targetArcLength,arcLengths),ti=i/(il-1);if(arcLengths[i]===targetArcLength)return ti;var len=targetArcLength-arcLengths[i];return(i+this.inverse(i,len))/(il-1)},NumericalCurveMapper.prototype.getU=function(t){if(0===t)return 0;if(1===t)return 1;var arcLengths=this.arcLengths,al=arcLengths.length-1,totalLength=arcLengths[al],tIdx=t*al,subIdx=Math.floor(tIdx),l1=arcLengths[subIdx];if(tIdx===subIdx)return l1/totalLength;var t0=tIdx-subIdx;return(l1+this.computeArcLength(subIdx,0,t0))/totalLength},NumericalCurveMapper}(AbstractCurveMapper),CurveInterpolator=function(){function CurveInterpolator(points,options){void 0===options&&(options={});var _this=this;this._cache=new Map;var curveMapper=(options=__assign({tension:.5,alpha:0,closed:!1},options)).arcDivisions?new SegmentedCurveMapper(options.arcDivisions,(function(){return _this._invalidateCache()})):new NumericalCurveMapper(options.numericalApproximationOrder,options.numericalInverseSamples,(function(){return _this._invalidateCache()}));curveMapper.alpha=options.alpha,curveMapper.tension=options.tension,curveMapper.closed=options.closed,curveMapper.points=points,this._lmargin=options.lmargin||1-curveMapper.tension,this._curveMapper=curveMapper}return CurveInterpolator.prototype.getTimeFromPosition=function(position,clampInput){return void 0===clampInput&&(clampInput=!1),this._curveMapper.getT(clampInput?clamp(position,0,1):position)},CurveInterpolator.prototype.getPositionFromTime=function(t,clampInput){return void 0===clampInput&&(clampInput=!1),this._curveMapper.getU(clampInput?clamp(t,0,1):t)},CurveInterpolator.prototype.getPositionFromLength=function(length,clampInput){void 0===clampInput&&(clampInput=!1);var l=clampInput?clamp(length,0,this.length):length;return this._curveMapper.getU(l/this.length)},CurveInterpolator.prototype.getLengthAt=function(position,clampInput){return void 0===position&&(position=1),void 0===clampInput&&(clampInput=!1),this._curveMapper.lengthAt(clampInput?clamp(position,0,1):position)},CurveInterpolator.prototype.getTimeAtKnot=function(index){if(index<0||index>this.points.length-1)throw Error(\"Invalid index!\");return 0===index?0:this.closed||index!==this.points.length-1?index/(this.closed?this.points.length:this.points.length-1):1},CurveInterpolator.prototype.getPositionAtKnot=function(index){return this.getPositionFromTime(this.getTimeAtKnot(index))},CurveInterpolator.prototype.getPointAtTime=function(t,target){return 0===(t=clamp(t,0,1))?copyValues(this.points[0],target):1===t?copyValues(this.closed?this.points[0]:this.points[this.points.length-1],target):this._curveMapper.evaluateForT(valueAtT,t,target)},CurveInterpolator.prototype.getPointAt=function(position,target){return this.getPointAtTime(this.getTimeFromPosition(position),target)},CurveInterpolator.prototype.getTangentAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this.getTangentAtTime(t,target)},CurveInterpolator.prototype.getTangentAtTime=function(t,target){return normalize(this._curveMapper.evaluateForT(derivativeAtT,t,target))},CurveInterpolator.prototype.getNormalAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this.getNormalAtTime(t,target)},CurveInterpolator.prototype.getNormalAtTime=function(t,target){var dt=normalize(this._curveMapper.evaluateForT(derivativeAtT,t));if(!(dt.length<2||dt.length>3)){var normal=target||new Array(dt.length);if(2===dt.length)return normal[0]=-dt[1],normal[1]=dt[0],normal;var ddt=normalize(this._curveMapper.evaluateForT(secondDerivativeAtT,t));return normalize(cross(cross(dt,ddt),dt),normal)}},CurveInterpolator.prototype.getFrenetFrames=function(segments,from,to){if(void 0===from&&(from=0),void 0===to&&(to=1),!(from<0||to>1||to<from)){for(var tangents=new Array(segments+1),normals=new Array(segments+1),i=0;i<=segments;i++){var u=0===from&&1===to?i/segments:from+i/segments*(to-from);tangents[i]=this.getTangentAt(u)}if(2===this.dim){for(i=0;i<tangents.length;i++)normals[i]=[-tangents[i][1],tangents[i][0]];return{tangents:tangents,normals:normals}}if(3===this.dim){var binormals=new Array(segments+1),normal=void 0,min=Number.MAX_VALUE,tx=Math.abs(tangents[0][0]),ty=Math.abs(tangents[0][1]);tx<=min&&(min=tx,normal=[1,0,0]),ty<=min&&(min=ty,normal=[0,1,0]),Math.abs(tangents[0][2])<=min&&(normal=[0,0,1]);var vec=normalize(cross(tangents[0],normal));normals[0]=cross(tangents[0],vec),binormals[0]=cross(tangents[0],normals[0]);for(i=1;i<=segments;i++){if(vec=cross(tangents[i-1],tangents[i]),normals[i]=copyValues(normals[i-1]),magnitude(vec)>EPS){normalize(vec);var theta=Math.acos(clamp(dot(tangents[i-1],tangents[i]),-1,1));rotate3d(normals[i-1],vec,theta,normals[i])}binormals[i]=cross(tangents[i],normals[i])}if(!0===this.closed){theta=Math.acos(clamp(dot(normals[0],normals[segments]),-1,1))/segments;dot(tangents[0],cross(normals[0],normals[segments]))>0&&(theta=-theta);for(i=1;i<=segments;i++)rotate3d(normals[i],tangents[i],theta*i,normals[i]),binormals[i]=cross(tangents[i],normals[i])}return{tangents:tangents,normals:normals,binormals:binormals}}}},CurveInterpolator.prototype.getCurvatureAt=function(position){var t=clamp(this.getTimeFromPosition(position),0,1);return this.getCurvatureAtTime(t)},CurveInterpolator.prototype.getCurvatureAtTime=function(t){var dt=this._curveMapper.evaluateForT(derivativeAtT,t),ddt=this._curveMapper.evaluateForT(secondDerivativeAtT,t),tangent=normalize(dt,[]),curvature=0,direction=void 0;if(2===dt.length){if(0!==(denominator=Math.pow(dt[0]*dt[0]+dt[1]*dt[1],1.5))){var signedCurvature=(dt[0]*ddt[1]-dt[1]*ddt[0])/denominator;direction=signedCurvature<0?[tangent[1],-tangent[0]]:[-tangent[1],tangent[0]],curvature=Math.abs(signedCurvature)}}else if(3===dt.length){var a=magnitude(dt),cp=cross(dt,ddt);direction=normalize(cross(cp,dt)),0!==a&&(curvature=magnitude(cp)/Math.pow(a,3))}else{a=magnitude(dt);var b=magnitude(ddt),denominator=Math.pow(a,3),dotProduct=dot(dt,ddt);0!==denominator&&(curvature=Math.sqrt(Math.pow(a,2)*Math.pow(b,2)-Math.pow(dotProduct,2))/denominator)}return{curvature:curvature,radius:0!==curvature?1/curvature:0,tangent:tangent,direction:direction}},CurveInterpolator.prototype.getDerivativeAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this._curveMapper.evaluateForT(derivativeAtT,t,target)},CurveInterpolator.prototype.getSecondDerivativeAt=function(position,target){var t=clamp(this.getTimeFromPosition(position),0,1);return this._curveMapper.evaluateForT(secondDerivativeAtT,t,target)},CurveInterpolator.prototype.getBoundingBox=function(from,to){if(void 0===from&&(from=0),void 0===to&&(to=1),0===from&&1===to&&this._cache.has(\"bbox\"))return this._cache.get(\"bbox\");for(var min=[],max=[],t0=this.getTimeFromPosition(from),t1=this.getTimeFromPosition(to),start=this.getPointAtTime(t0),end=this.getPointAtTime(t1),nPoints=this.closed?this.points.length:this.points.length-1,i0=Math.floor(nPoints*t0),i1=Math.ceil(nPoints*t1),c=0;c<start.length;c++)min[c]=Math.min(start[c],end[c]),max[c]=Math.max(start[c],end[c]);for(var _loop_1=function(i){var p2=getControlPoints(i-1,this_1.points,this_1.closed)[2];if(i<i1)for(var c=0;c<p2.length;c++)p2[c]<min[c]&&(min[c]=p2[c]),p2[c]>max[c]&&(max[c]=p2[c]);if(this_1.tension<1){var w0_1=nPoints*t0-(i-1),w1_1=nPoints*t1-(i-1),valid=function(t){return t>-EPS&&t<=1+EPS&&(i-1!==i0||t>w0_1)&&(i!==i1||t<w1_1)},coefficients_1=this_1._curveMapper.getCoefficients(i-1),_loop_2=function(c){var _b=coefficients_1[c];getQuadRoots(3*_b[0],2*_b[1],_b[2]).filter(valid).forEach((function(t){var v=valueAtT(t,coefficients_1[c]);v<min[c]&&(min[c]=v),v>max[c]&&(max[c]=v)}))};for(c=0;c<coefficients_1.length;c++)_loop_2(c)}},this_1=this,i=i0+1;i<=i1;i++)_loop_1(i);var bbox={min:min,max:max};return 0===from&&1===to&&this._cache.set(\"bbox\",bbox),bbox},CurveInterpolator.prototype.getPoints=function(segments,returnType,from,to){if(void 0===segments&&(segments=100),void 0===from&&(from=0),void 0===to&&(to=1),!segments||segments<=0)throw Error(\"Invalid arguments passed to getPoints(). You must specify at least 1 sample/segment.\");if(!(from<0||to>1||to<from)){for(var pts=[],d=0;d<=segments;d++){var u=0===from&&1===to?d/segments:from+d/segments*(to-from);pts.push(this.getPointAt(u,returnType&&new returnType))}return pts}},CurveInterpolator.prototype.getNearestPosition=function(point,threshold,samples){var _this=this;if(void 0===threshold&&(threshold=1e-5),threshold<=0||!Number.isFinite(threshold))throw Error(\"Invalid threshold. Must be a number greater than zero!\");samples=samples||10*this.points.length-1;var pu=new Array(point.length),minDist=1/0,minU=0,lut=this.createLookupTable((function(u){return _this.getPointAt(u)}),samples,{cacheKey:\"lut_nearest_\".concat(samples)});Array.from(lut.keys()).forEach((function(key){var c=lut.get(key),dist=distance(point,c);if(dist<minDist)return minDist=dist,minU=key,!0}));for(var minT=this.getTimeFromPosition(minU),bisect=function(t){if(t>=0&&t<=1){_this.getPointAtTime(t,pu);var dist=distance(point,pu);if(dist<minDist)return minDist=dist,minT=t,!0}},step=.005;step>threshold;)bisect(minT-step)||bisect(minT+step)||(step/=2);return{u:minU=this._curveMapper.getU(minT),distance:minDist,point:pu}},CurveInterpolator.prototype.getIntersects=function(v,axis,max,margin){var _this=this;void 0===axis&&(axis=0),void 0===max&&(max=0),void 0===margin&&(margin=this._lmargin);var solutions=this.getIntersectsAsTime(v,axis,max,margin).map((function(t){return _this.getPointAtTime(t)}));return 1===Math.abs(max)?1===solutions.length?solutions[0]:null:solutions},CurveInterpolator.prototype.getIntersectsAsPositions=function(v,axis,max,margin){var _this=this;return void 0===axis&&(axis=0),void 0===max&&(max=0),void 0===margin&&(margin=this._lmargin),this.getIntersectsAsTime(v,axis,max,margin).map((function(t){return _this.getPositionFromTime(t)}))},CurveInterpolator.prototype.getIntersectsAsTime=function(v,axis,max,margin){void 0===axis&&(axis=0),void 0===max&&(max=0),void 0===margin&&(margin=this._lmargin);for(var k=axis,solutions=new Set,nPoints=this.closed?this.points.length:this.points.length-1,i=0;i<nPoints&&(0===max||solutions.size<Math.abs(max));i+=1){var idx=max<0?nPoints-(i+1):i,_a=getControlPoints(idx,this.points,this.closed),p1=_a[1],p2=_a[2],coefficients=this._curveMapper.getCoefficients(idx),vmin=void 0,vmax=void 0;if(p1[k]<p2[k]?(vmin=p1[k],vmax=p2[k]):(vmin=p2[k],vmax=p1[k]),v-margin<=vmax&&v+margin>=vmin){var ts=findRootsOfT(v,coefficients[k]);max<0?ts.sort((function(a,b){return b-a})):max>=0&&ts.sort((function(a,b){return a-b}));for(var j=0;j<ts.length;j++){var nt=(ts[j]+idx)/nPoints;if(solutions.add(nt),0!==max&&solutions.size===Math.abs(max))break}}}return Array.from(solutions)},CurveInterpolator.prototype.createLookupTable=function(func,samples,options){if(!samples||samples<=1)throw Error(\"Invalid arguments passed to createLookupTable(). You must specify at least 2 samples.\");var _a=__assign({from:0,to:1,cacheForceUpdate:!1},options),from=_a.from,to=_a.to,cacheKey=_a.cacheKey,cacheForceUpdate=_a.cacheForceUpdate;if(!(from<0||to>1||to<from)){var lut=null;if(cacheKey&&!cacheForceUpdate&&this._cache.has(cacheKey))cacheKey&&this._cache.has(cacheKey)&&(lut=this._cache.get(cacheKey));else{lut=new Map;for(var d=0;d<samples;d++){var u=0===from&&1===to?d/(samples-1):from+d/(samples-1)*(to-from),value=func(u);lut.set(u,value)}cacheKey&&this._cache.set(cacheKey,lut)}return lut}},CurveInterpolator.prototype.forEach=function(func,samples,from,to){var _this=this;void 0===from&&(from=0),void 0===to&&(to=1);var positions=[];if(Number.isFinite(samples)){var nSamples=samples;if(nSamples<=1)throw Error(\"Invalid arguments passed to forEach(). You must specify at least 2 samples.\");for(var i=0;i<nSamples;i++){var u=0===from&&1===to?i/(nSamples-1):from+i/(nSamples-1)*(to-from);positions.push(u)}}else Array.isArray(samples)&&(positions=samples);var prev=null;positions.forEach((function(u,i){if(!Number.isFinite(u)||u<0||u>1)throw Error(\"Invalid position (u) for sample in forEach!\");var t=_this.getTimeFromPosition(u),current=func({u:u,t:t,i:i,prev:prev});prev={u:u,t:t,i:i,value:current}}))},CurveInterpolator.prototype.map=function(func,samples,from,to){var _this=this;void 0===from&&(from=0),void 0===to&&(to=1);var positions=[];if(Number.isFinite(samples)){var nSamples=samples;if(nSamples<=1)throw Error(\"Invalid arguments passed to map(). You must specify at least 2 samples.\");for(var i=0;i<nSamples;i++){var u=0===from&&1===to?i/(nSamples-1):from+i/(nSamples-1)*(to-from);positions.push(u)}}else Array.isArray(samples)&&(positions=samples);var prev=null;return positions.map((function(u,i){if(!Number.isFinite(u)||u<0||u>1)throw Error(\"Invalid position (u) for sample in map()!\");var t=_this.getTimeFromPosition(u),current=func({u:u,t:t,i:i,prev:prev});return prev={u:u,t:t,i:i,value:current},current}))},CurveInterpolator.prototype.reduce=function(func,initialValue,samples,from,to){var _this=this;void 0===from&&(from=0),void 0===to&&(to=1);var positions=[];if(Number.isFinite(samples)){var nSamples=samples;if(nSamples<=1)throw Error(\"Invalid arguments passed to map(). You must specify at least 2 samples.\");for(var i=0;i<nSamples;i++){var u=0===from&&1===to?i/(nSamples-1):from+i/(nSamples-1)*(to-from);positions.push(u)}}else Array.isArray(samples)&&(positions=samples);return positions.reduce((function(acc,u,i){if(!Number.isFinite(u)||u<0||u>1)throw Error(\"Invalid position (u) for sample in map()!\");var t=_this.getTimeFromPosition(u);return func({acc:acc,u:u,t:t,i:i})}),initialValue)},CurveInterpolator.prototype._invalidateCache=function(){return this._cache=new Map,this},CurveInterpolator.prototype.reset=function(){this._curveMapper.reset()},Object.defineProperty(CurveInterpolator.prototype,\"points\",{get:function(){return this._curveMapper.points},set:function(pts){this._curveMapper.points=pts},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"tension\",{get:function(){return this._curveMapper.tension},set:function(t){this._curveMapper.tension=t},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"alpha\",{get:function(){return this._curveMapper.alpha},set:function(a){this._curveMapper.alpha=a},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"closed\",{get:function(){return this._curveMapper.closed},set:function(isClosed){this._curveMapper.closed=isClosed},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"length\",{get:function(){return this._curveMapper.lengthAt(1)},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"minX\",{get:function(){return this.getBoundingBox().min[0]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"maxX\",{get:function(){return this.getBoundingBox().max[0]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"minY\",{get:function(){return this.getBoundingBox().min[1]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"maxY\",{get:function(){return this.getBoundingBox().max[1]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"minZ\",{get:function(){return this.getBoundingBox().min[2]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"maxZ\",{get:function(){return this.getBoundingBox().max[2]},enumerable:!1,configurable:!0}),Object.defineProperty(CurveInterpolator.prototype,\"dim\",{get:function(){var _a;return(null===(_a=this.points[0])||void 0===_a?void 0:_a.length)||void 0},enumerable:!1,configurable:!0}),CurveInterpolator}(),Point=function(){function Point(x,y,z,w){void 0===x&&(x=0),void 0===y&&(y=0),void 0===z&&(z=null),void 0===w&&(w=null),this.x=x,this.y=y,this.z=z,this.w=w}return Object.defineProperty(Point.prototype,0,{get:function(){return this.x},set:function(x){this.x=x},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,1,{get:function(){return this.y},set:function(y){this.y=y},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,2,{get:function(){return this.z},set:function(z){this.z=z},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,3,{get:function(){return this.w},set:function(w){this.w=w},enumerable:!1,configurable:!0}),Object.defineProperty(Point.prototype,\"length\",{get:function(){return Number.isFinite(this.w)?4:Number.isFinite(this.z)?3:2},enumerable:!1,configurable:!0}),Point}();export{CurveInterpolator,EPS,SegmentedCurveMapper as LinearCurveMapper,NumericalCurveMapper,Point,add,binarySearch,calcKnotSequence,calculateCoefficients,clamp,copyValues,cross,derivativeAtT,distance,dot,evaluateForT,extrapolateControlPoint,fill,findRootsOfT,getControlPoints,getCubicRoots,getQuadRoots,getSegmentIndexAndT,magnitude,map,normalize,orthogonal,reduce,rotate2d,rotate3d,secondDerivativeAtT,simplify2d,sub,sumOfSquares,valueAtT};\n","import { clamp } from '@equinor/videx-math';\n\ntype fx = (n: number) => number;\n\n/*\n * Methods for finding root of a function\n */\nexport class RootFinder {\n /**\n * Find root using newthons method\n * @param {Number} func f(x)\n * @param {Number} precision Accuracy of result\n * @param {Number} maxIterations Max number of iterations to use\n * @param {Number} start Starting position\n * @param {Number} minLimit Min limit of result\n * @param {Number} maxLimit Max limit of result\n */\n static newton(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number | undefined {\n const h = 0.0001;\n let t = start;\n for (let i = 0; i < maxIterations; i++) {\n const v = func(t);\n if (Math.abs(v) < precision) {\n return clamp(t, minLimit, maxLimit);\n }\n const d = (func(t + h) - v) / h;\n t = t - v / d;\n }\n return undefined;\n }\n\n /**\n * Find root using bisect method\n * @param {Number} func f(x)\n * @param {Number} precision Accuracy of result\n * @param {Number} maxIterations Max number of iterations to use\n * @param {Number} start Starting position\n * @param {Number} minLimit Min limit of result\n * @param {Number} maxLimit Max limit of result\n */\n static bisect(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {\n let tl = minLimit;\n let th = maxLimit;\n let t = start;\n let v;\n let i;\n for (i = 0; i < maxIterations; i++) {\n v = func(t);\n if (Math.abs(v) < precision) {\n return t;\n }\n if (v < 0) {\n th = t;\n } else {\n tl = t;\n }\n t = (th + tl) / 2;\n }\n return t;\n }\n\n /**\n * Find root by trying available methods\n * @param {Number} func f(x)\n * @param {Number} precision Accuracy of result\n * @param {Number} maxIterations Max number of iterations to use\n * @param {Number} start Starting position\n * @param {Number} minLimit Min limit of result\n * @param {Number} maxLimit Max limit of result\n */\n static findRoot(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {\n let t = RootFinder.newton(func, precision, maxIterations, start);\n if (t == null) {\n t = RootFinder.bisect(func, precision, maxIterations, start, minLimit, maxLimit);\n }\n return t;\n }\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { Vector } from 'curve-interpolator/dist/src/core/interfaces';\n\ntype fx = (n: number) => Vector;\n\n/*\n * Methods for calculating length of a curve\n */\nexport class ArcLength {\n /**\n * Calculate using an adaptive bisect method\n * @param {Number} func Curve function returning [x,y]\n * @param {Number} minLimit Min limit\n * @param {Number} maxLimit Max limit\n * @param {Number} tolerance Result tolerance\n * @param {Number} minDepth Min recursive depth before accepting solution\n * @param {Number} maxDepth Max recursive depth\n */\n static bisect(func: fx, minLimit = 0, maxLimit = 1, tolerance = 0.005, minDepth = 4, maxDepth = 10): number {\n const calcRec = (a: number, b: number, aVal: number[], bVal: number[], span: number, tolerance: number, depth = 0): number => {\n const mid = (a + b) / 2;\n const midVal = func(mid) as number[];\n const spanA = Vector2.distance(aVal, midVal);\n const spanB = Vector2.distance(midVal, bVal);\n const length = spanA + spanB;\n if ((depth >= minDepth && Math.abs(length - span) < tolerance) || depth >= maxDepth) {\n return length;\n }\n const tol = tolerance / 2;\n const d = depth + 1;\n return calcRec(a, mid, aVal, midVal, spanA, tol, d) + calcRec(mid, b, midVal, bVal, spanB, tol, d);\n };\n const aVal = func(minLimit) as number[];\n const bVal = func(maxLimit) as number[];\n const span = Vector2.distance(aVal, bVal);\n const res = calcRec(minLimit, maxLimit, aVal, bVal, span, tolerance);\n return res;\n }\n\n /**\n * Calculate using trapezoid method\n * @param {Number} func Curve function returning [x,y]\n * @param {Number} minLimit Min limit\n * @param {Number} maxLimit Max limit\n * @param {Number} segments Number of segments\n */\n static trapezoid(func: fx, minLimit = 0, maxLimit = 1, segments = 1000): number {\n let length = 0;\n let lastPos = func(minLimit) as number[];\n const step = (maxLimit - minLimit) / (segments - 1);\n for (let i = 1; i < segments; i++) {\n const pos = func(minLimit + i * step) as number[];\n const delta = Vector2.distance(lastPos, pos);\n length += delta;\n lastPos = pos;\n }\n return length;\n }\n}\n","/**\n * Find index where value[index] =< searchValue and value[index+1] >= searchValue using binary search\n * @param {Number} values Array of sorted values\n * @param {Number} searchValue Value to search for\n */\nexport class BinarySearch {\n static search(values: number[], searchValue: number): number {\n let il = 0;\n let ih = values.length - 1;\n let i = Math.floor(il + ih / 2);\n while (i > il && i < ih) {\n const v = values[i];\n const v1 = values[i + 1];\n if (v != null && v1 != null && v <= searchValue && v1 >= searchValue) {\n return i;\n }\n if (v != null && searchValue < v) {\n ih = i;\n } else {\n il = i;\n }\n i = Math.floor(il + ih / 2);\n }\n return i;\n }\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { clamp } from '@equinor/videx-math';\nimport { CurveInterpolator } from 'curve-interpolator';\nimport { Vector } from 'curve-interpolator/dist/src/core/interfaces';\nimport { CurveInterpolatorOptions } from 'curve-interpolator/dist/src/curve-interpolator';\n\nimport { RootFinder } from '../utils/root-finder';\nimport { ArcLength } from '../utils/arc-length';\nimport { BinarySearch } from '../utils/binary-search';\n\nexport class ExtendedCurveInterpolator extends CurveInterpolator {\n arcLengthLookup: number[] = [];\n\n constructor(points: Vector[], options?: CurveInterpolatorOptions) {\n super(points, options);\n this.findTForArcLength = this.findTForArcLength.bind(this);\n this.findTByRootForArcLength = this.findTByRootForArcLength.bind(this);\n this.findApproxTForArcLength = this.findApproxTForArcLength.bind(this);\n this.findTQuickForArcLength = this.findTQuickForArcLength.bind(this);\n this.generateArcLengthLookup = this.generateArcLengthLookup.bind(this);\n this.getArcLength = this.getArcLength.bind(this);\n this.getQuickArcLength = this.getQuickArcLength.bind(this);\n this.getPointAtArcLength = this.getPointAtArcLength.bind(this);\n this.getPointAt = this.getPointAt.bind(this);\n }\n\n /**\n * Function which finds t value for arc length\n * @param {Number} arcLength Target arc length\n * @param {Number} tolerance Tolerance for result\n * @param {Number} iterations Max number of iterations to use\n */\n findTForArcLength(arcLength: number, options?: { approxT?: boolean; quickT?: boolean; normalizedLength?: number }): number {\n // TODO: Ideally the CurveInterpolator should be able to provide t for curve length\n let t;\n if (options?.approxT) {\n t = this.findApproxTForArcLength(arcLength, options?.normalizedLength);\n } else if (options?.quickT) {\n t = this.findTQuickForArcLength(arcLength);\n } else {\n t = this.findTByRootForArcLength(arcLength);\n }\n return t;\n }\n\n /**\n * Function which finds t value for arc length by finding root\n * @param {Number} arcLength Target arc length\n * @param {Number} tolerance Tolerance for result\n * @param {Number} iterations Max number of iterations to use\n */\n findTByRootForArcLength(arcLength: number, tolerance = 0.01, iterations = 100): number {\n if (arcLength <= 0) {\n return 0.0;\n }\n if (arcLength >= this.length) {\n return 1.0;\n }\n const t = RootFinder.findRoot((x) => arcLength - this.getQuickArcLength(0, x), tolerance, iterations, arcLength / this.length);\n return t;\n }\n\n /**\n * Function which finds t value for arc length by simple approximation\n * @param {Number} arcLength Target arclength\n */\n findApproxTForArcLength(arcLength: number, normalizedLength?: number): number {\n const t = arcLength / (normalizedLength || this.length);\n return t;\n }\n\n /**\n * Function which finds t value for arc length using lookup table\n * @param {Number} arcLength Target arclength\n */\n findTQuickForArcLength(arcLength: number): number {\n if (this.arcLengthLookup.length === 0) {\n this.generateArcLengthLookup();\n }\n const index = BinarySearch.search(this.arcLengthLookup, arcLength);\n const v1 = this.arcLengthLookup[index]!;\n const v2 = this.arcLengthLookup[index + 1]!;\n const t = (index + (arcLength - v1) / (v2 - v1)) / this.arcLengthLookup.length;\n return t;\n }\n\n generateArcLengthLookup(segments = 1000): void {\n let lastPos = this.getPointAt(0);\n let length = 0;\n for (let i = 0; i < segments; i++) {\n const pos = this.getPointAt(i / (segments - 1));\n const delta = Vector2.distance(lastPos as number[], pos as number[]);\n length += delta;\n this.arcLengthLookup.push(length);\n lastPos = pos;\n }\n }\n\n /**\n * Function calculating length along curve using interpolator.\n * @param {Number} from t at start (default = 0)\n * @param {Number} to t at end (default = 1)\n */\n getArcLength(from = 0, to = 1): number {\n if (from === 0 && to === 1) {\n return this.length;\n }\n const tolerance = 0.002;\n return ArcLength.bisect((t: number) => this.getPointAt(t), from, to, tolerance);\n }\n\n /**\n * Function calculating length along curve using interpolator.\n * @param {Number} from t at start (default = 0)\n * @param {Number} to t at end (default = 1)\n */\n getQuickArcLength(from = 0, to = 1): number {\n let fromLength = 0;\n let toLength = this.length;\n if (this.arcLengthLookup.length === 0) {\n this.generateArcLengthLookup();\n }\n\n if (from !== 0) {\n const fromIndex = Math.floor(from * this.arcLengthLookup.length);\n const fromLl = this.arcLengthLookup[fromIndex]!;\n const fromLh = this.arcLengthLookup[fromIndex + 1]!;\n fromLength = fromLl + ((from * this.arcLengthLookup.length) % this.arcLengthLookup.length) * (fromLh - fromLl);\n }\n\n if (to !== 1) {\n const toIndex = Math.floor(to * this.arcLengthLookup.length);\n const toLl = this.arcLengthLookup[toIndex]!;\n const toLh = this.arcLengthLookup[toIndex + 1]!;\n toLength = toLl + ((from * this.arcLengthLookup.length) % this.arcLengthLookup.length) * (toLh - toLl);\n }\n\n const totalLength = toLength - fromLength;\n return totalLength;\n }\n\n /**\n * Function getting a point at curve length.\n * @param {Number} arcLength\n */\n getPointAtArcLength(arcLength: number, options?: { approxT?: boolean; quickT?: boolean; normalizedLength?: number }): Vector {\n const t = this.findTForArcLength(arcLength, options);\n return this.getPointAt(t);\n }\n\n override getPointAt(t: number): Vector {\n const tl = clamp(t, 0, 1);\n return super.getPointAt(tl);\n }\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { clamp, radians } from '@equinor/videx-math';\nimport { CurveInterpolator, normalize } from 'curve-interpolator';\n\nimport { Interpolators, Trajectory, MDPoint } from '../interfaces';\nimport { ExtendedCurveInterpolator } from './ExtendedCurveInterpolator';\n\n// determines how curvy the curve is\nconst TENSION = 0.75;\n// determines how many segments to split the curve into\nconst ARC_DIVISIONS = 5000;\n// specifies amount of steps (in the range [0,1]) to work back from the end of the curve\nconst THRESHOLD_DIRECTION_DISTANCE = 0.001;\n\nconst DEFAULT_START_EXTEND_LENGTH = 1000.0;\nconst DEFAULT_END_EXTEND_LENGTH = 1000.0;\n\nconst CURTAIN_SAMPLING_ANGLE_THRESHOLD = 0.0005;\nconst CURTAIN_SAMPLING_INTERVAL = 0.1;\n\nconst defaultOptions = {\n approxT: true,\n};\n\nexport interface ReferenceSystemOptions {\n normalizedLength?: number;\n arcDivisions?: number;\n tension?: number;\n trajectoryAngle?: number;\n calculateDisplacementFromBottom?: boolean;\n curveInterpolator?: ExtendedCurveInterpolator;\n trajectoryInterpolator?: ExtendedCurveInterpolator;\n curtainInterpolator?: ExtendedCurveInterpolator;\n approxT?: boolean;\n quickT?: boolean;\n}\n\nexport class IntersectionReferenceSystem {\n options!: ReferenceSystemOptions;\n\n path: number[][] = [];\n\n projectedPath: number[][] = [];\n\n private _offset = 0;\n\n displacement!: number;\n\n interpolators!: Interpolators;\n\n startVector!: number[];\n\n endVector!: number[];\n\n _curtainPathCache: MDPoint[] | undefined;\n\n /**\n * Creates a common reference system that layers and other components can use\n * @param path (required) array of 3d coordinates: [x, y, z]\n * @param options (optional)\n * @param options.trajectoryAngle (optional) - trajectory angle in degrees, overrides the calculated value\n * @param options.calculateDisplacementFromBottom - (optional) specify if the path is passed from bottom up\n */\n constructor(path: number[][], options?: ReferenceSystemOptions) {\n if (path.length < 1) {\n throw new Error('Missing coordinates');\n }\n if (path[0] && path[0].length !== 3) {\n throw new Error('Coordinates should be in 3d');\n }\n this.setPath(path, options);\n\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.getPosition = this.getPosition.bind(this);\n this.getProjectedLength = this.getProjectedLength.bind(this);\n this.getTrajectory = this.getTrajectory.bind(this);\n }\n\n private setPath(path: number[][], options: ReferenceSystemOptions = {}): void {\n this.options = { ...defaultOptions, ...options };\n const { arcDivisions, tension, calculateDisplacementFromBottom } = this.options;\n\n this.path = path;\n\n this.projectedPath = IntersectionReferenceSystem.toDisplacement(path);\n\n const [displacement] = this.projectedPath[this.projectedPath.length - 1]!;\n this.displacement = displacement!;\n\n this.interpolators = {\n curve: options.curveInterpolator || new ExtendedCurveInterpolator(path),\n trajectory:\n options.trajectoryInterpolator ||\n new ExtendedCurveInterpolator(\n path.map((d: number[]) => [d[0]!, d[1]!]),\n { tension: tension || TENSION, arcDivisions: arcDivisions || ARC_DIVISIONS },\n ),\n curtain:\n options.curtainInterpolator ||\n new ExtendedCurveInterpolator(this.projectedPath, { tension: tension || TENSION, arcDivisions: arcDivisions || ARC_DIVISIONS }),\n };\n\n const trajVector = this.getTrajectoryVector();\n const negativeTrajVector = trajVector.map((d: number) => d * -1);\n\n if (calculateDisplacementFromBottom) {\n this.endVector = negativeTrajVector;\n this.startVector = trajVector;\n } else {\n this.endVector = trajVector;\n this.startVector = negativeTrajVector;\n }\n\n this._curtainPathCache = undefined;\n }\n\n /**\n * Map a length along the curve to intersection coordinates\n * @param length length along the curve\n */\n project(length: number): number[] {\n const { curtain } = this.interpolators;\n const { calculateDisplacementFromBottom } = this.options;\n const cl = clamp(calculateDisplacementFromBottom ? this.length - (length - this._offset) : length - this._offset, 0, this.length);\n const p = curtain.getPointAtArcLength(cl, this.options);\n return p as number[];\n }\n\n curtainTangent(length: number): number[] {\n const { curtain } = this.interpolators;\n const l = length - this._offset;\n const t = curtain.findTForArcLength(l, this.options);\n const tangent = t && curtain.getTangentAt(t);\n return tangent as number[];\n }\n\n /**\n * Returns as resampled version of the projected path between start and end\n * Samples are picked from the beginning of the path at every CURTAIN_SAMPLING_INTERVAL meters\n * If the angle between two consecutive segments is close to 180 degrees depending on CURTAIN_SAMPLING_ANGLE_THRESHOLD,\n * a sample in between is discarded.\n *\n * The start and the end are not guaranteed to be part of the returned set of points\n * @param startMd in MD\n * @param endMd in MD\n * @param includeStartEnd guarantee to include the starting and end points\n */\n getCurtainPath(startMd: number, endMd: number, includeStartEnd = false): MDPoint[] {\n if (!this._curtainPathCache) {\n const points: MDPoint[] = [];\n let prevAngle = Math.PI * 2; // Always add first point\n for (let i = this._offset; i <= this.length + this._offset; i += CURTAIN_SAMPLING_INTERVAL) {\n const point = this.project(i);\n const angle = Math.atan2(point[1]!, point[0]!);\n\n // Reduce number of points on a straight line by angle since last point\n if (Math.abs(angle - prevAngle) > CURTAIN_SAMPLING_ANGLE_THRESHOLD) {\n points.push({ point, md: i });\n prevAngle = angle;\n }\n }\n this._curtainPathCache = points;\n }\n\n if (includeStartEnd) {\n const startPoint = { point: this.project(startMd), md: startMd };\n const pointsBetween = this._curtainPathCache.filter((p) => p.md > startMd && p.md < endMd);\n const endPoint = { point: this.project(endMd), md: endMd };\n return [startPoint, ...pointsBetween, endPoint];\n }\n return this._curtainPathCache.filter((p) => p.md >= startMd && p.md <= endMd);\n }\n\n /**\n * Map a displacement back to length along the curve\n */\n unproject(displacement: number): number | undefined {\n const { normalizedLength, calculateDisplacementFromBottom } = this.options;\n const displacementFromStart = calculateDisplacementFromBottom ? this.displacement - displacement : displacement;\n const length = normalizedLength || this.length;\n\n if (displacementFromStart < 0) {\n return displacementFromStart;\n }\n if (displacementFromStart > this.displacement) {\n return length + (displacementFromStart - this.displacement);\n }\n\n const ls = this.interpolators.curtain.getIntersectsAsPositions(displacementFromStart, 0, 1);\n if (ls && ls.length) {\n return ls[0]! * length + this._offset;\n }\n return undefined;\n }\n\n /**\n * Get the normalized displacement [0 - 1] of a specific length along the curve\n */\n getProjectedLength(length: number): number {\n const { curtain } = this.interpolators;\n const pl = this.project(length);\n const l = pl[0]! / curtain.maxX;\n return Number.isFinite(l) ? clamp(l, 0, 1) : 0;\n }\n\n /**\n * Get the trajectory position at a length along the curve\n */\n getPosition(length: number): number[] {\n const { trajectory } = this.interpolators;\n const t = this.getProjectedLength(length);\n const p = trajectory.getPointAt(t) as number[];\n return p;\n }\n\n /**\n * Generate a set of coordinates along the trajectory of the curve\n */\n getTrajectory(steps: number, from = 0, to = 1): Trajectory {\n const extensionStart = from < 0 ? -from : 0;\n const extensionEnd = to > 1 ? to - 1 : 0;\n\n const refStart = this.interpolators.trajectory.getPointAt(0) as [number, number];\n const refEnd = this.interpolators.trajectory.getPointAt(1) as [number, number];\n\n let p0: [number, number];\n let p3: [number, number];\n let offset = 0;\n const t0 = Math.max(0, from);\n const t1 = Math.min(1, to);\n const p1 = this.interpolators.trajectory.getPointAt(t0) as [number, number];\n const p2 = this.interpolators.trajectory.getPointAt(t1) as [number, number];\n\n if (extensionStart) {\n p0 = [\n refStart[0] + this.startVector[0]! * extensionStart * this.displacement,\n refStart[1] + this.startVector[1]! * extensionStart * this.displacement,\n ];\n offset = -Vector2.distance(p0, refStart);\n } else if (from > 0) {\n offset = Vector2.distance(p1, refStart);\n }\n\n if (extensionEnd) {\n p3 = [refEnd[0] + this.endVector[0]! * extensionEnd * this.displacement, refEnd[1] + this.endVector[1]! * extensionEnd * this.displacement];\n }\n const points = [];\n const tl = to - from;\n const preSteps = Math.floor((extensionStart / tl) * steps);\n const curveSteps = Math.ceil(((t1 - t0) / tl) * steps);\n const postSteps = steps - curveSteps - preSteps;\n\n if (p0!) {\n points.push(p0);\n for (let i = 1; i < preSteps; i++) {\n const f = (i / preSteps) * extensionStart * this.displacement;\n points.push([p0[0] - this.startVector[0]! * f, p0[1] - this.startVector[1]! * f]);\n }\n }\n const curvePoints = this.interpolators.trajectory.getPoints(curveSteps - 1, null, t0, t1) as number[][]; // returns steps + 1 points\n points.push(...curvePoints);\n if (p3!) {\n for (let i = 1; i < postSteps - 1; i++) {\n const f = (i / postSteps) * extensionEnd * this.displacement;\n points.push([p2[0] + this.endVector[0]! * f, p2[1] + this.endVector[1]! * f]);\n }\n points.push(p3);\n }\n return { points, offset };\n }\n\n /**\n * Generate a set of coordinates along the trajectory of the curve\n */\n getExtendedTrajectory(\n numPoints: number,\n startExtensionLength = DEFAULT_START_EXTEND_LENGTH,\n endExtensionLength = DEFAULT_END_EXTEND_LENGTH,\n ): Trajectory {\n if (!isFinite(startExtensionLength) || startExtensionLength < 0.0) {\n throw new Error('Invalid parameter, getExtendedTrajectory() must be called with a valid and positive startExtensionLength parameter');\n }\n if (!isFinite(endExtensionLength) || endExtensionLength < 0.0) {\n throw new Error('Invalid parameter, getExtendedTrajectory() must be called with a valid and positive endExtensionLength parameter');\n }\n\n const totalLength = this.displacement + startExtensionLength + endExtensionLength;\n const startExtensionNumPoints = Math.floor((startExtensionLength / totalLength) * numPoints);\n const curveSteps = Math.max(Math.ceil((this.displacement / totalLength) * numPoints), 1);\n const endExtensionNumPoints = numPoints - curveSteps - startExtensionNumPoints;\n\n const points = [];\n\n const refStart = new Vector2(this.interpolators.trajectory.getPointAt(0.0) as number[]);\n const startVec = new Vector2(this.startVector);\n const startExtensionStepLength = startExtensionLength / startExtensionNumPoints;\n for (let i = startExtensionNumPoints; i > 0; i--) {\n const f = i * startExtensionStepLength;\n const point = refStart.add(startVec.scale(f));\n points.push(point.toArray());\n }\n\n const curveStepPoints = this.interpolators.trajectory.getPoints(curveSteps, null, 0.0, 1.0) as number[][];\n points.push(...curveStepPoints);\n\n const refEnd = new Vector2(this.interpolators.trajectory.getPointAt(1.0) as number[]);\n const endVec = new Vector2(this.endVector);\n const endExtensionStepLength = endExtensionLength / (endExtensionNumPoints - 1); // -1 so last point is at end of extension\n for (let i = 1; i < endExtensionNumPoints; i++) {\n const f = i * endExtensionStepLength;\n const point = refEnd.add(endVec.scale(f));\n points.push(point.toArray());\n }\n\n const offset = -startExtensionLength;\n\n const trajectory = { points, offset };\n return trajectory;\n }\n\n getTrajectoryVector(): number[] {\n const { trajectoryAngle, calculateDisplacementFromBottom } = this.options;\n\n if (trajectoryAngle != null && isFinite(trajectoryAngle)) {\n const angleInRad = radians(trajectoryAngle);\n return new Vector2(Math.cos(angleInRad), Math.sin(angleInRad)).toArray();\n }\n\n const trajectoryVec = IntersectionReferenceSystem.getDirectionVector(\n this.interpolators.trajectory,\n calculateDisplacementFromBottom ? THRESHOLD_DIRECTION_DISTANCE : 1 - THRESHOLD_DIRECTION_DISTANCE,\n calculateDisplacementFromBottom ? 0 : 1,\n );\n return trajectoryVec;\n }\n\n /**\n * Perform a curtain projection on a set of points in 3D\n * @param points\n * @param origin\n * @param offset\n * @returns {array}\n */\n static toDisplacement(points: number[][], offset = 0): number[][] {\n let p0: number[] = points[0]!;\n let l = 0;\n const projected = points.map((p1: number[]) => {\n const dx = p1[0]! - p0[0]!;\n const dy = p1[1]! - p0[1]!;\n l += Math.sqrt(dx ** 2 + dy ** 2);\n p0 = p1;\n return [offset > 0 ? offset - l : l, p1[2] || 0];\n });\n return projected;\n }\n\n /**\n * returns a normalized vector\n * @param interpolator interpolated curve\n * @param from number between 0 and 1\n * @param to number between 0 and 1\n */\n static getDirectionVector(interpolator: CurveInterpolator, from: number, to: number): number[] {\n const p1 = interpolator.getPointAt(to);\n const p2 = interpolator.getPointAt(from);\n\n return normalize([p1[0] - p2[0], p1[1] - p2[1]]) as number[];\n }\n\n get length(): number {\n return this.interpolators.curve?.length ?? 0;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n set offset(offset: number) {\n this._curtainPathCache = undefined;\n this._offset = offset;\n }\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","import { select, Selection } from 'd3-selection';\nimport { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { zoom, zoomIdentity, ZoomBehavior, ZoomTransform } from 'd3-zoom';\n\nimport { ZoomAndPanOptions, OnRescaleEvent } from '../interfaces';\n\nconst DEFAULT_MIN_ZOOM_LEVEL = 0.1;\nconst DEFAULT_MAX_ZOOM_LEVEL = 256;\n\nexport type RescaleFunction = (event: OnRescaleEvent) => void;\n/**\n * Handle zoom and pan for intersection layers\n */\nexport class ZoomPanHandler {\n zoom!: ZoomBehavior<HTMLElement, unknown>;\n container: Selection<HTMLElement, unknown, null, undefined>;\n onRescale: RescaleFunction;\n options: ZoomAndPanOptions;\n xBounds: [number, number] = [0, 1];\n yBounds: [number, number] = [0, 1];\n translateBoundsX: [number, number] = [0, 1];\n translateBoundsY: [number, number] = [0, 1];\n scaleX: ScaleLinear<number, number>;\n scaleY: ScaleLinear<number, number>;\n _zFactor = 1;\n _enableTranslateExtent = false;\n currentTransform: ZoomTransform | undefined;\n\n /**\n * Constructor\n * @param elm, -\n * @param options - options\n */\n constructor(\n elm: HTMLElement,\n onRescale: RescaleFunction,\n options: ZoomAndPanOptions = { maxZoomLevel: DEFAULT_MAX_ZOOM_LEVEL, minZoomLevel: DEFAULT_MIN_ZOOM_LEVEL },\n ) {\n this.container = select(elm);\n this.options = options;\n\n this.onRescale = onRescale;\n\n this.onZoom = this.onZoom.bind(this);\n this.calculateTransform = this.calculateTransform.bind(this);\n this.applyTransform = this.applyTransform.bind(this);\n this.recalculateZoomTransform = this.recalculateZoomTransform.bind(this);\n this.rescale = this.rescale.bind(this);\n\n this.adjustToSize = this.adjustToSize.bind(this);\n this.setViewport = this.setViewport.bind(this);\n\n this.currentStateAsEvent = this.currentStateAsEvent.bind(this);\n\n this.updateTranslateExtent = this.updateTranslateExtent.bind(this);\n\n this.scaleX = scaleLinear().domain(this.xBounds).range([0, 1]);\n this.scaleY = scaleLinear().domain(this.yBounds).range([0, 1]);\n\n this.init();\n }\n\n /**\n * Getter returning width of target\n * @returns width\n */\n get width(): number {\n return this.scaleX.range()[1] ?? 0;\n }\n\n /**\n * Getter returning height of target\n * @returns height\n */\n get height(): number {\n return this.scaleY.range()[1] ?? 0;\n }\n\n /**\n * Getter which calculate span from x bounds\n * @returns x span\n */\n get xSpan(): number {\n const { xBounds } = this;\n const xspan: number = Math.abs(xBounds[1] - xBounds[0]);\n return xspan;\n }\n\n /**\n * Calculate span from y bounds\n * @returns y span\n */\n get ySpan(): number {\n const { yBounds } = this;\n const yspan: number = Math.abs(yBounds[1] - yBounds[0]);\n return yspan;\n }\n\n /**\n * Ratio between height and width\n * @returns ratio\n */\n get viewportRatio(): number {\n const ratio: number = this.width / (this.height || 1);\n return ratio;\n }\n\n /**\n * x ratios screen to value ratio\n * @returns ratio\n */\n get xRatio(): number {\n const domain = this.scaleX.domain() as [number, number];\n const ratio = Math.abs(this.width / (domain[1] - domain[0]));\n return ratio;\n }\n\n /**\n * y scale screen to value ratio\n * @returns ratio\n */\n get yRatio(): number {\n const domain = this.scaleY.domain() as [number, number];\n const ratio = Math.abs(this.height / (domain[1] - domain[0]));\n return ratio;\n }\n\n /**\n * Get z-factor\n * @returns z-factor\n */\n get zFactor(): number {\n return this._zFactor;\n }\n\n /**\n * Set z factor\n * @param factor\n */\n set zFactor(factor: number) {\n this._zFactor = factor;\n this.recalculateZoomTransform();\n }\n\n /**\n * Check if x is inverted (right to left is positive) from x bounds\n * @returns true if inverted\n */\n get isXInverted(): boolean {\n return this.xBounds[1] < this.xBounds[0];\n }\n\n /**\n * Check if y is inverted (bottom to top is positive) from y bounds\n * @returns true if inverted\n */\n get isYInverted(): boolean {\n return this.yBounds[1] < this.yBounds[0];\n }\n\n /**\n * Get if enable translate extent (pan limit)\n * @returns true if enabled\n */\n get enableTranslateExtent(): boolean {\n return this._enableTranslateExtent;\n }\n\n /**\n * Set enable translate extent (pan limit)\n * @param enabled - If should be enabled\n */\n set enableTranslateExtent(enabled: boolean) {\n this._enableTranslateExtent = enabled;\n\n this.updateTranslateExtent();\n }\n\n /**\n * Update translate extent (pan limits)\n */\n updateTranslateExtent(): void {\n const { width, xSpan, zFactor, enableTranslateExtent, translateBoundsX, translateBoundsY } = this;\n\n let x1 = -Infinity;\n let y1 = -Infinity;\n let x2 = +Infinity;\n let y2 = +Infinity;\n\n if (enableTranslateExtent) {\n const ppu: number = width / xSpan;\n\n x1 = translateBoundsX[0] * ppu;\n x2 = translateBoundsX[1] * ppu;\n y1 = translateBoundsY[0] * ppu * zFactor;\n y2 = translateBoundsY[1] * ppu * zFactor;\n }\n\n this.zoom.translateExtent([\n [x1, y1],\n [x2, y2],\n ]);\n }\n\n /**\n * Create an event object from current state\n */\n currentStateAsEvent(): OnRescaleEvent {\n const { scaleX, scaleY, xBounds, yBounds, zFactor, viewportRatio, currentTransform, xRatio, yRatio, width, height } = this;\n\n return {\n xScale: scaleX.copy(),\n yScale: scaleY.copy(),\n xBounds: xBounds,\n yBounds: yBounds,\n zFactor: zFactor,\n viewportRatio,\n xRatio: xRatio,\n yRatio: yRatio,\n width: width,\n height: height,\n transform: Object.assign({}, currentTransform),\n };\n }\n\n /**\n * Update scale\n */\n rescale(): void {\n const { currentStateAsEvent } = this;\n\n this.onRescale(currentStateAsEvent());\n }\n\n /**\n * Initialized handler\n */\n init(): void {\n this.zoom = zoom<HTMLElement, unknown>().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);\n this.container.call(this.zoom);\n }\n\n /**\n * Handle zoom\n */\n onZoom(event: { transform: ZoomTransform }): void {\n const { transform } = event;\n if (!transform) {\n return;\n }\n\n this.applyTransform(transform);\n this.rescale();\n }\n\n /**\n * Update scale\n */\n applyTransform(transform: ZoomTransform): void {\n const { width, scaleX, scaleY, xSpan, xBounds, yBounds, zFactor } = this;\n\n const { viewportRatio: ratio, isXInverted, isYInverted } = this;\n\n const newWidth: number = width * transform.k;\n\n const unitsPerPixels: number = xSpan / newWidth;\n\n const newXSpan: number = xSpan / transform.k;\n const newYSpan: number = newXSpan / zFactor / ratio;\n\n const shiftx: number = unitsPerPixels * transform.x;\n const shifty: number = (unitsPerPixels / zFactor) * transform.y;\n const dx0: number = xBounds[0] - (isXInverted ? -shiftx : shiftx);\n const dy0: number = yBounds[0] - (isYInverted ? -shifty : shifty);\n\n scaleX.domain([dx0, dx0 + (isXInverted ? -newXSpan : newXSpan)]);\n scaleY.domain([dy0, dy0 + (isYInverted ? -newYSpan : newYSpan)]);\n\n this.currentTransform = transform;\n }\n\n /**\n * Set new viewport\n * @param cx - center X pos\n * @param cy - center Y pos\n * @param displ\n * @param duration - duration of transition\n * @returns a merge of filter and payload\n */\n setViewport(cx?: number, cy?: number, displ?: number, duration?: number): void {\n const { zoom, container, calculateTransform, scaleX, scaleY, isXInverted } = this;\n\n if (cx == null || displ == null || isNaN(cx) || isNaN(displ)) {\n const xd = scaleX.domain() as [number, number];\n const dspan: number = xd[1] - xd[0];\n\n if (cx == null || isNaN(cx)) {\n cx = xd[0] + dspan / 2 || 0;\n }\n if (displ == null || isNaN(displ)) {\n displ = Math.abs(dspan) || 1;\n }\n }\n\n if (cy == null || isNaN(cy)) {\n const yd = scaleY.domain() as [number, number];\n cy = yd[0] + (yd[1] - yd[0]) / 2 || 0;\n }\n\n const xdispl: number = isXInverted ? -displ : displ;\n\n const dx0: number = cx - xdispl / 2;\n const dx1: number = dx0 + xdispl;\n\n const t: ZoomTransform = calculateTransform(dx0, dx1, cy);\n\n if (duration != null && Number.isFinite(duration) && duration > 0) {\n zoom.transform(container.transition().duration(duration), t);\n } else {\n zoom.transform(container, t);\n }\n }\n\n /**\n * Set bounds\n */\n setBounds(xBounds: [number, number], yBounds: [number, number]): void {\n this.xBounds = xBounds;\n this.yBounds = yBounds;\n\n this.recalculateZoomTransform();\n }\n\n /**\n * Set bounds\n */\n setTranslateBounds(xBounds: [number, number], yBounds: [number, number]): void {\n this.translateBoundsX = xBounds;\n this.translateBoundsY = yBounds;\n\n this.updateTranslateExtent();\n }\n\n /**\n * Adjust zoom due to changes in size of target\n * @param force - force update even if size did not change\n */\n adjustToSize(): void;\n adjustToSize(autoAdjust: boolean): void;\n adjustToSize(width: number, height: number, force: boolean): void;\n adjustToSize(widthOrAutoAdjust?: unknown, height?: number, force = false): void {\n const { width: oldWidth, height: oldHeight, scaleX, scaleY, recalculateZoomTransform } = this;\n\n let w = 0;\n let h = 0;\n\n if (typeof widthOrAutoAdjust === 'number' && typeof height === 'number') {\n h = height;\n w = widthOrAutoAdjust;\n } else {\n const containerEl = this.container.node();\n if (containerEl) {\n const { width: containerWidth, height: containerHeight } = containerEl.getBoundingClientRect();\n w = containerWidth;\n h = containerHeight;\n }\n }\n\n const newWidth: number = Math.max(1, w);\n const newHeight: number = Math.max(1, h);\n\n // exit early if nothing has changed\n if (!force && oldWidth === newWidth && oldHeight === newHeight) {\n return;\n }\n\n scaleX.range([0, newWidth]);\n scaleY.range([0, newHeight]);\n\n recalculateZoomTransform();\n this.onRescale(this.currentStateAsEvent());\n }\n\n /**\n * Calculate new transform\n * @param dx0\n * @param dx1\n * @param dy\n * @returns New transformation matrix\n */\n calculateTransform(dx0: number, dx1: number, dy: number): ZoomTransform {\n const { scaleX, xSpan, xBounds, yBounds, zFactor, viewportRatio: ratio, isXInverted, isYInverted } = this;\n\n const [rx1, rx2] = scaleX.range() as [number, number];\n const displ = Math.abs(dx1 - dx0);\n const k = xSpan / displ;\n const unitsPerPixels = displ / (rx2 - rx1);\n\n const dy0 = dy - (isYInverted ? -displ : displ) / zFactor / ratio / 2;\n\n const tx = (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);\n const ty = (yBounds[0] - dy0) / ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);\n\n return zoomIdentity.translate(tx, ty).scale(k);\n }\n\n /**\n * Recalcualate the transform\n */\n recalculateZoomTransform(): void {\n const { scaleX, scaleY, container, calculateTransform, updateTranslateExtent } = this;\n\n const [dx0, dx1] = scaleX.domain() as [number, number];\n const [dy0, dy1] = scaleY.domain() as [number, number];\n\n const dy: number = dy0 + (dy1 - dy0) / 2;\n\n const transform: ZoomTransform = calculateTransform(dx0, dx1, dy);\n\n updateTranslateExtent();\n\n this.zoom.transform(container, transform);\n }\n\n setZoomLevelBoundary(zoomlevels: [number, number]): ZoomPanHandler {\n this.zoom.scaleExtent(zoomlevels);\n return this;\n }\n\n setMaxZoomLevel(zoomlevel: number): ZoomPanHandler {\n const zoomLevels = this.zoom.scaleExtent();\n this.zoom.scaleExtent([zoomLevels[0], zoomlevel]);\n return this;\n }\n\n setMinZoomLevel(zoomlevel: number): ZoomPanHandler {\n const zoomLevels = this.zoom.scaleExtent();\n this.zoom.scaleExtent([zoomlevel, zoomLevels[1]]);\n return this;\n }\n}\n","import { OnMountEvent, OnUnmountEvent, OnUpdateEvent, OnRescaleEvent, OnResizeEvent } from '../../interfaces';\nimport { IntersectionReferenceSystem } from '../../control';\n\nconst defaultOptions = {\n order: 1,\n layerOpacity: 1,\n interactive: false,\n};\n\nexport interface LayerOptions<T> {\n order?: number;\n layerOpacity?: number;\n referenceSystem?: IntersectionReferenceSystem;\n data?: T;\n interactive?: boolean;\n\n onMount?(event: OnMountEvent, layer: Layer<T>): void;\n onUnmount?(event: OnUnmountEvent, layer: Layer<T>): void;\n onUpdate?(event: OnUpdateEvent<T>, layer: Layer<T>): void;\n onRescale?(event: OnRescaleEvent, layer: Layer<T>): void;\n onResize?(event: OnResizeEvent, layer: Layer<T>): void;\n}\n\nexport abstract class Layer<T> {\n private _id: string;\n private _order: number;\n protected _options: LayerOptions<T>;\n private loading: boolean;\n private _element: HTMLElement | undefined;\n private _opacity: number;\n private _referenceSystem: IntersectionReferenceSystem | undefined;\n private _data: T | undefined;\n private _visible: boolean;\n private _interactive = false;\n\n constructor(id?: string, options?: LayerOptions<T>) {\n this._id = id || `layer-${Math.floor(Math.random() * 1000)}`;\n const opts = options || defaultOptions;\n this._order = opts.order || 1;\n this._options = {\n ...opts,\n };\n this.loading = false;\n this._element = undefined;\n this._opacity = opts.layerOpacity || 1;\n this._visible = true;\n this._interactive = opts.interactive || false;\n\n if (options && options.data) {\n this.setData(options.data);\n }\n this._referenceSystem = options?.referenceSystem;\n\n this.onMount = this.onMount.bind(this);\n this.onUnmount = this.onUnmount.bind(this);\n this.onUpdate = this.onUpdate.bind(this);\n this.onRescale = this.onRescale.bind(this);\n this.onResize = this.onResize.bind(this);\n this.onOrderChanged = this.onOrderChanged.bind(this);\n this.onOpacityChanged = this.onOpacityChanged.bind(this);\n this.setVisibility = this.setVisibility.bind(this);\n }\n\n get id(): string {\n return this._id;\n }\n\n get element(): HTMLElement | undefined {\n return this._element;\n }\n\n get options(): LayerOptions<T> {\n return this._options;\n }\n\n set options(options: LayerOptions<T>) {\n this._options = options;\n }\n\n set isLoading(loading: boolean) {\n this.loading = loading;\n }\n\n get isLoading(): boolean {\n return this.loading;\n }\n\n set opacity(opacity: number) {\n this._opacity = opacity;\n this.onOpacityChanged(opacity);\n }\n\n get opacity(): number {\n return this._opacity;\n }\n\n set order(order: number) {\n this._order = order;\n this.onOrderChanged(order);\n }\n\n get order(): number {\n return this._order;\n }\n\n set interactive(shouldBeInteractive: boolean) {\n this._interactive = shouldBeInteractive;\n this.onInteractivityChanged(shouldBeInteractive);\n }\n\n get interactive(): boolean {\n return this._interactive;\n }\n\n get referenceSystem(): IntersectionReferenceSystem | undefined {\n return this._referenceSystem;\n }\n\n set referenceSystem(referenceSystem: IntersectionReferenceSystem | undefined) {\n this._referenceSystem = referenceSystem;\n }\n\n get data(): T | undefined {\n return this.getData();\n }\n\n set data(data: T | undefined) {\n this.setData(data);\n }\n\n get isVisible(): boolean {\n return this._visible;\n }\n\n getData(): T | undefined {\n return this._data;\n }\n\n setData(data: T | undefined): void {\n this._data = data;\n // should not be called when there is no visual element to work with\n if (this.element && data != null) {\n this.onUpdate({ data });\n }\n }\n\n /**\n * Clears data and (optionally) the reference system\n * @param includeReferenceSystem - (optional) if true also removes reference system, default is true\n */\n clearData(includeReferenceSystem = true): void {\n this._data = undefined;\n if (includeReferenceSystem) {\n this.referenceSystem = undefined;\n }\n this.onUpdate({});\n }\n\n setVisibility(visible: boolean, _layerId?: string): void {\n this._visible = visible;\n }\n\n onMount(event: OnMountEvent): void {\n this._element = event.elm;\n if (this._options.onMount) {\n this._options.onMount(event, this);\n }\n }\n\n onUnmount(event?: OnUnmountEvent): void {\n if (this._options.onUnmount && event != null) {\n this._options.onUnmount(event, this);\n }\n }\n\n onResize(event: OnResizeEvent): void {\n if (this._options.onResize) {\n this._options.onResize(event, this);\n }\n }\n\n onUpdate(event: OnUpdateEvent<T>): void {\n if (event.data) {\n this._data = event.data;\n }\n if (this._options.onUpdate) {\n this._options.onUpdate(event, this);\n }\n }\n\n onRescale(event: OnRescaleEvent): void {\n this.optionsRescale(event);\n }\n\n optionsRescale(event: OnRescaleEvent): void {\n if (this._options.onRescale) {\n this._options.onRescale(event, this);\n }\n }\n\n abstract onOpacityChanged(opacity: number): void;\n\n abstract onOrderChanged(order: number): void;\n\n abstract onInteractivityChanged(interactive: boolean): void;\n\n /**\n *\n * Some layers might be built up of several internal layers that should individually be visibility-togglable.\n * Reasons for having multiple internal layers might be tightly related data between layers or need for sharing render context\n *\n * @returns list of internal layer ids\n */\n getInternalLayerIds(): string[] {\n return [];\n }\n}\n","export const DEFAULT_LAYER_WIDTH = 200;\nexport const DEFAULT_LAYER_HEIGHT = 300;\n\nexport const HORIZONTAL_AXIS_MARGIN = 40;\nexport const VERTICAL_AXIS_MARGIN = 30;\n\nexport const EXAGGERATED_DIAMETER = 100;\nexport const HOLE_OUTLINE = 0.6;\nexport const SCREEN_OUTLINE = 0.3;\n\nexport const SHOE_WIDTH = 8;\nexport const SHOE_LENGTH = 16;\n\nexport const DEFAULT_TEXTURE_SIZE = 64;\n\n// Surface lines are drawn as LINES and not TRIANGLE_STRIP so width can only be 1\nexport const SURFACE_LINE_WIDTH = 1;\n","import { Layer } from './Layer';\nimport { OnMountEvent, OnUpdateEvent, OnResizeEvent, OnRescaleEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\nexport abstract class CanvasLayer<T> extends Layer<T> {\n ctx: CanvasRenderingContext2D | undefined;\n elm: HTMLElement | undefined;\n canvas: HTMLCanvasElement | undefined;\n\n onOpacityChanged(_opacity: number): void {\n if (this.canvas) {\n this.updateStyle();\n }\n }\n\n onOrderChanged(_order: number): void {\n if (this.canvas) {\n this.updateStyle();\n }\n }\n\n onInteractivityChanged(_interactive: boolean): void {\n if (this.canvas) {\n this.updateStyle();\n }\n }\n\n override setVisibility(visible: boolean): void {\n super.setVisibility(visible);\n if (this.canvas) {\n this.updateStyle(visible);\n }\n }\n\n updateStyle(visible?: boolean): void {\n const isVisible = visible || this.isVisible;\n const visibility = isVisible ? 'visible' : 'hidden';\n const interactive = this.interactive ? 'auto' : 'none';\n this.canvas?.setAttribute(\n 'style',\n `position:absolute;pointer-events:${interactive};z-index:${this.order};opacity:${this.opacity};visibility:${visibility}`,\n );\n }\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const { elm } = event;\n const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;\n const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;\n this.elm = elm;\n let canvas: HTMLCanvasElement;\n if (!this.canvas) {\n canvas = document.createElement('canvas');\n this.canvas = canvas;\n event.elm.appendChild(canvas);\n }\n this.canvas.setAttribute('id', `${this.id}`);\n this.canvas.setAttribute('width', `${width}px`);\n this.canvas.setAttribute('height', `${height}px`);\n this.canvas.setAttribute('class', 'canvas-layer');\n this.updateStyle();\n this.ctx = this.canvas.getContext('2d') ?? undefined;\n }\n\n override onUnmount(): void {\n super.onUnmount();\n this.canvas?.remove();\n this.canvas = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n const { ctx } = this;\n const { width, height } = event;\n\n ctx?.canvas.setAttribute('width', `${width}px`);\n ctx?.canvas.setAttribute('height', `${height}px`);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n }\n\n resetTransform(): void {\n this.ctx?.resetTransform();\n }\n\n setTransform(event: OnRescaleEvent): void {\n this.resetTransform();\n const flippedX = event.xBounds[0] > event.xBounds[1];\n const flippedY = event.yBounds[0] > event.yBounds[1];\n this.ctx?.translate(event.xScale(0), event.yScale(0));\n this.ctx?.scale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));\n }\n\n clearCanvas(): void {\n const { ctx, canvas } = this;\n ctx?.save();\n ctx?.resetTransform();\n ctx?.clearRect(0, 0, canvas?.width ?? 0, canvas?.height ?? 0);\n ctx?.restore();\n }\n}\n","import { select, Selection } from 'd3-selection';\nimport { Layer } from './Layer';\nimport { OnMountEvent, OnResizeEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\nexport abstract class HTMLLayer<T> extends Layer<T> {\n elm: Selection<HTMLDivElement, unknown, null, undefined> | undefined;\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const { elm } = event;\n const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;\n const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;\n\n if (!this.elm) {\n this.elm = select(elm).append('div');\n this.elm.attr('id', `${this.id}`);\n this.elm.attr('class', 'html-layer');\n }\n const interactive = this.interactive ? 'auto' : 'none';\n this.elm\n .style('position', 'absolute')\n .style('height', `${height}px`)\n .style('width', `${width}px`)\n .style('opacity', this.opacity)\n .style('overflow', 'hidden')\n .style('pointer-events', interactive)\n .style('z-index', this.order);\n }\n\n override onUnmount(): void {\n super.onUnmount();\n this.elm?.remove();\n this.elm = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n if (!this.elm) {\n return;\n }\n super.onResize(event);\n this.elm.style('height', `${event.height}px`).style('width', `${event.width}px`);\n }\n\n override setVisibility(visible: boolean): void {\n super.setVisibility(visible);\n if (this.elm) {\n this.elm.attr('visibility', visible ? 'visible' : 'hidden');\n }\n }\n\n onOpacityChanged(opacity: number): void {\n if (this.elm) {\n this.elm.style('opacity', opacity);\n }\n }\n\n onOrderChanged(order: number): void {\n if (this.elm) {\n this.elm.style('z-index', order);\n }\n }\n\n onInteractivityChanged(shouldBeInteractive: boolean): void {\n if (this.elm) {\n const interactive = shouldBeInteractive ? 'auto' : 'none';\n this.elm.style('pointer-events', interactive);\n }\n }\n}\n","import { select, Selection } from 'd3-selection';\nimport { Layer } from './Layer';\nimport { OnMountEvent, OnResizeEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\nexport abstract class SVGLayer<T> extends Layer<T> {\n elm: Selection<SVGSVGElement, unknown, null, undefined> | undefined;\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const { elm } = event;\n const width = event.width || parseInt(elm.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;\n const height = event.height || parseInt(elm.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;\n if (!this.elm) {\n this.elm = select(elm).append('svg');\n this.elm.attr('id', `${this.id}`);\n this.elm.attr('class', 'svg-layer');\n }\n this.elm.attr('height', height).attr('width', width);\n const interactive = this.interactive ? 'auto' : 'none';\n this.elm.style('position', 'absolute').style('pointer-events', interactive).style('opacity', this.opacity).style('z-index', this.order);\n }\n\n override onUnmount(): void {\n super.onUnmount();\n this.elm?.remove();\n this.elm = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n if (!this.elm) {\n return;\n }\n super.onResize(event);\n this.elm.attr('height', event.height).attr('width', event.width);\n }\n\n override setVisibility(visible: boolean): void {\n super.setVisibility(visible);\n if (this.elm) {\n this.elm.attr('visibility', visible ? 'visible' : 'hidden');\n }\n }\n\n onOpacityChanged(opacity: number): void {\n if (this.elm) {\n this.elm.style('opacity', opacity);\n }\n }\n\n onOrderChanged(order: number): void {\n if (this.elm) {\n this.elm.style('z-index', order);\n }\n }\n\n onInteractivityChanged(shouldBeInteractive: boolean): void {\n if (this.elm) {\n const interactive = shouldBeInteractive ? 'auto' : 'none';\n this.elm.style('pointer-events', interactive);\n }\n }\n}\n","import { autoDetectRenderer, AutoDetectOptions, Container, ContainerChild, Renderer, RendererType } from 'pixi.js';\nimport { Layer, LayerOptions } from './Layer';\nimport { OnMountEvent, OnRescaleEvent, OnResizeEvent, OnUnmountEvent } from '../../interfaces';\nimport { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';\n\n// PixiRenderApplication has many similarities with PIXI.Application,\n// but an important distinction is that it does not run the TickerPlugin.\n// We only want to re-render on data changes\n// The plugin we are trying to avoid:\n// https://github.com/pixijs/pixijs/blob/dev/packages/ticker/src/TickerPlugin.ts\nexport class PixiRenderApplication {\n stage: Container | undefined;\n\n renderer: Renderer<HTMLCanvasElement> | undefined;\n\n async init(pixiRenderOptions?: Partial<AutoDetectOptions>) {\n const options = {\n width: DEFAULT_LAYER_WIDTH,\n height: DEFAULT_LAYER_HEIGHT,\n antialias: true,\n backgroundAlpha: 0,\n clearBeforeRender: true,\n // autoResize: true,\n preserveDrawingBuffer: true,\n ...pixiRenderOptions,\n };\n this.renderer = await autoDetectRenderer(options);\n this.stage = new Container();\n }\n\n get canvas() {\n return this.renderer?.canvas;\n }\n\n render() {\n if (this.stage != null) {\n this.renderer?.render(this.stage);\n }\n }\n}\n\nexport abstract class PixiLayer<T> extends Layer<T> {\n private pixiViewContainer: HTMLElement | undefined;\n private ctx: PixiRenderApplication;\n private container: Container;\n\n constructor(ctx: PixiRenderApplication, id?: string, options?: LayerOptions<T>) {\n super(id, options);\n\n this.ctx = ctx;\n this.container = new Container();\n this.ctx.stage?.addChild(this.container);\n }\n\n render(): void {\n this.ctx.render();\n }\n\n addChild(child: ContainerChild) {\n this.container.addChild(child);\n }\n\n clearLayer() {\n const children = this.container.removeChildren();\n children.forEach((child) => {\n child.destroy();\n });\n }\n\n override onMount(event: OnMountEvent) {\n super.onMount(event);\n\n this.pixiViewContainer = this.element?.querySelector('#webgl-layer') ?? undefined;\n\n if (!this.pixiViewContainer) {\n this.pixiViewContainer = document.createElement('div');\n this.pixiViewContainer.setAttribute('id', `${this.id}`);\n this.pixiViewContainer.setAttribute('class', 'webgl-layer');\n\n if (this.ctx.canvas != null) {\n this.pixiViewContainer.appendChild(this.ctx.canvas);\n }\n\n this.element?.appendChild(this.pixiViewContainer);\n\n this.updateStyle();\n }\n }\n\n override onUnmount(event?: OnUnmountEvent) {\n super.onUnmount(event);\n\n this.clearLayer();\n this.ctx.stage?.removeChild(this.container);\n this.container.destroy();\n this.pixiViewContainer?.remove();\n this.pixiViewContainer = undefined;\n }\n\n override onResize(event: OnResizeEvent): void {\n super.onResize(event);\n this.ctx.renderer?.resize(event.width, event.height);\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n\n const flippedX = event.xBounds[0] > event.xBounds[1];\n const flippedY = event.yBounds[0] > event.yBounds[1];\n this.setContainerPosition(event.xScale(0), event.yScale(0));\n this.setContainerScale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));\n }\n\n protected setContainerPosition(x?: number, y?: number) {\n this.container.position.set(x, y);\n }\n\n protected setContainerScale(x?: number, y?: number) {\n this.container.scale.set(x, y);\n }\n\n updateStyle(visible?: boolean): void {\n const isVisible = visible || this.isVisible;\n const interactive = this.interactive ? 'auto' : 'none';\n this.container.visible = isVisible;\n\n const styles = [\n ['position', 'absolute'],\n ['pointer-events', `${interactive}`],\n ['z-index', `${this.order}`],\n ['opacity', `${this.opacity}`],\n ]\n .map((pair) => pair.join(':'))\n .join(';');\n\n this.pixiViewContainer?.setAttribute('style', styles);\n }\n\n override setVisibility(visible: boolean, layerId?: string): void {\n super.setVisibility(visible, layerId);\n if (this.pixiViewContainer) {\n this.updateStyle(visible);\n }\n }\n\n onOpacityChanged(_opacity: number): void {\n if (this.pixiViewContainer) {\n this.updateStyle();\n }\n }\n\n onOrderChanged(_order: number): void {\n if (this.pixiViewContainer) {\n this.updateStyle();\n }\n }\n\n onInteractivityChanged(_interactive: boolean): void {\n if (this.pixiViewContainer) {\n this.updateStyle();\n }\n }\n\n renderType(): RendererType | undefined {\n return this.ctx.renderer?.type;\n }\n}\n","import { SHOE_LENGTH, SHOE_WIDTH } from '../constants';\n\nexport function assertNever(x: never): never {\n throw new Error(`Unexpected object: ${JSON.stringify(x)}`);\n}\n\n/**\n * The closure type of the outline\n */\nexport type OutlineClosure = 'None' | 'TopAndBottom' | 'Top' | 'Bottom';\n\nexport interface HoleSize {\n kind: 'hole';\n id: string;\n diameter: number;\n start: number;\n end: number;\n}\n\nexport interface CasingWindow {\n id: string;\n start: number;\n end: number;\n}\n\nexport interface Casing {\n kind: 'casing';\n id: string;\n diameter: number;\n start: number;\n end: number;\n hasShoe: boolean;\n innerDiameter: number;\n windows?: CasingWindow[];\n}\n\ninterface SymbolComponent {\n id: string;\n diameter: number;\n start: number;\n end: number;\n symbolKey: string;\n}\n\nexport interface PAndASymbol extends SymbolComponent {\n kind: 'pAndASymbol';\n}\n\nexport const isPAndASymbol = (item: PAndA): item is PAndASymbol => item.kind === 'pAndASymbol';\n\nexport interface CementSqueeze {\n kind: 'cementSqueeze';\n id: string;\n start: number;\n end: number;\n /**\n * Referenced Casing and Completion ids\n */\n referenceIds: string[];\n}\n\nexport const isCementSqueeze = (item: PAndA): item is CementSqueeze => item.kind === 'cementSqueeze';\n\nexport interface CementPlug {\n kind: 'cementPlug';\n id: string;\n start: number;\n end: number;\n /**\n * Referenced Casing, Completion ids\n */\n referenceIds: string[];\n}\n\nexport const isCementPlug = (item: PAndA): item is CementSqueeze => item.kind === 'cementPlug';\n\nexport type PAndA = PAndASymbol | CementSqueeze | CementPlug;\n\ninterface BaseCompletion {\n id: string;\n diameter: number;\n start: number;\n end: number;\n}\n\nexport interface Screen extends BaseCompletion {\n kind: 'screen';\n}\nexport interface Tubing extends BaseCompletion {\n kind: 'tubing';\n}\n\nexport interface CompletionSymbol extends BaseCompletion {\n kind: 'completionSymbol';\n symbolKey: string;\n}\n\nexport type Completion = Tubing | Screen | CompletionSymbol;\n\nexport const foldCompletion =\n <T>(fScreen: (obj: Screen) => T, fTubing: (obj: Tubing) => T, fSymbol: (obj: CompletionSymbol) => T) =>\n (completion: Completion): T => {\n switch (completion.kind) {\n case 'screen':\n return fScreen(completion);\n case 'tubing':\n return fTubing(completion);\n case 'completionSymbol':\n return fSymbol(completion);\n default:\n return assertNever(completion);\n }\n };\n\nexport interface Cement {\n kind: 'cement';\n id: string;\n /**\n * Referenced Casing and Completion ids\n */\n referenceIds: string[];\n toc: number;\n}\n\n/**\n * 'Open hole' and 'Open hole screen' are not included as they are not visualized and also not included in the ruleset\n */\nexport type PerforationSubKind =\n | 'Perforation'\n | 'Open hole gravel pack'\n | 'Open hole frac pack'\n | 'Cased hole frac pack'\n | 'Cased hole gravel pack'\n | 'Cased hole fracturation';\n\nexport interface Perforation {\n kind: 'perforation';\n subKind: PerforationSubKind;\n id: string;\n start: number;\n end: number;\n /**\n * is the perforation open or sealed?\n */\n isOpen: boolean;\n}\n\nexport const foldPerforationSubKind = <T>(\n options: {\n Perforation: (kind: 'Perforation') => T;\n OpenHoleGravelPack: (kind: 'Open hole gravel pack') => T;\n OpenHoleFracPack: (kind: 'Open hole frac pack') => T;\n CasedHoleGravelPack: (kind: 'Cased hole gravel pack') => T;\n CasedHoleFracPack: (kind: 'Cased hole frac pack') => T;\n CasedHoleFracturation: (kind: 'Cased hole fracturation') => T;\n },\n subKind: PerforationSubKind,\n) => {\n switch (subKind) {\n case 'Perforation':\n return options.Perforation(subKind);\n\n case 'Open hole gravel pack':\n return options.OpenHoleGravelPack(subKind);\n\n case 'Open hole frac pack':\n return options.OpenHoleFracPack(subKind);\n\n case 'Cased hole fracturation':\n return options.CasedHoleFracturation(subKind);\n\n case 'Cased hole frac pack':\n return options.CasedHoleFracPack(subKind);\n\n case 'Cased hole gravel pack':\n return options.CasedHoleGravelPack(subKind);\n\n default:\n return assertNever(subKind);\n }\n};\n\nexport const shouldPerforationStartAtHoleDiameter = (perf: Perforation) =>\n foldPerforationSubKind(\n {\n Perforation: () => true,\n OpenHoleGravelPack: () => true,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n\nexport const shouldPerforationStartAtCasingDiameter = (perf: Perforation) =>\n foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => true,\n CasedHoleGravelPack: () => true,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n\nexport const hasPacking = (perf: Perforation): boolean =>\n foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => true,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => true,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n\nexport function hasFracLines(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => true,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n}\n\nexport function hasSpikes(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => true,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport function isSubkindCasedHoleGravelPack(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => true,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport function isSubKindPerforation(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => true,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport function isSubKindCasedHoleFracPack(perf: Perforation): boolean {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => false,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => true,\n },\n perf.subKind,\n );\n}\n\nexport function isOpenHoleFracPack(perf: Perforation) {\n return foldPerforationSubKind(\n {\n Perforation: () => false,\n OpenHoleGravelPack: () => false,\n OpenHoleFracPack: () => true,\n CasedHoleFracturation: () => false,\n CasedHoleGravelPack: () => false,\n CasedHoleFracPack: () => false,\n },\n perf.subKind,\n );\n}\n\nexport const isSubKindCasedHoleFracturation = (perf: Perforation): boolean => perf.subKind === 'Cased hole fracturation';\n\nexport const intersect = (a: Perforation, b: Perforation): boolean => {\n return a.start < b.end && a.end > b.start;\n};\n\nexport interface SchematicData {\n holeSizes: HoleSize[];\n casings: Casing[];\n cements: Cement[];\n completion: Completion[];\n pAndA: PAndA[];\n symbols: {\n [key: string]: string;\n };\n perforations: Perforation[];\n}\n\nexport interface InternalLayerOptions {\n holeLayerId: string;\n casingLayerId: string;\n completionLayerId: string;\n cementLayerId: string;\n pAndALayerId: string;\n perforationLayerId: string;\n}\n\nexport const defaultInternalLayerOptions = (layerId: string): InternalLayerOptions => ({\n holeLayerId: `${layerId}-hole`,\n casingLayerId: `${layerId}-casing`,\n completionLayerId: `${layerId}-completion`,\n cementLayerId: `${layerId}-cement`,\n pAndALayerId: `${layerId}-pAndA`,\n perforationLayerId: `${layerId}-perforation`,\n});\n\nexport interface HoleOptions {\n firstColor: string;\n secondColor: string;\n lineColor: string;\n}\n\nexport const defaultHoleOptions: HoleOptions = {\n firstColor: '#8c541d',\n secondColor: '#eee3d8',\n lineColor: '#8b4513',\n};\n\nexport interface CasingShoeSize {\n width: number;\n length: number;\n}\n\nexport interface WindowOptions {\n dashColor: string;\n dashLength: number;\n spaceLength: number;\n}\n\nexport interface CasingOptions {\n solidColor: string;\n lineColor: string;\n shoeSize: CasingShoeSize;\n windowOptions: WindowOptions;\n}\n\nexport const defaultCasingOptions: CasingOptions = {\n solidColor: '#dcdcdc',\n lineColor: '#575757',\n shoeSize: {\n width: SHOE_WIDTH,\n length: SHOE_LENGTH,\n },\n windowOptions: {\n dashColor: '#dc0000',\n dashLength: 5,\n spaceLength: 3,\n },\n};\n\nexport interface PerforationOptions {\n stroke: string;\n yellow: string;\n grey: string;\n red: string;\n outline: string;\n transparent: string;\n spikeWidth: number;\n spikeLength: number;\n packingOpacity: number;\n fracLineLength: number;\n fracLineCurve: number;\n scalingFactor: number;\n}\n\nexport const defaultPerforationOptions: PerforationOptions = {\n stroke: 'rgba(0, 0, 0, 0.25)',\n yellow: '#FFFC00',\n grey: 'gray',\n red: '#FF5050',\n outline: 'black',\n transparent: 'rgba(255, 255, 255, 0)',\n spikeWidth: 50,\n spikeLength: 50,\n packingOpacity: 0.7,\n fracLineCurve: 10,\n fracLineLength: 25,\n scalingFactor: 25,\n};\n\nexport interface CementOptions {\n firstColor: string;\n secondColor: string;\n scalingFactor: number;\n}\n\nexport const defaultCementOptions: CementOptions = {\n firstColor: '#c7b9ab',\n secondColor: '#5b5b5b',\n scalingFactor: 4,\n};\n\nexport interface CementSqueezeOptions {\n firstColor: string;\n secondColor: string;\n scalingFactor: number;\n}\n\nexport const defaultCementSqueezeOptions: CementSqueezeOptions = {\n firstColor: '#8b6713',\n secondColor: '#000000',\n scalingFactor: 4,\n};\n\nexport interface ScreenOptions {\n scalingFactor: number;\n lineColor: string;\n}\n\nexport const defaultScreenOptions: ScreenOptions = {\n scalingFactor: 4,\n lineColor: '#63666a',\n};\n\nexport interface TubingOptions {\n innerColor: string;\n outerColor: string;\n scalingFactor: number;\n}\n\nexport const defaultTubingOptions: TubingOptions = {\n scalingFactor: 1,\n innerColor: '#eeeeff',\n outerColor: '#777788',\n};\n\nexport interface CementPlugOptions {\n firstColor: string;\n secondColor: string;\n scalingFactor: number;\n}\n\nexport const defaultCementPlugOptions: CementPlugOptions = {\n firstColor: '#c7b9ab',\n secondColor: '#000000',\n scalingFactor: 4,\n};\n","import { clamp } from '@equinor/videx-math';\n\nimport { BoundingBox } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\n\nconst DEFAULT_HORIZONTAL_PADDING = 4;\nconst DEFAULT_VERTICAL_PADDING = 2;\n\nexport function pixelsPerUnit(x: ScaleLinear<number, number>): number {\n const [min] = x.domain() as [number, number];\n return Math.abs(x(min + 1));\n}\n\nexport function calcSize(factor: number, min: number, max: number, x: ScaleLinear<number, number>): number {\n return clamp(pixelsPerUnit(x) * factor, min, max);\n}\n\nexport function isOverlappingHorizontally(r1: BoundingBox, r2: BoundingBox): boolean {\n const r1x2 = r1.x + r1.width;\n const r2x2 = r2.x + r2.width;\n\n if (r2.x > r1x2 || r2x2 < r1.x) {\n return false;\n }\n return true;\n}\n\nexport function isOverlapping(\n r1: BoundingBox,\n r2: BoundingBox,\n horizontalPadding: number = DEFAULT_HORIZONTAL_PADDING,\n verticalPadding: number = DEFAULT_VERTICAL_PADDING,\n): boolean {\n const r1x2 = r1.x + r1.width + horizontalPadding;\n const r2x2 = r2.x + r2.width + horizontalPadding;\n const r1y2 = r1.y + r1.height + verticalPadding;\n const r2y2 = r2.y + r2.height + verticalPadding;\n\n if (r2.x - horizontalPadding > r1x2 || r2.y - verticalPadding > r1y2 || r2x2 + horizontalPadding < r1.x || r2y2 + verticalPadding < r1.y) {\n return false;\n }\n return true;\n}\n\nexport function getOverlap(r1: BoundingBox, r2: BoundingBox): { dx: number; dy: number } | undefined {\n const r1x2 = r1.x + r1.width;\n const r2x2 = r2.x + r2.width;\n const r1y2 = r1.y + r1.height;\n const r2y2 = r2.y + r2.height;\n\n if (r2.x > r1x2 || r2.y > r1y2 || r2x2 < r1.x || r2y2 < r1.y) {\n return undefined;\n }\n\n const dx = Math.max(0, Math.min(r1.x + r1.width, r2.x + r2.width) - Math.max(r1.x, r2.x));\n const dy = Math.max(0, Math.min(r1.y + r1.height, r2.y + r2.height) - Math.max(r1.y, r2.y));\n\n const newPoints = {\n dx,\n dy,\n };\n return newPoints;\n}\n\nexport function getOverlapOffset(\n r1: BoundingBox,\n r2: BoundingBox,\n horizontalPadding = DEFAULT_HORIZONTAL_PADDING,\n verticalPadding = DEFAULT_VERTICAL_PADDING,\n): { dx: number; dy: number } | undefined {\n const r1x2 = r1.x + r1.width;\n const r2x2 = r2.x + r2.width;\n const r1y2 = r1.y + r1.height;\n const r2y2 = r2.y + r2.height;\n\n if (r2.x - horizontalPadding > r1x2 || r2.y - verticalPadding > r1y2 || r2x2 + horizontalPadding < r1.x || r2y2 + verticalPadding < r1.y) {\n return undefined;\n }\n\n const dx = r1.x + r1.width - r2.x + horizontalPadding;\n const dy = r1.y + r1.height - r2.y + verticalPadding;\n\n const newPoints = {\n dx,\n dy,\n };\n return newPoints;\n}\n","import { ScaleLinear } from 'd3-scale';\n\nimport { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, Annotation, OnRescaleEvent, BoundingBox } from '../interfaces';\nimport { calcSize, isOverlapping, getOverlapOffset } from '../utils';\nimport { LayerOptions } from './base/Layer';\n\nconst DEFAULT_MIN_FONT_SIZE = 7;\nconst DEFAULT_MAX_FONT_SIZE = 11;\nconst DEFAULT_FONT_SIZE_FACTOR = 7;\n\nconst DEFAULT_OFFSET_MIN = 20;\nconst DEFAULT_OFFSET_MAX = 120;\nconst DEFAULT_OFFSET_FACTOR = 19;\n\nconst DEFAULT_BACKGROUND_COLOR = 'rgba(0, 0, 0, 0.5)';\nconst DEFAULT_BACKGROUND_PADDING = 5;\nconst DEFAULT_BACKGROUND_BORDER_RADIUS = 5;\n\n/** Input returned if present, defaultValue used as fallback. */\nfunction getValueOrDefault<T>(input: T | null | undefined, defaultValue: T): T {\n return input === null || input === undefined ? defaultValue : input;\n}\n\nconst Location = {\n topleft: 'topleft',\n topright: 'topright',\n bottomleft: 'bottomleft',\n bottomright: 'bottomright',\n};\n\nexport type Point = {\n x: number;\n y: number;\n};\n\nexport type Callout = {\n title: string;\n label: string;\n color: string;\n pos: Point;\n group: string;\n alignment: string;\n boundingBox: BoundingBox;\n dx: number;\n dy: number;\n};\n\nexport interface CalloutOptions<T extends Annotation[]> extends LayerOptions<T> {\n minFontSize?: number;\n maxFontSize?: number;\n fontSizeFactor?: number;\n offsetMin?: number;\n offsetMax?: number;\n offsetFactor?: number;\n fontColor?: string;\n backgroundColor?: string;\n backgroundPadding?: number;\n backgroundBorderRadius?: number;\n}\n\nexport class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {\n rescaleEvent: OnRescaleEvent | undefined;\n xRatio: number | undefined;\n callouts: Callout[] = [];\n groupFilter: string[] = [];\n minFontSize: number;\n maxFontSize: number;\n fontSizeFactor: number;\n offsetMin: number;\n offsetMax: number;\n offsetFactor: number;\n\n fontColor: string | undefined;\n\n backgroundActive: boolean;\n backgroundColor: string;\n backgroundPadding: number;\n backgroundBorderRadius: number;\n\n constructor(id?: string, options?: CalloutOptions<T>) {\n super(id, options);\n this.minFontSize = options?.minFontSize || DEFAULT_MIN_FONT_SIZE;\n this.maxFontSize = options?.maxFontSize || DEFAULT_MAX_FONT_SIZE;\n this.fontSizeFactor = options?.fontSizeFactor || DEFAULT_FONT_SIZE_FACTOR;\n this.offsetMin = options?.offsetMin || DEFAULT_OFFSET_MIN;\n this.offsetMax = options?.offsetMax || DEFAULT_OFFSET_MAX;\n this.offsetFactor = options?.offsetFactor || DEFAULT_OFFSET_FACTOR;\n\n this.fontColor = options?.fontColor;\n\n // Set background as active if 'backgroundColor' is defined\n if (options?.backgroundColor) {\n this.backgroundActive = true;\n this.backgroundColor = options.backgroundColor;\n } else {\n this.backgroundActive = false;\n this.backgroundColor = DEFAULT_BACKGROUND_COLOR;\n }\n\n this.backgroundPadding = options?.backgroundPadding || DEFAULT_BACKGROUND_PADDING;\n this.backgroundBorderRadius = getValueOrDefault(options?.backgroundBorderRadius, DEFAULT_BACKGROUND_BORDER_RADIUS);\n }\n\n setGroupFilter(filter: string[]): void {\n this.groupFilter = filter;\n this.callouts = [];\n this.render();\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.callouts = [];\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n const isPanning = this.rescaleEvent && this.rescaleEvent.xRatio === event.xRatio;\n this.rescaleEvent = event;\n\n this.render(isPanning);\n }\n\n render(isPanning = false): void {\n requestAnimationFrame(() => {\n this.clearCanvas();\n\n if (!this.data || !this.rescaleEvent || !this.referenceSystem) {\n return;\n }\n\n const { xScale, yScale, xBounds } = this.rescaleEvent;\n\n const fontSize = calcSize(this.fontSizeFactor, this.minFontSize, this.maxFontSize, xScale);\n\n if (!isPanning || this.callouts.length <= 0) {\n const { data, ctx, groupFilter } = this;\n const { calculateDisplacementFromBottom } = this.referenceSystem.options;\n const isLeftToRight = calculateDisplacementFromBottom ? xBounds[0] < xBounds[1] : xBounds[0] > xBounds[1];\n const scale = 0;\n\n ctx != null && (ctx.font = `bold ${fontSize}px arial`);\n const filtered = data.filter((d: Annotation) => groupFilter.length <= 0 || groupFilter.includes(d.group));\n const offset = calcSize(this.offsetFactor, this.offsetMin, this.offsetMax, xScale);\n this.callouts = this.positionCallouts(filtered, isLeftToRight, xScale, yScale, scale, fontSize, offset);\n }\n\n this.callouts.forEach((callout) => {\n const { pos, title, color } = callout;\n const x = xScale(pos.x);\n const y = yScale(pos.y);\n\n const calloutBB = {\n x,\n y,\n width: callout.boundingBox.width,\n height: fontSize,\n offsetX: callout.dx,\n offsetY: callout.dy,\n };\n\n this.renderCallout(title, callout.label, calloutBB, color, callout.alignment);\n });\n });\n }\n\n private renderBackground(title: string, label: string, x: number, y: number, fontSize: number): void {\n const { ctx } = this;\n\n if (ctx == null) {\n return;\n }\n\n const padding = this.backgroundPadding;\n const borderRadius = this.backgroundBorderRadius;\n\n const titleWidth = this.measureTextWidth(title, fontSize, 'arial', 'bold');\n const labelWidth = this.measureTextWidth(label, fontSize);\n\n // Determine width and height of annotation\n const width = Math.max(titleWidth, labelWidth) + padding * 2;\n const height = (fontSize + padding) * 2;\n\n const xMin = x - padding;\n const yMin = y - 2 * fontSize - padding;\n\n ctx.fillStyle = this.backgroundColor;\n\n if (borderRadius > 0) {\n const xMax = xMin + width;\n const yMax = yMin + height;\n\n // Draw rounded rect\n ctx.beginPath();\n ctx.moveTo(xMin + borderRadius, yMin); // Top left\n ctx.lineTo(xMax - borderRadius, yMin);\n ctx.quadraticCurveTo(xMax, yMin, xMax, yMin + borderRadius); // Top right corner\n ctx.lineTo(xMax, yMax - borderRadius);\n ctx.quadraticCurveTo(xMax, yMax, xMax - borderRadius, yMax); // Bottom right corner\n ctx.lineTo(xMin + borderRadius, yMax);\n ctx.quadraticCurveTo(xMin, yMax, xMin, yMax - borderRadius); // Bottom left corner\n ctx.lineTo(xMin, yMin + borderRadius);\n ctx.quadraticCurveTo(xMin, yMin, xMin + borderRadius, yMin); // Top left corner\n ctx.fill();\n } else {\n // Draw rect if no border radius\n ctx.fillRect(xMin, yMin, width, height);\n }\n }\n\n private renderAnnotation = (title: string, label: string, x: number, y: number, fontSize: number, color: string): void => {\n this.renderText(title, x, y - fontSize, fontSize, color, 'arial', 'bold');\n this.renderText(label, x, y, fontSize, color);\n };\n\n private renderText(title: string, x: number, y: number, fontSize: number, color: string, font = 'arial', fontStyle = 'normal'): void {\n const { ctx } = this;\n if (ctx != null) {\n ctx.font = `${fontStyle} ${fontSize}px ${font}`;\n ctx.fillStyle = this.fontColor || color;\n ctx.fillText(title, x, y);\n }\n }\n\n private measureTextWidth(title: string, fontSize: number, font = 'arial', fontStyle = 'normal'): number {\n const { ctx } = this;\n\n if (ctx == null) {\n return 0;\n }\n\n ctx.font = `${fontStyle} ${fontSize}px ${font}`;\n return ctx.measureText(title).width;\n }\n\n private renderPoint(x: number, y: number, color: string, radius = 3): void {\n const { ctx } = this;\n\n if (ctx != null) {\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.arc(x, y, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n\n private renderCallout(title: string, label: string, boundingBox: BoundingBox, color: string, location: string): void {\n const pos = this.getPosition(boundingBox, location);\n const { x, y } = pos;\n const { height, width, x: dotX, y: dotY } = boundingBox;\n\n const placeLeft = location === Location.topright || location === Location.bottomright;\n\n if (this.backgroundActive) {\n this.renderBackground(title, label, x, y, height);\n }\n\n this.renderAnnotation(title, label, x, y, height, color);\n this.renderPoint(dotX, dotY, color);\n this.renderLine(x, y, width, dotX, dotY, color, placeLeft);\n }\n\n private renderLine = (x: number, y: number, width: number, dotX: number, dotY: number, color: string, placeLeft = true): void => {\n const { ctx } = this;\n const textX = placeLeft ? x : x + width;\n const inverseTextX = placeLeft ? x + width : x;\n const textY = y + 2;\n\n if (ctx != null) {\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n\n ctx.beginPath();\n ctx.moveTo(dotX, dotY);\n ctx.lineTo(textX, textY);\n ctx.lineTo(inverseTextX, textY);\n\n ctx.stroke();\n }\n };\n\n private getPosition(boundingBox: BoundingBox, location: string): Point {\n const { x, y, offsetX = 0, offsetY = 0, width } = boundingBox;\n switch (location) {\n case Location.topleft:\n return {\n x: x - width - offsetX,\n y: y - offsetY,\n };\n case Location.topright:\n return {\n x: x + offsetX,\n y: y - offsetY,\n };\n case Location.bottomleft:\n return {\n x: x - width - offsetX,\n y: y + offsetY,\n };\n case Location.bottomright:\n return {\n x: x + offsetX,\n y: y + offsetY,\n };\n default:\n return {\n x,\n y,\n };\n }\n }\n\n // Calculates position of a list of annotations\n positionCallouts(\n annotations: Annotation[],\n isLeftToRight: boolean,\n xScale: ScaleLinear<number, number>,\n yScale: ScaleLinear<number, number>,\n _scale: number,\n fontSize: number,\n offset = 20,\n ): Callout[] {\n if (annotations.length === 0) {\n return [];\n }\n const alignment = isLeftToRight ? Location.topleft : Location.topright;\n\n const nodes = annotations.map((a) => {\n const pos = a.pos ? a.pos : this.referenceSystem?.project(a.md!)!;\n return {\n title: a.title,\n label: a.label,\n color: a.color,\n pos: { x: pos?.[0]!, y: pos?.[1]! },\n group: a.group,\n alignment,\n boundingBox: this.getAnnotationBoundingBox(a.title, a.label, pos, xScale, yScale, fontSize),\n dx: offset,\n dy: offset,\n };\n });\n\n const top = [nodes[nodes.length - 1]!];\n const bottom: Callout[] = [];\n\n // Initial best effort\n this.chooseTopOrBottomPosition(nodes, bottom, top);\n\n // Adjust position for top set\n this.adjustTopPositions(top);\n\n // Adjust position for bottom set\n this.adjustBottomPositions(bottom);\n\n return nodes;\n }\n\n getAnnotationBoundingBox(\n title: string,\n label: string,\n pos: number[],\n xScale: ScaleLinear<number, number>,\n yScale: ScaleLinear<number, number>,\n height: number,\n ): { x: number; y: number; width: number; height: number } {\n const { ctx } = this;\n const ax1 = xScale(pos[0]!);\n const ay1 = yScale(pos[1]!);\n\n const labelWidth = ctx?.measureText(label).width ?? 0;\n const titleWidth = ctx?.measureText(title).width ?? 0;\n const width = Math.max(labelWidth, titleWidth);\n\n const bbox = {\n x: ax1,\n y: ay1,\n width,\n height: height * 2 + 4,\n };\n return bbox;\n }\n\n chooseTopOrBottomPosition(nodes: Callout[], bottom: Callout[], top: Callout[]): void {\n for (let i = nodes.length - 2; i >= 0; --i) {\n const node = nodes[i]!;\n const prevNode = top[0]!;\n\n const overlap = isOverlapping(node.boundingBox, prevNode.boundingBox);\n if (overlap) {\n node.alignment = node.alignment === Location.topleft ? Location.bottomright : Location.bottomleft;\n bottom.push(node);\n if (i > 0) {\n top.unshift(nodes[--i]!);\n }\n } else {\n top.unshift(node);\n }\n }\n }\n\n adjustTopPositions(top: Callout[]): void {\n for (let i = top.length - 2; i >= 0; --i) {\n const currentNode = top[i]!;\n for (let j = top.length - 1; j > i; --j) {\n const prevNode = top[j]!;\n const overlap = getOverlapOffset(currentNode.boundingBox, prevNode.boundingBox);\n if (overlap) {\n currentNode.dy += overlap.dy;\n currentNode.boundingBox.y -= overlap.dy;\n }\n }\n }\n }\n\n adjustBottomPositions(bottom: Callout[]): void {\n for (let i = bottom.length - 2; i >= 0; --i) {\n const currentNode = bottom[i]!;\n for (let j = bottom.length - 1; j > i; --j) {\n const prevNode = bottom[j]!;\n const overlap = getOverlapOffset(prevNode.boundingBox, currentNode.boundingBox);\n if (overlap) {\n currentNode.dy += overlap.dy;\n currentNode.boundingBox.y += overlap.dy;\n }\n }\n }\n }\n}\n","import { color } from 'd3-color';\n\nconst RADIX_SIXTEEN = 16;\nconst HEX_STRING_LENGTH = 6;\n/**\n * Convert color string to number\n */\nexport function convertColor(colorStr: string): number {\n const c = color(colorStr);\n if (c != null) {\n const d: string = c?.formatHex();\n const n: number = parseInt(d.replace('#', '0x'));\n return n;\n } else {\n throw Error(`Could not format string ${colorStr} to hex code.`);\n }\n}\n\nexport function colorToCSSColor(color: number | string): string {\n if (typeof color === 'string') {\n return color;\n }\n\n const colorHexString = color.toString(RADIX_SIXTEEN);\n return `#${colorHexString.padStart(HEX_STRING_LENGTH, '0')}`;\n}\n","import { SurfaceArea, SurfaceData, SurfaceLine } from '../datautils';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { colorToCSSColor } from '../utils/color';\nimport { LayerOptions } from './base';\nimport { CanvasLayer } from './base/CanvasLayer';\n\nconst DEFAULT_MAX_DEPTH = 10000;\n\ntype SurfacePaths = {\n color: string;\n path: Path2D;\n};\n\nexport class GeomodelCanvasLayer<T extends SurfaceData> extends CanvasLayer<T> {\n rescaleEvent: OnRescaleEvent | undefined;\n\n surfaceAreasPaths: SurfacePaths[] = [];\n\n surfaceLinesPaths: SurfacePaths[] = [];\n\n maxDepth: number = DEFAULT_MAX_DEPTH;\n\n constructor(id?: string, options?: LayerOptions<T>) {\n super(id, options);\n this.render = this.render.bind(this);\n this.generateSurfaceAreasPaths = this.generateSurfaceAreasPaths.bind(this);\n this.generateSurfaceLinesPaths = this.generateSurfaceLinesPaths.bind(this);\n this.drawPolygonPath = this.drawPolygonPath.bind(this);\n this.drawLinePath = this.drawLinePath.bind(this);\n this.updatePaths = this.updatePaths.bind(this);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.updatePaths();\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n this.rescaleEvent = event;\n this.setTransform(this.rescaleEvent);\n this.render();\n }\n\n updatePaths(): void {\n if (!this.data) {\n this.surfaceAreasPaths = [];\n this.surfaceLinesPaths = [];\n } else {\n this.generateSurfaceAreasPaths();\n this.generateSurfaceLinesPaths();\n }\n }\n\n render(): void {\n if (!this.ctx || !this.rescaleEvent) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.clearCanvas();\n this.surfaceAreasPaths.forEach((p: SurfacePaths) => this.drawPolygonPath(p.color, p.path));\n this.surfaceLinesPaths.forEach((l: SurfacePaths) => this.drawLinePath(l.color, l.path));\n });\n }\n\n colorToCSSColor(color: number | string): string {\n return colorToCSSColor(color);\n }\n\n generateSurfaceAreasPaths(): void {\n this.surfaceAreasPaths =\n this.data?.areas.reduce((acc: SurfacePaths[], s: SurfaceArea) => {\n const polygons = this.createPolygons(s.data);\n const mapped: SurfacePaths[] = polygons.map((polygon: number[]) => ({\n color: this.colorToCSSColor(s.color),\n path: this.generatePolygonPath(polygon),\n }));\n acc.push(...mapped);\n return acc;\n }, []) ?? [];\n }\n\n generateSurfaceLinesPaths(): void {\n this.surfaceLinesPaths =\n this.data?.lines.reduce((acc: SurfacePaths[], l: SurfaceLine) => {\n const lines = this.generateLinePaths(l);\n const mapped: SurfacePaths[] = lines.map((path: Path2D) => ({ color: this.colorToCSSColor(l.color), path }));\n acc.push(...mapped);\n return acc;\n }, []) ?? [];\n }\n\n drawPolygonPath = (color: string, path: Path2D): void => {\n const { ctx } = this;\n if (ctx != null) {\n ctx.fillStyle = color;\n ctx.fill(path);\n }\n };\n\n drawLinePath = (color: string, path: Path2D): void => {\n const { ctx } = this;\n\n if (ctx != null) {\n ctx.strokeStyle = color;\n ctx.stroke(path);\n }\n };\n\n createPolygons = (data: number[][]): number[][] => {\n const polygons: number[][] = [];\n let polygon: number[] = [];\n\n // Start generating polygons\n for (let i = 0; i < data.length; i++) {\n // Generate top of polygon as long as we have valid values\n const topIsValid = !!data[i]?.[1];\n if (topIsValid) {\n if (polygon === null) {\n polygon = [];\n }\n polygon.push(data[i]?.[0]!, data[i]?.[1]!);\n }\n\n const endIsReached = i === data.length - 1;\n if (!topIsValid || endIsReached) {\n if (polygon.length > 0) {\n // Generate bottom of polygon\n for (let j: number = !topIsValid ? i - 1 : i; j >= 0; j--) {\n if (!data[j]?.[1]) {\n break;\n }\n polygon.push(data[j]?.[0]!, data[j]?.[2] || this.maxDepth);\n }\n polygons.push(polygon);\n polygon = [];\n }\n }\n }\n\n return polygons;\n };\n\n generatePolygonPath = (polygon: number[]): Path2D => {\n const path = new Path2D();\n\n path.moveTo(polygon[0]!, polygon[1]!);\n for (let i = 2; i < polygon.length; i += 2) {\n path.lineTo(polygon[i]!, polygon[i + 1]!);\n }\n path.closePath();\n\n return path;\n };\n\n generateLinePaths = (s: SurfaceLine): Path2D[] => {\n const paths: Path2D[] = [];\n const { data: d } = s;\n\n let penDown = false;\n let path: Path2D | undefined;\n for (let i = 0; i < d.length; i++) {\n if (d[i]?.[1]) {\n if (penDown && path) {\n path.lineTo(d[i]?.[0]!, d[i]?.[1]!);\n } else {\n path = new Path2D();\n path.moveTo(d[i]?.[0]!, d[i]?.[1]!);\n penDown = true;\n }\n } else if (penDown && path) {\n paths.push(path);\n penDown = false;\n }\n }\n if (penDown && path) {\n paths.push(path);\n }\n\n return paths;\n };\n}\n","export function findIndexOfSample(data: number[][], pos: number): number {\n if (data.length < 2) {\n return -1;\n }\n\n const linearSearchLimit = 20;\n let a = 0;\n let b = data.length - 1;\n let aPos = data[a]?.[0];\n let bPos = data[b]?.[0];\n\n while (b - a > linearSearchLimit) {\n const splitAt = Math.floor((b + a) / 2);\n const splitPos = data[splitAt]?.[0];\n\n if (aPos == null || bPos == null || splitPos == null) {\n return -1;\n }\n\n if (pos >= aPos && pos < splitPos) {\n b = splitAt;\n bPos = data[b]?.[0];\n } else if (pos >= splitPos && pos <= bPos) {\n a = splitAt;\n aPos = data[a]?.[0];\n } else if (pos <= aPos && pos > splitPos) {\n b = splitAt;\n bPos = data[b]?.[0];\n } else if (pos <= splitPos && pos >= bPos) {\n a = splitAt;\n aPos = data[a]?.[0];\n } else {\n return -1;\n }\n }\n\n let index = -1;\n for (let i = a; i < b; i++) {\n const v1 = data[i]?.[0];\n const v2 = data[i + 1]?.[0];\n if (v1 != null && v2 != null && Math.min(v1, v2) <= pos && pos <= Math.max(v1, v2)) {\n index = i;\n break;\n }\n }\n\n return index;\n}\n\nexport function findSampleAtPos(data: number[][], pos: number, topLimit = 0, bottomLimit = 0): number {\n let y = 0;\n const index = findIndexOfSample(data, pos);\n if (index !== -1) {\n const v1 = data[index]?.[1];\n const v2 = data[index + 1]?.[1];\n\n if (v1 && v2) {\n const x1 = data[index]?.[0] ?? 0;\n const x2 = data[index + 1]?.[0] ?? 0;\n const span = x2 - x1;\n const d = pos - x1;\n const f = d / span;\n y = v1 * (1 - f) + v2 * f;\n if (topLimit && topLimit > y) {\n y = topLimit;\n }\n if (bottomLimit && bottomLimit < y) {\n y = bottomLimit;\n }\n }\n }\n return y;\n}\n","import { Annotation } from '../interfaces';\n\ntype Pick = {\n pickIdentifier?: string;\n confidence: string | null;\n depthReferencePoint: string;\n md: number;\n mdUnit: string;\n tvd: number;\n};\n\ntype PickWithId = {\n identifier: string;\n} & Pick;\n\ntype Unit = {\n identifier: string;\n top: string;\n base: string;\n baseAge: number;\n topAge: number;\n colorR: number;\n colorG: number;\n colorB: number;\n stratUnitLevel: number;\n lithologyType: number;\n stratUnitParent: number;\n};\n\ntype UnitDto = {\n unitName: string;\n topSurface: string;\n baseSurface: string;\n ageBase: number;\n ageTop: number;\n color: {\n r: number;\n g: number;\n b: number;\n };\n level: number;\n lithType: number;\n parent: number;\n};\n\ntype PickAndUnit = PickWithId & UnitDto;\n\ntype PairedPickAndUnit = {\n name: string;\n mdEntry: number;\n tvdEntry: number;\n color: { r: number; g: number; b: number };\n level: number;\n entryPick: PickAndUnit;\n mdExit: number;\n tvdExit: number;\n exitPick: PickAndUnit;\n confidenceEntry: string;\n confidenceExit: string;\n from?: number;\n to?: number;\n};\n\nconst mapPick = (p: PickWithId, groupName: string): Annotation => ({\n title: p.pickIdentifier || p.identifier,\n group: groupName,\n label: `${p.md} ${p.mdUnit} ${p.depthReferencePoint}`,\n color: groupName === 'strat-picks' ? '#227' : 'rgba(0,0,0,0.8)',\n md: p.md,\n});\n\nfunction getReferencePicks(picks: PickWithId[]): Annotation[] {\n if (!picks) {\n return [];\n }\n\n return picks.map((p: PickWithId) => mapPick(p, 'ref-picks'));\n}\n\nfunction getEntryPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {\n if (!formationPicks) {\n return [];\n }\n\n return formationPicks\n .filter((d: PairedPickAndUnit) => d.entryPick.md === d.from)\n .map((p: PairedPickAndUnit) => mapPick(p.entryPick, 'strat-picks'));\n}\n\nfunction getFilteredExitPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {\n if (!formationPicks) {\n return [];\n }\n\n return (\n formationPicks\n .filter((d: PairedPickAndUnit) => formationPicks.findIndex((p: PairedPickAndUnit) => Math.abs(p.entryPick.md - d.exitPick.md) < 0.5) === -1)\n .map((p: PairedPickAndUnit) => mapPick(p.exitPick, 'strat-picks'))\n // Remove duplicates from unitpicks filling in gaps in formation\n .filter((obj: Annotation, i: number, array: Annotation[]) => i === array.findIndex((v: Annotation) => v.title === obj.title && v.md === obj.md))\n );\n}\n\nexport const getPicksData = (picksData: { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] }): Annotation[] =>\n [...getReferencePicks(picksData.nonUnitPicks), ...getEntryPicks(picksData.unitPicks), ...getFilteredExitPicks(picksData.unitPicks)].sort(\n (a, b) => a.md! - b.md!,\n );\n\n/**\n * @param {Unit} u\n */\nconst unitDto = (u: Unit): UnitDto => ({\n unitName: u.identifier,\n topSurface: u.top,\n baseSurface: u.base,\n ageBase: u.baseAge,\n ageTop: u.topAge,\n color: {\n r: u.colorR === null ? 255 : u.colorR,\n g: u.colorG === null ? 255 : u.colorG,\n b: u.colorB === null ? 255 : u.colorB,\n },\n level: u.stratUnitLevel,\n lithType: u.lithologyType,\n parent: u.stratUnitParent,\n});\n\n/**\n *\n * @param {number} from\n * @param {number} to\n * @param {{ from: number; to: number; itm: PairedPickAndUnit }[]} arr\n * @param {number} arr.to\n * @param {number} arr.from\n * @returns {[number, number][]}\n */\nfunction findGaps(from: number, to: number, arr: { from: number; to: number; itm: PairedPickAndUnit }[]): [number, number][] {\n if (arr.length === 0) {\n return [[from, to]];\n }\n const gaps: [number, number][] = [];\n let d = from;\n let i = 0;\n while (d < to && i < arr.length) {\n const itm = arr[i]!;\n if (itm.from > d) {\n gaps.push([d, Math.min(itm.from, to)]);\n }\n d = Math.min(to, Math.max(from, itm.to));\n i += 1;\n }\n if (d < to) {\n gaps.push([d, to]);\n }\n return gaps;\n}\n\n/**\n * @param {Unit[]} units\n * @returns {UnitDto[]}\n */\nconst transformStratColumn = (units: Unit[]): UnitDto[] => units.map(unitDto);\n\n/**\n * Join picks data with strat column units\n * @param {Pick[]} picks picks\n * @param {Unit[]} stratColumn strat column\n */\nfunction joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined: PickAndUnit[]; nonUnitPicks: PickWithId[] } {\n const transformed = transformStratColumn(stratColumn);\n const nonUnitPicks: PickWithId[] = [];\n const joined: PickAndUnit[] = [];\n picks.forEach((p: Pick) => {\n const matches = transformed.filter((u: UnitDto) => p.pickIdentifier?.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);\n if (matches.length > 0) {\n matches.forEach((u: UnitDto) =>\n joined.push({\n md: p.md,\n tvd: p.tvd,\n identifier: p.pickIdentifier!,\n confidence: p.confidence,\n mdUnit: p.mdUnit,\n depthReferencePoint: p.depthReferencePoint,\n ...u,\n }),\n );\n } else {\n nonUnitPicks.push({ identifier: p.pickIdentifier!, ...p });\n }\n });\n\n return { joined, nonUnitPicks };\n}\n\n/**\n * Find matching pairs of entry/exit picks\n * @param {PickAndUnit[]} joined picks joined with strat column units\n */\nfunction pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {\n // pair picks by unit name\n const pairs = [];\n let current = null;\n\n const sorted = joined\n .filter((d: PickAndUnit) => d.level)\n .sort((a: PickAndUnit, b: PickAndUnit) => a.unitName.localeCompare(b.unitName) || a.md - b.md || a.ageTop - b.ageTop);\n\n while (sorted.length > 0) {\n current = sorted.shift()!;\n const name = current.identifier;\n let pairWithName: string;\n\n const isTop = name === current.topSurface;\n const isBase = name === current.baseSurface;\n\n if (isTop) {\n pairWithName = current.baseSurface;\n } else if (isBase) {\n pairWithName = current.topSurface;\n } else {\n console.warn(`Unable to match ${name} with top or base surface, ignored`);\n continue;\n }\n\n let top: PickAndUnit | undefined;\n let base: PickAndUnit | undefined;\n\n const pairWith = sorted.find((p: PickAndUnit) => p.identifier === pairWithName);\n if (!pairWith) {\n console.warn(`Unable to find ${pairWithName} pick for ${name}`);\n if (isTop) {\n top = current;\n base = joined\n .filter((d: PickAndUnit) => d.level)\n .sort((a: PickAndUnit, b: PickAndUnit) => a.md - b.md)\n .find((p: PickAndUnit) => p.md > top!.md);\n if (base) {\n console.warn(`Using ${base.identifier} as base for ${name}`);\n } else {\n console.warn(`Unable to find a base pick for ${name} pick at ${top.md}, ignored`);\n continue;\n }\n } else if (isBase) {\n base = current;\n top = joined\n .filter((d: PickAndUnit) => d.level)\n .sort((a: PickAndUnit, b: PickAndUnit) => b.md - a.md)\n .find((p: PickAndUnit) => p.md < base!.md);\n if (top) {\n console.warn(`Using ${top.identifier} as top for ${name}`);\n } else {\n console.warn(`Unable to find a top pick for ${name} pick at ${base.md}, ignored`);\n continue;\n }\n } else {\n console.warn(`${name} ignored`);\n continue;\n }\n } else {\n top = isTop ? current : pairWith;\n base = isTop ? pairWith : current;\n\n if (top.md > base.md) {\n [top, base] = [base, top];\n }\n\n sorted.splice(sorted.indexOf(pairWith), 1);\n }\n\n pairs.push(<PairedPickAndUnit>{\n name: top.unitName,\n mdEntry: top.md,\n tvdEntry: top.tvd,\n color: top.color,\n level: top.level,\n entryPick: top,\n mdExit: base.md,\n tvdExit: base.tvd,\n exitPick: base,\n confidenceEntry: top.confidence,\n confidenceExit: base.confidence,\n });\n }\n\n return pairs;\n}\n\n/**\n * Transform data for formation track\n * @param {Pick[]} picks picks\n * @param {Unit[]} stratColumn strat column\n */\nexport function transformFormationData(picks: Pick[], stratColumn: Unit[]): { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] } {\n const { joined, nonUnitPicks } = joinPicksAndStratColumn(picks, stratColumn);\n const pairs = pairJoinedPicks(joined);\n\n const itemstack = pairs\n .filter((d: PairedPickAndUnit) => d.mdEntry < d.mdExit)\n .sort((a, b) => a.mdEntry - b.mdEntry || a.level - b.level)\n .reverse();\n\n // flatten groups of unit picks, so that the highest level is\n // given presedence over lower levels for overlapping picks.\n const unitPicks = [];\n while (itemstack.length > 0) {\n const first = itemstack.pop()!;\n const group: PairedPickAndUnit[] = [];\n while (itemstack.length > 0 && itemstack[itemstack.length - 1]?.level! > first.level) {\n group.push(itemstack.pop()!);\n }\n group.reverse();\n group.push(first);\n const arr: { from: number; to: number; itm: PairedPickAndUnit }[] = [];\n group.forEach((itm: PairedPickAndUnit) => {\n const gaps = findGaps(itm.mdEntry, itm.mdExit, arr);\n arr.push(...gaps.map((g) => ({ from: g[0], to: g[1], itm })));\n });\n arr.sort((a, b) => a.from - b.from);\n unitPicks.push(\n ...arr.map((d) => ({\n from: d.from,\n to: d.to,\n ...d.itm,\n })),\n );\n }\n return { unitPicks, nonUnitPicks };\n}\n","import { scaleLinear } from 'd3-scale';\nimport { color } from 'd3-color';\n\nexport function createColorTable(colorMap: string[], size: number): [number, number, number][] {\n const colorDomain = colorMap.map((_v, i) => (i * size) / colorMap.length);\n const colorScale = scaleLinear<string>().domain(colorDomain).range(colorMap);\n\n const table = Array.from(new Array(size).keys()).map<[number, number, number]>((i) => {\n const rgb = color(colorScale(i))?.rgb();\n return rgb != null ? [rgb.r, rgb.g, rgb.b] : [0, 0, 0];\n });\n\n return table;\n}\n","import { clamp } from '@equinor/videx-math';\nimport { SeismicCanvasDataOptions } from '../layers/SeismicCanvasLayer';\n\nimport { createColorTable } from './colortable';\nimport { findIndexOfSample } from './findsample';\n\nexport type SeismicInfo = {\n minX: number;\n maxX: number;\n minTvdMsl: number;\n maxTvdMsl: number;\n domain: {\n min: number;\n max: number;\n difference: number;\n };\n};\n\nexport const getSeismicOptions = (info: SeismicInfo | null): SeismicCanvasDataOptions => {\n if (!info) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n return {\n x: info.minX,\n y: info.minTvdMsl,\n width: info.maxX - info.minX,\n height: info.maxTvdMsl - info.minTvdMsl,\n };\n};\n\n/**\n * Get key information about the seismic data\n * Code originally developed for the REP project\n * @param data Seismic data\n * @param trajectory Wellbore or freehand trajectory\n * @return Key domain and depth information for seismic data\n */\nexport function getSeismicInfo(data: { datapoints: number[][]; yAxisValues: number[] }, trajectory: number[][]): SeismicInfo | null {\n if (!(data && data.datapoints)) {\n return null;\n }\n const minX = trajectory.reduce((acc: number, val: number[]) => Math.min(acc, val[0]!), 0);\n const maxX = trajectory.reduce((acc: number, val: number[]) => Math.max(acc, val[0]!), 0);\n\n const minTvdMsl = data.yAxisValues && data.yAxisValues[0]!;\n const maxTvdMsl = data.yAxisValues && data.yAxisValues[data.yAxisValues.length - 1]!;\n\n // Find value domain\n const dp = data.datapoints || [];\n const min = -dp.reduce((val: number, array: number[]) => Math.min(...array, val), 0);\n const max = dp.reduce((val: number, array: number[]) => Math.max(...array, val), 0);\n\n const absMax = Math.max(Math.abs(min), Math.abs(max));\n\n const dmin = -absMax;\n const dmax = absMax;\n\n const info = {\n minX,\n maxX,\n minTvdMsl,\n maxTvdMsl,\n domain: {\n min: dmin,\n max: dmax,\n difference: dmax - dmin,\n },\n };\n\n return info;\n}\n\n/**\n * Generate seismic\n * Code originally developed for the REP project\n * @param data Seismic data\n * @param trajectory Wellbore or freehand trajectory\n * @param colormap Color map for rendering\n * @param options.isLeftToRight (optional) draw left to right\n * @param options.seismicRange (optional) Range for mapping seimic values to color map\n * @param options.seismicMin (optional) Min seismic value for mapping seimic values to color map\n * @param options.seismicMax (optional) Max seismic value for mapping seimic values to color map\n * @return Key domain and depth information for seismic data\n */\nexport async function generateSeismicSliceImage(\n data: { datapoints: number[][]; yAxisValues: number[] },\n trajectory: number[][],\n colormap: string[],\n options: {\n isLeftToRight: boolean;\n seismicRange?: number;\n seismicMin?: number;\n seismicMax?: number;\n } = { isLeftToRight: true },\n): Promise<ImageBitmap | undefined> {\n if (!(data && data.datapoints && data.datapoints.length > 0)) {\n return undefined;\n }\n const { datapoints: dp } = data;\n\n const min = options?.seismicMin || options?.seismicRange || dp.reduce((val: number, array: number[]) => Math.min(...array, val), 0);\n const max = options?.seismicMax || options?.seismicRange || dp.reduce((val: number, array: number[]) => Math.max(...array, val), 0);\n\n const absMax = Math.max(Math.abs(min), Math.abs(max));\n\n const dmin = -absMax;\n const dmax = absMax;\n\n const domain = {\n min: dmin,\n max: dmax,\n difference: dmax - dmin,\n };\n\n const length = trajectory[0]?.[0]! - trajectory[trajectory.length - 1]?.[0]!;\n const width = Math.abs(Math.floor(length / 5));\n const height = data.yAxisValues.length;\n\n // Generate color table\n const colorTableSize = 1000;\n const colorTable = createColorTable(colormap, colorTableSize);\n\n // Generate image\n const d = new Uint8ClampedArray(width * height * 4);\n\n let offset = 0;\n const colorFactor = (colorTableSize - 1) / domain.difference;\n\n let pos = options?.isLeftToRight ? trajectory[0]?.[0]! : trajectory[trajectory.length - 1]?.[0]!;\n\n const step = (length / width) * (options?.isLeftToRight ? -1 : 1);\n\n let val1: number;\n let val2: number;\n let val: number;\n let i: number;\n let col: number[];\n const black = [0, 0, 0];\n let opacity: number;\n\n for (let x = 0; x < width; x++) {\n offset = x * 4;\n const index = findIndexOfSample(trajectory, pos);\n const x1 = trajectory[index]?.[0]!;\n const x2 = trajectory[index + 1]?.[0]!;\n const span = x2 - x1;\n const dx = pos - x1;\n const ratio = dx / span;\n\n for (let y = 0; y < height; y++) {\n val1 = dp[y]?.[index]!;\n val2 = dp[y]?.[index + 1]!;\n if (val1 == null || val2 == null) {\n col = black;\n opacity = 0;\n } else {\n val = val1 * (1 - ratio) + val2 * ratio;\n i = (val - domain.min) * colorFactor;\n i = clamp(~~i, 0, colorTableSize - 1);\n col = colorTable[i]!;\n opacity = 255;\n }\n\n d.set([col[0]!, col[1]!, col[2]!, opacity], offset);\n\n offset += width * 4;\n }\n pos += step;\n }\n const imageData = new ImageData(d, width, height);\n const image = await createImageBitmap(imageData, 0, 0, width, height);\n\n return image;\n}\n","import { interpolateRgb, quantize } from 'd3-interpolate';\nimport { scaleOrdinal } from 'd3-scale';\nimport { convertColor } from '../utils/color';\nimport { StratUnit, SurfaceMetaAndValues, SurfaceLine, SurfaceArea, SurfaceData } from './interfaces';\n\nconst TRANSLUCENT_RED = 0x80000000;\nconst WHITE = 0xffffffff;\n\ntype MappedSurfaces = {\n name: string;\n isBase: boolean;\n values: number[];\n color: string;\n visualization: string;\n};\n\ntype StratGroup = {\n age: number;\n name: string;\n};\n\ntype Stratigraphy = {\n unit: StratUnit;\n group: string;\n name: string;\n isBase: boolean;\n values: number[];\n color: string;\n visualization: string;\n};\n\ntype MappedGroup = {\n id: string;\n label: string;\n color: string;\n top: number[];\n};\n\ninterface SurfaceAreaGrouping {\n [propType: string]: SurfaceArea[];\n}\n\n/**\n * Generate surface data from trajectory, stratcolum and surface data\n * Code originally developed for the REP project\n * @param trajectory Projected trajectory generated from the poslog used when retrieving surface data from surface API\n * @param stratColumn Strat columnd from SMDA\n * @param surfaceData - Surfaces meta data with surface values in data section\n * @return Surface areas ready for rendering in geolayer\n */\nexport function generateSurfaceData(trajectory: number[][], stratColumn: StratUnit[], surfaceData: SurfaceMetaAndValues[]): SurfaceData {\n const filteredSurfaces: SurfaceMetaAndValues[] = surfaceData.filter((s) => s.data.values);\n const mappedSurfaces = mapSurfaceData(filteredSurfaces);\n\n const stratGroups = new Map<string, StratGroup>();\n const stratigraphies = combineSurfacesAndStratColumn(mappedSurfaces, stratColumn, stratGroups);\n sortStratigraphies(stratigraphies);\n\n const lines: SurfaceLine[] = getSurfaceLines(mappedSurfaces, trajectory);\n const surfaceAreas: SurfaceAreaGrouping = generateSurfaceAreas(trajectory, stratigraphies, stratColumn);\n\n const groups: MappedGroup[] = mapGroups(stratGroups, surfaceAreas);\n const groupAreas: SurfaceArea[] = generateGroupAreas(groups, trajectory);\n\n //Combine group areas with surface areas\n const areas: SurfaceArea[] = [\n ...groupAreas,\n ...Object.values(surfaceAreas)\n .flat()\n .filter((d) => !d.exclude),\n ];\n\n const data = {\n lines,\n areas,\n };\n\n return data;\n}\n\n/**\n * Get surfaces which should be rendered as lines\n * @param mappedSurfaces\n * @param trajectory\n */\nfunction getSurfaceLines(mappedSurfaces: MappedSurfaces[], trajectory: number[][]): SurfaceLine[] {\n const lines: SurfaceLine[] = mappedSurfaces\n .filter((d: MappedSurfaces) => d.visualization === 'line')\n .map((l: MappedSurfaces) => ({\n id: l.name,\n label: l.name,\n width: 2,\n color: convertColor(l.color || 'black'),\n data: trajectory.map((p, j) => [p[0]!, l.values[j]!]),\n }));\n\n return lines;\n}\n\nfunction generateGroupAreas(groups: MappedGroup[], trajectory: number[][]): SurfaceArea[] {\n const groupAreas = groups.map((g: MappedGroup, i: number) => {\n const next: MappedGroup | null = i + 1 < groups.length ? groups[i + 1]! : null;\n return {\n id: g.id,\n color: convertColor(g.color),\n data: trajectory.map((p: number[], j: number) => [p[0]!, g.top[j]!, ...(next ? [next.top[j]!] : [])]),\n };\n });\n\n return groupAreas;\n}\n\nfunction mapGroups(stratGroups: Map<string, StratGroup>, surfaceAreas: SurfaceAreaGrouping): MappedGroup[] {\n const groups = Array.from(stratGroups.values())\n .sort((a: StratGroup, b: StratGroup) => a.age - b.age)\n .filter((g: StratGroup) => {\n const surfaces = surfaceAreas[g.name];\n const isValid = surfaces && surfaces.length > 0;\n if (!isValid) {\n console.warn(`Intersection surface group '${g.name}' has no valid entries and will be discarded.`);\n }\n return isValid;\n })\n .map((g: StratGroup, i: number) => {\n const surface = surfaceAreas[g.name]!;\n const top = surface[0]!;\n return {\n id: g.name,\n label: g.name,\n color: unassignedColorScale(i),\n top: top.data.map((d: number[]) => d[1]!),\n };\n });\n return groups;\n}\n\nfunction combineSurfacesAndStratColumn(\n mappedSurfaces: MappedSurfaces[],\n stratColumn: StratUnit[],\n stratGroups: Map<string, StratGroup>,\n): Stratigraphy[] {\n const firstUnit = stratColumn && stratColumn.find((d: StratUnit) => d.stratUnitLevel === 1);\n const defaultGroupName: string = firstUnit ? firstUnit.identifier : 'SEABED';\n const stratigrafies = mappedSurfaces\n .filter((d: MappedSurfaces) => d.visualization === 'interval' || d.visualization === 'none')\n .map((s: MappedSurfaces) => {\n const path: StratUnit[] = [];\n const stratUnit = findStratcolumnUnit(stratColumn, s.name, path);\n if (!stratUnit) {\n console.warn(`No match for ${s.name} in strat column`);\n }\n const group = path[0]! || stratUnit;\n const groupName: string = (group && group.identifier) || defaultGroupName;\n if (group && !stratGroups.has(groupName)) {\n stratGroups.set(groupName, {\n age: group.topAge,\n name: group.identifier,\n });\n }\n return {\n ...s,\n unit: stratUnit!,\n group: groupName,\n };\n });\n return stratigrafies;\n}\n\n/**\n * Sort stratigrafies on unit and age, base after top and higher level after lower\n * @param stratigrafies\n */\nfunction sortStratigraphies(stratigrafies: Stratigraphy[]): void {\n stratigrafies.sort((a: Stratigraphy, b: Stratigraphy) => {\n if (!a.unit && !b.unit) {\n return 0;\n }\n if (!a.unit) {\n return -1;\n }\n if (!b.unit) {\n return 1;\n }\n const aAge = a.isBase ? a.unit.baseAge : a.unit.topAge;\n const bAge = b.isBase ? b.unit.baseAge : b.unit.topAge;\n if (aAge !== bAge) {\n return aAge - bAge;\n }\n if (a.isBase && !b.isBase) {\n return 1;\n }\n if (!a.isBase && b.isBase) {\n return -1;\n }\n return a.unit.stratUnitLevel - b.unit.stratUnitLevel;\n });\n}\n\n/**\n * @param {[]} units\n * @param {string} unitname\n * @param {[]} path\n */\nfunction findStratcolumnUnit(units: StratUnit[], unitname: string, path: StratUnit[] = []): StratUnit | null {\n const unit = units.find((u: StratUnit) => u.identifier.toLowerCase() === unitname.toLowerCase());\n if (unit) {\n // Build path\n let temp: StratUnit | undefined = unit;\n do {\n path.unshift(temp);\n temp = units.find((u: StratUnit) => u.identifier === temp!.stratUnitParent);\n } while (temp);\n\n return unit;\n }\n return null;\n}\n\nfunction mapSurfaceData(surfaces: SurfaceMetaAndValues[]): MappedSurfaces[] {\n return surfaces.map((s: SurfaceMetaAndValues) => {\n const displayName: string = s.visualSettings.displayName;\n const name: string = displayName.replace(/\\s(Base|Top)/gi, '');\n const isBase: boolean = displayName.toLowerCase().endsWith('base');\n\n return {\n name,\n isBase,\n values: s.data.values,\n color: s.visualSettings.colors.crossSection,\n visualization: s.visualSettings.crossSection.toLowerCase(),\n };\n });\n}\n\nfunction getColorFromUnit(unit: StratUnit): number {\n if (unit.colorR === null || unit.colorG === null || unit.colorB === null) {\n return TRANSLUCENT_RED;\n }\n const res: number = (unit.colorR << 16) | (unit.colorG << 8) | unit.colorB;\n return res;\n}\n\nconst unassignedColorScale = scaleOrdinal<number, string>()\n .domain([0, 100])\n .range(quantize(interpolateRgb('#e6f1cf', '#85906d'), 10));\n\n/**\n * Find the best matching base index based on name or by values\n */\nfunction findBestMatchingBaseIndex(top: Stratigraphy, index: number, surfaces: Stratigraphy[], stratColumn: StratUnit[]): number | undefined {\n const nextIndex: number = index + 1;\n\n if (!surfaces || nextIndex >= surfaces.length) {\n return undefined;\n }\n\n // If there is a matching base by name, use that. More robust, does not rely on sorting\n const baseSurfaceIndex = surfaces.findIndex((candidate: Stratigraphy) => candidate.isBase && candidate.name === top.name);\n if (baseSurfaceIndex !== -1) {\n return baseSurfaceIndex;\n }\n\n for (let i = nextIndex; i < surfaces.length; i++) {\n const candidate = surfaces[i];\n if (!candidate?.isBase) {\n return i;\n }\n if (isAnchestor(top, candidate, stratColumn)) {\n return i;\n }\n }\n return undefined;\n}\n\nfunction isAnchestor(descendant: Stratigraphy, candidate: Stratigraphy, stratColumn: StratUnit[]): boolean {\n const path: StratUnit[] = [];\n findStratcolumnUnit(stratColumn, descendant.name, path);\n return path.some((p: StratUnit) => candidate.name === p.identifier);\n}\n\nfunction generateSurfaceAreas(projection: number[][], surfaces: Stratigraphy[], stratColumn: StratUnit[]): SurfaceAreaGrouping {\n const areas: SurfaceAreaGrouping = surfaces.reduce((acc: SurfaceAreaGrouping, surface: Stratigraphy, i: number) => {\n if (!surface.isBase) {\n if (!acc[surface.group]) {\n acc[surface.group] = [];\n }\n const baseIndex = findBestMatchingBaseIndex(surface, i, surfaces, stratColumn);\n acc[surface.group]?.push({\n id: surface.name,\n label: surface.name,\n color: (surface.unit && getColorFromUnit(surface.unit)) || WHITE,\n exclude: surface.visualization === 'none' || !surface.unit,\n data: projection.map((p, j) => {\n const baseValue = surface.values[j] != null ? getBaseValue(baseIndex, surfaces, j) : undefined;\n return [p[0]!, surface.values[j]!, baseValue!];\n }),\n });\n }\n return acc;\n }, {});\n return areas;\n}\n\n// get the value from the surface with the supplied index,\n// iterate to next surface if value is null\nfunction getBaseValue(index: number | undefined, surfaces: Stratigraphy[], datapoint: number): number | undefined {\n if (!surfaces || !index || index >= surfaces.length) {\n return undefined;\n }\n\n for (let i: number = index; i < surfaces.length; i++) {\n if (surfaces[i]?.values[datapoint] != null) {\n return surfaces[i]?.values[datapoint];\n }\n }\n return undefined;\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { seqI } from '@equinor/videx-math';\nimport { CurveInterpolator } from 'curve-interpolator';\nimport { SurveySample } from './interfaces';\n\nconst stepSize = 0.1;\nconst extensionLength = 1000;\nconst thresholdRelativeDist = 150;\nconst thresholdDirectionDist = 30;\n\nconst pathSteps = 10;\n\n/**\n * Generate projected wellbore path for drawing using wellbore path layer\n * Code originally developed for REP\n * @param {[]} poslog Position log from SMDA\n */\nexport function generateProjectedWellborePath(poslog: SurveySample[]): [number, number][] {\n if (!poslog || poslog.length === 0) {\n return [];\n }\n\n const points: [number, number, number, number][] = poslog ? poslog.map((p: SurveySample) => [p.easting, p.northing, p.tvd, p.md]) : [];\n\n const projection = simplify(projectCurtain(points));\n const offset = projection[projection.length - 1]?.[0];\n\n if (offset != null) {\n projection.forEach((p, i) => {\n projection[i]![0] = offset - p[0];\n });\n }\n\n return projection;\n}\n\n/**\n * Generate Trajectory\n * Code originally developed for REP\n * @param {[]} poslog Position log from SMDA\n * @param {number} defaultIntersectionAngle Default intersection angle for the field\n */\nexport function generateProjectedTrajectory(poslog: SurveySample[], defaultIntersectionAngle: number): number[][] {\n if (!poslog || poslog.length === 0) {\n return [];\n }\n\n const points: [number, number, number, number][] = poslog ? poslog.map((p) => [p.easting, p.northing, p.tvd, p.md]) : [];\n\n const interpolator: CurveInterpolator = new CurveInterpolator(points, { tension: 0.75, arcDivisions: 5000 });\n const displacement: number = interpolator.length;\n\n const nPoints: number = Math.round(displacement * pathSteps);\n let path: [number, number][];\n if (nPoints > 0) {\n const maxOffset = 0.0005;\n const maxDistance = 10;\n path = simplify(interpolator.getPoints(nPoints), maxOffset, maxDistance);\n } else {\n path = [[points[0]![0], points[0]![1]]];\n }\n\n const first = path[0]!;\n const last = path[path.length - 1]!;\n const relativeDist: number = Vector2.distance(first, last);\n let v: Vector2;\n\n if (relativeDist < thresholdRelativeDist) {\n const oneEighty = 180;\n const radCurtainDirection = (defaultIntersectionAngle / oneEighty) * Math.PI;\n v = new Vector2(Math.cos(radCurtainDirection), Math.sin(radCurtainDirection)).mutable;\n } else {\n v = getDirectionVector(path, thresholdDirectionDist);\n }\n const extensionLengthStart: number = Math.max(0, extensionLength - displacement);\n const offset: number = extensionLengthStart + displacement;\n const trajectory: [number, number][] = [];\n\n let firstPoints: [number, number][] = [];\n\n // Reference to initial vector\n const initial: number[] = v.toArray();\n\n if (extensionLengthStart > 0) {\n // extend from start\n firstPoints = seqI(Math.ceil(extensionLengthStart * stepSize)).map((t) =>\n v\n .set(initial)\n .scale(extensionLengthStart * (1 - t))\n .subFrom(first)\n .toArray(),\n );\n firstPoints.pop();\n trajectory.push(...firstPoints);\n }\n trajectory.push(...path);\n\n const endPoints = seqI(Math.ceil(extensionLength * stepSize))\n .map((t) =>\n v\n .set(initial)\n .scale(extensionLength * t)\n .add(last)\n .toArray(),\n )\n .splice(1);\n\n trajectory.push(...endPoints);\n\n const projectedTrajectory: number[][] = projectCurtain(trajectory, undefined, offset);\n\n return projectedTrajectory;\n}\n\n/**\n * Get direction vector\n * Code originally developed for REP\n * @param {[]} path\n * @param {number} threshold\n * @returns {Vector2}\n */\nfunction getDirectionVector(path: number[][], threshold: number): Vector2 {\n const res: Vector2 = Vector2.zero.mutable;\n let len = 0;\n const temp: Vector2 = Vector2.zero.mutable;\n\n for (let i = 0; i < path.length - 1; i++) {\n const index = path.length - 1 - i;\n temp.set(path[index]!).sub(path[index - 1]!);\n res.add(temp);\n\n len = res.magnitude;\n if (len > threshold) {\n break;\n }\n }\n\n if (len === 0) {\n return new Vector2([0, 0]);\n }\n return res.scale(1 / len);\n}\n\n/**\n * Simplify array\n *\n * Simplifies an array using given parameters.\n * Code originally developed for REP\n * @access public\n *\n * @param {Number[]} inputArr Array to simplify\n * @param {Number} [maxOffset=0.001] Max offset (Default = 0.001)\n * @param {Number} [maxDistance=10] Max distance (Default = 10)\n *\n * @return {Number[]} Simplified array\n */\nfunction simplify(inputArr: [number, number][], maxOffset = 0.001, maxDistance = 10): [number, number][] {\n if (inputArr.length <= 4) {\n return inputArr;\n }\n const [o0, o1] = inputArr[0]!;\n const arr = inputArr.map<[number, number]>((d) => [d[0]! - o0, d[1]! - o1]);\n let [a0, a1] = arr[0]!;\n const sim = [inputArr[0]!];\n\n for (let i = 1; i + 1 < arr.length; i++) {\n const [t0, t1] = arr[i] ?? [];\n const [b0, b1] = arr[i + 1] ?? [];\n\n // If t->b vector is NOT [0, 0]\n if (t0 != null && t1 != null && b0 != null && b1 != null && (b0 - t0 !== 0 || b1 - t1 !== 0)) {\n // Proximity check\n const proximity: number = Math.abs(a0 * b1 - a1 * b0 + b0 * t1 - b1 * t0 + a1 * t0 - a0 * t1) / Math.sqrt((b0 - a0) ** 2 + (b1 - a1) ** 2);\n\n const dir: [number, number] = [a0 - t0, a1 - t1];\n const len: number = Math.sqrt(dir[0] ** 2 + dir[1] ** 2);\n\n if (proximity > maxOffset || len >= maxDistance) {\n sim.push([t0 + o0, t1 + o1]);\n [a0, a1] = [t0, t1];\n }\n }\n }\n const last = arr[arr.length - 1]!;\n sim.push([last[0] + o0, last[1] + o1]);\n\n return sim;\n}\n\n/**\n * Perform a curtain projection on a set of points in 3D\n * @param points\n * @param origin\n * @param offset\n * @returns {array}\n */\nfunction projectCurtain(points: [number, number, ...number[]][], origin?: [number, number, number, number], offset = 0): [number, number][] {\n let p0 = origin || points[0]!;\n let l = 0;\n const projected = points.map<[number, number]>((p1) => {\n const dx = p1[0] - p0[0];\n const dy = p1[1] - p0[1];\n l += Math.sqrt(dx ** 2 + dy ** 2);\n p0 = p1;\n return [offset > 0 ? offset - l : l, p1[2] ?? 0];\n });\n return projected;\n}\n","import Vector2 from '@equinor/videx-vector2';\nimport { clamp } from '@equinor/videx-math';\n\nimport { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnRescaleEvent, OnMountEvent } from '../interfaces';\nimport { SurfaceArea, SurfaceLine, findSampleAtPos, SurfaceData } from '../datautils';\nimport { SURFACE_LINE_WIDTH } from '../constants';\nimport { LayerOptions } from './base/Layer';\n\nconst DEFAULT_MARGINS = 18;\nconst DEFAULT_MIN_FONT_SIZE = 8;\nconst DEFAULT_MAX_FONT_SIZE = 13;\nconst DEFAULT_TEXT_COLOR = 'black';\nconst DEFAULT_FONT = 'Arial';\nconst MAX_FONT_SIZE_IN_WORLD_COORDINATES = 70;\n\nexport interface GeomodelLayerLabelsOptions<T extends SurfaceData> extends LayerOptions<T> {\n margins?: number;\n minFontSize?: number;\n maxFontSize?: number;\n textColor?: string;\n font?: string;\n}\n\ninterface SurfaceAreaWithAvgTopDepth extends SurfaceArea {\n avgTopDepth: number;\n}\n\nexport class GeomodelLabelsLayer<T extends SurfaceData> extends CanvasLayer<T> {\n defaultMargins: number = DEFAULT_MARGINS;\n defaultMinFontSize: number = DEFAULT_MIN_FONT_SIZE;\n defaultMaxFontSize: number = DEFAULT_MAX_FONT_SIZE;\n defaultTextColor: string = DEFAULT_TEXT_COLOR;\n defaultFont: string = DEFAULT_FONT;\n\n rescaleEvent: OnRescaleEvent | undefined;\n isLabelsOnLeftSide = true;\n maxFontSizeInWorldCoordinates: number = MAX_FONT_SIZE_IN_WORLD_COORDINATES;\n isXFlipped = false;\n areasWithAvgTopDepth: SurfaceAreaWithAvgTopDepth[] = [];\n\n constructor(id?: string, options?: GeomodelLayerLabelsOptions<T>) {\n super(id, options);\n this.render = this.render.bind(this);\n this.getMarginsInWorldCoordinates = this.getMarginsInWorldCoordinates.bind(this);\n this.getSurfacesAreaEdges = this.getSurfacesAreaEdges.bind(this);\n this.updateXFlipped = this.updateXFlipped.bind(this);\n this.generateSurfacesWithAvgDepth = this.generateSurfacesWithAvgDepth.bind(this);\n }\n\n override get options(): GeomodelLayerLabelsOptions<T> {\n return this._options;\n }\n\n override setData(data: T): void {\n super.setData(data);\n this.areasWithAvgTopDepth = [];\n }\n\n generateSurfacesWithAvgDepth(): void {\n const areas = this.data?.areas ?? [];\n this.areasWithAvgTopDepth = areas.reduce((acc: SurfaceAreaWithAvgTopDepth[], area: SurfaceArea) => {\n // Filter surfaces without label\n if (!area.label) {\n return acc;\n }\n const sumAndCount = area.data.reduce(\n (a: { sum: number; count: number }, d: number[]) => {\n if (d[1] != null) {\n a.sum += d[1];\n a.count++;\n }\n return a;\n },\n {\n sum: 0,\n count: 0,\n },\n );\n if (sumAndCount.count === 0) {\n return acc;\n }\n const avgTopDepth = sumAndCount.sum / sumAndCount.count;\n\n acc.push({\n ...area,\n avgTopDepth,\n });\n return acc;\n }, []);\n }\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n this.rescaleEvent = event;\n this.updateXFlipped();\n this.resetTransform();\n this.render();\n }\n\n render(): void {\n if (!this.rescaleEvent) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.clearCanvas();\n\n if (!this.data) {\n return;\n }\n\n if (this.areasWithAvgTopDepth.length <= 0) {\n this.generateSurfacesWithAvgDepth();\n }\n\n this.drawAreaLabels();\n this.drawLineLabels();\n });\n }\n\n drawAreaLabels(): void {\n this.areasWithAvgTopDepth.forEach((s: SurfaceAreaWithAvgTopDepth, i: number, array: SurfaceAreaWithAvgTopDepth[]) => {\n const topmostSurfaceNotDrawnYet = array.reduce((acc: SurfaceAreaWithAvgTopDepth | null, v, index): SurfaceAreaWithAvgTopDepth | null => {\n if (index > i) {\n if (acc == null) {\n acc = v;\n } else {\n if (v.avgTopDepth < acc.avgTopDepth) {\n acc = v;\n }\n }\n }\n return acc;\n }, null);\n\n this.drawAreaLabel(s, topmostSurfaceNotDrawnYet, array, i);\n });\n }\n\n drawLineLabels(): void {\n this.data?.lines.filter((surfaceLine: SurfaceLine) => surfaceLine.label).forEach((surfaceLine: SurfaceLine) => this.drawLineLabel(surfaceLine));\n }\n\n drawAreaLabel = (surfaceArea: SurfaceArea, nextSurfaceArea: SurfaceArea | null, surfaces: SurfaceArea[], i: number): void => {\n const { data } = surfaceArea;\n const { ctx, maxFontSizeInWorldCoordinates, isXFlipped } = this;\n const { xScale, yScale, xRatio, yRatio, zFactor } = this.rescaleEvent!;\n if (ctx == null) return;\n\n let isLabelsOnLeftSide = this.checkDrawLabelsOnLeftSide();\n const margins = (this.options.margins || this.defaultMargins) * (isXFlipped ? -1 : 1);\n const marginsInWorldCoords = margins / xRatio;\n const minFontSize = this.options.minFontSize || this.defaultMinFontSize;\n const maxFontSize = this.options.maxFontSize || this.defaultMaxFontSize;\n\n let fontSizeInWorldCoords = maxFontSize / yRatio;\n if (fontSizeInWorldCoords > maxFontSizeInWorldCoordinates) {\n fontSizeInWorldCoords = maxFontSizeInWorldCoordinates;\n if (fontSizeInWorldCoords * yRatio < minFontSize) {\n fontSizeInWorldCoords = minFontSize / yRatio;\n }\n }\n\n const leftEdge = xScale.invert(xScale.range()[0]!) + marginsInWorldCoords;\n const rightEdge = xScale.invert(xScale.range()[1]!) - marginsInWorldCoords;\n const [surfaceAreaLeftEdge, surfaceAreaRightEdge] = this.getSurfacesAreaEdges() as [number, number];\n\n // Get label metrics\n ctx.save();\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n let labelMetrics = ctx.measureText(surfaceArea.label ?? '');\n let labelLengthInWorldCoords = labelMetrics.width / xRatio;\n\n // Check if label will fit horizontally\n if (isLabelsOnLeftSide) {\n const labelRightEdge = leftEdge + (isXFlipped ? -labelLengthInWorldCoords : labelLengthInWorldCoords);\n if ((!isXFlipped && labelRightEdge > surfaceAreaRightEdge) || (isXFlipped && labelRightEdge < surfaceAreaRightEdge)) {\n isLabelsOnLeftSide = false;\n }\n } else {\n const labelLeftEdge = rightEdge + (isXFlipped ? labelLengthInWorldCoords : -labelLengthInWorldCoords);\n if ((!isXFlipped && labelLeftEdge < surfaceAreaLeftEdge) || (isXFlipped && labelLeftEdge > surfaceAreaLeftEdge)) {\n isLabelsOnLeftSide = true;\n }\n }\n\n // Find edge where to draw\n let startPos: number;\n const portionOfLabelLengthUsedForPosCalc = 0.07;\n if (isLabelsOnLeftSide) {\n startPos = isXFlipped ? Math.min(surfaceAreaLeftEdge, leftEdge) : Math.max(surfaceAreaLeftEdge, leftEdge);\n } else {\n startPos = isXFlipped ? Math.max(surfaceAreaRightEdge, rightEdge) : Math.min(surfaceAreaRightEdge, rightEdge);\n }\n\n const topEdge = yScale.invert(yScale.range()[0]!);\n const bottomEdge = yScale.invert(yScale.range()[1]!);\n\n // Calculate where to sample points\n const dirSteps = 5;\n const posSteps = 3;\n const posStep =\n portionOfLabelLengthUsedForPosCalc * (labelLengthInWorldCoords / posSteps) * (isLabelsOnLeftSide ? 1 : -1) * (isXFlipped ? -1 : 1);\n const dirStep = (labelLengthInWorldCoords / dirSteps) * (isLabelsOnLeftSide ? 1 : -1) * (isXFlipped ? -1 : 1);\n\n // Sample points from top and calculate position\n const topData = data.map((d) => [d[0]!, d[1]!]);\n const topPos = this.calcPos(topData, startPos, posSteps, posStep, topEdge, bottomEdge);\n if (!topPos) {\n return;\n }\n\n // Sample points from bottom and calculate position\n const bottomData = data.map((d) => [d[0]!, d[2]!]);\n let bottomPos = this.calcPos(\n bottomData,\n startPos,\n posSteps,\n posStep,\n topEdge,\n bottomEdge,\n nextSurfaceArea?.data.map((d) => [d[0]!, d[1]!]) ?? [],\n surfaces,\n i,\n );\n if (!bottomPos) {\n bottomPos = new Vector2(topPos.x, bottomEdge);\n }\n\n // Check if there is enough height for label\n const thickness = bottomPos.y - topPos.y;\n if (thickness < fontSizeInWorldCoords) {\n // Check minimum fontsize\n if (thickness * yRatio < minFontSize) {\n return;\n }\n // Use reduced fontsize\n fontSizeInWorldCoords = thickness;\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n labelMetrics = ctx.measureText(surfaceArea.label ?? '');\n labelLengthInWorldCoords = labelMetrics.width / xRatio;\n }\n // Sample points from top and bottom and calculate direction vector\n const initialDirVec = isLabelsOnLeftSide !== isXFlipped ? Vector2.right : Vector2.left;\n const areaDir = this.calcAreaDir(\n topData,\n bottomData,\n startPos,\n dirSteps,\n dirStep,\n initialDirVec,\n topEdge,\n bottomEdge,\n 0,\n Math.PI / 4,\n 4,\n nextSurfaceArea?.data.map((d) => [d[0]!, d[1]!]) ?? [],\n surfaces,\n i,\n );\n const scaledAngle = Math.atan(Math.tan(areaDir) * zFactor);\n\n // Draw label\n const textX = startPos;\n const textY = (topPos.y + bottomPos.y) / 2;\n const textAngle = isXFlipped ? -scaledAngle : scaledAngle;\n\n if (ctx) {\n ctx.textAlign = isLabelsOnLeftSide ? 'left' : 'right';\n ctx.translate(xScale(textX), yScale(textY));\n ctx.rotate(textAngle);\n ctx.fillStyle = this.options.textColor || this.defaultTextColor;\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n ctx.textBaseline = 'middle';\n ctx.fillText(surfaceArea.label ?? '', 0, 0);\n\n ctx.restore();\n }\n };\n\n drawLineLabel = (s: SurfaceLine): void => {\n const { ctx, isXFlipped } = this;\n const { xScale, yScale, xRatio, yRatio, zFactor } = this.rescaleEvent!;\n if (ctx == null) return;\n const isLabelsOnLeftSide = this.checkDrawLabelsOnLeftSide();\n const marginsInWorldCoords = this.getMarginsInWorldCoordinates();\n const maxFontSize = this.options.maxFontSize || this.defaultMaxFontSize;\n\n const fontSizeInWorldCoords = maxFontSize / yRatio;\n\n ctx.save();\n ctx.font = `${fontSizeInWorldCoords * yRatio}px ${this.options.font || this.defaultFont}`;\n const labelMetrics = ctx.measureText(s.label);\n const labelLengthInWorldCoords = labelMetrics.width / xRatio;\n\n const leftEdge = xScale.invert(xScale.range()[0]!) + marginsInWorldCoords;\n const rightEdge = xScale.invert(xScale.range()[1]!) - marginsInWorldCoords;\n const [surfaceAreaLeftEdge, surfaceAreaRightEdge] = this.getSurfacesAreaEdges() as [number, number];\n\n // Find edge where to draw\n let startPos: number;\n const steps = 5;\n if (isLabelsOnLeftSide) {\n startPos = isXFlipped ? Math.max(surfaceAreaRightEdge, rightEdge) : Math.min(surfaceAreaRightEdge, rightEdge);\n } else {\n startPos = isXFlipped ? Math.min(surfaceAreaLeftEdge, leftEdge) : Math.max(surfaceAreaLeftEdge, leftEdge);\n }\n\n // Calculate where to sample points\n const step = (labelLengthInWorldCoords / steps) * (isLabelsOnLeftSide ? -1 : 1);\n\n // Sample points and calculate position and direction vector\n const { data } = s;\n const pos = this.calcPos(data, startPos, steps, step);\n const dir = this.calcLineDir(data, startPos, steps, step, zFactor, isLabelsOnLeftSide ? Vector2.left : Vector2.right);\n if (!pos || !dir) {\n return;\n }\n\n // Calculate position and direction for label\n const textX = startPos;\n const textY = pos.y - SURFACE_LINE_WIDTH - fontSizeInWorldCoords / 2;\n const textDir = Vector2.angleRight(dir) - (isLabelsOnLeftSide ? Math.PI : 0);\n\n // Draw label\n if (ctx) {\n ctx.textAlign = isLabelsOnLeftSide ? 'right' : 'left';\n ctx.translate(xScale(textX), yScale(textY));\n ctx.rotate(textDir);\n ctx.fillStyle = this.colorToCSSColor(s.color);\n ctx.textBaseline = 'middle';\n ctx.fillText(s.label, 0, 0);\n\n ctx.restore();\n }\n };\n\n colorToCSSColor(color: number | string): string {\n if (typeof color === 'string') {\n return color;\n }\n\n let hexString = color.toString(16);\n hexString = '000000'.substr(0, 6 - hexString.length) + hexString;\n return `#${hexString}`;\n }\n\n calcPos(\n data: number[][],\n offset: number,\n count: number,\n step: number,\n topLimit?: number,\n bottomLimit?: number,\n alternativeSurfaceData?: number[][],\n surfaces: SurfaceArea[] | null = null,\n currentSurfaceIndex?: number,\n ): Vector2 | null {\n const pos = Vector2.zero.mutable;\n let samples = 0;\n for (let i = 0; i < count; i++) {\n const x = offset + i * step;\n const y = findSampleAtPos(data, x, topLimit, bottomLimit);\n if (y) {\n const alternativeY = this.getAlternativeYValueIfAvailable(x, topLimit, bottomLimit, alternativeSurfaceData, surfaces, currentSurfaceIndex);\n // Use topmost of value from current surface and alternative surface\n const usedY = alternativeY ? Math.min(y, alternativeY) : y;\n pos.add(x, usedY);\n samples++;\n }\n }\n\n if (samples === 0) {\n return null;\n }\n\n return Vector2.divide(pos, samples);\n }\n\n getAlternativeYValueIfAvailable(\n x: number,\n topLimit?: number,\n bottomLimit?: number,\n alternativeSurfaceData?: number[][],\n surfaces: SurfaceArea[] | null = null,\n currentSurfaceIndex?: number,\n ): number | null {\n if (!alternativeSurfaceData) {\n return null;\n }\n // Find sample from passed in surface data\n let altY = findSampleAtPos(alternativeSurfaceData, x, topLimit, bottomLimit);\n if (altY == null && surfaces && currentSurfaceIndex != null) {\n //Find topmost surface after current which gives us data\n let si = currentSurfaceIndex + 1;\n while (altY == null && si < surfaces.length) {\n const altSurface = surfaces[si++];\n altY = findSampleAtPos(altSurface?.data.map((d: number[]) => [d[0]!, d[1]!]) ?? [], x, topLimit, bottomLimit);\n }\n }\n return altY;\n }\n\n calcLineDir(\n data: number[][],\n offset: number,\n count: number,\n step: number,\n zFactor: number,\n initalVector: Vector2 = Vector2.left,\n topLimit?: number,\n bottomLimit?: number,\n ): Vector2 {\n const dir = initalVector.mutable;\n\n const startY = findSampleAtPos(data, offset, topLimit, bottomLimit);\n if (startY === null) {\n return dir;\n }\n\n const vecAtEnd = new Vector2(offset, startY * zFactor);\n const tmpVec = Vector2.zero.mutable;\n for (let i = 1; i <= count; i++) {\n const x = offset + i * step;\n const y = findSampleAtPos(data, offset, topLimit, bottomLimit);\n if (y !== null) {\n tmpVec.set(x, y * zFactor);\n tmpVec.sub(vecAtEnd);\n dir.add(tmpVec);\n }\n }\n\n return dir;\n }\n\n calcAreaDir(\n top: number[][],\n bottom: number[][],\n offset: number,\n count: number,\n step: number,\n initalVector: Vector2 = Vector2.left,\n topLimit: number,\n bottomLimit: number,\n minReductionAngle = 0,\n maxReductionAngle: number = Math.PI / 4,\n angleReductionExponent = 4,\n alternativeSurfaceBottomData: number[][],\n surfaces: SurfaceArea[] | null = null,\n currentSurfaceIndex: number,\n ): number {\n const angles: number[] = [];\n const tmpVec = Vector2.zero.mutable;\n let vecAtEnd: Vector2;\n for (let i = 0; i <= count; i++) {\n const x = offset + i * step;\n const topY = findSampleAtPos(top, x, topLimit, bottomLimit);\n const bottomY = findSampleAtPos(bottom, x, topLimit, bottomLimit) || bottomLimit;\n // Find position of next surface in case it's higher than current base\n const alternativeBottomY = this.getAlternativeYValueIfAvailable(\n x,\n topLimit,\n bottomLimit,\n alternativeSurfaceBottomData,\n surfaces,\n currentSurfaceIndex,\n );\n // Use topmost of value from current surface and alternative surface\n const usedBottomY = alternativeBottomY ? Math.min(bottomY, alternativeBottomY) : bottomY;\n if (i === 0) {\n if (topY === null) {\n return Vector2.angleRight(initalVector);\n }\n const startY = (topY + usedBottomY) / 2;\n vecAtEnd = new Vector2(offset, startY);\n } else {\n if (topY !== null) {\n tmpVec.set(x, (topY + usedBottomY) / 2);\n tmpVec.sub(vecAtEnd!);\n\n angles.push(Vector2.angleRight(tmpVec));\n } else {\n angles.push(Vector2.angleRight(initalVector));\n }\n }\n }\n\n const refAngle = angles[0]!;\n const offsetAngles = angles.map((d: number) => d - refAngle);\n let factors = 0;\n const offsetSum = offsetAngles.reduce((acc: number, v: number) => {\n const ratio = (Math.abs(v) - minReductionAngle) / maxReductionAngle;\n const factor = Math.pow(1 - clamp(ratio, 0, 1), angleReductionExponent);\n factors += factor;\n return acc + v * factor;\n }, 0);\n const angle = offsetSum / factors + refAngle;\n return angle;\n }\n\n updateXFlipped(): void {\n const { xBounds } = this.rescaleEvent!;\n this.isXFlipped = xBounds[0] > xBounds[1];\n }\n\n getMarginsInWorldCoordinates(): number {\n const { xRatio } = this.rescaleEvent!;\n const margins = (this.options.margins || this.defaultMargins) * (this.isXFlipped ? -1 : 1);\n const marginsInWorldCoords = margins / xRatio;\n return marginsInWorldCoords;\n }\n\n getSurfacesAreaEdges(): number[] {\n const endPoints =\n this.data?.areas.reduce((acc, area) => {\n const { data } = area;\n const firstValidPoint = data.find((d: number[]) => d[1] != null);\n if (firstValidPoint) {\n acc.push(firstValidPoint[0]!);\n }\n // TODO: Use findLast() when TypeScript stops complaining about it\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i]?.[1] != null) {\n acc.push(data[i]?.[0]!);\n break;\n }\n }\n\n return acc;\n }, [] as number[]) ?? [];\n endPoints.push(\n ...(this.data?.lines.reduce((acc, line) => {\n const { data } = line;\n const firstValidPoint = data.find((d: number[]) => d[1] != null);\n if (firstValidPoint) {\n acc.push(firstValidPoint[0]!);\n }\n // TODO: Use findLast() when TypeScript stops complaining about it\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i]?.[1] != null) {\n acc.push(data[i]?.[0]!);\n break;\n }\n }\n return acc;\n }, [] as number[]) ?? []),\n );\n\n const minX = Math.min(...endPoints);\n const maxX = Math.max(...endPoints);\n const marginsInWorldCoords = this.getMarginsInWorldCoordinates();\n const { isXFlipped } = this;\n const surfaceAreaLeftEdge = isXFlipped ? maxX + marginsInWorldCoords : minX + marginsInWorldCoords;\n const surfaceAreaRightEdge = isXFlipped ? minX - marginsInWorldCoords : maxX - marginsInWorldCoords;\n return [surfaceAreaLeftEdge, surfaceAreaRightEdge];\n }\n\n checkDrawLabelsOnLeftSide(): boolean {\n const { referenceSystem, isXFlipped } = this;\n if (!referenceSystem) {\n return true;\n }\n\n const { xScale, yScale, xRatio } = this.rescaleEvent!;\n const t = 200; // TODO: Use actual size of largest label or average size of all\n\n const [dx1, dx2] = xScale.domain() as [number, number];\n const [dy1, dy2] = yScale.domain() as [number, number];\n\n let top = referenceSystem.interpolators.curtain.getIntersects(dy1, 1, 0) as number[][];\n if (top.length === 0) {\n top = [referenceSystem.interpolators.curtain.getPointAt(0.0) as number[]];\n }\n let bottom = referenceSystem.interpolators.curtain.getIntersects(dy2, 1, 0) as number[][];\n if (bottom.length === 0) {\n bottom = [referenceSystem.interpolators.curtain.getPointAt(1.0) as number[]];\n }\n\n const maxX = Math.max(top[0]?.[0]!, bottom[0]?.[0]!);\n const minX = Math.min(top[0]?.[0]!, bottom[0]?.[0]!);\n\n const wbBBox = {\n left: isXFlipped ? maxX : minX,\n right: isXFlipped ? minX : maxX,\n };\n\n const margin = this.getMarginsInWorldCoordinates();\n const screenLeftEdge = dx1 + margin;\n const screenRightEdge = dx2 - margin;\n\n const [surfaceAreaLeftEdge, surfaceAreaRightEdge] = this.getSurfacesAreaEdges() as [number, number];\n\n const leftLimit = isXFlipped ? Math.min(screenLeftEdge, surfaceAreaLeftEdge) : Math.max(screenLeftEdge, surfaceAreaLeftEdge);\n const rightLimit = isXFlipped ? Math.max(screenRightEdge, surfaceAreaRightEdge) : Math.min(screenRightEdge, surfaceAreaRightEdge);\n\n const spaceOnLeftSide = Math.max(isXFlipped ? leftLimit - wbBBox.left : wbBBox.left - leftLimit, 0);\n const spaceOnRightSide = Math.max(isXFlipped ? wbBBox.right - rightLimit : rightLimit - wbBBox.right, 0);\n\n const spaceOnLeftSideInScreenCoordinates = spaceOnLeftSide * xRatio;\n const spaceOnRightSideInScreenCoordinates = spaceOnRightSide * xRatio;\n const isLabelsOnLeftSide =\n spaceOnLeftSide > spaceOnRightSide ||\n spaceOnLeftSideInScreenCoordinates > t ||\n (spaceOnLeftSideInScreenCoordinates < t && spaceOnRightSideInScreenCoordinates < t && isXFlipped) ||\n bottom[0]?.[1]! < dy1;\n\n return isLabelsOnLeftSide;\n }\n}\n","import { Graphics } from 'pixi.js';\nimport { PixiLayer } from './base/PixiLayer';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { SurfaceArea, SurfaceData, SurfaceLine } from '../datautils';\nimport { SURFACE_LINE_WIDTH } from '../constants';\n\nconst DEFAULT_Y_BOTTOM = 10000;\n\nexport class GeomodelLayerV2<T extends SurfaceData> extends PixiLayer<T> {\n private isPreRendered = false;\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n\n if (!this.isPreRendered) {\n this.clearLayer();\n this.preRender();\n }\n\n this.render();\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n\n this.isPreRendered = false;\n this.clearLayer();\n this.preRender();\n this.render();\n }\n\n preRender(): void {\n const { data } = this;\n\n if (!data) {\n return;\n }\n\n data.areas.forEach((a) => this.generateAreaPolygon(a));\n data.lines.forEach((l) => this.generateSurfaceLine(l));\n\n this.isPreRendered = true;\n }\n\n createPolygons = (data: number[][]): number[][] => {\n const polygons: number[][] = [];\n let polygon: number[] | undefined;\n\n // Start generating polygons\n for (let i = 0; i < data.length; i++) {\n // Generate top of polygon as long as we have valid values\n const topIsValid = !!data[i]?.[1];\n if (topIsValid) {\n if (polygon == null) {\n polygon = [];\n }\n polygon.push(data[i]?.[0]!, data[i]?.[1]!);\n }\n\n const endIsReached = i === data.length - 1;\n if (!topIsValid || endIsReached) {\n if (polygon) {\n // Generate bottom of polygon\n for (let j: number = !topIsValid ? i - 1 : i; j >= 0; j--) {\n if (!data[j]?.[1]) {\n break;\n }\n polygon.push(data[j]?.[0]!, data[j]?.[2] || DEFAULT_Y_BOTTOM);\n }\n polygons.push(polygon);\n polygon = undefined;\n }\n }\n }\n return polygons;\n };\n\n generateAreaPolygon = (s: SurfaceArea): void => {\n const g = new Graphics();\n const polygons = this.createPolygons(s.data);\n polygons.forEach((polygon: number[]) => g.poly(polygon));\n g.setStrokeStyle({ width: 1, color: s.color as number, alpha: 1 });\n g.fill({ color: s.color as number });\n this.addChild(g);\n };\n\n generateSurfaceLine = (s: SurfaceLine): void => {\n const g = new Graphics();\n const { data: d } = s;\n\n const alignment = 0.5;\n g.setStrokeStyle({ width: SURFACE_LINE_WIDTH, color: s.color as number, alpha: 1, alignment });\n\n let penDown = false;\n for (let i = 0; i < d.length; i++) {\n const lineData = d[i];\n if (lineData && lineData[1] && lineData[0]) {\n if (penDown) {\n g.lineTo(lineData[0], lineData[1]);\n } else {\n g.moveTo(lineData[0], lineData[1]);\n penDown = true;\n }\n } else {\n penDown = false;\n }\n }\n this.addChild(g);\n };\n}\n","import { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\nimport { LayerOptions } from './base/Layer';\n\n// constants\nconst MINORCOLOR = 'lightgray';\nconst MAJORCOLOR = 'gray';\nconst MINORWIDTH = 0.25;\nconst MAJORWIDTH = 0.75;\n\nconst defaultOptions = {\n minorColor: MINORCOLOR,\n majorColor: MAJORCOLOR,\n minorWidth: MINORWIDTH,\n majorWidth: MAJORWIDTH,\n};\n\nexport interface GridLayerOptions<T> extends LayerOptions<T> {\n majorWidth?: number;\n majorColor?: string;\n minorWidth?: number;\n minorColor?: string;\n}\n\nexport interface OnGridLayerUpdateEvent<T> extends OnUpdateEvent<T> {\n xScale?: ScaleLinear<number, number, never>;\n yScale?: ScaleLinear<number, number, never>;\n}\n\nexport class GridLayer<T> extends CanvasLayer<T> {\n private _offsetX = 0;\n private _offsetY = 0;\n\n constructor(id?: string, options?: GridLayerOptions<T>) {\n super(id, options);\n this.options = {\n ...this.options,\n ...(options || defaultOptions),\n };\n this.render = this.render.bind(this);\n }\n\n override onUpdate(event: OnGridLayerUpdateEvent<T>): void {\n super.onUpdate(event);\n this.render(event);\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n this.render(event);\n }\n\n render(event: OnRescaleEvent | OnGridLayerUpdateEvent<T>): void {\n const { ctx } = this;\n const { minorWidth, minorColor, majorWidth, majorColor } = this.options as GridLayerOptions<T>;\n\n if (!ctx) {\n return;\n }\n\n this.clearCanvas();\n\n if (!(event.xScale || event.yScale)) {\n return;\n }\n\n const xScale = event.xScale!.copy();\n const yScale = event.yScale!.copy();\n\n const xDomain = xScale.domain() as [number, number];\n const yDomain = yScale.domain() as [number, number];\n\n const offsetX = this.offsetX;\n const offsetY = this.offsetY;\n\n xScale.domain([xDomain[0] - offsetX, xDomain[1] - offsetX]);\n yScale.domain([yDomain[0] - offsetY, yDomain[1] - offsetY]);\n\n const [rx1, rx2] = xScale.range() as [number, number];\n const [ry1, ry2] = yScale.range() as [number, number];\n\n ctx.lineWidth = minorWidth || MINORWIDTH;\n ctx.strokeStyle = minorColor || MINORCOLOR;\n\n // minor grid lines\n const xminticks = this.mapMinorTicks(xScale.ticks());\n const yminticks = this.mapMinorTicks(yScale.ticks());\n this.renderTicksX(xScale, xminticks, ry1, ry2);\n this.renderTicksY(yScale, yminticks, rx1, rx2);\n\n ctx.lineWidth = majorWidth || MAJORWIDTH;\n ctx.strokeStyle = majorColor || MAJORCOLOR;\n\n // major grid lines\n this.renderTicksX(xScale, xScale.ticks(), ry1, ry2);\n this.renderTicksY(yScale, yScale.ticks(), rx1, rx2);\n ctx.restore();\n }\n\n private renderTicksX(xscale: ScaleLinear<number, number, never>, xticks: number[], ry1: number, ry2: number): void {\n xticks.forEach((tx: number) => {\n const x = xscale(tx);\n if (this.ctx != null) {\n this.ctx.beginPath();\n this.ctx.moveTo(x, ry1);\n this.ctx.lineTo(x, ry2);\n this.ctx.stroke();\n }\n });\n }\n\n private renderTicksY(yscale: ScaleLinear<number, number, never>, yticks: number[], rx1: number, rx2: number): void {\n yticks.forEach((ty: number) => {\n const y = yscale(ty);\n if (this.ctx != null) {\n this.ctx.beginPath();\n this.ctx.moveTo(rx1, y);\n this.ctx.lineTo(rx2, y);\n this.ctx.stroke();\n }\n });\n }\n\n private mapMinorTicks(ticks: number[]): number[] {\n let xminticks: number[] = [];\n if (ticks.length >= 2) {\n xminticks = ticks.map((v: number) => v + (ticks[1]! - ticks[0]!) / 2);\n xminticks.pop();\n }\n return xminticks;\n }\n\n get offsetX(): number {\n return this._offsetX;\n }\n\n set offsetX(offset: number) {\n this._offsetX = offset;\n }\n\n get offsetY(): number {\n return this._offsetY;\n }\n\n set offsetY(offset: number) {\n this._offsetY = offset;\n }\n}\n","import { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnMountEvent, OnRescaleEvent } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\n\nexport interface OnImageLayerUpdateEvent<T> extends OnUpdateEvent<T> {\n url: string;\n xScale: ScaleLinear<number, number, never>;\n yScale: ScaleLinear<number, number, never>;\n xRatio?: number;\n yRatio?: number;\n x?: number;\n y?: number;\n}\n\nexport type OnImageLayerRescaleEvent<T> = OnImageLayerUpdateEvent<T> & OnRescaleEvent;\n\nexport class ImageLayer<T> extends CanvasLayer<T> {\n img: HTMLImageElement | undefined;\n\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n const img = document.createElement('img');\n this.img = img;\n this.isLoading = true;\n }\n\n override onUpdate(event: OnImageLayerUpdateEvent<T>): void {\n super.onUpdate(event);\n if (this.img != null) {\n this.img.src = event.url;\n }\n this.render(event);\n }\n\n override onRescale(event: OnImageLayerRescaleEvent<T>): void {\n super.onRescale(event);\n this.setTransform(event);\n this.render(event);\n }\n\n render(event: OnImageLayerUpdateEvent<T>): void {\n const width = parseInt(this.elm?.getAttribute('width') ?? '0', 10);\n const height = parseInt(this.elm?.getAttribute('height') ?? '0', 10);\n const { xScale, yScale, xRatio, yRatio, x, y } = event;\n const calcWidth = width * (xRatio || 1);\n const calcHeight = height * (yRatio || 1);\n this.clearCanvas();\n\n if (this.img != null) {\n if (this.isLoading) {\n this.img.onload = (): void => {\n this.isLoading = false;\n // An extra undefined check should happen here as the execution doesn't happen synchronously\n this.img != null && this.ctx?.drawImage(this.img, xScale(x || 0), yScale(y || 0), calcWidth, calcHeight);\n };\n } else {\n this.ctx?.drawImage(this.img, xScale(x || 0), yScale(y || 0), calcWidth, calcHeight);\n }\n }\n }\n}\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n// https://github.com/davidfig/pixi-dashed-line\n//\n// Copyright 2021 David Figatner\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software\n// and associated documentation files (the \"Software\"), to deal in the Software without restriction,\n// including without limitation the rights to use, copy, modify, merge, publish, distribute,\n// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software\n// is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or\n// substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport { Graphics, Matrix, Point, Texture, SCALE_MODES } from 'pixi.js';\n\n/** Define the dash: [dash length, gap size, dash size, gap size, ...] */\nexport type Dashes = number[];\n\nexport interface DashLineOptions {\n dash?: Dashes;\n width?: number;\n color?: number;\n alpha?: number;\n scale?: number;\n useTexture?: boolean;\n useDots?: boolean;\n cap?: LINE_CAP;\n join?: LINE_JOIN;\n alignment?: number;\n}\n\nconst dashLineOptionsDefault: Partial<DashLineOptions> = {\n dash: [10, 5],\n width: 1,\n color: 0xffffff,\n alpha: 1,\n scale: 1,\n useTexture: false,\n alignment: 0.5,\n};\n\nexport class DashLine {\n graphics: Graphics;\n\n /** current length of the line */\n lineLength: number;\n\n /** cursor location */\n cursor = new Point();\n\n /** desired scale of line */\n scale = 1;\n\n private start: Point;\n\n private dashSize: number;\n private dash: number[];\n\n private useTexture: boolean;\n private options: DashLineOptions;\n\n // cache of Textures for dashed lines\n static dashTextureCache: Record<string, Texture> = {};\n\n /**\n * Create a DashLine\n * @param graphics\n * @param [options]\n * @param [options.useTexture=false] - use the texture based render (useful for very large or very small dashed lines)\n * @param [options.dashes=[10,5] - an array holding the dash and gap (eg, [10, 5, 20, 5, ...])\n * @param [options.width=1] - width of the dashed line\n * @param [options.alpha=1] - alpha of the dashed line\n * @param [options.color=0xffffff] - color of the dashed line\n * @param [options.cap] - add a LINE_CAP style to dashed lines (only works for useTexture: false)\n * @param [options.join] - add a LINE_JOIN style to the dashed lines (only works for useTexture: false)\n * @param [options.alignment] - The alignment of any lines drawn (0.5 = middle, 1 = outer, 0 = inner)\n */\n constructor(graphics: Graphics, options: DashLineOptions = {}) {\n this.graphics = graphics;\n options = { ...dashLineOptionsDefault, ...options };\n this.dash = options.dash;\n this.dashSize = this.dash.reduce((a, b) => a + b);\n this.useTexture = options.useTexture;\n this.options = options;\n this.setLineStyle();\n }\n\n /** resets line style to enable dashed line (useful if lineStyle was changed on graphics element) */\n setLineStyle() {\n const options = this.options;\n if (this.useTexture) {\n const texture = DashLine.getTexture(options, this.dashSize);\n this.graphics.lineTextureStyle({\n width: options.width * options.scale,\n color: options.color,\n alpha: options.alpha,\n texture,\n alignment: options.alignment,\n });\n } else {\n this.graphics.setStrokeStyle({\n width: options.width * options.scale,\n color: options.color,\n alpha: options.alpha,\n cap: options.cap,\n join: options.join,\n alignment: options.alignment,\n });\n }\n this.scale = options.scale;\n }\n\n private static distance(x1: number, y1: number, x2: number, y2: number): number {\n return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n }\n\n moveTo(x: number, y: number): this {\n this.lineLength = 0;\n this.cursor.set(x, y);\n this.start = new Point(x, y);\n this.graphics.moveTo(this.cursor.x, this.cursor.y);\n return this;\n }\n\n lineTo(x: number, y: number, closePath?: boolean): this {\n const type = typeof this.lineLength;\n if (type === undefined) {\n this.moveTo(0, 0);\n }\n const length = DashLine.distance(this.cursor.x, this.cursor.y, x, y);\n const angle = Math.atan2(y - this.cursor.y, x - this.cursor.x);\n const closed = closePath && x === this.start.x && y === this.start.y;\n if (this.useTexture) {\n this.graphics.moveTo(this.cursor.x, this.cursor.y);\n this.adjustLineStyle(angle);\n if (closed && this.dash.length % 2 === 0) {\n const gap = Math.min(this.dash[this.dash.length - 1], length);\n this.graphics.lineTo(x - Math.cos(angle) * gap, y - Math.sin(angle) * gap);\n this.graphics.closePath();\n } else {\n this.graphics.lineTo(x, y);\n }\n } else {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n let x0 = this.cursor.x;\n let y0 = this.cursor.y;\n\n // find the first part of the dash for this line\n const place = this.lineLength % (this.dashSize * this.scale);\n let dashIndex = 0,\n dashStart = 0;\n let dashX = 0;\n for (let i = 0; i < this.dash.length; i++) {\n const dashSize = this.dash[i] * this.scale;\n if (place < dashX + dashSize) {\n dashIndex = i;\n dashStart = place - dashX;\n break;\n } else {\n dashX += dashSize;\n }\n }\n\n let remaining = length;\n // let count = 0\n while (remaining > 0) {\n // && count++ < 1000) {\n const dashSize = this.dash[dashIndex] * this.scale - dashStart;\n const dist = remaining > dashSize ? dashSize : remaining;\n if (closed) {\n const remainingDistance = DashLine.distance(x0 + cos * dist, y0 + sin * dist, this.start.x, this.start.y);\n if (remainingDistance <= dist) {\n if (dashIndex % 2 === 0) {\n const lastDash = DashLine.distance(x0, y0, this.start.x, this.start.y) - this.dash[this.dash.length - 1] * this.scale;\n x0 += cos * lastDash;\n y0 += sin * lastDash;\n this.graphics.lineTo(x0, y0);\n }\n break;\n }\n }\n\n x0 += cos * dist;\n y0 += sin * dist;\n if (dashIndex % 2) {\n this.graphics.moveTo(x0, y0);\n } else {\n this.graphics.lineTo(x0, y0);\n }\n remaining -= dist;\n\n dashIndex++;\n dashIndex = dashIndex === this.dash.length ? 0 : dashIndex;\n dashStart = 0;\n }\n // if (count >= 1000) console.log('failure', this.scale)\n }\n this.lineLength += length;\n this.cursor.set(x, y);\n return this;\n }\n\n closePath() {\n this.lineTo(this.start.x, this.start.y, true);\n }\n\n drawCircle(x: number, y: number, radius: number, points = 80, matrix?: Matrix): this {\n const interval = (Math.PI * 2) / points;\n let angle = 0,\n first: Point;\n if (matrix) {\n first = new Point(x + Math.cos(angle) * radius, y + Math.sin(angle) * radius);\n matrix.apply(first, first);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.moveTo(first[0], first[1]);\n } else {\n first = new Point(x + Math.cos(angle) * radius, y + Math.sin(angle) * radius);\n this.moveTo(first.x, first.y);\n }\n angle += interval;\n for (let i = 1; i < points + 1; i++) {\n const next = i === points ? first : [x + Math.cos(angle) * radius, y + Math.sin(angle) * radius];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.lineTo(next[0], next[1]);\n angle += interval;\n }\n return this;\n }\n\n drawEllipse(x: number, y: number, radiusX: number, radiusY: number, points = 80, matrix?: Matrix): this {\n const interval = (Math.PI * 2) / points;\n let first: { x: number; y: number };\n const point = new Point();\n for (let i = 0; i < Math.PI * 2; i += interval) {\n let x0 = x - radiusX * Math.sin(i);\n let y0 = y - radiusY * Math.cos(i);\n if (matrix) {\n point.set(x0, y0);\n matrix.apply(point, point);\n x0 = point.x;\n y0 = point.y;\n }\n if (i === 0) {\n this.moveTo(x0, y0);\n first = { x: x0, y: y0 };\n } else {\n this.lineTo(x0, y0);\n }\n }\n this.lineTo(first.x, first.y, true);\n return this;\n }\n\n drawPolygon(points: Point[] | number[], matrix?: Matrix): this {\n const p = new Point();\n if (typeof points[0] === 'number') {\n if (matrix) {\n p.set(points[0] as number, points[1] as number);\n matrix.apply(p, p);\n this.moveTo(p.x, p.y);\n for (let i = 2; i < points.length; i += 2) {\n p.set(points[i] as number, points[i + 1] as number);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y, i === points.length - 2);\n }\n } else {\n this.moveTo(points[0] as number, points[1] as number);\n for (let i = 2; i < points.length; i += 2) {\n this.lineTo(points[i] as number, points[i + 1] as number, i === points.length - 2);\n }\n }\n } else {\n if (matrix) {\n const point = points[0] as Point;\n p.copyFrom(point);\n matrix.apply(p, p);\n this.moveTo(p.x, p.y);\n for (let i = 1; i < points.length; i++) {\n const point = points[i] as Point;\n p.copyFrom(point);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y, i === points.length - 1);\n }\n } else {\n const point = points[0] as Point;\n this.moveTo(point.x, point.y);\n for (let i = 1; i < points.length; i++) {\n const point = points[i] as Point;\n this.lineTo(point.x, point.y, i === points.length - 1);\n }\n }\n }\n return this;\n }\n\n drawRect(x: number, y: number, width: number, height: number, matrix?: Matrix): this {\n if (matrix) {\n const p = new Point();\n\n // moveTo(x, y)\n p.set(x, y);\n matrix.apply(p, p);\n this.moveTo(p.x, p.y);\n\n // lineTo(x + width, y)\n p.set(x + width, y);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y);\n\n // lineTo(x + width, y + height)\n p.set(x + width, y + height);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y);\n\n // lineto(x, y + height)\n p.set(x, y + height);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y);\n\n // lineTo(x, y, true)\n p.set(x, y);\n matrix.apply(p, p);\n this.lineTo(p.x, p.y, true);\n } else {\n this.moveTo(x, y)\n .lineTo(x + width, y)\n .lineTo(x + width, y + height)\n .lineTo(x, y + height)\n .lineTo(x, y, true);\n }\n return this;\n }\n\n // adjust the matrix for the dashed texture\n private adjustLineStyle(angle: number) {\n const lineStyle = this.graphics.line;\n lineStyle.matrix = new Matrix();\n if (angle) {\n lineStyle.matrix.rotate(angle);\n }\n if (this.scale !== 1) {\n lineStyle.matrix.scale(this.scale, this.scale);\n }\n const textureStart = -this.lineLength;\n lineStyle.matrix.translate(this.cursor.x + textureStart * Math.cos(angle), this.cursor.y + textureStart * Math.sin(angle));\n this.graphics.lineStyle(lineStyle);\n }\n\n // creates or uses cached texture\n private static getTexture(options: DashLineOptions, dashSize: number): Texture | undefined {\n const key = options.dash.toString();\n if (DashLine.dashTextureCache[key]) {\n return DashLine.dashTextureCache[key];\n }\n const canvas = document.createElement('canvas');\n canvas.width = dashSize;\n canvas.height = Math.ceil(options.width);\n const context = canvas.getContext('2d');\n if (!context) {\n console.warn('Did not get context from canvas');\n return undefined;\n }\n context.globalAlpha = options.alpha;\n context.lineWidth = options.width;\n let x = 0;\n const y = options.width / 2;\n context.moveTo(x, y);\n for (let i = 0; i < options.dash.length; i += 2) {\n x += options.dash[i];\n context.lineTo(x, y);\n if (options.dash.length !== i + 1) {\n x += options.dash[i + 1];\n context.moveTo(x, y);\n }\n }\n context.strokeStyle = 'white';\n context.stroke();\n const texture = (DashLine.dashTextureCache[key] = Texture.from(canvas));\n texture.baseTexture.scaleMode = SCALE_MODES.NEAREST;\n return texture;\n }\n}\n","import { Point } from 'pixi.js';\nimport Vector2 from '@equinor/videx-vector2';\n\nexport const pointToVector = (p: Point): Vector2 => new Vector2(p.x, p.y);\nexport const pointToArray = (p: Point): [number, number] => [p.x, p.y];\nexport const vectorToPoint = (v: Vector2): Point => new Point(v[0], v[1]);\nexport const vectorToArray = (v: Vector2): [number, number] => [v[0] ?? 0, v[1] ?? 0];\nexport const arrayToPoint = (a: number[]): Point => new Point(a[0], a[1]);\nexport const arrayToVector = (a: number[]): Vector2 => new Vector2(a[0] ?? 0, a[1] ?? 0);\n\nexport const calcDist = (prev: [number, number], point: [number, number]): number => {\n return arrayToVector(point).sub(prev).magnitude;\n};\n\nexport const calcDistPoint = (prev: Point, point: Point): number => {\n return pointToVector(point).sub(prev.x, prev.y).magnitude;\n};\n\nexport const calcNormal = (p1: Point, p2: Point): Point => {\n const d = pointToVector(p2).sub(p1.x, p1.y);\n d.x = d.y === 0 ? 1 : d.x;\n d.y = d.x === 0 ? 1 : d.y;\n return vectorToPoint(d.rotate90()); //TODO: normalize\n};\n\nexport const convertToUnitVector = (p: Point): Point => {\n return vectorToPoint(pointToVector(p).normalize());\n};\n\nexport const createNormals = (points: Point[]): Vector2[] => {\n if (points.length < 2) {\n return [new Vector2(0)];\n }\n\n let n: Vector2;\n\n return points.map((_coord, i, list) => {\n const curr = list[i];\n const next = list[i + 1];\n\n if (i < list.length - 1 && curr != null && next != null) {\n const p = pointToVector(curr);\n const q = pointToVector(next);\n const np = q.sub(p);\n const rotate = np.rotate90();\n n = rotate.normalized();\n return n;\n }\n\n // reuse previous normal for last coord\n return n;\n });\n};\n\n// TODO check if this can be simplified and return Vector/number[]\nexport const offsetPoint = (point: Point, vector: Vector2, offset: number): Point => {\n const p = pointToVector(point);\n return vectorToPoint(p.add(vector.scale(offset)));\n};\n\nexport const offsetPoints = (points: Point[], vectors: Vector2[], offset: number): Point[] => {\n if (points.length !== vectors.length) {\n throw new Error('Number of vectors does not match number of points');\n }\n\n return points.map((point, index) => {\n const vector = vectors[index];\n\n if (vector != null) {\n return offsetPoint(point, vector, offset);\n }\n throw new Error(`Trying to read index ${index} of point ${point}, but no such vector was found!`);\n });\n};\n","import { CanvasSource, groupD8, Point, Rectangle, Texture } from 'pixi.js';\nimport { DEFAULT_TEXTURE_SIZE } from '../constants';\nimport {\n Casing,\n CasingWindow,\n Cement,\n CementOptions,\n CementPlug,\n CementPlugOptions,\n CementSqueeze,\n CementSqueezeOptions,\n Completion,\n HoleOptions,\n HoleSize,\n ScreenOptions,\n TubingOptions,\n Perforation,\n PerforationOptions,\n foldPerforationSubKind,\n intersect,\n isSubKindCasedHoleFracPack,\n isSubkindCasedHoleGravelPack,\n PerforationSubKind,\n isSubKindCasedHoleFracturation,\n} from '../layers/schematicInterfaces';\nimport { ComplexRopeSegment } from '../layers/CustomDisplayObjects/ComplexRope';\nimport { createNormals, offsetPoints } from '../utils/vectorUtils';\n\nexport type PerforationShape = ComplexRopeSegment;\n\nexport interface TubularRenderingObject {\n leftPath: Point[];\n rightPath: Point[];\n}\n\nexport interface CasingRenderObject {\n id: string;\n kind: 'casing';\n referenceDiameter: number;\n referenceRadius: number;\n casingWallWidth: number;\n hasShoe: boolean;\n bottom: number;\n zIndex?: number;\n sections: {\n kind: 'casing' | 'casing-window';\n leftPath: Point[];\n rightPath: Point[];\n pathPoints: Point[];\n }[];\n}\n\nexport const getEndLines = (\n rightPath: [Point, Point, ...Point[]],\n leftPath: [Point, Point, ...Point[]],\n): {\n top: [Point, Point];\n bottom: [Point, Point];\n} => {\n return {\n top: [rightPath[0], leftPath[0]],\n bottom: [rightPath[rightPath.length - 1] as Point, leftPath[leftPath.length - 1] as Point],\n };\n};\n\nexport const overlaps = (top1: number, bottom1: number, top2: number, bottom2: number): boolean => top1 <= bottom2 && top2 <= bottom1;\n\nexport const strictlyOverlaps = (top1: number, bottom1: number, top2: number, bottom2: number): boolean => top1 < bottom2 && top2 < bottom1;\n\nexport const uniq = <T>(arr: T[]): T[] => Array.from<T>(new Set(arr));\n\nconst findIntersectingItems = (\n start: number,\n end: number,\n otherStrings: (Casing | Completion)[],\n holes: HoleSize[],\n): { overlappingHoles: HoleSize[]; overlappingOuterStrings: (Casing | Completion)[] } => {\n const overlappingHoles = holes.filter((hole: HoleSize) => overlaps(start, end, hole.start, hole.end));\n\n const overlappingOuterStrings = otherStrings.filter((casing: Casing | Completion) => overlaps(start, end, casing.start, casing.end));\n\n return {\n overlappingHoles,\n overlappingOuterStrings,\n };\n};\n\nexport const getUniqueDiameterChangeDepths = (\n [intervalStart, intervalEnd]: [number, number],\n diameterIntervals: { start: number; end: number }[],\n): number[] => {\n const epsilon = 0.0001;\n const diameterChangeDepths = diameterIntervals.flatMap(\n (\n d, // to find diameter right before/after object\n ) => [d.start - epsilon, d.start, d.end, d.end + epsilon],\n );\n const trimmedChangedDepths = diameterChangeDepths.filter((d) => d >= intervalStart && d <= intervalEnd); // trim\n\n trimmedChangedDepths.push(intervalStart);\n trimmedChangedDepths.push(intervalEnd);\n\n const uniqDepths = uniq(trimmedChangedDepths);\n return uniqDepths.sort((a: number, b: number) => a - b);\n};\n\nconst getInnerStringDiameter = (stringType: Casing | Completion): number =>\n stringType.kind === 'casing' ? stringType.innerDiameter : stringType.diameter;\n\nexport const findCementOuterDiameterAtDepth = (\n attachedStrings: (Casing | Completion)[],\n nonAttachedStrings: (Casing | Completion)[],\n holes: HoleSize[],\n depth: number,\n): number => {\n const defaultCementWidth = 100; // Default to flow cement outside to show error in data\n\n const attachedStringAtDepth = attachedStrings.find(\n (casingOrCompletion: Casing | Completion) => casingOrCompletion.start <= depth && casingOrCompletion.end >= depth,\n );\n const attachedOuterDiameter = attachedStringAtDepth ? attachedStringAtDepth.diameter : 0;\n\n const outerCasingAtDepth = nonAttachedStrings\n .filter((casingOrCompletion: Casing | Completion) => getInnerStringDiameter(casingOrCompletion) > attachedOuterDiameter)\n .sort((a: Casing | Completion, b: Casing | Completion) => getInnerStringDiameter(a) - getInnerStringDiameter(b)) // ascending\n .find((casing) => casing.start <= depth && casing.end >= depth);\n\n const holeAtDepth = holes.find((hole: HoleSize) => hole.start <= depth && hole.end >= depth && hole.diameter > attachedOuterDiameter);\n\n if (outerCasingAtDepth) {\n return getInnerStringDiameter(outerCasingAtDepth);\n }\n\n if (holeAtDepth) {\n return holeAtDepth.diameter;\n }\n\n return defaultCementWidth;\n};\n\nexport const findPerforationOuterDiameterAtDepth = (\n nonAttachedStrings: (Casing | Completion)[],\n holes: HoleSize[],\n depth: number,\n perforationSubKind: PerforationSubKind,\n): number => {\n const defaultPerforationWidth = 100; // Default to flow perforation outside to show error in data\n\n const outerCasingAtDepth = nonAttachedStrings\n .sort((a: Casing | Completion, b: Casing | Completion) => b.diameter - a.diameter) // descending\n .find((casing) => casing.start <= depth && casing.end >= depth);\n\n const holeAtDepth = holes.find((hole: HoleSize) => hole.start <= depth && hole.end >= depth);\n\n if (outerCasingAtDepth && perforationSubKind !== 'Open hole frac pack' && perforationSubKind !== 'Open hole gravel pack') {\n return getInnerStringDiameter(outerCasingAtDepth);\n }\n\n if (holeAtDepth) {\n return holeAtDepth.diameter;\n }\n\n return defaultPerforationWidth;\n};\n\nexport const findCementPlugInnerDiameterAtDepth = (\n attachedStrings: (Casing | Completion)[],\n nonAttachedStrings: (Casing | Completion)[],\n holes: HoleSize[],\n depth: number,\n): number => {\n // Default to flow cement outside to show error in data\n const defaultCementWidth = 100;\n const attachedStringAtDepth = attachedStrings\n .sort((a: Casing | Completion, b: Casing | Completion) => getInnerStringDiameter(a) - getInnerStringDiameter(b)) // ascending\n .find((casingOrCompletion) => casingOrCompletion.start <= depth && casingOrCompletion.end >= depth);\n\n if (attachedStringAtDepth) {\n return getInnerStringDiameter(attachedStringAtDepth);\n }\n\n // Start from an attached diameter\n const minimumDiameter = attachedStrings.length ? Math.min(...attachedStrings.map((c) => getInnerStringDiameter(c))) : 0;\n const nonAttachedStringAtDepth = nonAttachedStrings\n .sort((a: Casing | Completion, b: Casing | Completion) => getInnerStringDiameter(a) - getInnerStringDiameter(b)) // ascending\n .find(\n (casingOrCompletion: Casing | Completion) =>\n casingOrCompletion.start <= depth && casingOrCompletion.end >= depth && minimumDiameter <= getInnerStringDiameter(casingOrCompletion),\n );\n\n if (nonAttachedStringAtDepth) {\n return getInnerStringDiameter(nonAttachedStringAtDepth);\n }\n\n const holeAtDepth = holes.find((hole) => hole.start <= depth && hole.end >= depth && hole.diameter);\n\n if (holeAtDepth) {\n return holeAtDepth.diameter;\n }\n\n return defaultCementWidth;\n};\n\nexport const createComplexRopeSegmentsForCement = (\n cement: Cement,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { attachedStrings, nonAttachedStrings } = splitByReferencedStrings(cement.referenceIds, casings, completion);\n\n if (attachedStrings.length === 0) {\n throw new Error(`Invalid cement data, can't find referenced casing/completion string for cement with id '${cement.id}'`);\n }\n\n attachedStrings.sort((a, b) => a.end - b.end); // ascending\n const bottomOfCement = attachedStrings[attachedStrings.length - 1]!.end;\n\n const { overlappingOuterStrings, overlappingHoles } = findIntersectingItems(cement.toc, bottomOfCement, nonAttachedStrings, holes);\n\n const outerDiameterIntervals = [...overlappingOuterStrings, ...overlappingHoles].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([cement.toc, bottomOfCement], outerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth: number, index: number, list: number[]) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n const diameterAtChangeDepth = findCementOuterDiameterAtDepth(attachedStrings, overlappingOuterStrings, overlappingHoles, depth);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtChangeDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => ({\n diameter: interval.diameter,\n points: getPoints(interval.top, interval.bottom),\n }));\n\n return ropeSegments;\n};\n\nconst splitByReferencedStrings = (\n referenceIds: string[],\n casings: Casing[],\n completion: Completion[],\n): { attachedStrings: (Casing | Completion)[]; nonAttachedStrings: (Casing | Completion)[] } =>\n [...casings, ...completion].reduce(\n (acc, current) => {\n if (referenceIds.includes(current.id)) {\n return { ...acc, attachedStrings: [...acc.attachedStrings, current] };\n }\n return { ...acc, nonAttachedStrings: [...acc.nonAttachedStrings, current] };\n },\n { attachedStrings: [] as (Casing | Completion)[], nonAttachedStrings: [] as (Casing | Completion)[] },\n );\n\nexport const createComplexRopeSegmentsForCementSqueeze = (\n squeeze: CementSqueeze,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { attachedStrings, nonAttachedStrings } = splitByReferencedStrings(squeeze.referenceIds, casings, completion);\n\n if (attachedStrings.length === 0) {\n throw new Error(`Invalid cement squeeze data, can't find referenced casing/completion for squeeze with id '${squeeze.id}'`);\n }\n\n const { overlappingOuterStrings, overlappingHoles } = findIntersectingItems(squeeze.start, squeeze.end, nonAttachedStrings, holes);\n\n const outerDiameterIntervals = [...overlappingOuterStrings, ...overlappingHoles].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([squeeze.start, squeeze.end], outerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth, index, list) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n\n const diameterAtDepth = findCementOuterDiameterAtDepth(attachedStrings, overlappingOuterStrings, overlappingHoles, depth);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => ({\n diameter: interval.diameter,\n points: getPoints(interval.top, interval.bottom),\n }));\n\n return ropeSegments;\n};\n\nexport const createComplexRopeSegmentsForCementPlug = (\n plug: CementPlug,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { attachedStrings, nonAttachedStrings } = splitByReferencedStrings(plug.referenceIds, casings, completion);\n\n const { overlappingHoles, overlappingOuterStrings } = findIntersectingItems(plug.start, plug.end, nonAttachedStrings, holes);\n const innerDiameterIntervals = [...attachedStrings, ...overlappingHoles, ...overlappingOuterStrings].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([plug.start, plug.end], innerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth, index, list) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n const diameterAtDepth = findCementPlugInnerDiameterAtDepth(attachedStrings, overlappingOuterStrings, overlappingHoles, depth);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => ({\n diameter: interval.diameter,\n points: getPoints(interval.top, interval.bottom),\n }));\n\n return ropeSegments;\n};\n\nconst createGradientFill = (\n canvas: HTMLCanvasElement,\n canvasCtx: CanvasRenderingContext2D,\n firstColor: string,\n secondColor: string,\n startPctOffset: number,\n): CanvasGradient => {\n const halfWayPct = 0.5;\n const gradient = canvasCtx.createLinearGradient(0, 0, 0, canvas.height);\n gradient.addColorStop(0, firstColor);\n gradient.addColorStop(halfWayPct - startPctOffset, secondColor);\n gradient.addColorStop(halfWayPct + startPctOffset, secondColor);\n gradient.addColorStop(1, firstColor);\n\n return gradient;\n};\n\nexport const createHoleBaseTexture = ({ firstColor, secondColor }: HoleOptions, width: number, height: number): Texture => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = createGradientFill(canvas, canvasCtx, firstColor, secondColor, 0);\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n\n return Texture.from(canvas);\n};\n\nexport const createScreenTexture = ({ scalingFactor }: ScreenOptions): Texture => {\n const canvas = document.createElement('canvas');\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = 'white';\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n\n const baseLineWidth = size / 10;\n canvasCtx.strokeStyle = '#AAAAAA';\n canvasCtx.lineWidth = baseLineWidth;\n canvasCtx.beginPath();\n\n const distanceBetweenLines = size / 3;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height * 2);\n }\n canvasCtx.stroke();\n return Texture.from(canvas);\n};\n\nexport const createTubingTexture = ({ innerColor, outerColor, scalingFactor }: TubingOptions): Texture => {\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n const gradient = canvasCtx.createLinearGradient(0, 0, 0, size);\n\n const innerColorStart = 0.3;\n const innerColorEnd = 0.7;\n gradient.addColorStop(0, outerColor);\n gradient.addColorStop(innerColorStart, innerColor);\n gradient.addColorStop(innerColorEnd, innerColor);\n gradient.addColorStop(1, outerColor);\n\n canvasCtx.fillStyle = gradient;\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n\n return Texture.from(canvas);\n};\n\nexport const createCementTexture = ({ firstColor, secondColor, scalingFactor }: CementOptions): Texture => {\n const canvas = document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n const lineWidth = scalingFactor;\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = firstColor;\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n canvasCtx.lineWidth = lineWidth;\n canvasCtx.fillStyle = secondColor;\n canvasCtx.beginPath();\n\n const distanceBetweenLines = size / 12;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height);\n }\n canvasCtx.stroke();\n\n return Texture.from(canvas);\n};\n\nexport const createCementPlugTexture = ({ firstColor, secondColor, scalingFactor }: CementPlugOptions): Texture => {\n const canvas = document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n canvas.width = size;\n canvas.height = size;\n const canvasCtx = canvas.getContext('2d');\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.fillStyle = firstColor;\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n canvasCtx.lineWidth = scalingFactor;\n canvasCtx.strokeStyle = secondColor;\n canvasCtx.beginPath();\n\n canvasCtx.setLineDash([20, 10]);\n const distanceBetweenLines = size / 12;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height * 2);\n }\n canvasCtx.stroke();\n\n return Texture.from(canvas);\n};\n\nexport const createCementSqueezeTexture = ({ firstColor, secondColor, scalingFactor }: CementSqueezeOptions): Texture => {\n const canvas = document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE * scalingFactor;\n const lineWidth = scalingFactor;\n canvas.width = size;\n canvas.height = size;\n\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n\n canvasCtx.lineWidth = lineWidth;\n canvasCtx.fillStyle = firstColor;\n canvasCtx.strokeStyle = secondColor;\n\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n canvasCtx.beginPath();\n\n canvasCtx.setLineDash([20, 10]);\n const distanceBetweenLines = size / 12;\n for (let i = -canvas.width; i < canvas.width; i++) {\n canvasCtx.moveTo(-canvas.width + distanceBetweenLines * i, -canvas.height);\n canvasCtx.lineTo(canvas.width + distanceBetweenLines * i, canvas.height * 2);\n }\n canvasCtx.stroke();\n\n return Texture.from(canvas);\n};\n\nexport const createTubularRenderingObject = (radius: number, pathPoints: Point[]): TubularRenderingObject => {\n const normals = createNormals(pathPoints);\n const rightPath = offsetPoints(pathPoints, normals, radius);\n const leftPath = offsetPoints(pathPoints, normals, -radius);\n\n return { leftPath, rightPath };\n};\n\nexport type CasingInterval = {\n kind: 'casing' | 'casing-window';\n start: number;\n end: number;\n};\n\nconst createCasingInterval = (start: number, end: number): CasingInterval => ({ kind: 'casing', start, end });\nconst createCasingWindowInterval = (start: number, end: number): CasingInterval => ({ kind: 'casing-window', start, end });\n\nexport const getCasingIntervalsWithWindows = (casing: Casing): CasingInterval[] => {\n const result = (casing.windows || [])\n .filter((cw: CasingWindow) => strictlyOverlaps(casing.start, casing.end, cw.start, cw.end))\n .reduce<{ intervals: CasingInterval[]; lastBottom: number }>(\n ({ intervals, lastBottom }, currentWindow: CasingWindow, index: number, list: CasingWindow[]) => {\n const startCasingInterval: CasingInterval | null =\n // last bottom before current start?\n lastBottom < currentWindow.start ? createCasingInterval(lastBottom, currentWindow.start) : null;\n\n const updatedLastBottom = startCasingInterval ? startCasingInterval.end : lastBottom;\n\n const windowStart = Math.max(updatedLastBottom, currentWindow.start);\n const windowEnd = Math.min(casing.end, currentWindow.end);\n const windowInterval: CasingInterval = createCasingWindowInterval(windowStart, windowEnd);\n\n const nextLastBottom = windowEnd;\n\n const isLastWindow = index === list.length - 1;\n const endCasingInterval: CasingInterval | null =\n isLastWindow &&\n // still room for a casing interval?\n nextLastBottom < casing.end\n ? createCasingInterval(nextLastBottom, casing.end)\n : null;\n\n const newIntervals: CasingInterval[] = [startCasingInterval, windowInterval, endCasingInterval].filter((i): i is CasingInterval => i != null);\n\n return { intervals: [...intervals, ...newIntervals], lastBottom: nextLastBottom };\n },\n { intervals: [], lastBottom: casing.start },\n );\n\n if (!result.intervals.length) {\n return [createCasingInterval(casing.start, casing.end)];\n }\n\n return result.intervals;\n};\n\nexport const prepareCasingRenderObject = (\n exaggerationFactor: number,\n casing: Casing,\n getPathPoints: (start: number, end: number) => Point[],\n): CasingRenderObject => {\n const exaggeratedDiameter = casing.diameter * exaggerationFactor;\n const exaggeratedRadius = exaggeratedDiameter / 2;\n const exaggeratedInnerDiameter = casing.innerDiameter * exaggerationFactor;\n const exaggeratedInnerRadius = exaggeratedInnerDiameter / 2;\n const casingWallWidth = exaggeratedRadius - exaggeratedInnerRadius;\n\n const sections = getCasingIntervalsWithWindows(casing).map((casingInterval: CasingInterval) => {\n const pathPoints = getPathPoints(casingInterval.start, casingInterval.end);\n const { leftPath, rightPath } = createTubularRenderingObject(exaggeratedRadius, pathPoints);\n return { kind: casingInterval.kind, leftPath, rightPath, pathPoints };\n });\n\n return {\n kind: 'casing',\n id: casing.id,\n referenceDiameter: exaggeratedDiameter,\n referenceRadius: exaggeratedRadius,\n sections,\n casingWallWidth,\n hasShoe: casing.hasShoe,\n bottom: casing.end,\n };\n};\n\nexport const createComplexRopeSegmentsForPerforation = (\n perforation: Perforation,\n casings: Casing[],\n holes: HoleSize[],\n exaggerationFactor: number,\n getPoints: (start: number, end: number) => Point[],\n): ComplexRopeSegment[] => {\n const { overlappingOuterStrings, overlappingHoles } = findIntersectingItems(perforation.start, perforation.end, casings, holes);\n\n const outerDiameterIntervals = [...overlappingOuterStrings, ...overlappingHoles].map((d) => ({\n start: d.start,\n end: d.end,\n }));\n\n const changeDepths = getUniqueDiameterChangeDepths([perforation.start, perforation.end], outerDiameterIntervals);\n\n const diameterIntervals = changeDepths.flatMap((depth, index, list) => {\n if (index === list.length - 1) {\n return [];\n }\n\n const nextDepth = list[index + 1]!;\n\n const diameterAtDepth = findPerforationOuterDiameterAtDepth(overlappingOuterStrings, overlappingHoles, depth, perforation.subKind);\n\n return [{ top: depth, bottom: nextDepth, diameter: diameterAtDepth * exaggerationFactor }];\n });\n\n const ropeSegments = diameterIntervals.map((interval) => {\n const points = getPoints(interval.top, interval.bottom);\n\n const diameter = interval.diameter;\n\n return {\n diameter,\n points,\n };\n });\n\n return ropeSegments;\n};\n\nconst drawPacking = (canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, perforationOptions: PerforationOptions) => {\n const { packingOpacity, yellow } = perforationOptions;\n\n ctx.fillStyle = yellow;\n ctx.strokeStyle = yellow;\n\n const xy: [number, number] = [0, 0];\n const wh: [number, number] = [canvas.width, canvas.height];\n ctx.save();\n ctx.globalAlpha = packingOpacity;\n ctx.fillRect(...xy, ...wh);\n ctx.restore();\n};\n\nconst drawFracLines = (\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n extendedPerfShapeDiameter: number,\n perforationOptions: PerforationOptions,\n startAt: 'diameter' | 'spike',\n) => {\n const { fracLineCurve } = perforationOptions;\n\n const amountOfSpikes = 10;\n const spikeWidth = canvas.width / amountOfSpikes;\n\n const diameter = (extendedPerfShapeDiameter / 3) * perforationOptions.scalingFactor;\n\n const fracLineLength = diameter / 4;\n const spikeLength = diameter / 2;\n const offsetX = 0;\n const offsetY = startAt === 'diameter' ? 0 : spikeLength;\n\n ctx.globalAlpha = perforationOptions.packingOpacity;\n\n const fracLines = () => {\n for (let i = -1; i < amountOfSpikes; i++) {\n const bottom: [number, number] = [i * spikeWidth + offsetX + spikeWidth / 2, canvas.height / 2 - fracLineLength - offsetY - fracLineLength];\n\n ctx.beginPath();\n\n const start: [number, number] = [...bottom];\n const controlPoint1: [number, number] = [bottom[0] - fracLineCurve * 2, bottom[1] - fracLineLength / 4];\n const middle: [number, number] = [bottom[0], bottom[1] - fracLineLength / 2];\n\n const controlPoint2: [number, number] = [bottom[0] + fracLineCurve * 2, bottom[1] - fracLineLength / 2 - fracLineLength / 4];\n const end: [number, number] = [bottom[0], bottom[1] - fracLineLength];\n\n ctx.bezierCurveTo(...start, ...controlPoint1, ...middle);\n ctx.bezierCurveTo(...middle, ...controlPoint2, ...end);\n\n ctx.stroke();\n }\n\n for (let i = -1; i < amountOfSpikes; i++) {\n const bottom: [number, number] = [i * spikeWidth + spikeWidth + offsetX + spikeWidth / 2, canvas.height / 2 + diameter / 2 + offsetY];\n\n ctx.beginPath();\n\n const start: [number, number] = [...bottom];\n const controlPoint1: [number, number] = [bottom[0] - fracLineCurve * 2, bottom[1] + fracLineLength / 4];\n const middle: [number, number] = [bottom[0], bottom[1] + fracLineLength / 2];\n\n const controlPoint2: [number, number] = [bottom[0] + fracLineCurve * 2, bottom[1] + fracLineLength / 2 + fracLineLength / 4];\n const end: [number, number] = [bottom[0], bottom[1] + fracLineLength];\n\n ctx.bezierCurveTo(...start, ...controlPoint1, ...middle);\n ctx.bezierCurveTo(...middle, ...controlPoint2, ...end);\n\n ctx.stroke();\n }\n };\n\n ctx.strokeStyle = perforationOptions.yellow;\n ctx.lineWidth = 6;\n ctx.save();\n fracLines();\n ctx.restore();\n ctx.lineWidth = 1;\n ctx.strokeStyle = perforationOptions.outline;\n fracLines();\n\n ctx.closePath();\n};\n\nconst drawSpikes = (\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n extendedPerfShapeDiameter: number,\n perforationOptions: PerforationOptions,\n) => {\n const amountOfSpikes = 4;\n const spikeWidth = canvas.width / amountOfSpikes;\n ctx.strokeStyle = perforationOptions.outline;\n\n const diameter = (extendedPerfShapeDiameter / 3) * perforationOptions.scalingFactor;\n\n ctx.lineWidth = 1;\n const spikeLength = diameter / 2;\n\n // left spikes\n for (let i = 0; i <= amountOfSpikes; i++) {\n const left: [number, number] = [i * spikeWidth, canvas.height / 2 - diameter / 2];\n const bottom: [number, number] = [left[0] - spikeWidth / 2, left[1] - spikeLength];\n const right: [number, number] = [left[0] - spikeWidth, left[1]];\n\n ctx.beginPath();\n ctx.moveTo(...left);\n ctx.lineTo(...bottom);\n ctx.lineTo(...right);\n ctx.fill();\n\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n\n // right spikes\n for (let i = 0; i <= amountOfSpikes; i++) {\n const left: [number, number] = [i * spikeWidth, canvas.height / 2 + diameter / 2];\n const bottom: [number, number] = [left[0] - spikeWidth / 2, left[1] + spikeLength];\n const right: [number, number] = [left[0] - spikeWidth, left[1]];\n\n ctx.beginPath();\n ctx.moveTo(...left);\n ctx.lineTo(...bottom);\n ctx.lineTo(...right);\n ctx.fill();\n\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n\n ctx.closePath();\n};\n\n// for visual debugging\n// if this shoes up, something is wrong\nconst errorTexture = (errorMessage = 'Error!', existingContext?: { canvas: HTMLCanvasElement; canvasCtx: CanvasRenderingContext2D }) => {\n console.error(`${errorMessage}`);\n const canvas = existingContext?.canvas || document.createElement('canvas');\n\n const size = DEFAULT_TEXTURE_SIZE;\n canvas.width = size / 2;\n canvas.height = size;\n const canvasCtx = existingContext?.canvasCtx || canvas.getContext('2d');\n\n const xy: [number, number] = [0, 0];\n const wh: [number, number] = [canvas.width, canvas.height];\n\n if (canvasCtx == null) {\n throw Error('Could not get canvas context!');\n }\n canvasCtx.fillStyle = '#ff00ff';\n canvasCtx.fillRect(...xy, ...wh);\n\n const texture = new Texture({\n source: new CanvasSource({\n resource: canvas,\n wrapMode: 'clamp-to-edge',\n }),\n orig: new Rectangle(0, 0, canvas.width, canvas.height),\n rotate: groupD8.MIRROR_HORIZONTAL,\n });\n\n return texture;\n};\n\nconst createPerforationCanvas = (\n perfShape: ComplexRopeSegment,\n options: PerforationOptions,\n): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } => {\n const canvas = document.createElement('canvas');\n const perfShapeDiameter = perfShape.diameter;\n const size = perfShapeDiameter * options.scalingFactor;\n canvas.width = size / 2;\n canvas.height = size;\n const ctx = canvas.getContext('2d');\n\n if (ctx == null) {\n throw Error('Could not get canvas context!');\n }\n\n return { canvas, ctx };\n};\n\nconst createPerforationTexture = (canvas: HTMLCanvasElement) => {\n const texture = new Texture({\n source: new CanvasSource({\n resource: canvas,\n }),\n orig: new Rectangle(0, 0, canvas.width, canvas.height),\n rotate: groupD8.MIRROR_HORIZONTAL,\n });\n return texture;\n};\n\nconst compareIntersectingPerforationsBy =\n (targetPerf: Perforation, comparedPerforations: Perforation[]) => (compareFunc: (comparedPerf: Perforation) => boolean) =>\n comparedPerforations.some((perf) => compareFunc(perf) && intersect(targetPerf, perf));\n\n/**\n * @Perforation\n * If a perforation does not overlap with another perforations of type with gravel,\n * the perforation spikes are either red when open or grey when closed.\n * Open and closed refers to two fields on a perforation item referencing runs.\n *\n * If a perforation overlaps with another perforation of type with gravel and the perforation is open,\n * the perforation spikes should be yellow. If closed the perforation remains grey.\n *\n * Cased Hole Frac Pack:\n * Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n * If a perforation of type \"perforation\" is overlapping, the fracturation lines extends from the tip of the perforation spikes into formation.\n *\n * Cased Hole Gravel Pack:\n * Yellow gravel. Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n *\n * Cased Hole Fracturation:\n * Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n */\nconst createSubkindPerforationTexture = {\n packing: () => errorTexture(),\n fracLines: () => errorTexture(),\n spikes: (\n perforation: Perforation,\n perfShape: ComplexRopeSegment,\n otherPerforations: Perforation[],\n perforationOptions: PerforationOptions,\n ): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n\n const compareBy = compareIntersectingPerforationsBy(perforation, otherPerforations);\n\n const intersectionsWithCasedHoleGravel: boolean = compareBy(isSubkindCasedHoleGravelPack);\n\n const intersectsWithCasedHoleFracturation: boolean = compareBy(isSubKindCasedHoleFracturation);\n\n const intersectionsWithCasedHoleFracPack: boolean = compareBy(isSubKindCasedHoleFracPack);\n\n const intersectsWithPerforation = intersectionsWithCasedHoleGravel || intersectsWithCasedHoleFracturation || intersectionsWithCasedHoleFracPack;\n\n const openPerforationSpikeColor = intersectsWithPerforation ? perforationOptions.yellow : perforationOptions.red;\n\n ctx.globalAlpha = perforationOptions.packingOpacity;\n if (perforation.isOpen) {\n ctx.fillStyle = openPerforationSpikeColor;\n ctx.strokeStyle = openPerforationSpikeColor;\n } else {\n ctx.fillStyle = perforationOptions.grey;\n ctx.strokeStyle = perforationOptions.grey;\n }\n\n drawSpikes(canvas, ctx, perfShape.diameter, perforationOptions);\n\n if (intersectionsWithCasedHoleFracPack) {\n drawFracLines(canvas, ctx, perfShape.diameter, perforationOptions, 'spike');\n }\n\n return createPerforationTexture(canvas);\n },\n};\n\n/**\n * @Cased_hole_fracturation\n * Yellow fracturation lines from casing OD into formation\n */\nconst createSubkindCasedHoleFracturationTexture = {\n packing: () => errorTexture(),\n fracLines: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawFracLines(canvas, ctx, perfShape.diameter, perforationOptions, 'diameter');\n return createPerforationTexture(canvas);\n },\n spikes: () => errorTexture(),\n};\n\n/**\n * @Cased_hole_frac_pack\n * Yellow gravel and fracturation lines.\n * Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n * If no perforation of type \"perforation\" are overlapping, there are no fracturation lines and no spikes.\n * If a perforation of type \"perforation\" is overlapping, the fracturation lines extends from the tip of the perforation spikes into formation.\n */\nconst createSubkindCasedHoleFracPackTexture = {\n packing: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions) => {\n const { canvas } = createPerforationCanvas(perfShape, perforationOptions);\n return createPerforationTexture(canvas);\n },\n spikes: () => errorTexture(),\n};\n\n/**\n * @Cased_hole_gravel_pack\n * Yellow gravel. Makes perforations of type \"Perforation\" yellow if overlapping and perforation are open.\n */\nconst createSubkindCasedHoleGravelPackTexture = {\n packing: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: () => errorTexture(),\n spikes: () => errorTexture(),\n};\n\n/**\n * @Open_hole_gravel_pack\n * Yellow gravel\n */\nconst createSubkindOpenHoleGravelPackTexture = {\n packing: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions) => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: () => errorTexture(),\n spikes: () => errorTexture(),\n};\n\n/**\n * @Open_hole_frac_pack\n * Yellow gravel. Yellow frac lines from hole OD into formation\n */\nconst createSubkindOpenHoleFracPackTexture = {\n packing: (_perforation: Perforation, perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions) => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawPacking(canvas, ctx, perforationOptions);\n return createPerforationTexture(canvas);\n },\n fracLines: (perfShape: ComplexRopeSegment, perforationOptions: PerforationOptions): Texture => {\n const { canvas, ctx } = createPerforationCanvas(perfShape, perforationOptions);\n drawFracLines(canvas, ctx, perfShape.diameter, perforationOptions, 'diameter');\n return createPerforationTexture(canvas);\n },\n spikes: () => errorTexture(),\n};\n\nexport const createPerforationPackingTexture = (\n perforation: Perforation,\n perfShape: ComplexRopeSegment,\n perforationOptions: PerforationOptions,\n): Texture => {\n return foldPerforationSubKind(\n {\n Perforation: () => createSubkindPerforationTexture.packing(),\n CasedHoleFracturation: () => createSubkindCasedHoleFracPackTexture.packing(perfShape, perforationOptions),\n CasedHoleFracPack: () => createSubkindCasedHoleFracPackTexture.packing(perfShape, perforationOptions),\n OpenHoleGravelPack: () => createSubkindOpenHoleGravelPackTexture.packing(perfShape, perforationOptions),\n OpenHoleFracPack: () => createSubkindOpenHoleFracPackTexture.packing(perforation, perfShape, perforationOptions),\n CasedHoleGravelPack: () => createSubkindCasedHoleGravelPackTexture.packing(perfShape, perforationOptions),\n },\n perforation.subKind,\n );\n};\n\nexport const createPerforationFracLineTexture = (\n perforation: Perforation,\n perfShape: ComplexRopeSegment,\n perforationOptions: PerforationOptions,\n): Texture => {\n return foldPerforationSubKind(\n {\n Perforation: () => createSubkindPerforationTexture.fracLines(),\n OpenHoleGravelPack: () => createSubkindOpenHoleGravelPackTexture.fracLines(),\n OpenHoleFracPack: () => createSubkindOpenHoleFracPackTexture.fracLines(perfShape, perforationOptions),\n CasedHoleFracturation: () => createSubkindCasedHoleFracturationTexture.fracLines(perfShape, perforationOptions),\n CasedHoleGravelPack: () => createSubkindCasedHoleGravelPackTexture.fracLines(),\n CasedHoleFracPack: () => createSubkindCasedHoleFracPackTexture.fracLines(perfShape, perforationOptions),\n },\n perforation.subKind,\n );\n};\n\nexport const createPerforationSpikeTexture = (\n perforation: Perforation,\n otherPerforations: Perforation[],\n perfShape: ComplexRopeSegment,\n perforationOptions: PerforationOptions,\n): Texture => {\n return foldPerforationSubKind(\n {\n Perforation: () => createSubkindPerforationTexture.spikes(perforation, perfShape, otherPerforations, perforationOptions),\n OpenHoleGravelPack: () => createSubkindOpenHoleGravelPackTexture.spikes(),\n OpenHoleFracPack: () => createSubkindOpenHoleFracPackTexture.spikes(),\n CasedHoleFracturation: () => createSubkindCasedHoleFracturationTexture.spikes(),\n CasedHoleGravelPack: () => createSubkindCasedHoleGravelPackTexture.spikes(),\n CasedHoleFracPack: () => createSubkindCasedHoleFracPackTexture.spikes(),\n },\n perforation.subKind,\n );\n};\n","import { MeshGeometry } from 'pixi.js';\nimport { sum, max } from 'd3-array';\nimport { ComplexRopeSegment } from './ComplexRope';\n\n/**\n * RopeGeometry allows you to draw a geometry across several several segments of points and then manipulate these points.\n */\nexport class ComplexRopeGeometry extends MeshGeometry {\n /** An array of segments with points and diameter that determine the rope. */\n private segments: ComplexRopeSegment[];\n\n /**\n * @param segments - An array of segments with points and diameter to construct this rope.\n */\n constructor(segments: ComplexRopeSegment[]) {\n const pointCount = sum(segments, (segment) => segment.points.length);\n\n super({\n positions: new Float32Array(pointCount * 4),\n uvs: new Float32Array(pointCount * 4),\n indices: new Uint32Array((pointCount - 1) * 6),\n shrinkBuffersToFit: true,\n });\n\n this.segments = segments;\n\n this.build();\n }\n\n /**\n * The max width (i.e., thickness) of the rope.\n * @readonly\n */\n get width(): number {\n return max(this.segments, (segment) => segment.diameter)!;\n }\n\n /** Refreshes Rope indices and uvs */\n private build(): void {\n const segments = this.segments;\n\n if (!segments) {\n return;\n }\n\n const vertexBuffer = this.getBuffer('aPosition');\n const uvBuffer = this.getBuffer('aUV');\n const indexBuffer = this.getIndex();\n\n const pointCount = sum(segments, (segment) => segment.points.length);\n\n // if too few points, or texture hasn't got UVs set yet just move on.\n if (pointCount < 1) {\n return;\n }\n\n // if the number of points has changed we will need to recreate the arraybuffers\n if (vertexBuffer.data.length / 4 !== pointCount) {\n vertexBuffer.data = new Float32Array(pointCount * 4);\n uvBuffer.data = new Float32Array(pointCount * 4);\n indexBuffer.data = new Uint16Array((pointCount - 1) * 6);\n }\n\n const uvs = uvBuffer.data;\n const indices = indexBuffer.data;\n\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n\n const segmentCount = segments.length;\n const maxDiameter = max(segments, (segment) => segment.diameter)!;\n\n let amount = 0;\n let uvIndex = 0;\n let indicesIndex = 0;\n let indexCount = 0;\n\n for (let i = 0; i < segmentCount; i++) {\n let prev = segments[i]?.points[0]!;\n const textureWidth = maxDiameter;\n const radius = segments[i]?.diameter! / maxDiameter / 2;\n\n const total = segments[i]?.points.length!; // - 1;\n\n for (let j = 0; j < total; j++) {\n // time to do some smart drawing!\n\n // calculate pixel distance from previous point\n const dx = prev.x - segments[i]?.points[j]?.x!;\n const dy = prev.y - segments[i]?.points[j]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n prev = segments[i]?.points[j]!;\n amount += distance / textureWidth;\n\n uvs[uvIndex] = amount;\n uvs[uvIndex + 1] = 0.5 - radius;\n\n uvs[uvIndex + 2] = amount;\n uvs[uvIndex + 3] = 0.5 + radius;\n uvIndex += 4;\n }\n\n for (let j = 0; j < total - 1; j++) {\n indices[indexCount++] = indicesIndex;\n indices[indexCount++] = indicesIndex + 1;\n indices[indexCount++] = indicesIndex + 2;\n\n indices[indexCount++] = indicesIndex + 2;\n indices[indexCount++] = indicesIndex + 1;\n indices[indexCount++] = indicesIndex + 3;\n indicesIndex += 2;\n }\n indicesIndex += 2;\n }\n\n // ensure that the changes are uploaded\n uvBuffer.update();\n indexBuffer.update();\n\n this.updateVertices();\n }\n\n /** refreshes vertices of Rope mesh */\n public updateVertices(): void {\n const segments = this.segments;\n const pointCount = sum(segments, (segment) => segment.points.length);\n\n if (pointCount < 1) {\n return;\n }\n\n const segmentCount = segments.length;\n let lastIndex = 0;\n for (let i = 0; i < segmentCount; i++) {\n let lastPoint = segments[i]?.points[0]!;\n let nextPoint;\n let perpX = 0;\n let perpY = 0;\n\n const vertices = this.buffers[0]?.data;\n const total = segments[i]?.points.length!;\n let index = 0;\n for (let j = 0; j < total; j++) {\n const point = segments[i]?.points[j]!;\n index = lastIndex + j * 4;\n\n if (j < segments[i]?.points.length! - 1) {\n nextPoint = segments[i]?.points[j + 1]!;\n } else {\n nextPoint = point;\n }\n\n perpY = -(nextPoint.x - lastPoint.x);\n perpX = nextPoint.y - lastPoint.y;\n\n const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);\n const num = segments[i]?.diameter! / 2;\n\n perpX /= perpLength;\n perpY /= perpLength;\n\n perpX *= num;\n perpY *= num;\n\n if (vertices != null) {\n vertices[index] = point.x + perpX;\n vertices[index + 1] = point.y + perpY;\n vertices[index + 2] = point.x - perpX;\n vertices[index + 3] = point.y - perpY;\n }\n\n lastPoint = point;\n }\n lastIndex = index + 4;\n }\n\n this.buffers[0]?.update();\n }\n\n public update(): void {\n // TODO: Possible optimiztion to be had here\n // Figure out if/when it is enough to only update verticies with this.updateVertices()\n // See MeshRope.update() for ideas\n\n // build() sets indicies and uvs and then calls this.updateVertices()\n this.build();\n }\n}\n","import { Mesh, Point, Texture } from 'pixi.js';\nimport { ComplexRopeGeometry } from './ComplexRopeGeometry';\n\nexport type ComplexRopeSegment = {\n points: Point[];\n diameter: number;\n};\n\n/**\n * The ComplexRope allows you to draw a texture across several segments of points and then manipulate these points\n */\nexport class ComplexRope extends Mesh {\n /**\n * re-calculate vertices by rope segment-points each frame\n * @member {boolean}\n */\n public autoUpdate: boolean;\n\n /**\n * @param texture - The texture to use on the rope.\n * @param segments - An array of segments with points and diaeter to construct this rope.\n */\n constructor(texture: Texture, segments: ComplexRopeSegment[]) {\n const ropeGeometry = new ComplexRopeGeometry(segments);\n\n // attempt to set UV wrapping, will fail on non-power of two textures\n texture.source.addressMode = 'repeat';\n\n super({ geometry: ropeGeometry, texture });\n\n this.autoUpdate = true;\n\n this.onRender = () => {\n const geometry: ComplexRopeGeometry = this.geometry as ComplexRopeGeometry;\n\n if (this.autoUpdate) {\n geometry.update();\n }\n };\n }\n}\n","import { Point, MeshGeometry } from 'pixi.js';\n\nexport class FixedWidthSimpleRopeGeometry extends MeshGeometry {\n public points: Point[];\n _width: number;\n /**\n * @param {number} [width=200] - The width (i.e., thickness) of the rope.\n * @param {Point[]} [points] - An array of Point objects to construct this rope.\n */\n constructor(points: Point[], width = 200) {\n super({\n positions: new Float32Array(points.length * 4),\n uvs: new Float32Array(points.length * 4),\n indices: new Uint32Array((points.length - 1) * 6),\n });\n /**\n * An array of points that determine the rope\n * @member {Point[]}\n */\n this.points = points;\n /**\n * The width (i.e., thickness) of the rope.\n * @member {number}\n * @readOnly\n */\n this._width = width;\n /**\n * Rope texture scale, if zero then the rope texture is stretched.\n * @member {number}\n * @readOnly\n */\n this.build();\n }\n /**\n * The width (i.e., thickness) of the rope.\n * @member {number}\n * @readOnly\n */\n get width(): number {\n return this._width;\n }\n /**\n * Refreshes Rope indices and uvs\n * @private\n */\n private build(): void {\n const points = this.points;\n if (!points) {\n return;\n }\n const vertexBuffer = this.getBuffer('aPosition');\n const uvBuffer = this.getBuffer('aUV');\n const indexBuffer = this.getIndex();\n\n // if too little points, or texture hasn't got UVs set yet just move on.\n if (points.length < 1) {\n return;\n }\n // if the number of points has changed we will need to recreate the arraybuffers\n if (vertexBuffer.data.length / 4 !== points.length) {\n vertexBuffer.data = new Float32Array(points.length * 4);\n uvBuffer.data = new Float32Array(points.length * 4);\n indexBuffer.data = new Uint16Array((points.length - 1) * 6);\n }\n const uvs = uvBuffer.data;\n const indices = indexBuffer.data;\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n let amount = 0;\n let prev = points[0]!;\n const total = points.length; // - 1;\n for (let i = 0; i < total; i++) {\n // time to do some smart drawing!\n const index = i * 4;\n\n // calculate pixel distance from previous point\n const dx = prev.x - points[i]?.x!;\n const dy = prev.y - points[i]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n prev = points[i]!;\n amount += distance / this._width;\n\n uvs[index] = amount;\n uvs[index + 1] = 0;\n uvs[index + 2] = amount;\n uvs[index + 3] = 1;\n }\n let indexCount = 0;\n for (let i = 0; i < total - 1; i++) {\n const index = i * 2;\n indices[indexCount++] = index;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 2;\n indices[indexCount++] = index + 2;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 3;\n }\n // ensure that the changes are uploaded\n uvBuffer.update();\n indexBuffer.update();\n this.updateVertices();\n }\n /**\n * refreshes vertices of Rope mesh\n */\n public updateVertices(): void {\n const points = this.points;\n if (points.length < 1) {\n return;\n }\n let lastPoint = points[0]!;\n let nextPoint;\n let perpX = 0;\n let perpY = 0;\n const vertices = this.buffers[0]?.data!;\n const total = points.length;\n for (let i = 0; i < total; i++) {\n const point = points[i]!;\n const index = i * 4;\n if (i < points.length - 1) {\n nextPoint = points[i + 1]!;\n } else {\n nextPoint = point;\n }\n perpY = -(nextPoint.x - lastPoint.x);\n perpX = nextPoint.y - lastPoint.y;\n\n let ratio = (1 - i / (total - 1)) * 10;\n if (ratio > 1) {\n ratio = 1;\n }\n const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);\n const num = this._width / 2;\n perpX /= perpLength;\n perpY /= perpLength;\n perpX *= num;\n perpY *= num;\n vertices[index] = point.x + perpX;\n vertices[index + 1] = point.y + perpY;\n vertices[index + 2] = point.x - perpX;\n vertices[index + 3] = point.y - perpY;\n lastPoint = point;\n }\n this.buffers[0]?.update();\n }\n\n public update(): void {\n this.build();\n }\n}\n","import { Point, Mesh, RopeGeometry, Texture } from 'pixi.js';\nimport { FixedWidthSimpleRopeGeometry } from './FixedWidthSimpleRopeGeometry';\n\n/**\n * The rope allows you to draw a texture across several points and then manipulate these points\n * Width of rope is given in constructor\n */\nexport class FixedWidthSimpleRope extends Mesh {\n /**\n * re-calculate vertices by rope points each frame\n * @member {boolean}\n */\n public autoUpdate: boolean;\n\n /**\n * Note: The wrap mode of the texture is set to REPEAT if `textureScale` is positive.\n * @param texture - The texture to use on the rope. (attempt to set UV wrapping, will fail on non-power of two textures)\n * @param points - An array of {@link Point} objects to construct this rope.\n * @param width - Width of rope\n */\n constructor(texture: Texture, points: Point[], width: number) {\n const ropeGeometry = new FixedWidthSimpleRopeGeometry(points, width);\n\n texture.source.addressMode = 'repeat';\n\n super({ geometry: ropeGeometry, texture });\n\n this.autoUpdate = true;\n\n this.onRender = () => {\n const geometry: RopeGeometry = this.geometry as RopeGeometry;\n\n if (this.autoUpdate) {\n geometry.update();\n }\n };\n }\n}\n","import { MeshGeometry } from 'pixi.js';\nimport type { Point } from 'pixi.js';\n\n/**\n * UniformTextureStretchRopeGeometry allows you to draw a geometry across several points and then manipulate these points.\n */\nexport class UniformTextureStretchRopeGeometry extends MeshGeometry {\n /** An array of points that determine the rope. */\n public points: Point[];\n\n /**\n * The width (i.e., thickness) of the rope.\n * @readonly\n */\n _width: number;\n\n /**\n * @param width - The width (i.e., thickness) of the rope.\n * @param points - An array of Point objects to construct this rope.\n */\n constructor(points: Point[], width = 200) {\n super({\n positions: new Float32Array(points.length * 4),\n uvs: new Float32Array(points.length * 4),\n indices: new Uint32Array((points.length - 1) * 6),\n });\n\n this.points = points;\n this._width = width;\n\n this.build();\n }\n\n /** Refreshes Rope indices and uvs */\n private build(): void {\n const points = this.points;\n\n if (!points) {\n return;\n }\n\n const vertexBuffer = this.getBuffer('aPosition');\n const uvBuffer = this.getBuffer('aUV');\n const indexBuffer = this.getIndex();\n\n // if too few points, or texture hasn't got UVs set yet just move on.\n if (points.length < 1) {\n return;\n }\n\n // if the number of points has changed we will need to recreate the arraybuffers\n if (vertexBuffer.data.length / 4 !== points.length) {\n vertexBuffer.data = new Float32Array(points.length * 4);\n uvBuffer.data = new Float32Array(points.length * 4);\n indexBuffer.data = new Uint16Array((points.length - 1) * 6);\n }\n\n const total = points.length; // - 1;\n\n let totalLength = 0;\n let prevPoint = points[0]!;\n\n for (let i = 0; i < total; i++) {\n const dx = prevPoint.x - points[i]?.x!;\n const dy = prevPoint.y - points[i]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n prevPoint = points[i]!;\n totalLength += distance;\n }\n\n const uvs = uvBuffer.data;\n const indices = indexBuffer.data;\n\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n\n let amount = 0;\n let prev = points[0]!;\n\n for (let i = 0; i < total; i++) {\n // time to do some smart drawing!\n const index = i * 4;\n\n // calculate pixel distance from previous point\n const dx = prev.x - points[i]?.x!;\n const dy = prev.y - points[i]?.y!;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n prev = points[i]!;\n\n // strech texture on distance/length instead of point/points.length to get a more correct strech\n amount += distance / totalLength;\n\n uvs[index] = amount;\n uvs[index + 1] = 0;\n\n uvs[index + 2] = amount;\n uvs[index + 3] = 1;\n }\n\n let indexCount = 0;\n\n for (let i = 0; i < total - 1; i++) {\n const index = i * 2;\n\n indices[indexCount++] = index;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 2;\n\n indices[indexCount++] = index + 2;\n indices[indexCount++] = index + 1;\n indices[indexCount++] = index + 3;\n }\n\n // ensure that the changes are uploaded\n uvBuffer.update();\n indexBuffer.update();\n\n this.updateVertices();\n }\n\n /** refreshes vertices of Rope mesh */\n public updateVertices(): void {\n const points = this.points;\n\n if (points.length < 1) {\n return;\n }\n\n let lastPoint = points[0]!;\n let nextPoint;\n let perpX = 0;\n let perpY = 0;\n\n const vertices = this.buffers[0]?.data!;\n const total = points.length;\n\n for (let i = 0; i < total; i++) {\n const point = points[i]!;\n const index = i * 4;\n\n if (i < points.length - 1) {\n nextPoint = points[i + 1]!;\n } else {\n nextPoint = point;\n }\n\n perpY = -(nextPoint.x - lastPoint.x);\n perpX = nextPoint.y - lastPoint.y;\n\n const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);\n const num = this._width / 2;\n\n perpX /= perpLength;\n perpY /= perpLength;\n\n perpX *= num;\n perpY *= num;\n\n vertices[index] = point.x + perpX;\n vertices[index + 1] = point.y + perpY;\n vertices[index + 2] = point.x - perpX;\n vertices[index + 3] = point.y - perpY;\n\n lastPoint = point;\n }\n\n this.buffers[0]?.update();\n }\n\n public update(): void {\n this.updateVertices();\n }\n}\n","import { Point, Mesh, Texture } from 'pixi.js';\nimport { UniformTextureStretchRopeGeometry } from './UniformTextureStretchRopeGeometry';\n\n/**\n * The UniformTextureStretchRope allows you to draw a texture across several points and then manipulate these points\n */\nexport class UniformTextureStretchRope extends Mesh {\n /**\n * re-calculate vertices by rope points each frame\n * @member {boolean}\n */\n public autoUpdate: boolean;\n\n /**\n * @param texture - The texture to use on the rope.\n * @param points - An array of {@link Point} objects to construct this rope.\n */\n constructor(texture: Texture, points: Point[]) {\n const ropeGeometry = new UniformTextureStretchRopeGeometry(points, texture.height);\n\n super({ geometry: ropeGeometry, texture });\n\n this.autoUpdate = true;\n\n this.onRender = () => {\n const geometry: UniformTextureStretchRopeGeometry = this.geometry as UniformTextureStretchRopeGeometry;\n\n if (this.autoUpdate || geometry._width !== this.shader?.texture.height) {\n geometry._width = this.shader?.texture.height ?? 0;\n geometry.update();\n }\n };\n }\n}\n","import { max } from 'd3-array';\nimport { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { Assets, Graphics, groupD8, Point, Rectangle, MeshRope, Texture } from 'pixi.js';\nimport { DashLine } from '../vendor/pixi-dashed-line';\nimport { LayerOptions, PixiLayer, PixiRenderApplication } from '.';\nimport { DEFAULT_TEXTURE_SIZE, EXAGGERATED_DIAMETER, HOLE_OUTLINE, SCREEN_OUTLINE } from '../constants';\nimport {\n assertNever,\n Casing,\n CasingOptions,\n Cement,\n CementOptions,\n CementPlugOptions,\n CementSqueeze,\n CementSqueezeOptions,\n foldCompletion,\n HoleOptions,\n HoleSize,\n isCementSqueeze,\n PAndA,\n SchematicData,\n ScreenOptions,\n TubingOptions,\n Screen,\n Tubing,\n CompletionSymbol,\n isPAndASymbol,\n isCementPlug,\n CementPlug,\n PAndASymbol,\n InternalLayerOptions,\n defaultHoleOptions,\n defaultCasingOptions,\n defaultCementOptions,\n defaultCementSqueezeOptions,\n defaultCementPlugOptions,\n defaultScreenOptions,\n defaultTubingOptions,\n defaultInternalLayerOptions,\n Perforation,\n PerforationOptions,\n defaultPerforationOptions,\n Completion,\n OutlineClosure,\n hasPacking,\n hasFracLines,\n hasSpikes,\n} from './schematicInterfaces';\nimport {\n CasingRenderObject,\n createCementTexture,\n createComplexRopeSegmentsForCement,\n createComplexRopeSegmentsForCementSqueeze,\n createComplexRopeSegmentsForCementPlug,\n createHoleBaseTexture,\n createScreenTexture,\n createTubingTexture,\n createTubularRenderingObject,\n prepareCasingRenderObject,\n createCementPlugTexture,\n createComplexRopeSegmentsForPerforation,\n createPerforationPackingTexture,\n PerforationShape,\n createCementSqueezeTexture,\n createPerforationFracLineTexture,\n createPerforationSpikeTexture,\n} from '../datautils/schematicShapeGenerator';\nimport { OnUpdateEvent, OnRescaleEvent, OnUnmountEvent } from '../interfaces';\nimport { convertColor } from '../utils/color';\nimport { createNormals, offsetPoint, offsetPoints } from '../utils/vectorUtils';\nimport { ComplexRope, ComplexRopeSegment } from './CustomDisplayObjects/ComplexRope';\nimport { FixedWidthSimpleRope } from './CustomDisplayObjects/FixedWidthSimpleRope';\nimport { UniformTextureStretchRope } from './CustomDisplayObjects/UniformTextureStretchRope';\n\ninterface ScalingFactors {\n height: number;\n zFactor: number;\n yScale: ScaleLinear<number, number, never>;\n}\n\ninterface SymbolRenderObject {\n pathPoints: Point[];\n referenceDiameter: number;\n symbolKey: string;\n}\n\ninterface CementRenderObject {\n kind: 'cement';\n segments: ComplexRopeSegment[];\n casingIds: string[];\n zIndex?: number;\n}\n\ninterface CementSqueezeRenderObject {\n kind: 'cementSqueeze';\n segments: ComplexRopeSegment[];\n casingIds: string[];\n zIndex?: number;\n}\n\ntype InterlacedRenderObjects = CasingRenderObject | CementRenderObject | CementSqueezeRenderObject;\n\nconst foldInterlacedRenderObjects =\n <T>(fCasing: (obj: CasingRenderObject) => T, fCement: (obj: CementRenderObject) => T, fCementSqueeze: (obj: CementSqueezeRenderObject) => T) =>\n (renderObject: InterlacedRenderObjects): T => {\n switch (renderObject.kind) {\n case 'casing':\n return fCasing(renderObject);\n case 'cement':\n return fCement(renderObject);\n case 'cementSqueeze':\n return fCementSqueeze(renderObject);\n default:\n return assertNever(renderObject);\n }\n };\n\nexport interface SchematicLayerOptions<T extends SchematicData> extends LayerOptions<T> {\n exaggerationFactor?: number;\n internalLayerOptions?: InternalLayerOptions;\n holeOptions?: HoleOptions;\n casingOptions?: CasingOptions;\n cementOptions?: CementOptions;\n cementSqueezeOptions?: CementSqueezeOptions;\n screenOptions?: ScreenOptions;\n tubingOptions?: TubingOptions;\n cementPlugOptions?: CementPlugOptions;\n perforationOptions?: PerforationOptions;\n}\n\nconst defaultSchematicLayerOptions = (layerId: string): SchematicLayerOptions<SchematicData> => ({\n exaggerationFactor: 2,\n internalLayerOptions: defaultInternalLayerOptions(layerId),\n holeOptions: defaultHoleOptions,\n casingOptions: defaultCasingOptions,\n cementOptions: defaultCementOptions,\n cementSqueezeOptions: defaultCementSqueezeOptions,\n screenOptions: defaultScreenOptions,\n tubingOptions: defaultTubingOptions,\n cementPlugOptions: defaultCementPlugOptions,\n perforationOptions: defaultPerforationOptions,\n});\n\ntype InternalLayerVisibility = { [K in keyof InternalLayerOptions]: boolean };\n\nexport class SchematicLayer<T extends SchematicData> extends PixiLayer<T> {\n private internalLayerVisibility: InternalLayerVisibility = {\n holeLayerId: true,\n casingLayerId: true,\n completionLayerId: true,\n cementLayerId: true,\n pAndALayerId: true,\n perforationLayerId: true,\n };\n\n private cementTextureCache: Texture | null = null;\n private cementSqueezeTextureCache: Texture | null = null;\n private cementPlugTextureCache: Texture | null = null;\n private holeTextureCache: Texture | null = null;\n private screenTextureCache: Texture | null = null;\n private tubingTextureCache: Texture | null = null;\n private textureSymbolCacheArray: { [key: string]: Texture } | null = null;\n\n protected scalingFactors: ScalingFactors = {\n height: 600,\n zFactor: 1,\n yScale: scaleLinear(),\n };\n\n constructor(ctx: PixiRenderApplication, id?: string, options?: SchematicLayerOptions<T>) {\n super(ctx, id, options);\n this.options = <SchematicLayerOptions<T>>{\n ...this.options,\n ...defaultSchematicLayerOptions(this.id),\n ...options,\n };\n }\n\n public override onUnmount(event?: OnUnmountEvent): void {\n super.onUnmount(event);\n this.cementTextureCache = null;\n this.cementSqueezeTextureCache = null;\n this.holeTextureCache = null;\n this.screenTextureCache = null;\n this.tubingTextureCache = null;\n this.textureSymbolCacheArray = null;\n }\n\n public override async onUpdate(event: OnUpdateEvent<T>): Promise<void> {\n super.onUpdate(event);\n this.clearLayer();\n await this.preRender();\n this.render();\n }\n\n public override async onRescale(event: OnRescaleEvent): Promise<void> {\n const shouldRecalculate = this.scalingFactors.zFactor !== event.zFactor;\n\n this.scalingFactors = { height: event.height, zFactor: event.zFactor, yScale: event.yScale };\n super.optionsRescale(event);\n const yRatio = this.yRatio();\n const flippedX = event.xBounds[0] > event.xBounds[1];\n const flippedY = event.yBounds[0] > event.yBounds[1];\n this.setContainerPosition(event.xScale(0), event.yScale(0));\n this.setContainerScale(event.xRatio * (flippedX ? -1 : 1), yRatio * (flippedY ? -1 : 1));\n if (shouldRecalculate) {\n this.clearLayer();\n await this.preRender();\n }\n\n this.render();\n }\n\n public override async setVisibility(isVisible: boolean, layerId: string) {\n if (layerId === this.id) {\n super.setVisibility(isVisible, layerId);\n return;\n }\n\n const { internalLayerOptions } = this.options as SchematicLayerOptions<T>;\n const entries = internalLayerOptions ? Object.entries(internalLayerOptions) : [];\n const entryFound = entries.find(([_key, id]: [string, string]) => id === layerId);\n const keyFound = entryFound?.[0];\n\n if (keyFound) {\n this.internalLayerVisibility[keyFound as keyof InternalLayerVisibility] = isVisible;\n this.clearLayer();\n await this.preRender();\n this.render();\n }\n }\n\n public override getInternalLayerIds(): string[] {\n const { internalLayerOptions } = this.options as SchematicLayerOptions<T>;\n return internalLayerOptions ? Object.values(internalLayerOptions) : [];\n }\n\n /**\n * Calculate yRatio without zFactor\n * TODO consider to move this into ZoomPanHandler\n */\n protected yRatio(): number {\n const domain = this.scalingFactors.yScale.domain() as [number, number];\n const ySpan = domain[1] - domain[0];\n const baseYSpan = ySpan * this.scalingFactors.zFactor;\n const baseDomain: [number, number] = [domain[0], domain[0] + baseYSpan];\n return Math.abs(this.scalingFactors.height / (baseDomain[1] - baseDomain[0]));\n }\n\n protected getZFactorScaledPathForPoints = (start: number, end: number): Point[] => {\n const y = (y: number): number => y * this.scalingFactors.zFactor;\n\n const path = this.referenceSystem?.getCurtainPath(start, end, true) ?? [];\n return path.map((p) => new Point(p.point[0], y(p.point[1]!)));\n };\n\n protected drawBigPolygon = (coords: Point[], color = 0x000000) => {\n const polygon = new Graphics();\n polygon.poly(coords);\n polygon.fill(color);\n\n this.addChild(polygon);\n };\n\n protected drawRope(path: Point[], texture: Texture, tint?: number): void {\n if (path.length === 0) {\n return undefined;\n }\n\n const rope: MeshRope = new MeshRope({ texture, points: path, textureScale: 1 });\n rope.tint = tint || rope.tint;\n this.addChild(rope);\n }\n\n /**\n *\n * @param leftPath Points for line on left side\n * @param rightPath Points for line on right side\n * @param lineColor Color of line\n * @param lineWidth Width of line\n * @param outlineClosure If line should be drawn at top and/or bottom of the paths\n * @param lineAlignment alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n */\n protected drawOutline(\n leftPath: Point[],\n rightPath: Point[],\n lineColor: number,\n lineWidth = 1,\n outlineClosure: OutlineClosure = 'None',\n lineAlignment = 1,\n ): void {\n const leftPathReverse = leftPath.map<Point>((d) => d.clone()).reverse();\n\n const startPointRight = rightPath[0]!;\n const startPointLeft = leftPathReverse[0]!;\n\n const line = new Graphics();\n line.moveTo(startPointRight.x, startPointRight.y);\n rightPath.forEach((p: Point) => line.lineTo(p.x, p.y));\n\n if (outlineClosure === 'None' || outlineClosure === 'Top') {\n line.moveTo(startPointLeft.x, startPointLeft.y);\n }\n\n leftPathReverse.forEach((p: Point) => line.lineTo(p.x, p.y));\n\n if (outlineClosure === 'TopAndBottom' || outlineClosure === 'Top') {\n line.lineTo(startPointRight.x, startPointRight.y);\n }\n\n line.stroke({ width: lineWidth, color: lineColor, alignment: lineAlignment });\n\n this.addChild(line);\n }\n\n /**\n * Uses a dashed outline on one side to represent casing window\n * The casing window should be visualized at the upper side of the wellbore path\n * @param leftPath Points for line on left side\n * @param pointPath Points for line on right side\n * @param lineColor Color of line\n * @param lineWidth Width of line\n * @param lineAlignment alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n */\n protected drawCasingWindowOutline(leftPath: Point[], rightPath: Point[], { lineColor, windowOptions }: CasingOptions, lineWidth = 1): void {\n // Correct the dashed path. Should always be displayed on the upper side of the wellbore path.\n const flippedPaths = !!this.referenceSystem?.options?.calculateDisplacementFromBottom;\n const [linePath, dashedPath] = flippedPaths ? [leftPath, rightPath] : [rightPath, leftPath];\n const [dashedAlignment, solidAlignment] = flippedPaths ? [1, 0] : [0, 1];\n\n const graphics = new Graphics();\n\n const startPointLinePath = linePath[0]!;\n graphics.moveTo(startPointLinePath.x, startPointLinePath.y);\n linePath.forEach((p: Point) => graphics.lineTo(p.x, p.y));\n graphics.setStrokeStyle({ width: lineWidth, color: convertColor(lineColor), alignment: solidAlignment });\n\n const dashedLine = new DashLine(graphics, {\n dash: [windowOptions.dashLength, windowOptions.spaceLength],\n color: convertColor(windowOptions.dashColor),\n width: lineWidth,\n alignment: dashedAlignment,\n });\n\n const startPointDashedPath = dashedPath[0]!;\n dashedLine.moveTo(startPointDashedPath.x, startPointDashedPath.y);\n dashedPath.forEach((currentPoint: Point) => {\n dashedLine.lineTo(currentPoint.x, currentPoint.y);\n });\n\n this.addChild(graphics);\n }\n\n private perforationRopeAndTextureReferences: { rope: ComplexRope; texture: Texture }[] = [];\n\n public async preRender(): Promise<void> {\n if (!this.data || !this.referenceSystem) {\n return;\n }\n\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n const { holeSizes, casings, cements, completion, symbols, pAndA, perforations } = this.data;\n\n await this.updateSymbolCache(symbols);\n\n holeSizes.sort((a: HoleSize, b: HoleSize) => b.diameter - a.diameter);\n const maxHoleDiameter =\n holeSizes.length > 0 ? (max(holeSizes, (d) => d.diameter) ?? 0) * exaggerationFactor : EXAGGERATED_DIAMETER * exaggerationFactor;\n if (this.internalLayerVisibility.holeLayerId) {\n holeSizes.forEach((hole: HoleSize) => this.drawHoleSize(maxHoleDiameter, hole));\n }\n\n casings.sort((a: Casing, b: Casing) => b.diameter - a.diameter);\n const casingRenderObjects: CasingRenderObject[] = casings.map((casing: Casing) => this.createCasingRenderObject(casing));\n\n const cementShapes: CementRenderObject[] = cements.map(\n (cement: Cement): CementRenderObject => ({\n kind: 'cement',\n segments: createComplexRopeSegmentsForCement(cement, casings, completion, holeSizes, exaggerationFactor, this.getZFactorScaledPathForPoints),\n casingIds: (cement.referenceIds || []).filter((id) => id),\n }),\n );\n\n const [cementSqueezes, remainingPAndA] = pAndA.reduce<[CementSqueeze[], Exclude<PAndA, CementSqueeze>[]]>(\n ([squeezes, remaining], current: PAndA) =>\n isCementSqueeze(current) ? [[current, ...squeezes], remaining] : [squeezes, [current, ...remaining]],\n [[], []],\n );\n\n const cementSqueezesShape: CementSqueezeRenderObject[] = cementSqueezes.map((squeeze) => ({\n kind: 'cementSqueeze',\n segments: this.createCementSqueezeShape(squeeze, casings, completion, holeSizes),\n casingIds: squeeze.referenceIds,\n }));\n\n this.sortCementAndCasingRenderObjects(casingRenderObjects, cementShapes, cementSqueezesShape).forEach(\n foldInterlacedRenderObjects(\n (casingRO: CasingRenderObject) => {\n if (this.internalLayerVisibility.casingLayerId) {\n this.drawCasing(casingRO);\n\n if (casingRO.hasShoe) {\n this.drawShoe(casingRO.bottom, casingRO.referenceRadius);\n }\n }\n },\n (cementRO: CementRenderObject) => {\n if (this.internalLayerVisibility.cementLayerId) {\n const texture = this.getCementTexture();\n texture && this.drawComplexRope(cementRO.segments, texture);\n }\n },\n (cementSqueezesRO: CementSqueezeRenderObject) => {\n if (this.internalLayerVisibility.pAndALayerId) {\n const texture = this.getCementSqueezeTexture();\n texture && this.drawComplexRope(cementSqueezesRO.segments, texture);\n }\n },\n ),\n );\n\n this.perforationRopeAndTextureReferences.forEach(({ rope, texture }) => {\n if (!rope.destroyed) {\n rope.destroy({\n children: true,\n texture: true,\n textureSource: true,\n });\n }\n if (texture) {\n texture.destroy(true);\n }\n });\n this.perforationRopeAndTextureReferences = [];\n\n if (this.internalLayerVisibility.perforationLayerId) {\n const { perforationOptions } = this.options as SchematicLayerOptions<T>;\n const packings = perforations.filter(hasPacking);\n const fracLines = perforations.filter(hasFracLines);\n const spikes = perforations.filter(hasSpikes);\n packings.forEach((perforation) => {\n const perfShapes = this.createPerforationShape(perforation, casings, holeSizes);\n const perfShapesByDiameter: { [key: number]: ComplexRopeSegment[] } = perfShapes.reduce(\n (dict: { [key: number]: ComplexRopeSegment[] }, ps) => {\n if (!dict[ps.diameter]) {\n dict[ps.diameter] = [];\n }\n dict[ps.diameter] = [...(dict[ps.diameter] ?? []), ps];\n return dict;\n },\n {},\n );\n Object.values(perfShapesByDiameter).forEach((perfShapesWithSameDiameter) => {\n const texture = createPerforationPackingTexture(perforation, perfShapesWithSameDiameter[0]!, perforationOptions!);\n const rope = this.drawComplexRope(perfShapesWithSameDiameter, texture);\n rope && this.perforationRopeAndTextureReferences.push({ rope, texture });\n });\n });\n\n spikes.forEach((perforation) => {\n const perfShapes = this.createPerforationShape(perforation, casings, holeSizes);\n const thiccPerfShapes = perfShapes.map((ps) => ({ ...ps, diameter: ps.diameter * 3 }));\n const perfShapesByDiameter: { [key: number]: ComplexRopeSegment[] } = thiccPerfShapes.reduce(\n (dict: { [key: number]: ComplexRopeSegment[] }, ps) => {\n if (!dict[ps.diameter]) {\n dict[ps.diameter] = [];\n }\n dict[ps.diameter] = [...(dict[ps.diameter] ?? []), ps];\n return dict;\n },\n {},\n );\n Object.values(perfShapesByDiameter).forEach((perfShapesWithSameDiameter) => {\n perfShapesWithSameDiameter.forEach((perfShape) => {\n const texture = createPerforationSpikeTexture(perforation, perforations, perfShape, perforationOptions!);\n const rope = this.drawComplexRope([perfShape], texture);\n rope && this.perforationRopeAndTextureReferences.push({ rope, texture });\n });\n });\n });\n\n fracLines.forEach((perforation) => {\n const perfShapes = this.createPerforationShape(perforation, casings, holeSizes);\n const thiccPerfShapes = perfShapes.map((ps) => ({ ...ps, diameter: ps.diameter * 3 }));\n const perfShapesByDiameter: { [key: number]: ComplexRopeSegment[] } = thiccPerfShapes.reduce(\n (dict: { [key: number]: ComplexRopeSegment[] }, ps) => {\n if (!dict[ps.diameter]) {\n dict[ps.diameter] = [];\n }\n dict[ps.diameter] = [...(dict[ps.diameter] ?? []), ps];\n return dict;\n },\n {},\n );\n Object.values(perfShapesByDiameter).forEach((perfShapesWithSameDiameter) => {\n perfShapesWithSameDiameter.forEach((perfShape) => {\n const texture = createPerforationFracLineTexture(perforation, perfShape, perforationOptions!);\n const rope = this.drawComplexRope([perfShape], texture);\n rope && this.perforationRopeAndTextureReferences.push({ rope, texture });\n });\n });\n });\n }\n\n if (this.internalLayerVisibility.completionLayerId) {\n completion.forEach(\n foldCompletion(\n (obj: Screen) => this.drawScreen(obj),\n (obj: Tubing) => this.drawTubing(obj),\n (obj: CompletionSymbol) => {\n const symbolRenderObject = this.prepareSymbolRenderObject(obj);\n this.drawSymbolComponent(symbolRenderObject);\n },\n ),\n );\n }\n\n if (this.internalLayerVisibility.pAndALayerId) {\n remainingPAndA.forEach((obj) => {\n if (isPAndASymbol(obj)) {\n const symbolRenderObject = this.prepareSymbolRenderObject(obj);\n this.drawSymbolComponent(symbolRenderObject);\n }\n if (isCementPlug(obj)) {\n this.drawCementPlug(obj, casings, completion, holeSizes);\n }\n });\n }\n }\n\n private async updateSymbolCache(symbols: { [key: string]: string }) {\n if (!this.textureSymbolCacheArray) {\n this.textureSymbolCacheArray = {};\n }\n if (!symbols) {\n return;\n }\n\n const existingKeys = Object.keys(this.textureSymbolCacheArray);\n const promises = Object.entries(symbols).map(async ([key, symbol]: [string, string]) => {\n if (!existingKeys.includes(key) && this.textureSymbolCacheArray) {\n this.textureSymbolCacheArray[key] = await Assets.load(symbol);\n }\n });\n await Promise.all(promises);\n }\n\n private drawCementPlug(cementPlug: CementPlug, casings: Casing[], completion: Completion[], holes: HoleSize[]) {\n const { exaggerationFactor = 1, cementPlugOptions } = this.options as SchematicLayerOptions<T>;\n\n const cementPlugSegments = createComplexRopeSegmentsForCementPlug(\n cementPlug,\n casings,\n completion,\n holes,\n exaggerationFactor,\n this.getZFactorScaledPathForPoints,\n );\n cementPlugOptions && this.drawComplexRope(cementPlugSegments, this.getCementPlugTexture(cementPlugOptions));\n\n const { rightPath, leftPath } = cementPlugSegments.reduce<{ rightPath: Point[]; leftPath: Point[] }>(\n (acc, current) => {\n const { leftPath, rightPath } = createTubularRenderingObject(current.diameter / 2, current.points);\n\n return {\n rightPath: [...acc.rightPath, ...rightPath],\n leftPath: [...acc.leftPath, ...leftPath],\n };\n },\n { rightPath: [], leftPath: [] },\n );\n this.drawOutline(leftPath, rightPath, convertColor('black'), 0.25, 'TopAndBottom');\n }\n\n private createCasingRenderObject(casing: Casing): CasingRenderObject {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n return prepareCasingRenderObject(exaggerationFactor, casing, this.getZFactorScaledPathForPoints);\n }\n\n private getCementPlugTexture(cementPlugOptions: CementPlugOptions): Texture {\n if (!this.cementPlugTextureCache) {\n this.cementPlugTextureCache = createCementPlugTexture(cementPlugOptions);\n }\n return this.cementPlugTextureCache;\n }\n\n private prepareSymbolRenderObject = (component: CompletionSymbol | PAndASymbol): SymbolRenderObject => {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n\n const exaggeratedDiameter = component.diameter * exaggerationFactor;\n\n const pathPoints = this.getZFactorScaledPathForPoints(component.start, component.end);\n\n return {\n pathPoints,\n referenceDiameter: exaggeratedDiameter,\n symbolKey: component.symbolKey,\n };\n };\n\n private drawSymbolComponent = ({ pathPoints, referenceDiameter, symbolKey }: SymbolRenderObject): void => {\n const texture = this.getSymbolTexture(symbolKey, referenceDiameter);\n // The rope renders fine in CANVAS/fallback mode\n this.drawSVGRope(pathPoints, texture!);\n };\n\n private drawSVGRope(path: Point[], texture: Texture): void {\n if (path.length === 0) {\n return undefined;\n }\n\n const rope: UniformTextureStretchRope = new UniformTextureStretchRope(texture, path);\n\n this.addChild(rope);\n }\n\n private getSymbolTexture(symbolKey: string, diameter: number): Texture | undefined {\n const baseTexture = this.textureSymbolCacheArray?.[symbolKey]?.source;\n return baseTexture ? new Texture({ source: baseTexture, orig: new Rectangle(0, 0, 0, diameter), rotate: groupD8.MAIN_DIAGONAL }) : undefined;\n }\n\n private drawHoleSize = (maxHoleDiameter: number, holeObject: HoleSize): void => {\n if (holeObject == null) {\n return;\n }\n\n const pathPoints = this.getZFactorScaledPathForPoints(holeObject.start, holeObject.end);\n if (pathPoints.length === 0) {\n return;\n }\n\n const { exaggerationFactor = 1, holeOptions } = this.options as SchematicLayerOptions<T>;\n const exaggeratedDiameter = holeObject.diameter * exaggerationFactor;\n const { rightPath, leftPath } = createTubularRenderingObject(exaggeratedDiameter / 2, pathPoints);\n const texture = this.getHoleTexture(holeOptions!, exaggeratedDiameter, maxHoleDiameter);\n\n this.drawHoleRope(pathPoints, texture, maxHoleDiameter);\n\n this.drawOutline(leftPath, rightPath, convertColor(holeOptions!.lineColor), HOLE_OUTLINE * exaggerationFactor, 'TopAndBottom', 0);\n };\n\n private drawHoleRope(path: Point[], texture: Texture, maxHoleDiameter: number): void {\n if (path.length === 0) {\n return undefined;\n }\n\n const rope: MeshRope = new MeshRope({ texture, points: path, textureScale: maxHoleDiameter / DEFAULT_TEXTURE_SIZE });\n\n this.addChild(rope);\n }\n\n private getHoleTexture(holeOptions: HoleOptions, diameter: number, maxHoleDiameter: number): Texture {\n const size = DEFAULT_TEXTURE_SIZE;\n const height = size;\n const width = size;\n\n const textureDiameter = (diameter / maxHoleDiameter) * size;\n\n if (!this.holeTextureCache) {\n this.holeTextureCache = createHoleBaseTexture(holeOptions, width, height);\n }\n\n const baseTexture = this.holeTextureCache.source;\n const sidePadding = (height - textureDiameter) / 2;\n const frame = new Rectangle(0, sidePadding, width, textureDiameter);\n const texture = new Texture({\n source: baseTexture,\n frame,\n });\n\n return texture;\n }\n\n /**\n * The rendering order of these components needs to be aligned\n * @param casingRenderObjects\n * @param cementRenderObject\n * @param cementSqueezes\n * @returns ordered rendering list\n */\n private sortCementAndCasingRenderObjects(\n casingRenderObjects: CasingRenderObject[],\n cementRenderObject: CementRenderObject[],\n cementSqueezes: CementSqueezeRenderObject[],\n ): InterlacedRenderObjects[] {\n type InterlaceReducerAcc = {\n result: InterlacedRenderObjects[];\n remainingCement: CementRenderObject[];\n remainingCementSqueezes: CementSqueezeRenderObject[];\n };\n\n let zIndex = 0;\n\n const { result } = casingRenderObjects.reduce(\n (acc: InterlaceReducerAcc, casingRenderObject: CasingRenderObject): InterlaceReducerAcc => {\n const foundCementShape = acc.remainingCement.find((cement) => cement.casingIds.includes(casingRenderObject.id));\n const foundCementSqueezes = acc.remainingCementSqueezes.filter((squeeze) => squeeze.casingIds.includes(casingRenderObject.id));\n\n if (foundCementShape) {\n foundCementShape.zIndex = zIndex++;\n }\n foundCementSqueezes.forEach((item) => (item.zIndex = zIndex++));\n casingRenderObject.zIndex = zIndex++;\n\n return {\n result: [...acc.result, foundCementShape!, casingRenderObject, ...foundCementSqueezes],\n remainingCement: acc.remainingCement.filter((c) => c !== foundCementShape),\n remainingCementSqueezes: acc.remainingCementSqueezes.filter((squeeze) => !foundCementSqueezes.includes(squeeze)),\n };\n },\n { result: [], remainingCement: cementRenderObject, remainingCementSqueezes: cementSqueezes },\n );\n\n return result.filter((item): item is InterlacedRenderObjects => item != null).sort((a, b) => a.zIndex! - b.zIndex!);\n }\n\n /**\n *\n * @param intervals\n * @param texture\n * optionally fetch the exaggerationFactor from a different options prop\n * options.perforationOptions for example\n * @param getExaggerationFactor\n * @returns\n */\n private drawComplexRope(intervals: ComplexRopeSegment[], texture: Texture): ComplexRope | undefined {\n if (intervals.length === 0) {\n return undefined;\n }\n const rope = new ComplexRope(texture, intervals);\n\n this.addChild(rope);\n\n return rope;\n }\n\n private static getOutlineClosureType = (index: number, maxIndex: number): OutlineClosure => {\n if (index === 0) {\n if (index === maxIndex) {\n return 'TopAndBottom';\n }\n return 'Top';\n }\n if (index === maxIndex) {\n return 'Bottom';\n }\n\n return 'None';\n };\n\n private drawCasing = (casingRenderObject: CasingRenderObject): void => {\n const { casingOptions } = this.options as SchematicLayerOptions<T>;\n const casingSolidColorNumber = convertColor(casingOptions!.solidColor);\n const casingLineColorNumber = convertColor(casingOptions!.lineColor);\n\n casingRenderObject.sections.forEach((section, index, list) => {\n const outlineClosureType = SchematicLayer.getOutlineClosureType(index, list.length - 1);\n\n const texture = this.createCasingTexture(casingRenderObject.referenceDiameter);\n this.drawRope(section.pathPoints, texture, casingSolidColorNumber);\n\n if (section.kind === 'casing-window') {\n this.drawCasingWindowOutline(section.leftPath, section.rightPath, casingOptions!, casingRenderObject.casingWallWidth);\n } else {\n this.drawOutline(section.leftPath, section.rightPath, casingLineColorNumber, casingRenderObject.casingWallWidth, outlineClosureType);\n }\n });\n };\n\n private createCasingTexture(diameter: number): Texture {\n const textureWidthPO2 = 16;\n return new Texture({\n source: Texture.WHITE.source,\n orig: new Rectangle(0, 0, textureWidthPO2, diameter),\n });\n }\n\n private drawShoe(casingEnd: number, casingRadius: number): void {\n const { exaggerationFactor = 1, casingOptions } = this.options as SchematicLayerOptions<T>;\n const shoeWidth = casingOptions!.shoeSize.width * exaggerationFactor;\n const shoeLength = casingOptions!.shoeSize.length * exaggerationFactor;\n\n const shoeCoords = this.generateShoe(casingEnd, casingRadius, shoeLength, shoeWidth);\n const shoeCoords2 = this.generateShoe(casingEnd, casingRadius, shoeLength, -shoeWidth);\n this.drawBigPolygon(shoeCoords2);\n this.drawBigPolygon(shoeCoords);\n }\n\n private generateShoe = (casingEnd: number, casingRadius: number, length: number, width: number): Point[] => {\n const start = casingEnd - length;\n const end = casingEnd;\n\n const points = this.getZFactorScaledPathForPoints(start, end);\n\n const normal = createNormals(points);\n const shoeEdge: Point[] = offsetPoints(points, normal, casingRadius * (width < 0 ? -1 : 1));\n\n const shoeTipPoint = points[points.length - 1]!;\n const shoeTipNormal = normal[normal.length - 1]!;\n const shoeTip: Point = offsetPoint(shoeTipPoint, shoeTipNormal, width + casingRadius * (width < 0 ? -1 : 1));\n\n return [...shoeEdge, shoeTip];\n };\n\n private createCementSqueezeShape = (\n squeeze: CementSqueeze,\n casings: Casing[],\n completion: Completion[],\n holes: HoleSize[],\n ): ComplexRopeSegment[] => {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n return createComplexRopeSegmentsForCementSqueeze(squeeze, casings, completion, holes, exaggerationFactor, this.getZFactorScaledPathForPoints);\n };\n\n private getCementTexture(): Texture | null {\n if (!this.cementTextureCache) {\n const { cementOptions } = this.options as SchematicLayerOptions<T>;\n cementOptions && (this.cementTextureCache = createCementTexture(cementOptions));\n }\n return this.cementTextureCache;\n }\n\n private createPerforationShape = (perforation: Perforation, casings: Casing[], holes: HoleSize[]): PerforationShape[] => {\n const { exaggerationFactor = 1 } = this.options as SchematicLayerOptions<T>;\n return createComplexRopeSegmentsForPerforation(perforation, casings, holes, exaggerationFactor, this.getZFactorScaledPathForPoints);\n };\n\n private getCementSqueezeTexture(): Texture | null {\n if (!this.cementSqueezeTextureCache) {\n const { cementSqueezeOptions } = this.options as SchematicLayerOptions<T>;\n cementSqueezeOptions && (this.cementSqueezeTextureCache = createCementSqueezeTexture(cementSqueezeOptions));\n }\n return this.cementSqueezeTextureCache;\n }\n\n private drawScreen({ start, end, diameter }: Screen): void {\n const { exaggerationFactor = 1, screenOptions } = this.options as SchematicLayerOptions<T>;\n const exaggeratedDiameter = exaggerationFactor * diameter;\n\n const pathPoints = this.getZFactorScaledPathForPoints(start, end);\n const { leftPath, rightPath } = createTubularRenderingObject(exaggeratedDiameter / 2, pathPoints);\n\n const texture = this.getScreenTexture();\n if (texture) {\n this.drawCompletionRope(pathPoints, texture, exaggeratedDiameter);\n this.drawOutline(leftPath, rightPath, convertColor(screenOptions!.lineColor), SCREEN_OUTLINE * exaggerationFactor, 'TopAndBottom');\n }\n }\n\n private drawTubing({ diameter, start, end }: Tubing): void {\n const { exaggerationFactor = 1, tubingOptions } = this.options as SchematicLayerOptions<T>;\n const exaggeratedDiameter = exaggerationFactor * diameter;\n\n const pathPoints = this.getZFactorScaledPathForPoints(start, end);\n const texture = this.getTubingTexture(tubingOptions!);\n\n this.drawCompletionRope(pathPoints, texture, exaggeratedDiameter);\n }\n\n private getTubingTexture(tubingOptions: TubingOptions): Texture {\n if (!this.tubingTextureCache) {\n this.tubingTextureCache = createTubingTexture(tubingOptions);\n }\n return this.tubingTextureCache;\n }\n\n private getScreenTexture(): Texture | null {\n if (!this.screenTextureCache) {\n const { screenOptions } = this.options as SchematicLayerOptions<T>;\n screenOptions && (this.screenTextureCache = createScreenTexture(screenOptions));\n }\n return this.screenTextureCache;\n }\n\n private drawCompletionRope(path: Point[], texture: Texture, diameter: number): void {\n if (path.length === 0) {\n return;\n }\n\n const rope: FixedWidthSimpleRope = new FixedWidthSimpleRope(texture, path, diameter);\n this.addChild(rope);\n }\n}\n","import { CanvasLayer } from './base/CanvasLayer';\nimport { OnUpdateEvent, OnMountEvent, OnRescaleEvent } from '../interfaces';\n\nexport type SeismicCanvasDataOptions = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type SeismicCanvasData = {\n image: CanvasImageSource | OffscreenCanvas;\n options: SeismicCanvasDataOptions;\n};\n\nexport class SeismicCanvasLayer extends CanvasLayer<SeismicCanvasData> {\n override onMount(event: OnMountEvent): void {\n super.onMount(event);\n }\n\n override onUpdate(event: OnUpdateEvent<SeismicCanvasData>): void {\n super.onUpdate(event);\n\n this.clearCanvas();\n\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n this.setTransform(event);\n this.render();\n }\n\n render(): void {\n if (!this.data || !this.ctx || !this.data.image) {\n return;\n }\n const { ctx } = this;\n const { options, image } = this.data;\n\n this.clearCanvas();\n\n ctx.drawImage(image, options.x, options.y, options.width, options.height);\n }\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import {\n line,\n curveCatmullRom,\n curveLinear,\n curveBasis,\n curveBasisClosed,\n curveBundle,\n curveCardinal,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n} from 'd3-shape';\nimport { SVGLayer } from './base/SVGLayer';\nimport { OnUpdateEvent, OnRescaleEvent } from '../interfaces';\nimport { LayerOptions } from '..';\n\nconst CURVE_CATMULL_ROM_ALPHA = 0.7;\nconst CURVE_CARDINAL_TENSION = 0.9;\nconst CURVE_BUNDLE_BETA = 1.0;\n\nexport interface WellborepathLayerOptions<T extends [number, number][]> extends LayerOptions<T> {\n stroke: string;\n strokeWidth: string;\n curveType?: string;\n tension?: number;\n}\n\nexport class WellborepathLayer<T extends [number, number][]> extends SVGLayer<T> {\n rescaleEvent: OnRescaleEvent | undefined;\n\n constructor(id?: string, options?: WellborepathLayerOptions<T>) {\n super(id, options);\n this.options = {\n ...this.options,\n ...options,\n };\n this.render = this.render.bind(this);\n }\n\n override onUpdate(event: OnUpdateEvent<T>): void {\n super.onUpdate(event);\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent): void {\n super.onRescale(event);\n if (!this.elm) {\n return;\n }\n this.rescaleEvent = event;\n this.render();\n }\n\n render(): void {\n const { strokeWidth, stroke } = this.options as WellborepathLayerOptions<T>;\n\n if (!this.elm) {\n return;\n }\n this.elm.select('g').remove();\n\n const data = this.data || (this.referenceSystem && (this.referenceSystem.projectedPath as [number, number][]));\n if (!data || !this.rescaleEvent) {\n return;\n }\n\n this.elm\n .append('g')\n .attr('class', 'well-path')\n .append('path')\n .attr('d', this.renderWellborePath(data))\n .attr('stroke-width', strokeWidth || '2px')\n .attr('stroke', stroke || 'red')\n .attr('fill', 'none');\n }\n\n private renderWellborePath(data: [number, number][]): string {\n if (this.rescaleEvent != null) {\n const { xScale, yScale } = this.rescaleEvent;\n const transformedData: [number, number][] = data.map((d) => [xScale(d[0]), yScale(d[1])]);\n\n // TODO: Might be a good idea to move something like this to a shared function in a base class\n let curveFactory;\n const { curveType, tension } = this.options as WellborepathLayerOptions<T>;\n switch (curveType) {\n default:\n case 'curveCatmullRom':\n curveFactory = curveCatmullRom.alpha(tension || CURVE_CATMULL_ROM_ALPHA);\n break;\n case 'curveLinear':\n curveFactory = curveLinear;\n break;\n case 'curveBasis':\n curveFactory = curveBasis;\n break;\n case 'curveBasisClosed':\n curveFactory = curveBasisClosed;\n break;\n case 'curveBundle':\n curveFactory = curveBundle.beta(tension || CURVE_BUNDLE_BETA);\n break;\n case 'curveCardinal':\n curveFactory = curveCardinal.tension(tension || CURVE_CARDINAL_TENSION);\n break;\n case 'curveMonotoneX':\n curveFactory = curveMonotoneX;\n break;\n case 'curveMonotoneY':\n curveFactory = curveMonotoneY;\n break;\n case 'curveNatural':\n curveFactory = curveNatural;\n break;\n case 'curveStep':\n curveFactory = curveStep;\n break;\n case 'curveStepAfter':\n curveFactory = curveStepAfter;\n break;\n case 'curveStepBefore':\n curveFactory = curveStepBefore;\n break;\n }\n return line().curve(curveFactory)(transformedData) ?? '';\n }\n return '';\n }\n}\n","import { calcSize } from '../utils';\nimport { CanvasLayer, LayerOptions } from './base';\nimport { assertNever } from './schematicInterfaces';\nimport { OnUpdateEvent, OnRescaleEvent, OnMountEvent } from '../interfaces';\nimport { ScaleLinear } from 'd3-scale';\n\nexport type ReferenceLineType = 'wavy' | 'dashed' | 'solid';\n\nexport type ReferenceLine = {\n text?: string;\n lineType: ReferenceLineType;\n color: string;\n depth: number;\n lineWidth?: number;\n textColor?: string;\n fontSize?: string;\n};\n\nexport type ReferenceLineLayerOptions = LayerOptions<ReferenceLine[]>;\n\nconst foldReferenceLine = <T>(\n options: {\n wavy: (wavy: ReferenceLine) => T;\n dashed: (dashed: ReferenceLine) => T;\n solid: (solid: ReferenceLine) => T;\n },\n refLine: ReferenceLine,\n): T => {\n switch (refLine.lineType) {\n case 'wavy':\n return options.wavy(refLine);\n\n case 'dashed':\n return options.dashed(refLine);\n\n case 'solid':\n return options.solid(refLine);\n\n default:\n return assertNever(refLine.lineType);\n }\n};\n\nexport class ReferenceLineLayer extends CanvasLayer<ReferenceLine[]> {\n yScale: ScaleLinear<number, number, never> | null = null;\n xScale: ScaleLinear<number, number, never> | null = null;\n\n override onMount(event: OnMountEvent) {\n super.onMount(event);\n }\n\n override onUpdate(event: OnUpdateEvent<ReferenceLine[]>) {\n super.onUpdate(event);\n this.clearCanvas();\n this.render();\n }\n\n override onRescale(event: OnRescaleEvent) {\n super.onRescale(event);\n this.yScale = event.yScale;\n this.xScale = event.xScale;\n this.resetTransform();\n this.render();\n }\n\n private drawDashed(dashed: ReferenceLine) {\n const { ctx } = this;\n const { canvas } = this;\n\n if (ctx != null && canvas != null) {\n const y = this.yScale?.(dashed.depth)!;\n ctx.save();\n ctx.strokeStyle = dashed.color;\n this.setCtxLineStyle(ctx, dashed);\n this.setCtxLineWidth(ctx, dashed);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(canvas.width, y);\n ctx.stroke();\n ctx.restore();\n if (dashed.text) {\n this.drawText(ctx, dashed, ctx.canvas.width, y);\n }\n }\n }\n\n private drawSolid(solid: ReferenceLine) {\n const { ctx } = this;\n const { canvas } = this;\n const y = this.yScale!(solid.depth);\n if (ctx != null && canvas != null) {\n ctx.save();\n ctx.strokeStyle = solid.color;\n this.setCtxLineStyle(ctx, solid);\n this.setCtxLineWidth(ctx, solid);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(canvas.width, y);\n ctx.stroke();\n ctx.restore();\n if (solid.text) {\n this.drawText(ctx, solid, ctx.canvas.width, y);\n }\n }\n }\n\n private drawWavy(wavy: ReferenceLine): void {\n const factor = 4;\n const min = 2.5;\n const max = 500;\n const { ctx, canvas } = this;\n\n if (this.xScale != null && this.yScale != null && canvas != null && ctx != null) {\n const waveHeight = calcSize(factor, min, max, this.yScale);\n const wavePeriod = waveHeight * 2;\n const y = this.yScale(wavy.depth) - waveHeight;\n const steps = Math.ceil(canvas.width / wavePeriod) + 1;\n const xOffset = this.xScale(0) % wavePeriod;\n ctx.save();\n ctx.strokeStyle = wavy.color;\n this.setCtxLineStyle(ctx, wavy);\n this.setCtxLineWidth(ctx, wavy);\n for (let i = -1; i < steps; i++) {\n ctx.beginPath();\n ctx.arc(i * wavePeriod + xOffset + waveHeight, y, waveHeight, 0, Math.PI);\n ctx.stroke();\n }\n ctx.restore();\n if (wavy.text) {\n this.drawText(ctx, wavy, ctx.canvas.width, y);\n }\n }\n }\n\n private drawText(ctx: CanvasRenderingContext2D, refLine: ReferenceLine, x: number, y: number) {\n const textColor = refLine.textColor || '#000';\n const fontSize = refLine.fontSize || '10px sans-serif';\n const textOffsetX = 10;\n\n ctx.save();\n ctx.strokeStyle = textColor;\n ctx.font = fontSize;\n ctx.textAlign = 'end';\n ctx.textBaseline = 'bottom';\n ctx.fillText(refLine.text ?? '', x - textOffsetX, y);\n ctx.restore();\n }\n\n private setCtxLineStyle(ctx: CanvasRenderingContext2D, refLine: ReferenceLine): void {\n const a = 8;\n const b = 10;\n foldReferenceLine(\n {\n solid: () => {\n ctx.setLineDash([]);\n },\n dashed: () => {\n ctx.setLineDash([a, b]);\n },\n wavy: () => {\n ctx.setLineDash([]);\n },\n },\n refLine,\n );\n }\n\n private setCtxLineWidth(ctx: CanvasRenderingContext2D, refLine: ReferenceLine) {\n const defaultLineWidth = 1;\n ctx.lineWidth = refLine.lineWidth || defaultLineWidth;\n }\n\n private render() {\n if (!this.ctx || !this.yScale || !this.xScale) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.clearCanvas();\n\n this.data?.forEach((refLine) => {\n foldReferenceLine(\n {\n solid: (solid) => this.drawSolid(solid),\n dashed: (dashed) => this.drawDashed(dashed),\n wavy: (wavy) => this.drawWavy(wavy),\n },\n refLine,\n );\n });\n });\n }\n}\n","import { select, Selection } from 'd3-selection';\nimport { ZoomPanHandler } from './ZoomPanHandler';\nimport { Layer, GridLayer, LayerOptions } from '../layers';\nimport { ScaleOptions, OnMountEvent, OnRescaleEvent } from '../interfaces';\nimport { Axis } from '../components';\nimport { IntersectionReferenceSystem } from './IntersectionReferenceSystem';\nimport { HORIZONTAL_AXIS_MARGIN, VERTICAL_AXIS_MARGIN } from '../constants';\nimport { AxisOptions } from './interfaces';\n\nexport class LayerManager {\n private container: HTMLElement;\n\n private layerContainer: HTMLElement;\n\n private _zoomPanHandler: ZoomPanHandler;\n\n private layers: Layer<unknown>[] = [];\n\n private _axis: Axis | undefined;\n private _svgContainer: Selection<HTMLDivElement, unknown, null, undefined> | undefined;\n\n /**\n * Handles layers and axis also holds a zoom and pan handler object\n * @param container root container\n * @param scaleOptions\n * @param axisOptions\n */\n constructor(container: HTMLElement, scaleOptions?: ScaleOptions, axisOptions?: AxisOptions) {\n this.container = container;\n this.layerContainer = document.createElement('div');\n this.layerContainer.className = 'layer-container';\n this.container.appendChild(this.layerContainer);\n this.adjustToSize(+(this.container.getAttribute('width') ?? 0), +(this.container.getAttribute('height') ?? 0));\n this._zoomPanHandler = new ZoomPanHandler(container, (event) => this.rescale(event));\n if (scaleOptions) {\n const { xMin, xMax, yMin, yMax, xBounds, yBounds } = scaleOptions;\n if (xMin !== undefined && xMax !== undefined && yMin !== undefined && yMax !== undefined) {\n this._zoomPanHandler.setBounds([xMin, xMax], [yMin, yMax]);\n }\n if (xBounds && yBounds) {\n this._zoomPanHandler.setBounds(xBounds, yBounds);\n }\n } else {\n this._zoomPanHandler.setBounds([0, 1], [0, 1]);\n }\n\n if (axisOptions) {\n this._axis = this.createAxis(axisOptions);\n }\n\n this.rescale = this.rescale.bind(this);\n }\n\n /**\n * Adds and mounts an array of layers\n * @param layers array of layers\n */\n addLayers(layers: Layer<unknown>[]): LayerManager {\n layers.forEach((layer) => this.addLayer(layer));\n return this;\n }\n\n /**\n * Gets all layers currently mounted\n */\n getLayers(): Layer<unknown>[] {\n return this.layers;\n }\n\n /**\n * Clears data from all mounted layers\n * @param includeReferenceSystem - (optional) if true also removes reference system, default is true\n */\n clearAllData(includeReferenceSystem = true): LayerManager {\n this.layers.forEach((l) => l.clearData(includeReferenceSystem));\n return this;\n }\n\n /**\n * Adds the layer to the manager, and mounts it\n * @param layer Layer\n * @param params extra params to pass to the onUpdate method\n */\n addLayer(layer: Layer<unknown>, params?: LayerOptions<unknown>): LayerManager {\n this.layers.push(layer);\n this.initLayer(layer, params);\n\n return this;\n }\n\n /**\n * Remove and unmount layer from manager\n * @param layerId name of layer\n */\n removeLayer(layerId: string): LayerManager {\n const layer = this.layers.find((l) => l.id === layerId);\n if (layer) {\n layer.onUnmount();\n this.layers = this.layers.filter((l) => l.id !== layerId);\n }\n\n return this;\n }\n\n /**\n * Remove and unmount all layers from manager\n */\n removeAllLayers(): LayerManager {\n const { layers } = this;\n layers.forEach((layer) => {\n this.removeLayer(layer.id);\n });\n return this;\n }\n\n getLayer(layerId: string): Layer<unknown> | undefined {\n return this.layers.find((l) => l.id === layerId || l.getInternalLayerIds().includes(layerId));\n }\n\n initLayer(layer: Layer<unknown>, params?: LayerOptions<unknown>): LayerManager {\n const event: OnMountEvent = {\n elm: this.layerContainer,\n };\n layer.onMount(event);\n const rescaleEvent = this.zoomPanHandler.currentStateAsEvent();\n layer.onUpdate({ ...rescaleEvent, ...params });\n layer.onRescale(rescaleEvent);\n\n if (this._svgContainer) {\n const highestZIndex = this.layers.length > 0 ? this.layers.reduce((max, layers) => (max.order > layers.order ? max : layers)).order : 1;\n this._svgContainer.style('z-index', `${highestZIndex + 1}`);\n }\n\n return this;\n }\n\n showLayer(layerId: string): LayerManager {\n const layer = this.getLayer(layerId);\n if (!layer) {\n return this;\n }\n layer.setVisibility(true, layerId);\n layer.onRescale(this.zoomPanHandler.currentStateAsEvent());\n return this;\n }\n\n hideLayer(layerId: string): LayerManager {\n const layer = this.getLayer(layerId);\n if (!layer) {\n return this;\n }\n layer.setVisibility(false, layerId);\n layer.onRescale(this.zoomPanHandler.currentStateAsEvent());\n return this;\n }\n\n /**\n * Adjust layers, axis, and zoom according to inputted dimensions\n * @param width (required)\n * @param height (required)\n */\n adjustToSize(width: number, height: number): void {\n const layersWidth = Math.max(this._axis ? width - HORIZONTAL_AXIS_MARGIN : width, 0);\n const layersHeight = Math.max(this._axis ? height - VERTICAL_AXIS_MARGIN : height, 0);\n\n if (this._axis) {\n const resizeEvent = { width, height };\n this._axis.onResize(resizeEvent);\n }\n if (this.layers) {\n const resizeEvent = { width: layersWidth, height: layersHeight };\n this.layers.forEach((layer) => layer.onResize(resizeEvent));\n }\n if (this._zoomPanHandler) {\n this._zoomPanHandler.adjustToSize(layersWidth, layersHeight, true);\n }\n }\n\n setReferenceSystem(irs: IntersectionReferenceSystem): void {\n this.layers.forEach((layer) => (layer.referenceSystem = irs));\n }\n\n showAxis(): LayerManager {\n this._axis?.show();\n return this;\n }\n\n hideAxis(): LayerManager {\n this._axis?.hide();\n return this;\n }\n\n showAxisLabels(): LayerManager {\n this._axis?.showLabels();\n return this;\n }\n\n hideAxisLabels(): LayerManager {\n this._axis?.hideLabels();\n return this;\n }\n\n setAxisOffset(x: number, y: number): LayerManager {\n if (this._axis) {\n this._axis.offsetX = x;\n this._axis.offsetY = y;\n const gridLayers = this.layers.filter((l: Layer<unknown>): l is GridLayer<unknown> => l instanceof GridLayer);\n gridLayers.forEach((l: GridLayer<unknown>) => {\n l.offsetX = x;\n l.offsetY = y;\n });\n }\n return this;\n }\n\n setXAxisOffset(x: number): LayerManager {\n if (this._axis) {\n this._axis.offsetX = x;\n const gridLayers = this.layers.filter((l: Layer<unknown>): l is GridLayer<unknown> => l instanceof GridLayer);\n gridLayers.forEach((l: GridLayer<unknown>) => {\n l.offsetX = x;\n });\n }\n return this;\n }\n\n setYAxisOffset(y: number): LayerManager {\n if (this._axis) {\n this._axis.offsetY = y;\n const gridLayers = this.layers.filter((l: Layer<unknown>): l is GridLayer<unknown> => l instanceof GridLayer);\n gridLayers.forEach((l: GridLayer<unknown>) => {\n l.offsetY = y;\n });\n }\n return this;\n }\n\n setZoomLevelBoundary(zoomlevels: [number, number]): LayerManager {\n this._zoomPanHandler.setZoomLevelBoundary(zoomlevels);\n return this;\n }\n\n setMaxZoomLevel(zoomlevel: number): LayerManager {\n this._zoomPanHandler.setMaxZoomLevel(zoomlevel);\n return this;\n }\n\n setMinZoomLevel(zoomlevel: number): LayerManager {\n this._zoomPanHandler.setMinZoomLevel(zoomlevel);\n return this;\n }\n\n destroy(): LayerManager {\n this.removeAllLayers();\n this.layerContainer.remove();\n this._axis = undefined;\n this._svgContainer = undefined;\n\n return this;\n }\n\n get zoomPanHandler(): ZoomPanHandler {\n return this._zoomPanHandler;\n }\n\n get axis(): Axis | undefined {\n return this._axis;\n }\n\n private rescale(event: OnRescaleEvent): void {\n if (this._axis) {\n this._axis.onRescale(event);\n }\n if (this.layers) {\n this.layers.forEach((layer) => (layer.isVisible === true ? layer.onRescale(event) : {}));\n }\n }\n\n private createAxis = (options: AxisOptions): Axis => {\n const { container } = this;\n this._svgContainer = select(container)\n .append('div')\n .attr('class', 'axis')\n .style('position', 'absolute')\n .style('z-index', '10')\n .style('pointer-events', 'none');\n\n const svg = this._svgContainer.append('svg').attr('height', `${container.offsetHeight}px`).attr('width', `${container.offsetWidth}px`);\n\n const showLabels = true;\n\n const axis = new Axis(svg, showLabels, options.xLabel, options.yLabel, options.unitOfMeasure);\n\n return axis;\n };\n}\n","import { select, Selection, pointer, ContainerElement } from 'd3-selection';\nimport { OverlayCallbacks } from './interfaces';\n\nexport class Overlay<T> {\n elm: Selection<HTMLDivElement, unknown, null, undefined>;\n source: HTMLDivElement | undefined;\n elements: { [propName: string]: Element } = {};\n listeners: { [propName: string]: OverlayCallbacks<T> } = {};\n enabled = true;\n\n constructor(caller: T, container: HTMLElement) {\n const con = select(container);\n this.elm = con.append('div').attr('id', 'overlay').style('z-index', '11').style('position', 'absolute');\n this.source = this.elm.node() ?? undefined;\n\n const { elm } = this;\n elm.on('resize', (event) => {\n const { width, height } = event.detail;\n elm.style('width', `${width}px`).style('height', `${height}px`);\n\n if (!this.enabled) {\n return;\n }\n\n Object.keys(this.listeners).forEach((key: string) => {\n const target = this.elements[key] ?? undefined;\n const ops = this.listeners[key];\n if (ops && ops.onResize) {\n requestAnimationFrame(() =>\n ops.onResize?.({\n target,\n source: this.source,\n caller,\n width,\n height,\n }),\n );\n }\n });\n });\n\n elm.on('mousemove', (event) => {\n if (!this.enabled) {\n return;\n }\n\n const [mx, my] = pointer(event, this.elm.node() as ContainerElement);\n Object.keys(this.listeners).forEach((key: string) => {\n const target = this.elements[key] ?? undefined;\n const ops = this.listeners[key];\n\n if (ops && ops.onMouseMove) {\n requestAnimationFrame(() =>\n ops.onMouseMove?.({\n x: mx,\n y: my,\n target,\n source: this.source,\n caller,\n }),\n );\n }\n });\n });\n\n elm.on('mouseout', () => {\n if (!this.enabled) {\n return;\n }\n Object.keys(this.listeners).forEach((key: string) => {\n const target = this.elements[key] || undefined;\n const ops = this.listeners[key];\n if (ops && ops.onMouseExit) {\n requestAnimationFrame(() =>\n ops.onMouseExit?.({\n target,\n source: this.source,\n caller,\n }),\n );\n }\n });\n });\n }\n\n create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement | undefined {\n const newElm = this.elm.append('div').style('position', 'relative').style('pointer-events', 'none').node();\n\n if (newElm != null) {\n this.elements[key] = newElm;\n if (callbacks) {\n this.listeners[key] = callbacks;\n }\n return newElm;\n } else {\n return undefined;\n }\n }\n\n register(key: string, callbacks: OverlayCallbacks<T>): void {\n this.listeners[key] = callbacks;\n }\n\n remove(key: string): void {\n const el = this.elements[key];\n if (el) {\n select(el).remove();\n delete this.elements[key];\n }\n delete this.listeners[key];\n }\n\n setZIndex(zIndex: number): void {\n this.elm.style('z-index', zIndex);\n }\n\n destroy(): void {\n this.source?.remove();\n }\n}\n\nexport const overlay = <T>(caller: T, container: HTMLElement): Overlay<T> => new Overlay<T>(caller, container);\n","import { IntersectionReferenceSystem } from './IntersectionReferenceSystem';\nimport { LayerManager } from './LayerManager';\nimport { Layer } from '../layers';\nimport { ControllerOptions } from './interfaces';\nimport { ZoomPanHandler } from './ZoomPanHandler';\nimport { LayerOptions, OnRescaleEvent, ReferenceSystemOptions } from '..';\nimport { Axis } from '../components';\nimport { overlay, Overlay } from './overlay';\nimport { HORIZONTAL_AXIS_MARGIN, VERTICAL_AXIS_MARGIN } from '../constants';\n\n/**\n * API for controlling data and layers\n */\nexport class Controller {\n private _referenceSystem: IntersectionReferenceSystem | undefined;\n\n private layerManager: LayerManager;\n private _overlay: Overlay<Controller>;\n\n /**\n * Interface to control layers, reference system, axis and overlay. overlay is created on instantiation, does not currently support opt-out.\n * @param options\n * @param options.container (required) Currently only supports HTMLElement\n * @param options.scaleOptions (optional) currently supports formats listed in examples below\n * @example scaleOptions = { xMin: 0, xMax: 100, yMin: 0, yMax: 100 }\n * @example scaleOptions = { xBounds: [0 , 100], yBounds: [0, 100] }\n * @param options.axisOptions (optional) creates axis with supplied labels, currently only supports creating axis on instantiation\n * @param options.layers (optional) list of layers\n * @param options.path (optional) creates a reference system based on an array of 3d coordinates\n * @param options.referenceSystem (optional) sets reference system, takes priority over path if both are supplied\n */\n constructor(options: ControllerOptions) {\n const { container, axisOptions, scaleOptions, referenceSystem, layers, path } = options;\n\n this._referenceSystem = referenceSystem || (path && new IntersectionReferenceSystem(path));\n\n this._overlay = overlay(this, container);\n\n this.layerManager = new LayerManager(this._overlay.elm.node() as HTMLElement, scaleOptions, axisOptions);\n if (layers) {\n this.layerManager.addLayers(layers);\n this.setOverlayZIndex(layers);\n }\n }\n\n /**\n * Sets reference system, overrides any existing reference systems in place\n * @param referenceSystem IntersectionReferenceSystem\n */\n setReferenceSystem(referenceSystem: IntersectionReferenceSystem): Controller {\n this._referenceSystem = referenceSystem;\n this.layerManager.setReferenceSystem(referenceSystem);\n return this;\n }\n\n /**\n * Creates new reference system based on path, overrides any existing reference systems in place\n * @param path array of coords\n * @param options optional\n * @param options.trajectoryAngle (optional) angle in degrees\n */\n updatePath(path: number[][], options?: ReferenceSystemOptions): Controller {\n this.setReferenceSystem(new IntersectionReferenceSystem(path, options));\n\n return this;\n }\n\n /**\n * Clears data from all mounted layers\n * @param includeReferenceSystem - (optional) if true also removes reference system, default is true\n */\n clearAllData(includeReferenceSystem = true): Controller {\n this.layerManager.clearAllData(includeReferenceSystem);\n return this;\n }\n\n /**\n * Adds layer to list, and initializes it\n * @param layer layer object\n * @param params (optional) adds additional parameters to the onUpdateEvent\n */\n addLayer(layer: Layer<unknown>, params?: LayerOptions<unknown>): Controller {\n this.layerManager.addLayer(layer, params);\n this.setOverlayZIndex(this.layerManager.getLayers());\n return this;\n }\n\n /**\n * Remove and unmount layer from list\n * @param layerId string id\n */\n removeLayer(layerId: string): Controller {\n this.layerManager.removeLayer(layerId);\n return this;\n }\n\n /**\n * Remove and unmount all layers from list\n */\n removeAllLayers(): Controller {\n this.layerManager.removeAllLayers();\n return this;\n }\n\n /**\n * Find first layer with given id, returns undefined if none are found\n * @param layerId string id\n */\n getLayer(layerId: string): Layer<unknown> | undefined {\n return this.layerManager.getLayer(layerId);\n }\n\n /**\n * Sets visibility to true and rescales the layer\n * @param layerId string id\n */\n showLayer(layerId: string): Controller {\n this.layerManager.showLayer(layerId);\n return this;\n }\n\n /**\n * Sets visibility to false\n * @param layerId string id\n */\n hideLayer(layerId: string): Controller {\n this.layerManager.hideLayer(layerId);\n return this;\n }\n\n /**\n * Adjust layers, axis, overlay, and zoom according to inputted dimensions\n * @param width (required)\n * @param height (required)\n */\n adjustToSize(width: number, height: number): Controller {\n this.layerManager.adjustToSize(width, height);\n\n const dimensions = { width: Math.max(width - HORIZONTAL_AXIS_MARGIN, 0), height: Math.max(height - VERTICAL_AXIS_MARGIN, 0) };\n this.overlay.elm.dispatch('resize', { detail: dimensions, bubbles: true, cancelable: true });\n\n return this;\n }\n\n /**\n * Set new viewport\n * @param cx - center X pos\n * @param cy - center Y pos\n * @param displ - displacement\n * @param duration - duration of transition\n */\n setViewport(cx?: number, cy?: number, displacement?: number, duration?: number): Controller {\n this.zoomPanHandler.setViewport(cx, cy, displacement, duration);\n return this;\n }\n\n /**\n * Sets bounds for zoom and pan handler\n * @param xBounds - domain in x-direction\n * @param yBounds - domain in y-direction\n */\n setBounds(xBounds: [number, number], yBounds: [number, number]): Controller {\n this.zoomPanHandler.setBounds(xBounds, yBounds);\n return this;\n }\n\n /**\n * Display both axes\n */\n showAxis(): Controller {\n this.layerManager.showAxis();\n return this;\n }\n\n /**\n * Hide both axes\n */\n hideAxis(): Controller {\n this.layerManager.hideAxis();\n return this;\n }\n\n /**\n * Shows labels in x and y\n */\n showAxisLabels(): Controller {\n this.layerManager.showAxisLabels();\n return this;\n }\n\n /**\n * Hide labels in x and y\n */\n hideAxisLabels(): Controller {\n this.layerManager.hideAxisLabels();\n return this;\n }\n\n /**\n * Sets domain offset, offset is subtracted from domain\n * @param x\n * @param y\n */\n setAxisOffset(x: number, y: number): Controller {\n this.layerManager.setAxisOffset(x, y);\n return this;\n }\n\n /**\n * Sets domain offset in x-direction, offset is subtracted from domain\n * @param x\n */\n setXAxisOffset(x: number): Controller {\n this.layerManager.setXAxisOffset(x);\n return this;\n }\n\n /**\n * Sets domain offset in y-direction, offset is subtracted from domain\n * @param y\n */\n setYAxisOffset(y: number): Controller {\n this.layerManager.setYAxisOffset(y);\n return this;\n }\n\n /**\n * Defines min and max of how much one can zoom\n * @param zoomlevels\n */\n setZoomLevelBoundary(zoomlevels: [number, number]): Controller {\n this.zoomPanHandler.setZoomLevelBoundary(zoomlevels);\n return this;\n }\n\n /**\n * Defines how far in one can zoom\n * @param zoomlevel\n */\n setMaxZoomLevel(zoomlevel: number): Controller {\n this.zoomPanHandler.setMaxZoomLevel(zoomlevel);\n return this;\n }\n\n /**\n * Defines how far out one can zoom\n * @param zoomlevel\n */\n setMinZoomLevel(zoomlevel: number): Controller {\n this.zoomPanHandler.setMinZoomLevel(zoomlevel);\n return this;\n }\n\n /**\n * Destroy Controller\n * Convenience method for removing from DOM and clearing references\n */\n destroy(): Controller {\n this.layerManager.destroy();\n this._overlay.destroy();\n this._referenceSystem = undefined;\n return this;\n }\n\n private getHighestZIndex(layers: Layer<unknown>[]): number {\n const highestZIndex = layers.length > 0 ? layers.reduce((max, layers) => (max.order > layers.order ? max : layers)).order : 1;\n return highestZIndex;\n }\n\n private setOverlayZIndex(layers: Layer<unknown>[]): void {\n const highestZIndex = this.getHighestZIndex(layers);\n this.overlay.setZIndex(highestZIndex + 2);\n }\n\n get overlay(): Overlay<Controller> {\n return this._overlay;\n }\n\n get referenceSystem(): IntersectionReferenceSystem | undefined {\n return this._referenceSystem;\n }\n\n get zoomPanHandler(): ZoomPanHandler {\n return this.layerManager.zoomPanHandler;\n }\n\n get axis(): Axis | undefined {\n return this.layerManager.axis;\n }\n\n get currentStateAsEvent(): OnRescaleEvent {\n return this.zoomPanHandler.currentStateAsEvent();\n }\n}\n"],"names":["identity$4","x","top","right","bottom","left","epsilon","translateX","translateY","y","number","scale","d","center","offset","entering","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","values","format","identity","spacing","range","range0","range1","position","selection","path","tick","tickExit","tickEnter","line","text","p","_","axisRight","axisBottom","ascending","a","b","descending","bisector","f","compare1","compare2","delta","zero","lo","hi","mid","i","ascendingBisect","bisectRight","InternMap","entries","key","keyof","value","intern_get","intern_set","intern_delete","_intern","_key","e10","e5","e2","tickSpec","start","stop","count","step","power","error","factor","i1","i2","inc","ticks","reverse","n","tickIncrement","tickStep","max","valueof","index","sum","initRange","domain","implicit","ordinal","unknown","define","constructor","factory","prototype","extend","parent","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","m","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","o","rgb","opacity","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","min","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$3","linear","t","exponential","gamma","nogamma","constant","interpolateRgb","rgbGamma","end","colorRgb","numberArray","c","isNumberArray","genericArray","nb","na","date","interpolateNumber","object","reA","reB","one","interpolateString","bi","am","bm","bs","q","interpolate$1","string","interpolateRound","degrees","decompose","e","scaleX","scaleY","skewX","svgNode","parseCss","parseSvg","interpolateTransform","parse","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","rotate","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","p1","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","S","d1","b0","b1","r0","r1","coshr0","u","_1","_2","_4","quantize","interpolator","samples","constants","unit","normalize","clamper","bimap","interpolate","d0","polymap","j","bisect","copy","source","target","transformer","interpolateValue","untransform","clamp","piecewise","output","input","rescale","continuous","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","width","length","formatNumerals","numerals","re","formatSpecifier","specifier","match","FormatSpecifier","formatTrim","out","i0","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$1","map","prefixes","formatLocale","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","defaultLocale","precisionFixed","precisionPrefix","precisionRound","linearish","prestep","maxIter","Axis","mainGroup","showLabels","labelXDesc","labelYDesc","unitOfMeasure","options","name","res","scaleLinear","_showLabels","gx","labelx","_scaleY","height","gy","labely","_scaleX","yAxis","xAxis","event","offsetX","offsetY","xScale","yScale","xBounds","yBounds","xRange","yRange","flipX","flip","flipY","label","uom","labelX","labelY","DEG2RAD","radians","deg","seqI","steps","incr","add","sub","sumsqr","magnitude","sq","len","dist","dot","mix","clamp$1","modify","modifier","isZeroVector","RAD2DEG","v","rad","cr","sr","angleRight","signedAngle","phi","Vector2","_i","val","vector","_this","extendStatics","__extends","__","__assign","extrapolateControlPoint","getControlPoints","idx","points","closed","p2","p3","maxIndex","getSegmentIndexAndT","ct","nPoints","func","reduce","copyValues","binarySearch","targetValue","accumulatedValues","lMid","EPS","cuberoot","getQuadRoots","D","getCubicRoots","roots","v1","v2","cross","ax","ay","az","bx","by","bz","sumOfSquares","distance","sqrs","squared","rotate3d","angle","vx","vy","vz","tx","ty","calcKnotSequence","alpha","deltaT","t1","t2","calculateCoefficients","tension","knotSequence","coefficientsList","v0","v3","t0","t3","valueAtT","coefficients","derivativeAtT","secondDerivativeAtT","findRootsOfT","lookup","evaluateForT","AbstractCurveMapper","onInvalidateCache","_a","SegmentedCurveMapper","_super","subDivisions","current","lengths","last","arcLengths","il","targetArcLength","lengthBefore","al","totalLength","tIdx","subIdx","l1","lut","maxOrder","NumericalCurveMapper","nQuadraturePoints","nInverseSamples","order","slopes","ti","dtln","slope","nCoeff","dis","cis","li_prev","tdi_prev","li","lDiff","tdi","tdi_next","si","di","ci","z","T","tl","ld","CurveInterpolator","curveMapper","clampInput","dt","normal","ddt","segments","from","to","tangents","normals","binormals","vec","theta","tangent","curvature","direction","denominator","signedCurvature","cp","dotProduct","_loop_1","this_1","w0_1","w1_1","valid","coefficients_1","_loop_2","_b","bbox","returnType","pts","point","threshold","pu","minDist","minU","minT","margin","solutions","vmin","vmax","ts","nt","cacheKey","cacheForceUpdate","positions","nSamples","prev","initialValue","acc","isClosed","RootFinder","maxIterations","minLimit","maxLimit","th","ArcLength","tolerance","minDepth","maxDepth","calcRec","aVal","bVal","span","depth","midVal","spanA","spanB","tol","lastPos","pos","BinarySearch","searchValue","ih","ExtendedCurveInterpolator","arcLength","iterations","normalizedLength","fromLength","toLength","fromIndex","fromLl","fromLh","toIndex","toLl","toLh","TENSION","ARC_DIVISIONS","THRESHOLD_DIRECTION_DISTANCE","DEFAULT_START_EXTEND_LENGTH","DEFAULT_END_EXTEND_LENGTH","CURTAIN_SAMPLING_ANGLE_THRESHOLD","CURTAIN_SAMPLING_INTERVAL","defaultOptions","IntersectionReferenceSystem","arcDivisions","calculateDisplacementFromBottom","displacement","trajVector","negativeTrajVector","curtain","cl","startMd","endMd","includeStartEnd","prevAngle","startPoint","pointsBetween","endPoint","displacementFromStart","ls","trajectory","extensionStart","extensionEnd","refStart","refEnd","preSteps","curveSteps","postSteps","curvePoints","numPoints","startExtensionLength","endExtensionLength","startExtensionNumPoints","endExtensionNumPoints","startVec","startExtensionStepLength","curveStepPoints","endVec","endExtensionStepLength","trajectoryAngle","angleInRad","xhtml","namespaces","namespace","creatorInherit","document","uri","creatorFixed","fullname","creator","none","selector","selection_select","select","groups","subgroups","subgroup","node","subnode","Selection","array","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","childFirst","selection_selectChild","filter","children","childrenFilter","selection_selectChildren","selection_filter","sparse","update","selection_enter","EnterNode","datum","child","next","constant$2","bindIndex","enter","exit","data","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","selection_data","bind","arraylike","enterGroup","updateGroup","exitGroup","previous","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","groups0","groups1","m0","merges","group0","group1","merge","selection_order","selection_sort","compare","compareNode","sortgroups","sortgroup","selection_call","callback","selection_nodes","selection_node","selection_size","size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","create","constantNull","selection_insert","before","remove","selection_remove","selection_cloneShallow","clone","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","listener","parseTypenames","typenames","onRemove","typename","on","onAdd","selection_on","dispatchEvent","params","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","root","selection_selection","sourceEvent","pointer","svg","rect","noop","dispatch","Dispatch","types","get","set","that","args","nonpassivecapture","noevent$1","dragDisable","view","noevent","yesdrag","noclick","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","now","clearNow","Timer","timer","delay","time","sleep","timerFlush","wake","nap","poke","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","id","timing","schedules","init","self","tween","interrupt","active","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","value1","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","styleNull","style","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","resolve","reject","cancel","selection_prototype","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","constant$1","ZoomEvent","Transform","location","nopropagation","defaultFilter","defaultExtent","defaultTransform","defaultWheelDelta","defaultTouchable","defaultConstrain","extent","translateExtent","dx0","dx1","dy0","dy1","constrain","wheelDelta","touchable","scaleExtent","duration","listeners","touchstarting","touchfirst","touchending","touchDelay","wheelDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","collection","gesture","k0","k1","centroid","w","clean","Gesture","wheelidled","currentTarget","mousemoved","mouseupped","x0","y0","dragEnable","touches","started","l0","dp","dl","DEFAULT_MIN_ZOOM_LEVEL","DEFAULT_MAX_ZOOM_LEVEL","ZoomPanHandler","elm","onRescale","enabled","xSpan","zFactor","enableTranslateExtent","translateBoundsX","translateBoundsY","x1","y1","x2","y2","ppu","viewportRatio","currentTransform","xRatio","yRatio","currentStateAsEvent","ratio","isXInverted","isYInverted","newWidth","unitsPerPixels","newXSpan","newYSpan","shiftx","shifty","cx","cy","displ","container","calculateTransform","xd","dspan","yd","xdispl","widthOrAutoAdjust","force","oldWidth","oldHeight","recalculateZoomTransform","containerEl","containerWidth","containerHeight","newHeight","rx1","rx2","zoomIdentity","updateTranslateExtent","zoomlevels","zoomlevel","zoomLevels","Layer","opts","loading","shouldBeInteractive","referenceSystem","includeReferenceSystem","visible","_layerId","DEFAULT_LAYER_WIDTH","DEFAULT_LAYER_HEIGHT","HORIZONTAL_AXIS_MARGIN","VERTICAL_AXIS_MARGIN","EXAGGERATED_DIAMETER","HOLE_OUTLINE","SCREEN_OUTLINE","SHOE_WIDTH","SHOE_LENGTH","DEFAULT_TEXTURE_SIZE","SURFACE_LINE_WIDTH","CanvasLayer","_opacity","_order","_interactive","visibility","interactive","canvas","ctx","flippedX","flippedY","HTMLLayer","SVGLayer","PixiRenderApplication","pixiRenderOptions","autoDetectRenderer","Container","PixiLayer","isVisible","styles","pair","layerId","assertNever","isPAndASymbol","item","isCementSqueeze","isCementPlug","foldCompletion","fScreen","fTubing","fSymbol","completion","foldPerforationSubKind","subKind","shouldPerforationStartAtHoleDiameter","perf","shouldPerforationStartAtCasingDiameter","hasPacking","hasFracLines","hasSpikes","isSubkindCasedHoleGravelPack","isSubKindPerforation","isSubKindCasedHoleFracPack","isOpenHoleFracPack","isSubKindCasedHoleFracturation","intersect","defaultInternalLayerOptions","defaultHoleOptions","defaultCasingOptions","defaultPerforationOptions","defaultCementOptions","defaultCementSqueezeOptions","defaultScreenOptions","defaultTubingOptions","defaultCementPlugOptions","DEFAULT_HORIZONTAL_PADDING","DEFAULT_VERTICAL_PADDING","pixelsPerUnit","calcSize","isOverlappingHorizontally","r2","r1x2","r2x2","isOverlapping","horizontalPadding","verticalPadding","r1y2","r2y2","getOverlap","getOverlapOffset","DEFAULT_MIN_FONT_SIZE","DEFAULT_MAX_FONT_SIZE","DEFAULT_FONT_SIZE_FACTOR","DEFAULT_OFFSET_MIN","DEFAULT_OFFSET_MAX","DEFAULT_OFFSET_FACTOR","DEFAULT_BACKGROUND_COLOR","DEFAULT_BACKGROUND_PADDING","DEFAULT_BACKGROUND_BORDER_RADIUS","getValueOrDefault","defaultValue","Location","CalloutCanvasLayer","title","fontSize","dotX","dotY","placeLeft","textX","inverseTextX","textY","isPanning","groupFilter","isLeftToRight","filtered","callout","calloutBB","borderRadius","titleWidth","labelWidth","xMin","yMin","xMax","yMax","font","fontStyle","radius","boundingBox","annotations","_scale","alignment","nodes","ax1","ay1","prevNode","currentNode","overlap","RADIX_SIXTEEN","HEX_STRING_LENGTH","convertColor","colorStr","colorToCSSColor","DEFAULT_MAX_DEPTH","GeomodelCanvasLayer","polygons","polygon","topIsValid","_c","endIsReached","_d","_e","_f","paths","penDown","mapped","findIndexOfSample","linearSearchLimit","aPos","bPos","splitAt","splitPos","_g","_h","findSampleAtPos","topLimit","bottomLimit","mapPick","groupName","getReferencePicks","picks","getEntryPicks","formationPicks","getFilteredExitPicks","obj","getPicksData","picksData","unitDto","findGaps","arr","gaps","itm","transformStratColumn","units","joinPicksAndStratColumn","stratColumn","transformed","nonUnitPicks","joined","matches","pairJoinedPicks","pairs","sorted","pairWithName","isTop","isBase","base","pairWith","transformFormationData","itemstack","unitPicks","first","createColorTable","colorMap","colorDomain","_v","colorScale","getSeismicOptions","info","getSeismicInfo","minX","maxX","minTvdMsl","maxTvdMsl","absMax","dmin","dmax","generateSeismicSliceImage","colormap","colorTableSize","colorTable","colorFactor","val1","val2","col","black","imageData","TRANSLUCENT_RED","WHITE","generateSurfaceData","surfaceData","filteredSurfaces","mappedSurfaces","mapSurfaceData","stratGroups","stratigraphies","combineSurfacesAndStratColumn","sortStratigraphies","lines","getSurfaceLines","surfaceAreas","generateSurfaceAreas","mapGroups","areas","generateGroupAreas","surfaces","isValid","unassignedColorScale","firstUnit","defaultGroupName","stratUnit","findStratcolumnUnit","stratigrafies","aAge","bAge","unitname","temp","displayName","getColorFromUnit","scaleOrdinal","findBestMatchingBaseIndex","nextIndex","baseSurfaceIndex","candidate","isAnchestor","descendant","projection","surface","baseIndex","baseValue","getBaseValue","datapoint","stepSize","extensionLength","thresholdRelativeDist","thresholdDirectionDist","pathSteps","generateProjectedWellborePath","poslog","simplify","projectCurtain","generateProjectedTrajectory","defaultIntersectionAngle","relativeDist","radCurtainDirection","getDirectionVector","extensionLengthStart","firstPoints","initial","endPoints","inputArr","maxOffset","maxDistance","o0","o1","a0","a1","sim","proximity","dir","origin","DEFAULT_MARGINS","DEFAULT_TEXT_COLOR","DEFAULT_FONT","MAX_FONT_SIZE_IN_WORLD_COORDINATES","GeomodelLabelsLayer","surfaceArea","nextSurfaceArea","maxFontSizeInWorldCoordinates","isXFlipped","isLabelsOnLeftSide","marginsInWorldCoords","minFontSize","fontSizeInWorldCoords","leftEdge","rightEdge","surfaceAreaLeftEdge","surfaceAreaRightEdge","labelMetrics","labelLengthInWorldCoords","labelRightEdge","labelLeftEdge","startPos","portionOfLabelLengthUsedForPosCalc","topEdge","bottomEdge","dirSteps","posSteps","posStep","dirStep","topData","topPos","bottomData","bottomPos","thickness","initialDirVec","areaDir","scaledAngle","textAngle","textDir","area","sumAndCount","avgTopDepth","topmostSurfaceNotDrawnYet","surfaceLine","hexString","alternativeSurfaceData","currentSurfaceIndex","alternativeY","usedY","altY","altSurface","initalVector","startY","vecAtEnd","tmpVec","minReductionAngle","maxReductionAngle","angleReductionExponent","alternativeSurfaceBottomData","angles","topY","bottomY","alternativeBottomY","usedBottomY","refAngle","offsetAngles","factors","firstValidPoint","dx2","dy2","wbBBox","screenLeftEdge","screenRightEdge","leftLimit","rightLimit","spaceOnLeftSide","spaceOnRightSide","spaceOnLeftSideInScreenCoordinates","spaceOnRightSideInScreenCoordinates","DEFAULT_Y_BOTTOM","GeomodelLayerV2","Graphics","lineData","MINORCOLOR","MAJORCOLOR","MINORWIDTH","MAJORWIDTH","GridLayer","minorWidth","minorColor","majorWidth","majorColor","xDomain","yDomain","ry1","ry2","xminticks","yminticks","xscale","xticks","yscale","yticks","ImageLayer","img","calcWidth","calcHeight","dashLineOptionsDefault","_DashLine","graphics","Point","texture","closePath","gap","cos","sin","place","dashIndex","dashStart","dashX","dashSize","remaining","lastDash","matrix","radiusX","radiusY","lineStyle","Matrix","textureStart","Texture","SCALE_MODES","DashLine","pointToVector","vectorToPoint","createNormals","_coord","curr","offsetPoint","offsetPoints","vectors","overlaps","top1","bottom1","top2","bottom2","strictlyOverlaps","uniq","findIntersectingItems","otherStrings","holes","overlappingHoles","hole","overlappingOuterStrings","casing","getUniqueDiameterChangeDepths","intervalStart","intervalEnd","diameterIntervals","trimmedChangedDepths","getInnerStringDiameter","stringType","findCementOuterDiameterAtDepth","attachedStrings","nonAttachedStrings","attachedStringAtDepth","casingOrCompletion","attachedOuterDiameter","outerCasingAtDepth","holeAtDepth","findPerforationOuterDiameterAtDepth","perforationSubKind","findCementPlugInnerDiameterAtDepth","minimumDiameter","nonAttachedStringAtDepth","createComplexRopeSegmentsForCement","cement","casings","exaggerationFactor","getPoints","splitByReferencedStrings","bottomOfCement","outerDiameterIntervals","nextDepth","diameterAtChangeDepth","referenceIds","createComplexRopeSegmentsForCementSqueeze","squeeze","diameterAtDepth","createComplexRopeSegmentsForCementPlug","plug","innerDiameterIntervals","createGradientFill","canvasCtx","firstColor","secondColor","startPctOffset","gradient","createHoleBaseTexture","createScreenTexture","scalingFactor","baseLineWidth","distanceBetweenLines","createTubingTexture","innerColor","outerColor","innerColorStart","innerColorEnd","createCementTexture","lineWidth","createCementPlugTexture","createCementSqueezeTexture","createTubularRenderingObject","pathPoints","rightPath","createCasingInterval","createCasingWindowInterval","getCasingIntervalsWithWindows","result","cw","intervals","lastBottom","currentWindow","startCasingInterval","updatedLastBottom","windowStart","windowEnd","windowInterval","nextLastBottom","endCasingInterval","newIntervals","prepareCasingRenderObject","getPathPoints","exaggeratedDiameter","exaggeratedRadius","exaggeratedInnerRadius","casingWallWidth","sections","casingInterval","leftPath","createComplexRopeSegmentsForPerforation","perforation","drawPacking","perforationOptions","packingOpacity","yellow","xy","wh","drawFracLines","extendedPerfShapeDiameter","startAt","fracLineCurve","amountOfSpikes","spikeWidth","diameter","fracLineLength","spikeLength","fracLines","controlPoint1","middle","controlPoint2","drawSpikes","errorTexture","errorMessage","existingContext","CanvasSource","Rectangle","groupD8","createPerforationCanvas","perfShape","createPerforationTexture","compareIntersectingPerforationsBy","targetPerf","comparedPerforations","compareFunc","createSubkindPerforationTexture","otherPerforations","compareBy","intersectionsWithCasedHoleGravel","intersectsWithCasedHoleFracturation","intersectionsWithCasedHoleFracPack","openPerforationSpikeColor","createSubkindCasedHoleFracturationTexture","createSubkindCasedHoleFracPackTexture","createSubkindCasedHoleGravelPackTexture","createSubkindOpenHoleGravelPackTexture","createSubkindOpenHoleFracPackTexture","_perforation","createPerforationPackingTexture","createPerforationFracLineTexture","createPerforationSpikeTexture","ComplexRopeGeometry","MeshGeometry","pointCount","segment","vertexBuffer","uvBuffer","indexBuffer","uvs","indices","segmentCount","maxDiameter","amount","uvIndex","indicesIndex","indexCount","textureWidth","total","lastIndex","lastPoint","nextPoint","perpX","perpY","vertices","perpLength","num","ComplexRope","Mesh","ropeGeometry","geometry","FixedWidthSimpleRopeGeometry","FixedWidthSimpleRope","UniformTextureStretchRopeGeometry","prevPoint","UniformTextureStretchRope","foldInterlacedRenderObjects","fCasing","fCement","fCementSqueeze","renderObject","defaultSchematicLayerOptions","_SchematicLayer","coords","component","referenceDiameter","symbolKey","maxHoleDiameter","holeObject","holeOptions","casingRenderObject","casingOptions","casingSolidColorNumber","casingLineColorNumber","section","outlineClosureType","casingEnd","casingRadius","shoeEdge","shoeTipPoint","shoeTipNormal","shoeTip","shouldRecalculate","internalLayerOptions","entryFound","keyFound","baseYSpan","baseDomain","tint","rope","MeshRope","lineColor","outlineClosure","lineAlignment","leftPathReverse","startPointRight","startPointLeft","windowOptions","flippedPaths","linePath","dashedPath","dashedAlignment","solidAlignment","startPointLinePath","dashedLine","startPointDashedPath","currentPoint","holeSizes","cements","symbols","pAndA","perforations","casingRenderObjects","cementShapes","cementSqueezes","remainingPAndA","squeezes","cementSqueezesShape","casingRO","cementRO","cementSqueezesRO","packings","spikes","perfShapesByDiameter","dict","ps","perfShapesWithSameDiameter","symbolRenderObject","existingKeys","promises","Assets","cementPlug","cementPlugOptions","cementPlugSegments","baseTexture","textureDiameter","sidePadding","cementRenderObject","zIndex","foundCementShape","foundCementSqueezes","shoeWidth","shoeLength","shoeCoords","shoeCoords2","cementOptions","cementSqueezeOptions","screenOptions","tubingOptions","SchematicLayer","SeismicCanvasLayer","image","pi","tau","tauEpsilon","append","strings","appendRound","digits","Path","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","da","withPath","shape","Linear","curveLinear","defined","curve","pointX","pointY","defined0","buffer","Basis","curveBasis","BasisClosed","curveBasisClosed","Bundle","beta","curveBundle","custom","bundle","Cardinal","curveCardinal","cardinal","CatmullRom","x23","y23","curveCatmullRom","catmullRom","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","px","controlPoints","py","curveNatural","Step","curveStep","stepBefore","stepAfter","CURVE_CATMULL_ROM_ALPHA","CURVE_CARDINAL_TENSION","CURVE_BUNDLE_BETA","WellborepathLayer","strokeWidth","stroke","transformedData","curveFactory","curveType","curveMonotoneX","curveMonotoneY","curveStepAfter","curveStepBefore","foldReferenceLine","refLine","ReferenceLineLayer","dashed","solid","wavy","waveHeight","wavePeriod","xOffset","textColor","textOffsetX","LayerManager","scaleOptions","axisOptions","layers","layer","rescaleEvent","highestZIndex","layersWidth","layersHeight","resizeEvent","irs","Overlay","caller","con","ops","mx","my","callbacks","newElm","el","overlay","Controller","dimensions"],"mappings":"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,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,kBAAgB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,qBAAmB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,oBAAkB,gBAAe,GAAE,CAAC,oBAAkB,gBAAe,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,kBAAgB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,gBAAe,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,qBAAmB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,kBAAgB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,kBAAgB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,kBAAgB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB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AiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,gBAAe,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,kBAAgB,gBAAe,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,gBAAe,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,CAAC,GAAE,CAAC,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,qBAAmB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,kBAAgB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,kBAAgB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,CAAC,GAAE,CAAC,CAAC,oBAAkB,mBAAkB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,oBAAkB,iBAAgB,GAAE,CAAC,GAAE,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,iBAAgB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,kBAAiB,GAAE,CAAC,mBAAiB,mBAAkB,CAAC,GAAE,CAAC,CAAC,oBAAkB,mBAAkB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,CAAC,oBAAkB,kBAAiB,GAAE,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,52,53,54,55,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196]}