hgg-3d-0.1.0.0: data/webgl-spec.js
/* Generated by Spago v0.93.45 */
(() => {
// output/Examples.WebGLPlot/foreign.js
function canvasDimsFFI(canvas) {
return function() {
var rect = canvas.getBoundingClientRect();
var w = canvas.width || rect.width;
var h = canvas.height || rect.height;
return { w, h };
};
}
function truncateFFI(n) {
return n | 0;
}
function _attachOrbitHandlers(canvas, handlers) {
var dragging = null;
var lastX = 0;
var lastY = 0;
canvas.addEventListener("contextmenu", function(e) {
e.preventDefault();
});
canvas.addEventListener("mousedown", function(e) {
e.preventDefault();
dragging = e.button === 2 ? "pan" : "rotate";
lastX = e.clientX;
lastY = e.clientY;
});
window.addEventListener("mouseup", function() {
dragging = null;
});
window.addEventListener("mousemove", function(e) {
if (!dragging) return;
var dx = e.clientX - lastX;
var dy = e.clientY - lastY;
lastX = e.clientX;
lastY = e.clientY;
if (dragging === "rotate") {
handlers.onRotate(-dx * 0.01, dy * 0.01);
} else {
handlers.onPan(-dx * 5e-3, dy * 5e-3);
}
});
canvas.addEventListener("wheel", function(e) {
e.preventDefault();
var factor = e.deltaY > 0 ? 1.1 : 1 / 1.1;
handlers.onZoom(factor);
}, { passive: false });
}
function exposeGlobal(renderFn) {
return function() {
if (typeof window !== "undefined") {
window.hggPlot = window.hggPlot || {};
window.hggPlot.renderFromSpec = function(canvasId, specJson) {
renderFn(canvasId, specJson);
};
}
};
}
// output/Data.Eq/foreign.js
var refEq = function(r1) {
return function(r2) {
return r1 === r2;
};
};
var eqIntImpl = refEq;
var eqNumberImpl = refEq;
var eqCharImpl = refEq;
// output/Data.Eq/index.js
var eqNumber = {
eq: eqNumberImpl
};
var eqInt = {
eq: eqIntImpl
};
var eqChar = {
eq: eqCharImpl
};
var eq = function(dict) {
return dict.eq;
};
// output/Data.Functor/foreign.js
var arrayMap = function(f) {
return function(arr) {
var l = arr.length;
var result = new Array(l);
for (var i = 0; i < l; i++) {
result[i] = f(arr[i]);
}
return result;
};
};
// output/Control.Semigroupoid/index.js
var semigroupoidFn = {
compose: function(f) {
return function(g) {
return function(x) {
return f(g(x));
};
};
}
};
// output/Control.Category/index.js
var identity = function(dict) {
return dict.identity;
};
var categoryFn = {
identity: function(x) {
return x;
},
Semigroupoid0: function() {
return semigroupoidFn;
}
};
// output/Data.Boolean/index.js
var otherwise = true;
// output/Data.Function/index.js
var flip = function(f) {
return function(b) {
return function(a) {
return f(a)(b);
};
};
};
var $$const = function(a) {
return function(v) {
return a;
};
};
var applyFlipped = function(x) {
return function(f) {
return f(x);
};
};
// output/Data.Unit/foreign.js
var unit = void 0;
// output/Data.Functor/index.js
var map = function(dict) {
return dict.map;
};
var $$void = function(dictFunctor) {
return map(dictFunctor)($$const(unit));
};
var functorArray = {
map: arrayMap
};
// output/Data.Semigroup/foreign.js
var concatArray = function(xs) {
return function(ys) {
if (xs.length === 0) return ys;
if (ys.length === 0) return xs;
return xs.concat(ys);
};
};
// output/Data.Semigroup/index.js
var semigroupArray = {
append: concatArray
};
var append = function(dict) {
return dict.append;
};
// output/Control.Apply/foreign.js
var arrayApply = function(fs) {
return function(xs) {
var l = fs.length;
var k = xs.length;
var result = new Array(l * k);
var n = 0;
for (var i = 0; i < l; i++) {
var f = fs[i];
for (var j = 0; j < k; j++) {
result[n++] = f(xs[j]);
}
}
return result;
};
};
// output/Control.Apply/index.js
var identity2 = /* @__PURE__ */ identity(categoryFn);
var applyArray = {
apply: arrayApply,
Functor0: function() {
return functorArray;
}
};
var apply = function(dict) {
return dict.apply;
};
var applySecond = function(dictApply) {
var apply1 = apply(dictApply);
var map12 = map(dictApply.Functor0());
return function(a) {
return function(b) {
return apply1(map12($$const(identity2))(a))(b);
};
};
};
// output/Control.Applicative/index.js
var pure = function(dict) {
return dict.pure;
};
var when = function(dictApplicative) {
var pure1 = pure(dictApplicative);
return function(v) {
return function(v1) {
if (v) {
return v1;
}
;
if (!v) {
return pure1(unit);
}
;
throw new Error("Failed pattern match at Control.Applicative (line 63, column 1 - line 63, column 63): " + [v.constructor.name, v1.constructor.name]);
};
};
};
var liftA1 = function(dictApplicative) {
var apply2 = apply(dictApplicative.Apply0());
var pure1 = pure(dictApplicative);
return function(f) {
return function(a) {
return apply2(pure1(f))(a);
};
};
};
// output/Data.Bounded/foreign.js
var topInt = 2147483647;
var bottomInt = -2147483648;
var topChar = String.fromCharCode(65535);
var bottomChar = String.fromCharCode(0);
var topNumber = Number.POSITIVE_INFINITY;
var bottomNumber = Number.NEGATIVE_INFINITY;
// output/Data.Ord/foreign.js
var unsafeCompareImpl = function(lt) {
return function(eq2) {
return function(gt) {
return function(x) {
return function(y) {
return x < y ? lt : x === y ? eq2 : gt;
};
};
};
};
};
var ordIntImpl = unsafeCompareImpl;
var ordNumberImpl = unsafeCompareImpl;
var ordCharImpl = unsafeCompareImpl;
// output/Data.Ordering/index.js
var LT = /* @__PURE__ */ (function() {
function LT2() {
}
;
LT2.value = new LT2();
return LT2;
})();
var GT = /* @__PURE__ */ (function() {
function GT2() {
}
;
GT2.value = new GT2();
return GT2;
})();
var EQ = /* @__PURE__ */ (function() {
function EQ2() {
}
;
EQ2.value = new EQ2();
return EQ2;
})();
var eqOrdering = {
eq: function(v) {
return function(v1) {
if (v instanceof LT && v1 instanceof LT) {
return true;
}
;
if (v instanceof GT && v1 instanceof GT) {
return true;
}
;
if (v instanceof EQ && v1 instanceof EQ) {
return true;
}
;
return false;
};
}
};
// output/Data.Ring/foreign.js
var intSub = function(x) {
return function(y) {
return x - y | 0;
};
};
// output/Data.Semiring/foreign.js
var intAdd = function(x) {
return function(y) {
return x + y | 0;
};
};
var intMul = function(x) {
return function(y) {
return x * y | 0;
};
};
// output/Data.Semiring/index.js
var semiringInt = {
add: intAdd,
zero: 0,
mul: intMul,
one: 1
};
// output/Data.Ring/index.js
var ringInt = {
sub: intSub,
Semiring0: function() {
return semiringInt;
}
};
// output/Data.Ord/index.js
var ordNumber = /* @__PURE__ */ (function() {
return {
compare: ordNumberImpl(LT.value)(EQ.value)(GT.value),
Eq0: function() {
return eqNumber;
}
};
})();
var ordInt = /* @__PURE__ */ (function() {
return {
compare: ordIntImpl(LT.value)(EQ.value)(GT.value),
Eq0: function() {
return eqInt;
}
};
})();
var ordChar = /* @__PURE__ */ (function() {
return {
compare: ordCharImpl(LT.value)(EQ.value)(GT.value),
Eq0: function() {
return eqChar;
}
};
})();
var compare = function(dict) {
return dict.compare;
};
var max = function(dictOrd) {
var compare3 = compare(dictOrd);
return function(x) {
return function(y) {
var v = compare3(x)(y);
if (v instanceof LT) {
return y;
}
;
if (v instanceof EQ) {
return x;
}
;
if (v instanceof GT) {
return x;
}
;
throw new Error("Failed pattern match at Data.Ord (line 181, column 3 - line 184, column 12): " + [v.constructor.name]);
};
};
};
var min = function(dictOrd) {
var compare3 = compare(dictOrd);
return function(x) {
return function(y) {
var v = compare3(x)(y);
if (v instanceof LT) {
return x;
}
;
if (v instanceof EQ) {
return x;
}
;
if (v instanceof GT) {
return y;
}
;
throw new Error("Failed pattern match at Data.Ord (line 172, column 3 - line 175, column 12): " + [v.constructor.name]);
};
};
};
// output/Data.Bounded/index.js
var top = function(dict) {
return dict.top;
};
var boundedInt = {
top: topInt,
bottom: bottomInt,
Ord0: function() {
return ordInt;
}
};
var boundedChar = {
top: topChar,
bottom: bottomChar,
Ord0: function() {
return ordChar;
}
};
var bottom = function(dict) {
return dict.bottom;
};
// output/Data.Show/foreign.js
var showIntImpl = function(n) {
return n.toString();
};
var showNumberImpl = function(n) {
var str = n.toString();
return isNaN(str + ".0") ? str : str + ".0";
};
var showStringImpl = function(s) {
var l = s.length;
return '"' + s.replace(
/[\0-\x1F\x7F"\\]/g,
// eslint-disable-line no-control-regex
function(c, i) {
switch (c) {
case '"':
case "\\":
return "\\" + c;
case "\x07":
return "\\a";
case "\b":
return "\\b";
case "\f":
return "\\f";
case "\n":
return "\\n";
case "\r":
return "\\r";
case " ":
return "\\t";
case "\v":
return "\\v";
}
var k = i + 1;
var empty4 = k < l && s[k] >= "0" && s[k] <= "9" ? "\\&" : "";
return "\\" + c.charCodeAt(0).toString(10) + empty4;
}
) + '"';
};
// output/Data.Show/index.js
var showString = {
show: showStringImpl
};
var showNumber = {
show: showNumberImpl
};
var showInt = {
show: showIntImpl
};
var show = function(dict) {
return dict.show;
};
// output/Data.Maybe/index.js
var identity3 = /* @__PURE__ */ identity(categoryFn);
var Nothing = /* @__PURE__ */ (function() {
function Nothing2() {
}
;
Nothing2.value = new Nothing2();
return Nothing2;
})();
var Just = /* @__PURE__ */ (function() {
function Just2(value0) {
this.value0 = value0;
}
;
Just2.create = function(value0) {
return new Just2(value0);
};
return Just2;
})();
var maybe = function(v) {
return function(v1) {
return function(v2) {
if (v2 instanceof Nothing) {
return v;
}
;
if (v2 instanceof Just) {
return v1(v2.value0);
}
;
throw new Error("Failed pattern match at Data.Maybe (line 237, column 1 - line 237, column 51): " + [v.constructor.name, v1.constructor.name, v2.constructor.name]);
};
};
};
var isNothing = /* @__PURE__ */ maybe(true)(/* @__PURE__ */ $$const(false));
var functorMaybe = {
map: function(v) {
return function(v1) {
if (v1 instanceof Just) {
return new Just(v(v1.value0));
}
;
return Nothing.value;
};
}
};
var map2 = /* @__PURE__ */ map(functorMaybe);
var fromMaybe = function(a) {
return maybe(a)(identity3);
};
var fromJust = function() {
return function(v) {
if (v instanceof Just) {
return v.value0;
}
;
throw new Error("Failed pattern match at Data.Maybe (line 288, column 1 - line 288, column 46): " + [v.constructor.name]);
};
};
var eqMaybe = function(dictEq) {
var eq2 = eq(dictEq);
return {
eq: function(x) {
return function(y) {
if (x instanceof Nothing && y instanceof Nothing) {
return true;
}
;
if (x instanceof Just && y instanceof Just) {
return eq2(x.value0)(y.value0);
}
;
return false;
};
}
};
};
var applyMaybe = {
apply: function(v) {
return function(v1) {
if (v instanceof Just) {
return map2(v.value0)(v1);
}
;
if (v instanceof Nothing) {
return Nothing.value;
}
;
throw new Error("Failed pattern match at Data.Maybe (line 67, column 1 - line 69, column 30): " + [v.constructor.name, v1.constructor.name]);
};
},
Functor0: function() {
return functorMaybe;
}
};
var bindMaybe = {
bind: function(v) {
return function(v1) {
if (v instanceof Just) {
return v1(v.value0);
}
;
if (v instanceof Nothing) {
return Nothing.value;
}
;
throw new Error("Failed pattern match at Data.Maybe (line 125, column 1 - line 127, column 28): " + [v.constructor.name, v1.constructor.name]);
};
},
Apply0: function() {
return applyMaybe;
}
};
// output/Data.Number/foreign.js
var isFiniteImpl = isFinite;
var ceil = Math.ceil;
var cos = Math.cos;
var floor = Math.floor;
var log = Math.log;
var pow = function(n) {
return function(p) {
return Math.pow(n, p);
};
};
var round = Math.round;
var sin = Math.sin;
var sqrt = Math.sqrt;
var tan = Math.tan;
// output/Data.Number/index.js
var pi = 3.141592653589793;
// output/Hgg.Plot.ThreeD/index.js
var Vec3 = /* @__PURE__ */ (function() {
function Vec32(value0, value1, value2) {
this.value0 = value0;
this.value1 = value1;
this.value2 = value2;
}
;
Vec32.create = function(value0) {
return function(value1) {
return function(value2) {
return new Vec32(value0, value1, value2);
};
};
};
return Vec32;
})();
var Orthographic = /* @__PURE__ */ (function() {
function Orthographic2(value0) {
this.value0 = value0;
}
;
Orthographic2.create = function(value0) {
return new Orthographic2(value0);
};
return Orthographic2;
})();
var Perspective = /* @__PURE__ */ (function() {
function Perspective2(value0) {
this.value0 = value0;
}
;
Perspective2.create = function(value0) {
return new Perspective2(value0);
};
return Perspective2;
})();
var Point3 = /* @__PURE__ */ (function() {
function Point32(value0, value1, value2) {
this.value0 = value0;
this.value1 = value1;
this.value2 = value2;
}
;
Point32.create = function(value0) {
return function(value1) {
return function(value2) {
return new Point32(value0, value1, value2);
};
};
};
return Point32;
})();
var Mat4 = /* @__PURE__ */ (function() {
function Mat42(value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15) {
this.value0 = value0;
this.value1 = value1;
this.value2 = value2;
this.value3 = value3;
this.value4 = value4;
this.value5 = value5;
this.value6 = value6;
this.value7 = value7;
this.value8 = value8;
this.value9 = value9;
this.value10 = value10;
this.value11 = value11;
this.value12 = value12;
this.value13 = value13;
this.value14 = value14;
this.value15 = value15;
}
;
Mat42.create = function(value0) {
return function(value1) {
return function(value2) {
return function(value3) {
return function(value4) {
return function(value5) {
return function(value6) {
return function(value7) {
return function(value8) {
return function(value9) {
return function(value10) {
return function(value11) {
return function(value12) {
return function(value13) {
return function(value14) {
return function(value15) {
return new Mat42(value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15);
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
return Mat42;
})();
var zUp = /* @__PURE__ */ (function() {
return new Vec3(0, 0, 1);
})();
var subV3 = function(v) {
return function(v1) {
return new Vec3(v.value0 - v1.value0, v.value1 - v1.value1, v.value2 - v1.value2);
};
};
var scaleV3 = function(s) {
return function(v) {
return new Vec3(s * v.value0, s * v.value1, s * v.value2);
};
};
var dotV3 = function(v) {
return function(v1) {
return v.value0 * v1.value0 + v.value1 * v1.value1 + v.value2 * v1.value2;
};
};
var lengthV3 = function(v) {
return sqrt(dotV3(v)(v));
};
var normalizeV3 = function(v) {
var l = lengthV3(v);
var $222 = l < 1e-12;
if ($222) {
return new Vec3(0, 0, 0);
}
;
return scaleV3(1 / l)(v);
};
var crossV3 = function(v) {
return function(v1) {
return new Vec3(v.value1 * v1.value2 - v.value2 * v1.value1, v.value2 * v1.value0 - v.value0 * v1.value2, v.value0 * v1.value1 - v.value1 * v1.value0);
};
};
// output/Data.Array/foreign.js
var rangeImpl = function(start, end) {
var step = start > end ? -1 : 1;
var result = new Array(step * (end - start) + 1);
var i = start, n = 0;
while (i !== end) {
result[n++] = i;
i += step;
}
result[n] = i;
return result;
};
var replicateFill = function(count, value) {
if (count < 1) {
return [];
}
var result = new Array(count);
return result.fill(value);
};
var replicatePolyfill = function(count, value) {
var result = [];
var n = 0;
for (var i = 0; i < count; i++) {
result[n++] = value;
}
return result;
};
var replicateImpl = typeof Array.prototype.fill === "function" ? replicateFill : replicatePolyfill;
var length = function(xs) {
return xs.length;
};
var unconsImpl = function(empty4, next, xs) {
return xs.length === 0 ? empty4({}) : next(xs[0])(xs.slice(1));
};
var indexImpl = function(just, nothing, xs, i) {
return i < 0 || i >= xs.length ? nothing : just(xs[i]);
};
var filterImpl = function(f, xs) {
return xs.filter(f);
};
var zipWithImpl = function(f, xs, ys) {
var l = xs.length < ys.length ? xs.length : ys.length;
var result = new Array(l);
for (var i = 0; i < l; i++) {
result[i] = f(xs[i])(ys[i]);
}
return result;
};
// output/Control.Bind/foreign.js
var arrayBind = typeof Array.prototype.flatMap === "function" ? function(arr) {
return function(f) {
return arr.flatMap(f);
};
} : function(arr) {
return function(f) {
var result = [];
var l = arr.length;
for (var i = 0; i < l; i++) {
var xs = f(arr[i]);
var k = xs.length;
for (var j = 0; j < k; j++) {
result.push(xs[j]);
}
}
return result;
};
};
// output/Control.Bind/index.js
var bindArray = {
bind: arrayBind,
Apply0: function() {
return applyArray;
}
};
var bind = function(dict) {
return dict.bind;
};
var bindFlipped = function(dictBind) {
return flip(bind(dictBind));
};
var composeKleisliFlipped = function(dictBind) {
var bindFlipped1 = bindFlipped(dictBind);
return function(f) {
return function(g) {
return function(a) {
return bindFlipped1(f)(g(a));
};
};
};
};
// output/Control.Monad/index.js
var ap = function(dictMonad) {
var bind4 = bind(dictMonad.Bind1());
var pure5 = pure(dictMonad.Applicative0());
return function(f) {
return function(a) {
return bind4(f)(function(f$prime) {
return bind4(a)(function(a$prime) {
return pure5(f$prime(a$prime));
});
});
};
};
};
// output/Data.Either/index.js
var Left = /* @__PURE__ */ (function() {
function Left2(value0) {
this.value0 = value0;
}
;
Left2.create = function(value0) {
return new Left2(value0);
};
return Left2;
})();
var Right = /* @__PURE__ */ (function() {
function Right2(value0) {
this.value0 = value0;
}
;
Right2.create = function(value0) {
return new Right2(value0);
};
return Right2;
})();
var note = function(a) {
return maybe(new Left(a))(Right.create);
};
var functorEither = {
map: function(f) {
return function(m) {
if (m instanceof Left) {
return new Left(m.value0);
}
;
if (m instanceof Right) {
return new Right(f(m.value0));
}
;
throw new Error("Failed pattern match at Data.Either (line 0, column 0 - line 0, column 0): " + [m.constructor.name]);
};
}
};
var map3 = /* @__PURE__ */ map(functorEither);
var either = function(v) {
return function(v1) {
return function(v2) {
if (v2 instanceof Left) {
return v(v2.value0);
}
;
if (v2 instanceof Right) {
return v1(v2.value0);
}
;
throw new Error("Failed pattern match at Data.Either (line 208, column 1 - line 208, column 64): " + [v.constructor.name, v1.constructor.name, v2.constructor.name]);
};
};
};
var applyEither = {
apply: function(v) {
return function(v1) {
if (v instanceof Left) {
return new Left(v.value0);
}
;
if (v instanceof Right) {
return map3(v.value0)(v1);
}
;
throw new Error("Failed pattern match at Data.Either (line 70, column 1 - line 72, column 30): " + [v.constructor.name, v1.constructor.name]);
};
},
Functor0: function() {
return functorEither;
}
};
var bindEither = {
bind: /* @__PURE__ */ either(function(e) {
return function(v) {
return new Left(e);
};
})(function(a) {
return function(f) {
return f(a);
};
}),
Apply0: function() {
return applyEither;
}
};
var applicativeEither = /* @__PURE__ */ (function() {
return {
pure: Right.create,
Apply0: function() {
return applyEither;
}
};
})();
// output/Data.EuclideanRing/foreign.js
var intDegree = function(x) {
return Math.min(Math.abs(x), 2147483647);
};
var intDiv = function(x) {
return function(y) {
if (y === 0) return 0;
return y > 0 ? Math.floor(x / y) : -Math.floor(x / -y);
};
};
var intMod = function(x) {
return function(y) {
if (y === 0) return 0;
var yy = Math.abs(y);
return (x % yy + yy) % yy;
};
};
// output/Data.CommutativeRing/index.js
var commutativeRingInt = {
Ring0: function() {
return ringInt;
}
};
// output/Data.EuclideanRing/index.js
var euclideanRingInt = {
degree: intDegree,
div: intDiv,
mod: intMod,
CommutativeRing0: function() {
return commutativeRingInt;
}
};
var div = function(dict) {
return dict.div;
};
// output/Data.Monoid/index.js
var mempty = function(dict) {
return dict.mempty;
};
// output/Effect/foreign.js
var pureE = function(a) {
return function() {
return a;
};
};
var bindE = function(a) {
return function(f) {
return function() {
return f(a())();
};
};
};
// output/Effect/index.js
var $runtime_lazy = function(name, moduleName, init3) {
var state = 0;
var val;
return function(lineNumber) {
if (state === 2) return val;
if (state === 1) throw new ReferenceError(name + " was needed before it finished initializing (module " + moduleName + ", line " + lineNumber + ")", moduleName, lineNumber);
state = 1;
val = init3();
state = 2;
return val;
};
};
var monadEffect = {
Applicative0: function() {
return applicativeEffect;
},
Bind1: function() {
return bindEffect;
}
};
var bindEffect = {
bind: bindE,
Apply0: function() {
return $lazy_applyEffect(0);
}
};
var applicativeEffect = {
pure: pureE,
Apply0: function() {
return $lazy_applyEffect(0);
}
};
var $lazy_functorEffect = /* @__PURE__ */ $runtime_lazy("functorEffect", "Effect", function() {
return {
map: liftA1(applicativeEffect)
};
});
var $lazy_applyEffect = /* @__PURE__ */ $runtime_lazy("applyEffect", "Effect", function() {
return {
apply: ap(monadEffect),
Functor0: function() {
return $lazy_functorEffect(0);
}
};
});
var functorEffect = /* @__PURE__ */ $lazy_functorEffect(20);
// output/Effect.Ref/foreign.js
var _new = function(val) {
return function() {
return { value: val };
};
};
var read = function(ref) {
return function() {
return ref.value;
};
};
var modifyImpl = function(f) {
return function(ref) {
return function() {
var t = f(ref.value);
ref.value = t.state;
return t.value;
};
};
};
// output/Effect.Ref/index.js
var $$void2 = /* @__PURE__ */ $$void(functorEffect);
var $$new = _new;
var modify$prime = modifyImpl;
var modify = function(f) {
return modify$prime(function(s) {
var s$prime = f(s);
return {
state: s$prime,
value: s$prime
};
});
};
var modify_ = function(f) {
return function(s) {
return $$void2(modify(f)(s));
};
};
// output/Data.Foldable/foreign.js
var foldrArray = function(f) {
return function(init3) {
return function(xs) {
var acc = init3;
var len = xs.length;
for (var i = len - 1; i >= 0; i--) {
acc = f(xs[i])(acc);
}
return acc;
};
};
};
var foldlArray = function(f) {
return function(init3) {
return function(xs) {
var acc = init3;
var len = xs.length;
for (var i = 0; i < len; i++) {
acc = f(acc)(xs[i]);
}
return acc;
};
};
};
// output/Data.Tuple/index.js
var Tuple = /* @__PURE__ */ (function() {
function Tuple2(value0, value1) {
this.value0 = value0;
this.value1 = value1;
}
;
Tuple2.create = function(value0) {
return function(value1) {
return new Tuple2(value0, value1);
};
};
return Tuple2;
})();
var uncurry = function(f) {
return function(v) {
return f(v.value0)(v.value1);
};
};
var snd = function(v) {
return v.value1;
};
var fst = function(v) {
return v.value0;
};
// output/Data.Bifunctor/index.js
var identity4 = /* @__PURE__ */ identity(categoryFn);
var bimap = function(dict) {
return dict.bimap;
};
var lmap = function(dictBifunctor) {
var bimap1 = bimap(dictBifunctor);
return function(f) {
return bimap1(f)(identity4);
};
};
var bifunctorEither = {
bimap: function(v) {
return function(v1) {
return function(v2) {
if (v2 instanceof Left) {
return new Left(v(v2.value0));
}
;
if (v2 instanceof Right) {
return new Right(v1(v2.value0));
}
;
throw new Error("Failed pattern match at Data.Bifunctor (line 38, column 1 - line 40, column 36): " + [v.constructor.name, v1.constructor.name, v2.constructor.name]);
};
};
}
};
// output/Data.Foldable/index.js
var eq12 = /* @__PURE__ */ eq(eqOrdering);
var foldr = function(dict) {
return dict.foldr;
};
var traverse_ = function(dictApplicative) {
var applySecond2 = applySecond(dictApplicative.Apply0());
var pure5 = pure(dictApplicative);
return function(dictFoldable) {
var foldr22 = foldr(dictFoldable);
return function(f) {
return foldr22(function($454) {
return applySecond2(f($454));
})(pure5(unit));
};
};
};
var for_ = function(dictApplicative) {
var traverse_1 = traverse_(dictApplicative);
return function(dictFoldable) {
return flip(traverse_1(dictFoldable));
};
};
var foldl = function(dict) {
return dict.foldl;
};
var maximumBy = function(dictFoldable) {
var foldl22 = foldl(dictFoldable);
return function(cmp) {
var max$prime = function(v) {
return function(v1) {
if (v instanceof Nothing) {
return new Just(v1);
}
;
if (v instanceof Just) {
return new Just((function() {
var $303 = eq12(cmp(v.value0)(v1))(GT.value);
if ($303) {
return v.value0;
}
;
return v1;
})());
}
;
throw new Error("Failed pattern match at Data.Foldable (line 441, column 3 - line 441, column 27): " + [v.constructor.name, v1.constructor.name]);
};
};
return foldl22(max$prime)(Nothing.value);
};
};
var maximum = function(dictOrd) {
var compare2 = compare(dictOrd);
return function(dictFoldable) {
return maximumBy(dictFoldable)(compare2);
};
};
var minimumBy = function(dictFoldable) {
var foldl22 = foldl(dictFoldable);
return function(cmp) {
var min$prime = function(v) {
return function(v1) {
if (v instanceof Nothing) {
return new Just(v1);
}
;
if (v instanceof Just) {
return new Just((function() {
var $307 = eq12(cmp(v.value0)(v1))(LT.value);
if ($307) {
return v.value0;
}
;
return v1;
})());
}
;
throw new Error("Failed pattern match at Data.Foldable (line 454, column 3 - line 454, column 27): " + [v.constructor.name, v1.constructor.name]);
};
};
return foldl22(min$prime)(Nothing.value);
};
};
var minimum = function(dictOrd) {
var compare2 = compare(dictOrd);
return function(dictFoldable) {
return minimumBy(dictFoldable)(compare2);
};
};
var foldMapDefaultR = function(dictFoldable) {
var foldr22 = foldr(dictFoldable);
return function(dictMonoid) {
var append5 = append(dictMonoid.Semigroup0());
var mempty2 = mempty(dictMonoid);
return function(f) {
return foldr22(function(x) {
return function(acc) {
return append5(f(x))(acc);
};
})(mempty2);
};
};
};
var foldableArray = {
foldr: foldrArray,
foldl: foldlArray,
foldMap: function(dictMonoid) {
return foldMapDefaultR(foldableArray)(dictMonoid);
}
};
// output/Data.Function.Uncurried/foreign.js
var runFn2 = function(fn) {
return function(a) {
return function(b) {
return fn(a, b);
};
};
};
var runFn3 = function(fn) {
return function(a) {
return function(b) {
return function(c) {
return fn(a, b, c);
};
};
};
};
var runFn4 = function(fn) {
return function(a) {
return function(b) {
return function(c) {
return function(d) {
return fn(a, b, c, d);
};
};
};
};
};
// output/Data.FunctorWithIndex/foreign.js
var mapWithIndexArray = function(f) {
return function(xs) {
var l = xs.length;
var result = Array(l);
for (var i = 0; i < l; i++) {
result[i] = f(i)(xs[i]);
}
return result;
};
};
// output/Data.FunctorWithIndex/index.js
var mapWithIndex = function(dict) {
return dict.mapWithIndex;
};
var functorWithIndexArray = {
mapWithIndex: mapWithIndexArray,
Functor0: function() {
return functorArray;
}
};
// output/Data.Traversable/foreign.js
var traverseArrayImpl = /* @__PURE__ */ (function() {
function array1(a) {
return [a];
}
function array2(a) {
return function(b) {
return [a, b];
};
}
function array3(a) {
return function(b) {
return function(c) {
return [a, b, c];
};
};
}
function concat2(xs) {
return function(ys) {
return xs.concat(ys);
};
}
return function(apply2) {
return function(map12) {
return function(pure5) {
return function(f) {
return function(array) {
function go(bot, top3) {
switch (top3 - bot) {
case 0:
return pure5([]);
case 1:
return map12(array1)(f(array[bot]));
case 2:
return apply2(map12(array2)(f(array[bot])))(f(array[bot + 1]));
case 3:
return apply2(apply2(map12(array3)(f(array[bot])))(f(array[bot + 1])))(f(array[bot + 2]));
default:
var pivot = bot + Math.floor((top3 - bot) / 4) * 2;
return apply2(map12(concat2)(go(bot, pivot)))(go(pivot, top3));
}
}
return go(0, array.length);
};
};
};
};
};
})();
// output/Data.Traversable/index.js
var identity5 = /* @__PURE__ */ identity(categoryFn);
var traverse = function(dict) {
return dict.traverse;
};
var sequenceDefault = function(dictTraversable) {
var traverse22 = traverse(dictTraversable);
return function(dictApplicative) {
return traverse22(dictApplicative)(identity5);
};
};
var traversableArray = {
traverse: function(dictApplicative) {
var Apply0 = dictApplicative.Apply0();
return traverseArrayImpl(apply(Apply0))(map(Apply0.Functor0()))(pure(dictApplicative));
},
sequence: function(dictApplicative) {
return sequenceDefault(traversableArray)(dictApplicative);
},
Functor0: function() {
return functorArray;
},
Foldable1: function() {
return foldableArray;
}
};
var sequence = function(dict) {
return dict.sequence;
};
// output/Data.Unfoldable/foreign.js
var unfoldrArrayImpl = function(isNothing2) {
return function(fromJust4) {
return function(fst2) {
return function(snd2) {
return function(f) {
return function(b) {
var result = [];
var value = b;
while (true) {
var maybe2 = f(value);
if (isNothing2(maybe2)) return result;
var tuple = fromJust4(maybe2);
result.push(fst2(tuple));
value = snd2(tuple);
}
};
};
};
};
};
};
// output/Data.Unfoldable1/foreign.js
var unfoldr1ArrayImpl = function(isNothing2) {
return function(fromJust4) {
return function(fst2) {
return function(snd2) {
return function(f) {
return function(b) {
var result = [];
var value = b;
while (true) {
var tuple = f(value);
result.push(fst2(tuple));
var maybe2 = snd2(tuple);
if (isNothing2(maybe2)) return result;
value = fromJust4(maybe2);
}
};
};
};
};
};
};
// output/Data.Unfoldable1/index.js
var fromJust2 = /* @__PURE__ */ fromJust();
var unfoldable1Array = {
unfoldr1: /* @__PURE__ */ unfoldr1ArrayImpl(isNothing)(fromJust2)(fst)(snd)
};
// output/Data.Unfoldable/index.js
var fromJust3 = /* @__PURE__ */ fromJust();
var unfoldr = function(dict) {
return dict.unfoldr;
};
var unfoldableArray = {
unfoldr: /* @__PURE__ */ unfoldrArrayImpl(isNothing)(fromJust3)(fst)(snd),
Unfoldable10: function() {
return unfoldable1Array;
}
};
// output/Data.Array/index.js
var zipWith = /* @__PURE__ */ runFn3(zipWithImpl);
var zip = /* @__PURE__ */ (function() {
return zipWith(Tuple.create);
})();
var uncons = /* @__PURE__ */ (function() {
return runFn3(unconsImpl)($$const(Nothing.value))(function(x) {
return function(xs) {
return new Just({
head: x,
tail: xs
});
};
});
})();
var singleton2 = function(a) {
return [a];
};
var replicate = /* @__PURE__ */ runFn2(replicateImpl);
var range2 = /* @__PURE__ */ runFn2(rangeImpl);
var mapWithIndex2 = /* @__PURE__ */ mapWithIndex(functorWithIndexArray);
var index = /* @__PURE__ */ (function() {
return runFn4(indexImpl)(Just.create)(Nothing.value);
})();
var filter = /* @__PURE__ */ runFn2(filterImpl);
var concatMap = /* @__PURE__ */ flip(/* @__PURE__ */ bind(bindArray));
var mapMaybe = function(f) {
return concatMap((function() {
var $189 = maybe([])(singleton2);
return function($190) {
return $189(f($190));
};
})());
};
// output/Data.Int/foreign.js
var fromNumberImpl = function(just) {
return function(nothing) {
return function(n) {
return (n | 0) === n ? just(n) : nothing;
};
};
};
var toNumber = function(n) {
return n;
};
var fromStringAsImpl = function(just) {
return function(nothing) {
return function(radix) {
var digits;
if (radix < 11) {
digits = "[0-" + (radix - 1).toString() + "]";
} else if (radix === 11) {
digits = "[0-9a]";
} else {
digits = "[0-9a-" + String.fromCharCode(86 + radix) + "]";
}
var pattern = new RegExp("^[\\+\\-]?" + digits + "+$", "i");
return function(s) {
if (pattern.test(s)) {
var i = parseInt(s, radix);
return (i | 0) === i ? just(i) : nothing;
} else {
return nothing;
}
};
};
};
};
// output/Data.Int/index.js
var top2 = /* @__PURE__ */ top(boundedInt);
var bottom2 = /* @__PURE__ */ bottom(boundedInt);
var hexadecimal = 16;
var fromStringAs = /* @__PURE__ */ (function() {
return fromStringAsImpl(Just.create)(Nothing.value);
})();
var fromNumber = /* @__PURE__ */ (function() {
return fromNumberImpl(Just.create)(Nothing.value);
})();
var unsafeClamp = function(x) {
if (!isFiniteImpl(x)) {
return 0;
}
;
if (x >= toNumber(top2)) {
return top2;
}
;
if (x <= toNumber(bottom2)) {
return bottom2;
}
;
if (otherwise) {
return fromMaybe(0)(fromNumber(x));
}
;
throw new Error("Failed pattern match at Data.Int (line 72, column 1 - line 72, column 29): " + [x.constructor.name]);
};
var round2 = function($37) {
return unsafeClamp(round($37));
};
var floor2 = function($39) {
return unsafeClamp(floor($39));
};
var ceil2 = function($40) {
return unsafeClamp(ceil($40));
};
// output/Data.Number.Format/foreign.js
function wrap(method) {
return function(d) {
return function(num) {
return method.apply(num, [d]);
};
};
}
var toPrecisionNative = wrap(Number.prototype.toPrecision);
var toFixedNative = wrap(Number.prototype.toFixed);
var toExponentialNative = wrap(Number.prototype.toExponential);
// output/Hgg.Plot.Backend.WebGL.Axes/index.js
var axesBoxEdges = function(v) {
var p111 = new Point3(v.xMax, v.yMax, v.zMax);
var p110 = new Point3(v.xMax, v.yMax, v.zMin);
var p101 = new Point3(v.xMax, v.yMin, v.zMax);
var p100 = new Point3(v.xMax, v.yMin, v.zMin);
var p011 = new Point3(v.xMin, v.yMax, v.zMax);
var p010 = new Point3(v.xMin, v.yMax, v.zMin);
var p001 = new Point3(v.xMin, v.yMin, v.zMax);
var p000 = new Point3(v.xMin, v.yMin, v.zMin);
return [p000, p100, p100, p110, p110, p010, p010, p000, p001, p101, p101, p111, p111, p011, p011, p001, p000, p001, p100, p101, p110, p111, p010, p011];
};
// output/Hgg.Plot.Backend.WebGL.Raw/foreign.js
function _toMaybe(n) {
if (n === null || n === void 0) return { isNull: true, value: null };
return { isNull: false, value: n };
}
function _canvasById(id2) {
var el = document.getElementById(id2);
if (el && el.tagName === "CANVAS") return el;
return null;
}
function _getWebGL2Context(canvas) {
return canvas.getContext("webgl2");
}
function _createShader(gl, type, src) {
var sh = gl.createShader(type);
if (!sh) return null;
gl.shaderSource(sh, src);
gl.compileShader(sh);
if (!gl.getShaderParameter(sh, gl.COMPILE_STATUS)) {
var log5 = gl.getShaderInfoLog(sh);
console.error("[hgg WebGL] shader compile error:\n" + log5 + "\n--- source ---\n" + src);
gl.deleteShader(sh);
return null;
}
return sh;
}
function _createProgram(gl, vs, fs) {
var p = gl.createProgram();
if (!p) return null;
gl.attachShader(p, vs);
gl.attachShader(p, fs);
gl.linkProgram(p);
if (!gl.getProgramParameter(p, gl.LINK_STATUS)) {
var log5 = gl.getProgramInfoLog(p);
console.error("[hgg WebGL] program link error:\n" + log5);
gl.deleteProgram(p);
return null;
}
return p;
}
function _useProgram(gl, p) {
gl.useProgram(p);
}
function _getUniformLocation(gl, p, name) {
var loc = gl.getUniformLocation(p, name);
return loc;
}
function _createBuffer(gl) {
return gl.createBuffer();
}
function _bindArrayBuffer(gl, buf) {
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
}
function _bufferDataFloat32(gl, arr) {
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(arr), gl.STATIC_DRAW);
}
function _vertexAttribPointerFloat(gl, loc, size3, stride, offset) {
gl.vertexAttribPointer(loc, size3, gl.FLOAT, false, stride, offset);
}
function _enableVertexAttribArray(gl, loc) {
gl.enableVertexAttribArray(loc);
}
function _getAttribLocation(gl, p, name) {
return gl.getAttribLocation(p, name);
}
function _uniformMatrix4fv(gl, loc, arr) {
gl.uniformMatrix4fv(loc, false, new Float32Array(arr));
}
function _uniform1f(gl, loc, v) {
gl.uniform1f(loc, v);
}
function _uniform3f(gl, loc, a, b, c) {
gl.uniform3f(loc, a, b, c);
}
function _uniform4f(gl, loc, a, b, c, d) {
gl.uniform4f(loc, a, b, c, d);
}
function _clearColor(gl, r, g, b, a) {
gl.clearColor(r, g, b, a);
}
function _clear(gl, mask) {
gl.clear(mask);
}
function _drawArrays(gl, mode, first, count) {
gl.drawArrays(mode, first, count);
}
function _viewport(gl, x, y, w, h) {
gl.viewport(x, y, w, h);
}
function _enableBlend(gl) {
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
}
function _enableDepthTest(gl) {
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.LEQUAL);
}
function _depthMask(gl, flag) {
gl.depthMask(flag);
}
// output/Effect.Uncurried/foreign.js
var mkEffectFn2 = function mkEffectFn22(fn) {
return function(a, b) {
return fn(a)(b)();
};
};
var runEffectFn1 = function runEffectFn12(fn) {
return function(a) {
return function() {
return fn(a);
};
};
};
var runEffectFn2 = function runEffectFn22(fn) {
return function(a) {
return function(b) {
return function() {
return fn(a, b);
};
};
};
};
var runEffectFn3 = function runEffectFn32(fn) {
return function(a) {
return function(b) {
return function(c) {
return function() {
return fn(a, b, c);
};
};
};
};
};
var runEffectFn4 = function runEffectFn42(fn) {
return function(a) {
return function(b) {
return function(c) {
return function(d) {
return function() {
return fn(a, b, c, d);
};
};
};
};
};
};
var runEffectFn5 = function runEffectFn52(fn) {
return function(a) {
return function(b) {
return function(c) {
return function(d) {
return function(e) {
return function() {
return fn(a, b, c, d, e);
};
};
};
};
};
};
};
var runEffectFn6 = function runEffectFn62(fn) {
return function(a) {
return function(b) {
return function(c) {
return function(d) {
return function(e) {
return function(f) {
return function() {
return fn(a, b, c, d, e, f);
};
};
};
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Raw/index.js
var map4 = /* @__PURE__ */ map(functorEffect);
var viewport = /* @__PURE__ */ runEffectFn5(_viewport);
var vertexAttribPointerFloat = /* @__PURE__ */ runEffectFn5(_vertexAttribPointerFloat);
var useProgram = /* @__PURE__ */ runEffectFn2(_useProgram);
var uniformMatrix4fv = /* @__PURE__ */ runEffectFn3(_uniformMatrix4fv);
var uniform4f = /* @__PURE__ */ runEffectFn6(_uniform4f);
var uniform3f = /* @__PURE__ */ runEffectFn5(_uniform3f);
var uniform1f = /* @__PURE__ */ runEffectFn3(_uniform1f);
var toMaybe = function(n) {
var v = _toMaybe(n);
if (v.isNull) {
return Nothing.value;
}
;
return new Just(v.value);
};
var glVERTEX_SHADER = 35633;
var glTRIANGLES = 4;
var glPOINTS = 0;
var glLINE_STRIP = 3;
var glLINES = 1;
var glFRAGMENT_SHADER = 35632;
var glDEPTH_BUFFER_BIT = 256;
var glCOLOR_BUFFER_BIT = 16384;
var getWebGL2Context = function(c) {
return map4(toMaybe)(function() {
return _getWebGL2Context(c);
});
};
var getUniformLocation = function(ctx) {
return function(p) {
return function(name) {
return map4(toMaybe)(function() {
return _getUniformLocation(ctx, p, name);
});
};
};
};
var getAttribLocation = /* @__PURE__ */ runEffectFn3(_getAttribLocation);
var enableVertexAttribArray = /* @__PURE__ */ runEffectFn2(_enableVertexAttribArray);
var enableDepthTest = /* @__PURE__ */ runEffectFn1(_enableDepthTest);
var enableBlend = /* @__PURE__ */ runEffectFn1(_enableBlend);
var drawArrays = /* @__PURE__ */ runEffectFn4(_drawArrays);
var depthMask = /* @__PURE__ */ runEffectFn2(_depthMask);
var createShader = function(ctx) {
return function(ty) {
return function(src) {
return map4(toMaybe)(function() {
return _createShader(ctx, ty, src);
});
};
};
};
var createProgram = function(ctx) {
return function(vs) {
return function(fs) {
return map4(toMaybe)(function() {
return _createProgram(ctx, vs, fs);
});
};
};
};
var createBuffer = /* @__PURE__ */ runEffectFn1(_createBuffer);
var clearColor = /* @__PURE__ */ runEffectFn5(_clearColor);
var clear = /* @__PURE__ */ runEffectFn2(_clear);
var canvasById = function(s) {
return map4(toMaybe)(function() {
return _canvasById(s);
});
};
var bufferDataFloat32 = /* @__PURE__ */ runEffectFn2(_bufferDataFloat32);
var bindArrayBuffer = /* @__PURE__ */ runEffectFn2(_bindArrayBuffer);
// output/Data.String.CodePoints/foreign.js
var hasArrayFrom = typeof Array.from === "function";
var hasStringIterator = typeof Symbol !== "undefined" && Symbol != null && typeof Symbol.iterator !== "undefined" && typeof String.prototype[Symbol.iterator] === "function";
var hasFromCodePoint = typeof String.prototype.fromCodePoint === "function";
var hasCodePointAt = typeof String.prototype.codePointAt === "function";
var _unsafeCodePointAt0 = function(fallback) {
return hasCodePointAt ? function(str) {
return str.codePointAt(0);
} : fallback;
};
var _toCodePointArray = function(fallback) {
return function(unsafeCodePointAt02) {
if (hasArrayFrom) {
return function(str) {
return Array.from(str, unsafeCodePointAt02);
};
}
return fallback;
};
};
// output/Data.Enum/foreign.js
function toCharCode(c) {
return c.charCodeAt(0);
}
function fromCharCode(c) {
return String.fromCharCode(c);
}
// output/Data.Enum/index.js
var bottom1 = /* @__PURE__ */ bottom(boundedChar);
var top1 = /* @__PURE__ */ top(boundedChar);
var fromEnum = function(dict) {
return dict.fromEnum;
};
var defaultSucc = function(toEnum$prime) {
return function(fromEnum$prime) {
return function(a) {
return toEnum$prime(fromEnum$prime(a) + 1 | 0);
};
};
};
var defaultPred = function(toEnum$prime) {
return function(fromEnum$prime) {
return function(a) {
return toEnum$prime(fromEnum$prime(a) - 1 | 0);
};
};
};
var charToEnum = function(v) {
if (v >= toCharCode(bottom1) && v <= toCharCode(top1)) {
return new Just(fromCharCode(v));
}
;
return Nothing.value;
};
var enumChar = {
succ: /* @__PURE__ */ defaultSucc(charToEnum)(toCharCode),
pred: /* @__PURE__ */ defaultPred(charToEnum)(toCharCode),
Ord0: function() {
return ordChar;
}
};
var boundedEnumChar = /* @__PURE__ */ (function() {
return {
cardinality: toCharCode(top1) - toCharCode(bottom1) | 0,
toEnum: charToEnum,
fromEnum: toCharCode,
Bounded0: function() {
return boundedChar;
},
Enum1: function() {
return enumChar;
}
};
})();
// output/Data.String.CodeUnits/foreign.js
var length2 = function(s) {
return s.length;
};
var take = function(n) {
return function(s) {
return s.substr(0, n);
};
};
var drop = function(n) {
return function(s) {
return s.substring(n);
};
};
// output/Data.String.Unsafe/foreign.js
var charAt = function(i) {
return function(s) {
if (i >= 0 && i < s.length) return s.charAt(i);
throw new Error("Data.String.Unsafe.charAt: Invalid index.");
};
};
// output/Data.String.CodePoints/index.js
var fromEnum2 = /* @__PURE__ */ fromEnum(boundedEnumChar);
var map5 = /* @__PURE__ */ map(functorMaybe);
var unfoldr2 = /* @__PURE__ */ unfoldr(unfoldableArray);
var unsurrogate = function(lead) {
return function(trail) {
return (((lead - 55296 | 0) * 1024 | 0) + (trail - 56320 | 0) | 0) + 65536 | 0;
};
};
var isTrail = function(cu) {
return 56320 <= cu && cu <= 57343;
};
var isLead = function(cu) {
return 55296 <= cu && cu <= 56319;
};
var uncons2 = function(s) {
var v = length2(s);
if (v === 0) {
return Nothing.value;
}
;
if (v === 1) {
return new Just({
head: fromEnum2(charAt(0)(s)),
tail: ""
});
}
;
var cu1 = fromEnum2(charAt(1)(s));
var cu0 = fromEnum2(charAt(0)(s));
var $43 = isLead(cu0) && isTrail(cu1);
if ($43) {
return new Just({
head: unsurrogate(cu0)(cu1),
tail: drop(2)(s)
});
}
;
return new Just({
head: cu0,
tail: drop(1)(s)
});
};
var unconsButWithTuple = function(s) {
return map5(function(v) {
return new Tuple(v.head, v.tail);
})(uncons2(s));
};
var toCodePointArrayFallback = function(s) {
return unfoldr2(unconsButWithTuple)(s);
};
var unsafeCodePointAt0Fallback = function(s) {
var cu0 = fromEnum2(charAt(0)(s));
var $47 = isLead(cu0) && length2(s) > 1;
if ($47) {
var cu1 = fromEnum2(charAt(1)(s));
var $48 = isTrail(cu1);
if ($48) {
return unsurrogate(cu0)(cu1);
}
;
return cu0;
}
;
return cu0;
};
var unsafeCodePointAt0 = /* @__PURE__ */ _unsafeCodePointAt0(unsafeCodePointAt0Fallback);
var toCodePointArray = /* @__PURE__ */ _toCodePointArray(toCodePointArrayFallback)(unsafeCodePointAt0);
var length3 = function($74) {
return length(toCodePointArray($74));
};
// output/Hgg.Plot.Backend.WebGL.Common/index.js
var uploadAttribVec3 = function(ctx) {
return function(buf) {
return function(loc) {
return function(arr) {
return function __do() {
bindArrayBuffer(ctx)(buf)();
bufferDataFloat32(ctx)(arr)();
enableVertexAttribArray(ctx)(loc)();
return vertexAttribPointerFloat(ctx)(loc)(3)(0)(0)();
};
};
};
};
};
var uploadAttrib1 = function(ctx) {
return function(buf) {
return function(loc) {
return function(arr) {
return function __do() {
bindArrayBuffer(ctx)(buf)();
bufferDataFloat32(ctx)(arr)();
enableVertexAttribArray(ctx)(loc)();
return vertexAttribPointerFloat(ctx)(loc)(1)(0)(0)();
};
};
};
};
};
var parseHexColor = function(s) {
var toF = function(x) {
return toNumber(x) / 255;
};
var body = (function() {
var $5 = take(1)(s) === "#";
if ($5) {
return drop(1)(s);
}
;
return s;
})();
var n = length3(body);
var parseByte = function(i) {
return fromMaybe(0)(fromStringAs(hexadecimal)(take(2)(drop(i)(body))));
};
if (n === 6) {
return {
r: toF(parseByte(0)),
g: toF(parseByte(2)),
b: toF(parseByte(4)),
a: 1
};
}
;
if (n === 8) {
return {
r: toF(parseByte(0)),
g: toF(parseByte(2)),
b: toF(parseByte(4)),
a: toF(parseByte(6))
};
}
;
return {
r: 0,
g: 0,
b: 0,
a: 1
};
};
var flattenPoints3 = /* @__PURE__ */ concatMap(function(v) {
return [v.value0, v.value1, v.value2];
});
// output/Hgg.Plot.Backend.WebGL.Context/index.js
var translateMat4 = function(x) {
return function(y) {
return function(z) {
return new Mat4(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);
};
};
};
var scaleMat4 = function(x) {
return function(y) {
return function(z) {
return new Mat4(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);
};
};
};
var perspectiveMat4 = function(fov) {
return function(aspect) {
return function(near) {
return function(far) {
var nf = 1 / (near - far);
var f = 1 / tan(fov / 2);
return new Mat4(f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, (far + near) * nf, 2 * far * near * nf, 0, 0, -1, 0);
};
};
};
};
var orthographicMat4 = function(xHalf) {
return function(yHalf) {
return function(near) {
return function(far) {
var fn = far - near;
return new Mat4(1 / xHalf, 0, 0, 0, 0, 1 / yHalf, 0, 0, 0, 0, -2 / fn, -(far + near) / fn, 0, 0, 0, 1);
};
};
};
};
var multMat4 = function(v) {
return function(v1) {
return new Mat4(v.value0 * v1.value0 + v.value1 * v1.value4 + v.value2 * v1.value8 + v.value3 * v1.value12, v.value0 * v1.value1 + v.value1 * v1.value5 + v.value2 * v1.value9 + v.value3 * v1.value13, v.value0 * v1.value2 + v.value1 * v1.value6 + v.value2 * v1.value10 + v.value3 * v1.value14, v.value0 * v1.value3 + v.value1 * v1.value7 + v.value2 * v1.value11 + v.value3 * v1.value15, v.value4 * v1.value0 + v.value5 * v1.value4 + v.value6 * v1.value8 + v.value7 * v1.value12, v.value4 * v1.value1 + v.value5 * v1.value5 + v.value6 * v1.value9 + v.value7 * v1.value13, v.value4 * v1.value2 + v.value5 * v1.value6 + v.value6 * v1.value10 + v.value7 * v1.value14, v.value4 * v1.value3 + v.value5 * v1.value7 + v.value6 * v1.value11 + v.value7 * v1.value15, v.value8 * v1.value0 + v.value9 * v1.value4 + v.value10 * v1.value8 + v.value11 * v1.value12, v.value8 * v1.value1 + v.value9 * v1.value5 + v.value10 * v1.value9 + v.value11 * v1.value13, v.value8 * v1.value2 + v.value9 * v1.value6 + v.value10 * v1.value10 + v.value11 * v1.value14, v.value8 * v1.value3 + v.value9 * v1.value7 + v.value10 * v1.value11 + v.value11 * v1.value15, v.value12 * v1.value0 + v.value13 * v1.value4 + v.value14 * v1.value8 + v.value15 * v1.value12, v.value12 * v1.value1 + v.value13 * v1.value5 + v.value14 * v1.value9 + v.value15 * v1.value13, v.value12 * v1.value2 + v.value13 * v1.value6 + v.value14 * v1.value10 + v.value15 * v1.value14, v.value12 * v1.value3 + v.value13 * v1.value7 + v.value14 * v1.value11 + v.value15 * v1.value15);
};
};
var mat4ToArrayColMajor = function(v) {
return [v.value0, v.value4, v.value8, v.value12, v.value1, v.value5, v.value9, v.value13, v.value2, v.value6, v.value10, v.value14, v.value3, v.value7, v.value11, v.value15];
};
var lookAtMat4 = function(v) {
var toVec3 = function(a) {
return function(b) {
return function(c) {
return new Vec3(a, b, c);
};
};
};
var f = normalizeV3(subV3(toVec3(v.target.value0)(v.target.value1)(v.target.value2))(toVec3(v.eye.value0)(v.eye.value1)(v.eye.value2)));
var s = normalizeV3(crossV3(f)(v.up));
var u = crossV3(s)(f);
var tzT = f.value0 * v.eye.value0 + f.value1 * v.eye.value1 + f.value2 * v.eye.value2;
var tyT = -(u.value0 * v.eye.value0 + u.value1 * v.eye.value1 + u.value2 * v.eye.value2);
var txT = -(s.value0 * v.eye.value0 + s.value1 * v.eye.value1 + s.value2 * v.eye.value2);
return new Mat4(s.value0, s.value1, s.value2, txT, u.value0, u.value1, u.value2, tyT, -f.value0, -f.value1, -f.value2, tzT, 0, 0, 0, 1);
};
var initWebGL = function(canvas) {
return function __do() {
var mc = getWebGL2Context(canvas)();
if (mc instanceof Nothing) {
return new Left("WebGL2 context unavailable (= canvas.getContext('webgl2') == null)");
}
;
if (mc instanceof Just) {
enableDepthTest(mc.value0)();
enableBlend(mc.value0)();
return new Right(mc.value0);
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Context (line 58, column 3 - line 63, column 23): " + [mc.constructor.name]);
};
};
var computeMVP = function(cam) {
return function(proj) {
var view = lookAtMat4(cam);
var p = (function() {
if (proj instanceof Perspective) {
return perspectiveMat4(proj.value0.fov)(proj.value0.aspect)(proj.value0.near)(proj.value0.far);
}
;
if (proj instanceof Orthographic) {
return orthographicMat4(proj.value0.xHalf)(proj.value0.yHalf)(proj.value0.near)(proj.value0.far);
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Context (line 214, column 9 - line 216, column 70): " + [proj.constructor.name]);
})();
return multMat4(p)(view);
};
};
var compileProgram = function(ctx) {
return function(vsSrc) {
return function(fsSrc) {
return function __do() {
var mvs = createShader(ctx)(glVERTEX_SHADER)(vsSrc)();
if (mvs instanceof Nothing) {
return new Left("vertex shader compile failed (= console.error \u53C2\u7167)");
}
;
if (mvs instanceof Just) {
var mfs = createShader(ctx)(glFRAGMENT_SHADER)(fsSrc)();
if (mfs instanceof Nothing) {
return new Left("fragment shader compile failed");
}
;
if (mfs instanceof Just) {
var mp = createProgram(ctx)(mvs.value0)(mfs.value0)();
if (mp instanceof Nothing) {
return new Left("program link failed");
}
;
if (mp instanceof Just) {
return new Right(mp.value0);
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Context (line 85, column 11 - line 87, column 37): " + [mp.constructor.name]);
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Context (line 81, column 7 - line 87, column 37): " + [mfs.constructor.name]);
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Context (line 77, column 3 - line 87, column 37): " + [mvs.constructor.name]);
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Shaders/index.js
var pointVS = "#version 300 es\nin vec3 aPosition;\nuniform mat4 uMVP;\nuniform float uPointSize;\nvoid main() {\n gl_Position = uMVP * vec4(aPosition, 1.0);\n gl_PointSize = uPointSize;\n}\n";
var pointFS = "#version 300 es\nprecision mediump float;\nuniform vec4 uColor;\nout vec4 outColor;\nvoid main() {\n vec2 c = gl_PointCoord - vec2(0.5);\n float d = dot(c, c);\n if (d > 0.25) discard;\n // soft edge (= \u534A\u5F84 0.5 \u3067 alpha fade)\n float a = 1.0 - smoothstep(0.2, 0.25, d);\n outColor = vec4(uColor.rgb, uColor.a * a);\n}\n";
var pointColorVS = "#version 300 es\nin vec3 aPosition;\nin vec3 aColor;\nin float aSize;\nuniform mat4 uMVP;\nout vec3 vColor;\nvoid main() {\n gl_Position = uMVP * vec4(aPosition, 1.0);\n gl_PointSize = aSize;\n vColor = aColor;\n}\n";
var pointColorFS = "#version 300 es\nprecision mediump float;\nin vec3 vColor;\nuniform float uAlpha;\nout vec4 outColor;\nvoid main() {\n vec2 c = gl_PointCoord - vec2(0.5);\n float d = dot(c, c);\n if (d > 0.25) discard;\n float a = 1.0 - smoothstep(0.2, 0.25, d);\n outColor = vec4(vColor, uAlpha * a);\n}\n";
var lineVS = "#version 300 es\nin vec3 aPosition;\nuniform mat4 uMVP;\nvoid main() {\n gl_Position = uMVP * vec4(aPosition, 1.0);\n}\n";
var lineFS = "#version 300 es\nprecision mediump float;\nuniform vec4 uColor;\nout vec4 outColor;\nvoid main() {\n outColor = uColor;\n}\n";
var lambertVS = "#version 300 es\nin vec3 aPosition;\nin vec3 aNormal;\nuniform mat4 uMVP;\nout vec3 vNormal;\nvoid main() {\n gl_Position = uMVP * vec4(aPosition, 1.0);\n vNormal = aNormal;\n}\n";
var lambertFS = "#version 300 es\nprecision mediump float;\nin vec3 vNormal;\nuniform vec4 uColor;\nuniform vec3 uLightDir;\nout vec4 outColor;\nvoid main() {\n vec3 n = normalize(vNormal);\n vec3 l = normalize(uLightDir);\n float diff = max(dot(n, l), 0.0);\n float intensity = 0.3 + 0.7 * diff;\n outColor = vec4(uColor.rgb * intensity, uColor.a);\n}\n";
var flatVS = "#version 300 es\nin vec3 aPosition;\nuniform mat4 uMVP;\nvoid main() {\n gl_Position = uMVP * vec4(aPosition, 1.0);\n}\n";
var flatFS = "#version 300 es\nprecision mediump float;\nuniform vec4 uColor;\nout vec4 outColor;\nvoid main() {\n outColor = uColor;\n}\n";
// output/Hgg.Plot.Backend.WebGL.Line/index.js
var mkLineProgram = function(ctx) {
return function __do() {
var ep = compileProgram(ctx)(lineVS)(lineFS)();
if (ep instanceof Left) {
return new Left("line: " + ep.value0);
}
;
if (ep instanceof Right) {
var pos = getAttribLocation(ctx)(ep.value0)("aPosition")();
var muvp = getUniformLocation(ctx)(ep.value0)("uMVP")();
var mc = getUniformLocation(ctx)(ep.value0)("uColor")();
if (muvp instanceof Just && mc instanceof Just) {
var buf = createBuffer(ctx)();
return new Right({
program: ep.value0,
aPosition: pos,
uMVP: muvp.value0,
uColor: mc.value0,
buffer: buf
});
}
;
return new Left("line: uniform lookup failed");
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Line (line 39, column 3 - line 50, column 58): " + [ep.constructor.name]);
};
};
var indexPair = function(pts) {
return function(i) {
return function(j) {
var v = index(pts)(j);
var v1 = index(pts)(i);
if (v1 instanceof Just && v instanceof Just) {
return [v1.value0, v.value0];
}
;
return [];
};
};
};
var drawWireframe = function(ctx) {
return function(v) {
return function(mvp) {
return function(v1) {
return function __do() {
useProgram(ctx)(v.program)();
uniformMatrix4fv(ctx)(v.uMVP)(mat4ToArrayColMajor(mvp))();
var c = parseHexColor(v1.color);
uniform4f(ctx)(v.uColor)(c.r)(c.g)(c.b)(1)();
var expanded = concatMap(function(e) {
return indexPair(v1.points)(e.i)(e.j);
})(v1.edges);
var flat = flattenPoints3(expanded);
uploadAttribVec3(ctx)(v.buffer)(v.aPosition)(flat)();
return drawArrays(ctx)(glLINES)(0)(length(expanded))();
};
};
};
};
};
var drawLine = function(ctx) {
return function(v) {
return function(mvp) {
return function(v1) {
return function __do() {
useProgram(ctx)(v.program)();
uniformMatrix4fv(ctx)(v.uMVP)(mat4ToArrayColMajor(mvp))();
var c = parseHexColor(v1.color);
uniform4f(ctx)(v.uColor)(c.r)(c.g)(c.b)(1)();
var flat = flattenPoints3(v1.points);
uploadAttribVec3(ctx)(v.buffer)(v.aPosition)(flat)();
return drawArrays(ctx)(glLINE_STRIP)(0)(length(v1.points))();
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Surface/index.js
var when2 = /* @__PURE__ */ when(applicativeEffect);
var div2 = /* @__PURE__ */ div(euclideanRingInt);
var append1 = /* @__PURE__ */ append(semigroupArray);
var bind1 = /* @__PURE__ */ bind(bindMaybe);
var sqrtNum = sqrt;
var mkSurfaceProgram = function(ctx) {
return function __do() {
var ef = compileProgram(ctx)(flatVS)(flatFS)();
var el = compileProgram(ctx)(lambertVS)(lambertFS)();
if (ef instanceof Right && el instanceof Right) {
var fpos = getAttribLocation(ctx)(ef.value0)("aPosition")();
var mfmvp = getUniformLocation(ctx)(ef.value0)("uMVP")();
var mfc = getUniformLocation(ctx)(ef.value0)("uColor")();
var lpos = getAttribLocation(ctx)(el.value0)("aPosition")();
var lnor = getAttribLocation(ctx)(el.value0)("aNormal")();
var mlmvp = getUniformLocation(ctx)(el.value0)("uMVP")();
var mlc = getUniformLocation(ctx)(el.value0)("uColor")();
var mld = getUniformLocation(ctx)(el.value0)("uLightDir")();
if (mfmvp instanceof Just && (mfc instanceof Just && (mlmvp instanceof Just && (mlc instanceof Just && mld instanceof Just)))) {
var bp = createBuffer(ctx)();
var bn = createBuffer(ctx)();
return new Right({
flat: {
program: ef.value0,
aPosition: fpos,
uMVP: mfmvp.value0,
uColor: mfc.value0
},
lambert: {
program: el.value0,
aPosition: lpos,
aNormal: lnor,
uMVP: mlmvp.value0,
uColor: mlc.value0,
uLightDir: mld.value0
},
bufferPos: bp,
bufferNorm: bn
});
}
;
return new Left("surface: uniform lookup failed");
}
;
if (ef instanceof Left) {
return new Left("surface flat: " + ef.value0);
}
;
if (el instanceof Left) {
return new Left("surface lambert: " + el.value0);
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Surface (line 63, column 3 - line 86, column 56): " + [ef.constructor.name, el.constructor.name]);
};
};
var drawTriMesh = function(ctx) {
return function(v) {
return function(mvp) {
return function(m) {
var c = parseHexColor(m.color);
var transparent = m.alpha < 1;
return function __do() {
when2(transparent)(depthMask(ctx)(false))();
(function() {
if (m.shaded) {
useProgram(ctx)(v.lambert.program)();
uniformMatrix4fv(ctx)(v.lambert.uMVP)(mat4ToArrayColMajor(mvp))();
uniform4f(ctx)(v.lambert.uColor)(c.r)(c.g)(c.b)(m.alpha)();
uniform3f(ctx)(v.lambert.uLightDir)(0.5)(0.5)(1)();
uploadAttribVec3(ctx)(v.bufferPos)(v.lambert.aPosition)(m.positions)();
uploadAttribVec3(ctx)(v.bufferNorm)(v.lambert.aNormal)(m.normals)();
return drawArrays(ctx)(glTRIANGLES)(0)(div2(length(m.positions))(3))();
}
;
useProgram(ctx)(v.flat.program)();
uniformMatrix4fv(ctx)(v.flat.uMVP)(mat4ToArrayColMajor(mvp))();
uniform4f(ctx)(v.flat.uColor)(c.r)(c.g)(c.b)(m.alpha)();
uploadAttribVec3(ctx)(v.bufferPos)(v.flat.aPosition)(m.positions)();
return drawArrays(ctx)(glTRIANGLES)(0)(div2(length(m.positions))(3))();
})();
return when2(transparent)(depthMask(ctx)(true))();
};
};
};
};
};
var concatRange = function(lo) {
return function(hi) {
return function(f) {
var go = function($copy_i) {
return function($copy_acc) {
var $tco_var_i = $copy_i;
var $tco_done = false;
var $tco_result;
function $tco_loop(i, acc) {
if (i >= hi) {
$tco_done = true;
return acc;
}
;
if (otherwise) {
$tco_var_i = i + 1 | 0;
$copy_acc = append1(acc)(f(i));
return;
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Surface (line 214, column 5 - line 216, column 44): " + [i.constructor.name, acc.constructor.name]);
}
;
while (!$tco_done) {
$tco_result = $tco_loop($tco_var_i, $copy_acc);
}
;
return $tco_result;
};
};
return go(lo)([]);
};
};
};
var clamp_ = function(lo) {
return function(hi) {
return function(x) {
var $48 = x < lo;
if ($48) {
return lo;
}
;
var $49 = x > hi;
if ($49) {
return hi;
}
;
return x;
};
};
};
var buildSurfaceVBO = function(s) {
var zAt = function(i) {
return function(j) {
return fromMaybe(0)(bind1(index(s.grid)(i))(function(row) {
return index(row)(j);
}));
};
};
var ny = length(s.grid);
var yAt = function(i) {
var $50 = ny <= 1;
if ($50) {
return s.yRange.min;
}
;
return s.yRange.min + (s.yRange.max - s.yRange.min) * toNumber(i) / toNumber(ny - 1 | 0);
};
var nx = (function() {
var v = index(s.grid)(0);
if (v instanceof Just) {
return length(v.value0);
}
;
if (v instanceof Nothing) {
return 0;
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Surface (line 151, column 10 - line 153, column 20): " + [v.constructor.name]);
})();
var xAt = function(j) {
var $53 = nx <= 1;
if ($53) {
return s.xRange.min;
}
;
return s.xRange.min + (s.xRange.max - s.xRange.min) * toNumber(j) / toNumber(nx - 1 | 0);
};
var dy = (function() {
var $54 = ny <= 1;
if ($54) {
return 1;
}
;
return (s.yRange.max - s.yRange.min) / toNumber(ny - 1 | 0);
})();
var dx = (function() {
var $55 = nx <= 1;
if ($55) {
return 1;
}
;
return (s.xRange.max - s.xRange.min) / toNumber(nx - 1 | 0);
})();
var clampJ = clamp_(0)(nx - 1 | 0);
var clampI = clamp_(0)(ny - 1 | 0);
var normalAt = function(i) {
return function(j) {
var dzdy = (zAt(clampI(i + 1 | 0))(j) - zAt(clampI(i - 1 | 0))(j)) / (2 * dy);
var ny0 = -dzdy;
var dzdx = (zAt(i)(clampJ(j + 1 | 0)) - zAt(i)(clampJ(j - 1 | 0))) / (2 * dx);
var nx0 = -dzdx;
var l = sqrtNum(nx0 * nx0 + ny0 * ny0 + 1 * 1);
var $56 = l < 1e-12;
if ($56) {
return [0, 0, 1];
}
;
return [nx0 / l, ny0 / l, 1 / l];
};
};
var cellPositions = function(i) {
return function(j) {
var v11 = [xAt(j + 1 | 0), yAt(i + 1 | 0), zAt(i + 1 | 0)(j + 1 | 0)];
var v10 = [xAt(j), yAt(i + 1 | 0), zAt(i + 1 | 0)(j)];
var v01 = [xAt(j + 1 | 0), yAt(i), zAt(i)(j + 1 | 0)];
var v00 = [xAt(j), yAt(i), zAt(i)(j)];
return append1(v00)(append1(v01)(append1(v10)(append1(v01)(append1(v11)(v10)))));
};
};
var positions = concatRange(0)(ny - 1 | 0)(function(i) {
return concatRange(0)(nx - 1 | 0)(function(j) {
return cellPositions(i)(j);
});
});
var cellNormals = function(i) {
return function(j) {
var n11 = normalAt(i + 1 | 0)(j + 1 | 0);
var n10 = normalAt(i + 1 | 0)(j);
var n01 = normalAt(i)(j + 1 | 0);
var n00 = normalAt(i)(j);
return append1(n00)(append1(n01)(append1(n10)(append1(n01)(append1(n11)(n10)))));
};
};
var normals = concatRange(0)(ny - 1 | 0)(function(i) {
return concatRange(0)(nx - 1 | 0)(function(j) {
return cellNormals(i)(j);
});
});
return {
positions,
normals
};
};
var drawSurface = function(ctx) {
return function(sp) {
return function(mvp) {
return function(alpha) {
return function(v) {
var v1 = buildSurfaceVBO(v);
return drawTriMesh(ctx)(sp)(mvp)({
positions: v1.positions,
normals: v1.normals,
color: v.color,
alpha,
shaded: v.shaded
});
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Bar/index.js
var append2 = /* @__PURE__ */ append(semigroupArray);
var when3 = /* @__PURE__ */ when(applicativeEffect);
var sub3 = function(p) {
return function(q) {
var at = function(arr) {
return function(i) {
return fromMaybe(0)(index(arr)(i));
};
};
return {
x: at(p)(0) - at(q)(0),
y: at(p)(1) - at(q)(1),
z: at(p)(2) - at(q)(2)
};
};
};
var faceNormal = function(a) {
return function(b) {
return function(c) {
var v = sub3(c)(a);
var u = sub3(b)(a);
var cz = u.x * v.y - u.y * v.x;
var cy = u.z * v.x - u.x * v.z;
var cx = u.y * v.z - u.z * v.y;
var l = sqrt(cx * cx + cy * cy + cz * cz);
var $20 = l < 1e-12;
if ($20) {
return [0, 0, 1];
}
;
return [cx / l, cy / l, cz / l];
};
};
};
var quadTris = function(v) {
var n = faceNormal(v.value0)(v.value1.value0)(v.value1.value1.value0);
return [{
pos: append2(v.value0)(append2(v.value1.value0)(v.value1.value1.value0)),
nor: append2(n)(append2(n)(n))
}, {
pos: append2(v.value0)(append2(v.value1.value1.value0)(v.value1.value1.value1)),
nor: append2(n)(append2(n)(n))
}];
};
var cuboidTris = function(zb) {
return function(wx) {
return function(wy) {
return function(v) {
var t3 = [v.value0 - wx, v.value1 + wy, v.value2];
var t2 = [v.value0 + wx, v.value1 + wy, v.value2];
var t1 = [v.value0 + wx, v.value1 - wy, v.value2];
var t0 = [v.value0 - wx, v.value1 - wy, v.value2];
var b3 = [v.value0 - wx, v.value1 + wy, zb];
var b2 = [v.value0 + wx, v.value1 + wy, zb];
var b1 = [v.value0 + wx, v.value1 - wy, zb];
var b0 = [v.value0 - wx, v.value1 - wy, zb];
var quads = [new Tuple(t0, new Tuple(t1, new Tuple(t2, t3))), new Tuple(b0, new Tuple(b1, new Tuple(t1, t0))), new Tuple(b1, new Tuple(b2, new Tuple(t2, t1))), new Tuple(b2, new Tuple(b3, new Tuple(t3, t2))), new Tuple(b3, new Tuple(b0, new Tuple(t0, t3)))];
return concatMap(quadTris)(quads);
};
};
};
};
var buildBars = function(d) {
var tris = concatMap(cuboidTris(d.baseZ)(d.halfWx)(d.halfWy))(d.tops);
return {
positions: concatMap(function(v) {
return v.pos;
})(tris),
normals: concatMap(function(v) {
return v.nor;
})(tris)
};
};
var drawBar = function(ctx) {
return function(surfP) {
return function(lineP) {
return function(mvp) {
return function(d) {
var errBarSegs = function(v2) {
var lo = new Point3(v2.value0.value0, v2.value0.value1, v2.value0.value2 - v2.value1);
var hi = new Point3(v2.value0.value0, v2.value0.value1, v2.value0.value2 + v2.value1);
var capX = d.halfWx * 0.5;
var hiL = new Point3(v2.value0.value0 - capX, v2.value0.value1, v2.value0.value2 + v2.value1);
var hiR = new Point3(v2.value0.value0 + capX, v2.value0.value1, v2.value0.value2 + v2.value1);
var loL = new Point3(v2.value0.value0 - capX, v2.value0.value1, v2.value0.value2 - v2.value1);
var loR = new Point3(v2.value0.value0 + capX, v2.value0.value1, v2.value0.value2 - v2.value1);
return [new Tuple(lo, hi), new Tuple(loL, loR), new Tuple(hiL, hiR)];
};
var v = buildBars(d);
return function __do() {
drawTriMesh(ctx)(surfP)(mvp)({
positions: v.positions,
normals: v.normals,
color: d.color,
alpha: d.alpha,
shaded: true
})();
var errSegs = concatMap(errBarSegs)(zip(d.tops)(d.errs));
return when3(length(errSegs) > 0)((function() {
var pts = concatMap(function(v1) {
return [v1.value0, v1.value1];
})(errSegs);
var edges = mapWithIndex2(function(k) {
return function(v1) {
return {
i: 2 * k | 0,
j: (2 * k | 0) + 1 | 0
};
};
})(errSegs);
return drawWireframe(ctx)(lineP)(mvp)({
points: pts,
edges,
color: "#333333",
width: 1
});
})())();
};
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Camera/index.js
var sqrtNum2 = sqrt;
var pi2 = 3.141592653589793;
var orbitToCamera = function(v) {
var sTh = sin(v.theta);
var sPhi = sin(v.phi);
var cTh = cos(v.theta);
var cPhi = cos(v.phi);
var isZUp = v.upAxis.value2 > 0.5;
var v1 = (function() {
if (isZUp) {
return {
ex: v.target.value0 + v.distance * cPhi * cTh,
ey: v.target.value1 + v.distance * cPhi * sTh,
ez: v.target.value2 + v.distance * sPhi
};
}
;
return {
ex: v.target.value0 + v.distance * cPhi * sTh,
ey: v.target.value1 + v.distance * sPhi,
ez: v.target.value2 + v.distance * cPhi * cTh
};
})();
return {
eye: new Point3(v1.ex, v1.ey, v1.ez),
target: v.target,
up: v.upAxis
};
};
var panOrbit = function(dx) {
return function(dy) {
return function(v) {
var v1 = orbitToCamera(v);
var fz = v1.target.value2 - v1.eye.value2;
var fy = v1.target.value1 - v1.eye.value1;
var fx = v1.target.value0 - v1.eye.value0;
var fl = sqrtNum2(fx * fx + fy * fy + fz * fz);
var fnx = (function() {
var $44 = fl < 1e-12;
if ($44) {
return 0;
}
;
return fx / fl;
})();
var fny = (function() {
var $45 = fl < 1e-12;
if ($45) {
return 0;
}
;
return fy / fl;
})();
var fnz = (function() {
var $46 = fl < 1e-12;
if ($46) {
return 0;
}
;
return fz / fl;
})();
var sz0 = fnx * v1.up.value1 - fny * v1.up.value0;
var sy0 = fnz * v1.up.value0 - fnx * v1.up.value2;
var sx0 = fny * v1.up.value2 - fnz * v1.up.value1;
var sl = sqrtNum2(sx0 * sx0 + sy0 * sy0 + sz0 * sz0);
var sx = (function() {
var $48 = sl < 1e-12;
if ($48) {
return 0;
}
;
return sx0 / sl;
})();
var sy = (function() {
var $49 = sl < 1e-12;
if ($49) {
return 0;
}
;
return sy0 / sl;
})();
var tuz = sx * fny - sy * fnx;
var sz = (function() {
var $50 = sl < 1e-12;
if ($50) {
return 0;
}
;
return sz0 / sl;
})();
var tux = sy * fnz - sz * fny;
var tx$prime = v1.target.value0 + dx * sx + dy * tux;
var tuy = sz * fnx - sx * fnz;
var ty$prime = v1.target.value1 + dx * sy + dy * tuy;
var tz$prime = v1.target.value2 + dx * sz + dy * tuz;
return {
theta: v.theta,
phi: v.phi,
distance: v.distance,
upAxis: v.upAxis,
target: new Point3(tx$prime, ty$prime, tz$prime)
};
};
};
};
var maxNum = function(a) {
return function(b) {
var $60 = a > b;
if ($60) {
return a;
}
;
return b;
};
};
var zoomOrbit = function(factor) {
return function(v) {
return {
target: v.target,
theta: v.theta,
phi: v.phi,
upAxis: v.upAxis,
distance: maxNum(1e-3)(v.distance * factor)
};
};
};
var defaultOrbitZUp = function(d) {
return {
target: new Point3(0, 0, 0),
theta: pi2 / 4,
phi: pi2 / 6,
distance: d,
upAxis: zUp
};
};
var clamp_2 = function(lo) {
return function(hi) {
return function(x) {
var $65 = x < lo;
if ($65) {
return lo;
}
;
var $66 = x > hi;
if ($66) {
return hi;
}
;
return x;
};
};
};
var rotateOrbit = function(dTheta) {
return function(dPhi) {
return function(v) {
var halfPi = pi2 / 2;
var phi$prime = clamp_2(-(halfPi - 1e-3))(halfPi - 1e-3)(v.phi + dPhi);
return {
target: v.target,
distance: v.distance,
upAxis: v.upAxis,
theta: v.theta + dTheta,
phi: phi$prime
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Panes/index.js
var append3 = /* @__PURE__ */ append(semigroupArray);
var map6 = /* @__PURE__ */ map(functorArray);
var quadTris2 = function(q) {
return append3(q.p0)(append3(q.p1)(append3(q.p2)(append3(q.p0)(append3(q.p2)(q.p3)))));
};
var paneFill = "#f0f0f0";
var paneAlpha = 0.55;
var gridColor = "#dddddd";
var drawPanes = function(ctx) {
return function(surfP) {
return function(lineP) {
return function(mvp) {
return function(v) {
return function(tk) {
var seg = function(p) {
return function(q) {
return new Tuple(p, q);
};
};
var quads = concatMap(quadTris2)([{
p0: [v.xMin, v.yMin, v.zMin],
p1: [v.xMax, v.yMin, v.zMin],
p2: [v.xMax, v.yMax, v.zMin],
p3: [v.xMin, v.yMax, v.zMin]
}, {
p0: [v.xMin, v.yMax, v.zMin],
p1: [v.xMax, v.yMax, v.zMin],
p2: [v.xMax, v.yMax, v.zMax],
p3: [v.xMin, v.yMax, v.zMax]
}, {
p0: [v.xMin, v.yMin, v.zMin],
p1: [v.xMin, v.yMax, v.zMin],
p2: [v.xMin, v.yMax, v.zMax],
p3: [v.xMin, v.yMin, v.zMax]
}]);
return function __do() {
drawTriMesh(ctx)(surfP)(mvp)({
positions: quads,
normals: [],
color: paneFill,
alpha: paneAlpha,
shaded: false
})();
var sideL = append3(map6(function(y) {
return seg(new Point3(v.xMin, y, v.zMin))(new Point3(v.xMin, y, v.zMax));
})(tk.ys))(map6(function(z) {
return seg(new Point3(v.xMin, v.yMin, z))(new Point3(v.xMin, v.yMax, z));
})(tk.zs));
var floorL = append3(map6(function(x) {
return seg(new Point3(x, v.yMin, v.zMin))(new Point3(x, v.yMax, v.zMin));
})(tk.xs))(map6(function(y) {
return seg(new Point3(v.xMin, y, v.zMin))(new Point3(v.xMax, y, v.zMin));
})(tk.ys));
var backL = append3(map6(function(x) {
return seg(new Point3(x, v.yMax, v.zMin))(new Point3(x, v.yMax, v.zMax));
})(tk.xs))(map6(function(z) {
return seg(new Point3(v.xMin, v.yMax, z))(new Point3(v.xMax, v.yMax, z));
})(tk.zs));
var segs = append3(floorL)(append3(backL)(sideL));
var edges = mapWithIndex2(function(k) {
return function(v1) {
return {
i: 2 * k | 0,
j: (2 * k | 0) + 1 | 0
};
};
})(segs);
var pts = concatMap(function(v1) {
return [v1.value0, v1.value1];
})(segs);
return drawWireframe(ctx)(lineP)(mvp)({
points: pts,
edges,
color: gridColor,
width: 1
})();
};
};
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Quiver/index.js
var map7 = /* @__PURE__ */ map(functorArray);
var maximum2 = /* @__PURE__ */ maximum(ordNumber)(foldableArray);
var vecLen = function(v) {
return sqrt(v.value0 * v.value0 + v.value1 * v.value1 + v.value2 * v.value2);
};
var absN = function(x) {
var $21 = x < 0;
if ($21) {
return -x;
}
;
return x;
};
var arrowSegs = function(s) {
return function(v) {
var start = new Point3(v.value0.value0, v.value0.value1, v.value0.value2);
var ez = v.value0.value2 + s * v.value1.value2;
var ey = v.value0.value1 + s * v.value1.value1;
var ex = v.value0.value0 + s * v.value1.value0;
var tip = new Point3(ex, ey, ez);
var adz = ez - v.value0.value2;
var ady = ey - v.value0.value1;
var adx = ex - v.value0.value0;
var alen = sqrt(adx * adx + ady * ady + adz * adz);
var $24 = alen < 1e-9;
if ($24) {
return [];
}
;
var uz = adz / alen;
var uy = ady / alen;
var ux = adx / alen;
var ref = (function() {
var $25 = absN(uz) < 0.9;
if ($25) {
return new Vec3(0, 0, 1);
}
;
return new Vec3(1, 0, 0);
})();
var c1z = ux * ref.value1 - uy * ref.value0;
var c1y = uz * ref.value0 - ux * ref.value2;
var c1x = uy * ref.value2 - uz * ref.value1;
var c1l = sqrt(c1x * c1x + c1y * c1y + c1z * c1z);
var p1x = c1x / c1l;
var p1y = c1y / c1l;
var p2z = ux * p1y - uy * p1x;
var p1z = c1z / c1l;
var p2x = uy * p1z - uz * p1y;
var p2y = uz * p1x - ux * p1z;
var ah = 0.22 * alen;
var bx = ex - ux * ah;
var by = ey - uy * ah;
var bz = ez - uz * ah;
var barb = function(qx) {
return function(qy) {
return function(qz) {
return new Tuple(tip, new Point3(bx + qx * 0.45 * ah, by + qy * 0.45 * ah, bz + qz * 0.45 * ah));
};
};
};
return [new Tuple(start, tip), barb(p1x)(p1y)(p1z), barb(-p1x)(-p1y)(-p1z), barb(p2x)(p2y)(p2z), barb(-p2x)(-p2y)(-p2z)];
};
};
var drawQuiver = function(ctx) {
return function(lineP) {
return function(mvp) {
return function(d) {
var lens = map7(vecLen)(d.vectors);
var maxLen = fromMaybe(0)(maximum2(lens));
var autoS = (function() {
var $38 = maxLen <= 0 || d.spanMax <= 0;
if ($38) {
return 0;
}
;
return 0.35 * d.spanMax / maxLen;
})();
var s = autoS * d.vecScale;
var segs = concatMap(arrowSegs(s))(zip(d.starts)(d.vectors));
var edges = mapWithIndex2(function(k) {
return function(v) {
return {
i: 2 * k | 0,
j: (2 * k | 0) + 1 | 0
};
};
})(segs);
var pts = concatMap(function(v) {
return [v.value0, v.value1];
})(segs);
return drawWireframe(ctx)(lineP)(mvp)({
points: pts,
edges,
color: d.color,
width: 1
});
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Scatter/index.js
var mkScatterProgram = function(ctx) {
return function __do() {
var ep = compileProgram(ctx)(pointVS)(pointFS)();
if (ep instanceof Left) {
return new Left("scatter: " + ep.value0);
}
;
if (ep instanceof Right) {
var pos = getAttribLocation(ctx)(ep.value0)("aPosition")();
var muvp = getUniformLocation(ctx)(ep.value0)("uMVP")();
var mc = getUniformLocation(ctx)(ep.value0)("uColor")();
var mps = getUniformLocation(ctx)(ep.value0)("uPointSize")();
if (muvp instanceof Just && (mc instanceof Just && mps instanceof Just)) {
var buf = createBuffer(ctx)();
return new Right({
program: ep.value0,
aPosition: pos,
uMVP: muvp.value0,
uColor: mc.value0,
uPointSize: mps.value0,
buffer: buf
});
}
;
return new Left("scatter: uniform lookup failed");
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Scatter (line 39, column 3 - line 57, column 64): " + [ep.constructor.name]);
};
};
var mkScatterColorProgram = function(ctx) {
return function __do() {
var ep = compileProgram(ctx)(pointColorVS)(pointColorFS)();
if (ep instanceof Left) {
return new Left("scatterColor: " + ep.value0);
}
;
if (ep instanceof Right) {
var pos = getAttribLocation(ctx)(ep.value0)("aPosition")();
var col = getAttribLocation(ctx)(ep.value0)("aColor")();
var sz = getAttribLocation(ctx)(ep.value0)("aSize")();
var muvp = getUniformLocation(ctx)(ep.value0)("uMVP")();
var ma = getUniformLocation(ctx)(ep.value0)("uAlpha")();
if (muvp instanceof Just && ma instanceof Just) {
var bp = createBuffer(ctx)();
var bc = createBuffer(ctx)();
var bs = createBuffer(ctx)();
return new Right({
program: ep.value0,
aPosition: pos,
aColor: col,
aSize: sz,
uMVP: muvp.value0,
uAlpha: ma.value0,
bufPos: bp,
bufCol: bc,
bufSize: bs
});
}
;
return new Left("scatterColor: uniform lookup failed");
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Scatter (line 89, column 3 - line 105, column 66): " + [ep.constructor.name]);
};
};
var drawScatterColored = function(ctx) {
return function(v) {
return function(mvp) {
return function(d) {
var rgbOf = function(hex) {
var c = parseHexColor(hex);
return [c.r, c.g, c.b];
};
return function __do() {
useProgram(ctx)(v.program)();
uniformMatrix4fv(ctx)(v.uMVP)(mat4ToArrayColMajor(mvp))();
uniform1f(ctx)(v.uAlpha)(d.alpha)();
uploadAttribVec3(ctx)(v.bufPos)(v.aPosition)(flattenPoints3(d.points))();
uploadAttribVec3(ctx)(v.bufCol)(v.aColor)(concatMap(rgbOf)(d.colors))();
uploadAttrib1(ctx)(v.bufSize)(v.aSize)(d.sizes)();
return drawArrays(ctx)(glPOINTS)(0)(length(d.points))();
};
};
};
};
};
var drawScatter = function(ctx) {
return function(v) {
return function(mvp) {
return function(v1) {
return function __do() {
useProgram(ctx)(v.program)();
uniformMatrix4fv(ctx)(v.uMVP)(mat4ToArrayColMajor(mvp))();
var c = parseHexColor(v1.color);
uniform4f(ctx)(v.uColor)(c.r)(c.g)(c.b)(c.a * v1.alpha)();
uniform1f(ctx)(v.uPointSize)(v1.size)();
var flat = flattenPoints3(v1.points);
uploadAttribVec3(ctx)(v.buffer)(v.aPosition)(flat)();
return drawArrays(ctx)(glPOINTS)(0)(length(v1.points))();
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Stem/index.js
var drawStem = function(ctx) {
return function(lineP) {
return function(scatP) {
return function(mvp) {
return function(d) {
var segPts = concatMap(function(v) {
return [new Point3(v.value0, v.value1, d.baseZ), new Point3(v.value0, v.value1, v.value2)];
})(d.points);
var segEdges = mapWithIndex2(function(k) {
return function(v) {
return {
i: 2 * k | 0,
j: (2 * k | 0) + 1 | 0
};
};
})(d.points);
return function __do() {
drawWireframe(ctx)(lineP)(mvp)({
points: segPts,
edges: segEdges,
color: d.color,
width: 1
})();
return drawScatter(ctx)(scatP)(mvp)({
points: d.points,
color: d.color,
size: d.markerSize,
alpha: d.alpha
})();
};
};
};
};
};
};
// output/Hgg.Plot.Backend.WebGL.Text/foreign.js
function ensureOverlay(webglCanvas) {
return function() {
var overlay = webglCanvas.__textOverlay;
if (!overlay) {
overlay = document.createElement("canvas");
overlay.style.position = "absolute";
overlay.style.pointerEvents = "none";
overlay.style.zIndex = "10";
document.body.appendChild(overlay);
webglCanvas.__textOverlay = overlay;
}
var rect = webglCanvas.getBoundingClientRect();
overlay.width = webglCanvas.width;
overlay.height = webglCanvas.height;
overlay.style.left = window.scrollX + rect.left + "px";
overlay.style.top = window.scrollY + rect.top + "px";
overlay.style.width = rect.width + "px";
overlay.style.height = rect.height + "px";
return overlay.getContext("2d");
};
}
function clearOverlayFFI(ctx) {
return function() {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
};
}
function drawLabelsFFI(ctx) {
return function(labels) {
return function() {
ctx.textAlign = "center";
ctx.textBaseline = "middle";
for (var i = 0; i < labels.length; i++) {
var lb = labels[i];
ctx.font = lb.size + "px -apple-system, 'Hiragino Sans', 'Yu Gothic UI', sans-serif";
ctx.fillStyle = lb.color;
ctx.fillText(lb.text, lb.x, lb.y);
}
};
};
}
function drawLegendFFI(ctx) {
return function(items) {
return function() {
var pad = 14, sw = 16, gap = 8, lh = 22;
var w = ctx.canvas.width;
var fontPx = 15;
ctx.font = fontPx + "px -apple-system, 'Hiragino Sans', 'Yu Gothic UI', sans-serif";
ctx.textBaseline = "middle";
var maxLabel = 0;
for (var i = 0; i < items.length; i++) {
maxLabel = Math.max(maxLabel, ctx.measureText(items[i].label).width);
}
var boxW = sw + gap + maxLabel + pad * 2;
var boxH = items.length * lh + pad * 2;
var x0 = w - boxW - pad;
var y0 = pad;
ctx.fillStyle = "rgba(255,255,255,0.85)";
ctx.fillRect(x0, y0, boxW, boxH);
ctx.strokeStyle = "#cccccc";
ctx.lineWidth = 1;
ctx.strokeRect(x0 + 0.5, y0 + 0.5, boxW, boxH);
ctx.textAlign = "left";
for (var j = 0; j < items.length; j++) {
var cy = y0 + pad + j * lh + lh / 2;
ctx.fillStyle = items[j].color;
ctx.fillRect(x0 + pad, cy - sw / 2, sw, sw);
ctx.fillStyle = "#333333";
ctx.fillText(items[j].label, x0 + pad + sw + gap, cy);
}
};
};
}
function drawColorbarFFI(ctx) {
return function(cb) {
return function() {
var w = ctx.canvas.width, h = ctx.canvas.height;
var barW = 18, barH = Math.min(240, h * 0.4), pad = 16;
var x0 = w - barW - pad - 56;
var y0 = (h - barH) / 2;
var stops = cb.stops;
var n = stops.length;
if (n === 0) return;
var grad = ctx.createLinearGradient(0, y0 + barH, 0, y0);
for (var i = 0; i < n; i++) {
grad.addColorStop(n === 1 ? 0 : i / (n - 1), stops[i]);
}
ctx.fillStyle = grad;
ctx.fillRect(x0, y0, barW, barH);
ctx.strokeStyle = "#cccccc";
ctx.lineWidth = 1;
ctx.strokeRect(x0 + 0.5, y0 + 0.5, barW, barH);
ctx.fillStyle = "#333333";
ctx.font = "13px -apple-system, 'Hiragino Sans', 'Yu Gothic UI', sans-serif";
ctx.textAlign = "left";
ctx.textBaseline = "middle";
var fmt = function(v) {
return (Math.round(v * 100) / 100).toString();
};
ctx.fillText(fmt(cb.vMax), x0 + barW + 6, y0);
ctx.fillText(fmt((cb.vMin + cb.vMax) / 2), x0 + barW + 6, y0 + barH / 2);
ctx.fillText(fmt(cb.vMin), x0 + barW + 6, y0 + barH);
};
};
}
// output/Hgg.Plot.Backend.WebGL.Text/index.js
var projectToScreen = function(mvp) {
return function(w) {
return function(h) {
return function(v) {
var el = function(i) {
return fromMaybe(0)(index(mvp)(i));
};
var cy = el(1) * v.value0 + el(5) * v.value1 + el(9) * v.value2 + el(13);
var cx = el(0) * v.value0 + el(4) * v.value1 + el(8) * v.value2 + el(12);
var cw = el(3) * v.value0 + el(7) * v.value1 + el(11) * v.value2 + el(15);
var $11 = cw <= 0;
if ($11) {
return Nothing.value;
}
;
var ndcY = cy / cw;
var sy = (1 - (ndcY * 0.5 + 0.5)) * h;
var ndcX = cx / cw;
var sx = (ndcX * 0.5 + 0.5) * w;
return new Just({
x: sx,
y: sy
});
};
};
};
};
var drawLegend = drawLegendFFI;
var drawLabels = function(ov) {
return function(mvp) {
return function(w) {
return function(h) {
return function(labels) {
var project = function(lb) {
var v = projectToScreen(mvp)(w)(h)(lb.point);
if (v instanceof Nothing) {
return Nothing.value;
}
;
if (v instanceof Just) {
return new Just({
x: v.value0.x,
y: v.value0.y,
text: lb.text,
color: lb.color,
size: lb.size
});
}
;
throw new Error("Failed pattern match at Hgg.Plot.Backend.WebGL.Text (line 70, column 16 - line 72, column 87): " + [v.constructor.name]);
};
return drawLabelsFFI(ov)(mapMaybe(project)(labels));
};
};
};
};
};
var drawColorbar = drawColorbarFFI;
var clearOverlay = clearOverlayFFI;
// output/Hgg.Plot.Layout/index.js
var foldl2 = /* @__PURE__ */ foldl(foldableArray);
var max3 = /* @__PURE__ */ max(ordNumber);
var min3 = /* @__PURE__ */ min(ordNumber);
var map8 = /* @__PURE__ */ map(functorArray);
var extendedBreaks = function(m) {
return function(dmin0) {
return function(dmax0) {
var sq = function(x) {
return x * x;
};
var qs = [1, 5, 2, 2.5, 4, 3];
var qIdx = function(q) {
var go = function($copy_i) {
return function($copy_arr) {
var $tco_var_i = $copy_i;
var $tco_done = false;
var $tco_result;
function $tco_loop(i, arr) {
var v = uncons(arr);
if (v instanceof Just) {
var $426 = v.value0.head === q;
if ($426) {
$tco_done = true;
return i;
}
;
$tco_var_i = i + 1 | 0;
$copy_arr = v.value0.tail;
return;
}
;
if (v instanceof Nothing) {
$tco_done = true;
return i;
}
;
throw new Error("Failed pattern match at Hgg.Plot.Layout (line 1116, column 20 - line 1118, column 23): " + [v.constructor.name]);
}
;
while (!$tco_done) {
$tco_result = $tco_loop($tco_var_i, $copy_arr);
}
;
return $tco_result;
};
};
return go(1)(qs);
};
var simplicityMax = function(q) {
return function(j) {
return (6 - toNumber(qIdx(q))) / (6 - 1) + 1 - toNumber(j);
};
};
var mD = toNumber(m);
var genSeq = function(lo) {
return function(hi) {
return function(st) {
var $430 = st <= 0;
if ($430) {
return [lo];
}
;
var cnt = round2((hi - lo) / st);
return map8(function(i) {
return lo + toNumber(i) * st;
})(range2(0)(cnt));
};
};
};
var fmod$prime = function(a) {
return function(b) {
return a - b * toNumber(floor2(a / b));
};
};
var eps = 2220446049250313e-29 * 100;
var simplicity = function(q) {
return function(j) {
return function(lmin) {
return function(lmax) {
return function(lstep) {
var mlt = fmod$prime(lmin)(lstep);
var v = (function() {
var $431 = (mlt < eps || lstep - mlt < eps) && (lmin <= 0 && lmax >= 0);
if ($431) {
return 1;
}
;
return 0;
})();
return (6 - toNumber(qIdx(q))) / (6 - 1) + v - toNumber(j);
};
};
};
};
};
var dmin = (function() {
var $432 = dmin0 > dmax0;
if ($432) {
return dmax0;
}
;
return dmin0;
})();
var dmax = (function() {
var $433 = dmin0 > dmax0;
if ($433) {
return dmin0;
}
;
return dmax0;
})();
var densityMax = function(k) {
var $434 = k >= m;
if ($434) {
return 2 - (toNumber(k) - 1) / (mD - 1);
}
;
return 1;
};
var densityF = function(k) {
return function(lmin) {
return function(lmax) {
var rt = (mD - 1) / (max3(lmax)(dmax) - min3(dmin)(lmin));
var r = (toNumber(k) - 1) / (lmax - lmin);
return 2 - max3(r / rt)(rt / r);
};
};
};
var coverageMax = function(spn) {
var rng = dmax - dmin;
var $435 = spn > rng;
if ($435) {
var half = (spn - rng) / 2;
return 1 - 0.5 * (sq(half) + sq(half)) / sq(0.1 * rng);
}
;
return 1;
};
var coverage = function(lmin) {
return function(lmax) {
var rng = dmax - dmin;
return 1 - 0.5 * (sq(dmax - lmax) + sq(dmin - lmin)) / sq(0.1 * rng);
};
};
var goStart = function(q) {
return function(j) {
return function(k) {
return function(step) {
return function(minStart) {
return function(maxStart) {
return function(b) {
var unit2 = step / toNumber(j);
var upd = function(acc) {
return function(start) {
var lmin = toNumber(start) * unit2;
var lmax = lmin + step * toNumber(k - 1 | 0);
var s = simplicity(q)(j)(lmin)(lmax)(step);
var d = densityF(k)(lmin)(lmax);
var c = coverage(lmin)(lmax);
var score = 0.25 * s + 0.2 * c + 0.5 * d + 0.05 * 1;
var $436 = score > acc.score;
if ($436) {
return {
lmin,
lmax,
lstep: step,
score
};
}
;
return acc;
};
};
return foldl2(upd)(b)(range2(minStart)(maxStart));
};
};
};
};
};
};
};
var goZ = function($copy_q) {
return function($copy_sm) {
return function($copy_j) {
return function($copy_k) {
return function($copy_dm) {
return function($copy_fuel) {
return function($copy_z) {
return function($copy_b) {
var $tco_var_q = $copy_q;
var $tco_var_sm = $copy_sm;
var $tco_var_j = $copy_j;
var $tco_var_k = $copy_k;
var $tco_var_dm = $copy_dm;
var $tco_var_fuel = $copy_fuel;
var $tco_var_z = $copy_z;
var $tco_done1 = false;
var $tco_result;
function $tco_loop(q, sm, j, k, dm, fuel, z, b) {
var $437 = fuel <= 0;
if ($437) {
$tco_done1 = true;
return b;
}
;
var step = toNumber(j) * q * pow(10)(toNumber(z));
var cm = coverageMax(step * toNumber(k - 1 | 0));
var $438 = 0.25 * sm + 0.2 * cm + 0.5 * dm + 0.05 < b.score;
if ($438) {
$tco_done1 = true;
return b;
}
;
var minStart = (floor2(dmax / step) * j | 0) - ((k - 1 | 0) * j | 0) | 0;
var maxStart = ceil2(dmin / step) * j | 0;
var b$prime = (function() {
var $439 = minStart > maxStart;
if ($439) {
return b;
}
;
return goStart(q)(j)(k)(step)(minStart)(maxStart)(b);
})();
$tco_var_q = q;
$tco_var_sm = sm;
$tco_var_j = j;
$tco_var_k = k;
$tco_var_dm = dm;
$tco_var_fuel = fuel - 1 | 0;
$tco_var_z = z + 1 | 0;
$copy_b = b$prime;
return;
}
;
while (!$tco_done1) {
$tco_result = $tco_loop($tco_var_q, $tco_var_sm, $tco_var_j, $tco_var_k, $tco_var_dm, $tco_var_fuel, $tco_var_z, $copy_b);
}
;
return $tco_result;
};
};
};
};
};
};
};
};
var goK = function($copy_q) {
return function($copy_sm) {
return function($copy_j) {
return function($copy_k) {
return function($copy_b) {
var $tco_var_q = $copy_q;
var $tco_var_sm = $copy_sm;
var $tco_var_j = $copy_j;
var $tco_var_k = $copy_k;
var $tco_done2 = false;
var $tco_result;
function $tco_loop(q, sm, j, k, b) {
var $440 = k > ((2 * m | 0) + 6 | 0);
if ($440) {
$tco_done2 = true;
return b;
}
;
var dm = densityMax(k);
var $441 = 0.25 * sm + 0.2 + 0.5 * dm + 0.05 < b.score;
if ($441) {
$tco_done2 = true;
return b;
}
;
var delta = (dmax - dmin) / toNumber(k + 1 | 0) / toNumber(j) / q;
var z0 = ceil2(log(delta) / log(10));
$tco_var_q = q;
$tco_var_sm = sm;
$tco_var_j = j;
$tco_var_k = k + 1 | 0;
$copy_b = goZ(q)(sm)(j)(k)(dm)(60)(z0)(b);
return;
}
;
while (!$tco_done2) {
$tco_result = $tco_loop($tco_var_q, $tco_var_sm, $tco_var_j, $tco_var_k, $copy_b);
}
;
return $tco_result;
};
};
};
};
};
var goQ = function($copy_arr) {
return function($copy_j) {
return function($copy_b) {
var $tco_var_arr = $copy_arr;
var $tco_var_j = $copy_j;
var $tco_done3 = false;
var $tco_result;
function $tco_loop(arr, j, b) {
var v = uncons(arr);
if (v instanceof Nothing) {
$tco_done3 = true;
return {
b,
stop: false
};
}
;
if (v instanceof Just) {
var sm = simplicityMax(v.value0.head)(j);
var $443 = 0.25 * sm + 0.2 + 0.5 + 0.05 < b.score;
if ($443) {
$tco_done3 = true;
return {
b,
stop: true
};
}
;
$tco_var_arr = v.value0.tail;
$tco_var_j = j;
$copy_b = goK(v.value0.head)(sm)(j)(2)(b);
return;
}
;
throw new Error("Failed pattern match at Hgg.Plot.Layout (line 1150, column 19 - line 1156, column 47): " + [v.constructor.name]);
}
;
while (!$tco_done3) {
$tco_result = $tco_loop($tco_var_arr, $tco_var_j, $copy_b);
}
;
return $tco_result;
};
};
};
var goJ = function($copy_j) {
return function($copy_b) {
var $tco_var_j = $copy_j;
var $tco_done4 = false;
var $tco_result;
function $tco_loop(j, b) {
var $447 = j > 30;
if ($447) {
$tco_done4 = true;
return b;
}
;
var res = goQ(qs)(j)(b);
if (res.stop) {
$tco_done4 = true;
return res.b;
}
;
$tco_var_j = j + 1 | 0;
$copy_b = res.b;
return;
}
;
while (!$tco_done4) {
$tco_result = $tco_loop($tco_var_j, $copy_b);
}
;
return $tco_result;
};
};
var best = goJ(1)({
lmin: 0,
lmax: 0,
lstep: 1,
score: -2
});
var $449 = !(dmax - dmin >= eps);
if ($449) {
return [dmin];
}
;
var $450 = best.score <= -2;
if ($450) {
return [dmin, dmax];
}
;
return genSeq(best.lmin)(best.lmax)(best.lstep);
};
};
};
// output/Data.Argonaut.Core/foreign.js
function stringify(j) {
return JSON.stringify(j);
}
function _caseJson(isNull2, isBool, isNum, isStr, isArr, isObj, j) {
if (j == null) return isNull2();
else if (typeof j === "boolean") return isBool(j);
else if (typeof j === "number") return isNum(j);
else if (typeof j === "string") return isStr(j);
else if (Object.prototype.toString.call(j) === "[object Array]")
return isArr(j);
else return isObj(j);
}
// output/Foreign.Object/foreign.js
function _copyST(m) {
return function() {
var r = {};
for (var k in m) {
if (hasOwnProperty.call(m, k)) {
r[k] = m[k];
}
}
return r;
};
}
var empty2 = {};
function runST(f) {
return f();
}
function _fmapObject(m0, f) {
var m = {};
for (var k in m0) {
if (hasOwnProperty.call(m0, k)) {
m[k] = f(m0[k]);
}
}
return m;
}
function _mapWithKey(m0, f) {
var m = {};
for (var k in m0) {
if (hasOwnProperty.call(m0, k)) {
m[k] = f(k)(m0[k]);
}
}
return m;
}
function _foldM(bind4) {
return function(f) {
return function(mz) {
return function(m) {
var acc = mz;
function g(k2) {
return function(z) {
return f(z)(k2)(m[k2]);
};
}
for (var k in m) {
if (hasOwnProperty.call(m, k)) {
acc = bind4(acc)(g(k));
}
}
return acc;
};
};
};
}
function _lookup(no, yes, k, m) {
return k in m ? yes(m[k]) : no;
}
function toArrayWithKey(f) {
return function(m) {
var r = [];
for (var k in m) {
if (hasOwnProperty.call(m, k)) {
r.push(f(k)(m[k]));
}
}
return r;
};
}
var keys = Object.keys || toArrayWithKey(function(k) {
return function() {
return k;
};
});
// output/Data.FoldableWithIndex/index.js
var foldr8 = /* @__PURE__ */ foldr(foldableArray);
var mapWithIndex3 = /* @__PURE__ */ mapWithIndex(functorWithIndexArray);
var foldl8 = /* @__PURE__ */ foldl(foldableArray);
var foldrWithIndex = function(dict) {
return dict.foldrWithIndex;
};
var foldMapWithIndexDefaultR = function(dictFoldableWithIndex) {
var foldrWithIndex1 = foldrWithIndex(dictFoldableWithIndex);
return function(dictMonoid) {
var append5 = append(dictMonoid.Semigroup0());
var mempty2 = mempty(dictMonoid);
return function(f) {
return foldrWithIndex1(function(i) {
return function(x) {
return function(acc) {
return append5(f(i)(x))(acc);
};
};
})(mempty2);
};
};
};
var foldableWithIndexArray = {
foldrWithIndex: function(f) {
return function(z) {
var $291 = foldr8(function(v) {
return function(y) {
return f(v.value0)(v.value1)(y);
};
})(z);
var $292 = mapWithIndex3(Tuple.create);
return function($293) {
return $291($292($293));
};
};
},
foldlWithIndex: function(f) {
return function(z) {
var $294 = foldl8(function(y) {
return function(v) {
return f(v.value0)(y)(v.value1);
};
})(z);
var $295 = mapWithIndex3(Tuple.create);
return function($296) {
return $294($295($296));
};
};
},
foldMapWithIndex: function(dictMonoid) {
return foldMapWithIndexDefaultR(foldableWithIndexArray)(dictMonoid);
},
Foldable0: function() {
return foldableArray;
}
};
// output/Data.TraversableWithIndex/index.js
var traverseWithIndexDefault = function(dictTraversableWithIndex) {
var sequence2 = sequence(dictTraversableWithIndex.Traversable2());
var mapWithIndex4 = mapWithIndex(dictTraversableWithIndex.FunctorWithIndex0());
return function(dictApplicative) {
var sequence12 = sequence2(dictApplicative);
return function(f) {
var $174 = mapWithIndex4(f);
return function($175) {
return sequence12($174($175));
};
};
};
};
var traverseWithIndex = function(dict) {
return dict.traverseWithIndex;
};
var traversableWithIndexArray = {
traverseWithIndex: function(dictApplicative) {
return traverseWithIndexDefault(traversableWithIndexArray)(dictApplicative);
},
FunctorWithIndex0: function() {
return functorWithIndexArray;
},
FoldableWithIndex1: function() {
return foldableWithIndexArray;
},
Traversable2: function() {
return traversableArray;
}
};
// output/Foreign.Object.ST/foreign.js
function poke2(k) {
return function(v) {
return function(m) {
return function() {
m[k] = v;
return m;
};
};
};
}
// output/Foreign.Object/index.js
var foldr2 = /* @__PURE__ */ foldr(foldableArray);
var identity6 = /* @__PURE__ */ identity(categoryFn);
var values = /* @__PURE__ */ toArrayWithKey(function(v) {
return function(v1) {
return v1;
};
});
var thawST = _copyST;
var mutate = function(f) {
return function(m) {
return runST(function __do() {
var s = thawST(m)();
f(s)();
return s;
});
};
};
var mapWithKey = function(f) {
return function(m) {
return _mapWithKey(m, f);
};
};
var lookup = /* @__PURE__ */ (function() {
return runFn4(_lookup)(Nothing.value)(Just.create);
})();
var insert = function(k) {
return function(v) {
return mutate(poke2(k)(v));
};
};
var functorObject = {
map: function(f) {
return function(m) {
return _fmapObject(m, f);
};
}
};
var functorWithIndexObject = {
mapWithIndex: mapWithKey,
Functor0: function() {
return functorObject;
}
};
var fold2 = /* @__PURE__ */ _foldM(applyFlipped);
var foldMap2 = function(dictMonoid) {
var append12 = append(dictMonoid.Semigroup0());
var mempty2 = mempty(dictMonoid);
return function(f) {
return fold2(function(acc) {
return function(k) {
return function(v) {
return append12(acc)(f(k)(v));
};
};
})(mempty2);
};
};
var foldableObject = {
foldl: function(f) {
return fold2(function(z) {
return function(v) {
return f(z);
};
});
},
foldr: function(f) {
return function(z) {
return function(m) {
return foldr2(f)(z)(values(m));
};
};
},
foldMap: function(dictMonoid) {
var foldMap12 = foldMap2(dictMonoid);
return function(f) {
return foldMap12($$const(f));
};
}
};
var foldableWithIndexObject = {
foldlWithIndex: function(f) {
return fold2(flip(f));
},
foldrWithIndex: function(f) {
return function(z) {
return function(m) {
return foldr2(uncurry(f))(z)(toArrayWithKey(Tuple.create)(m));
};
};
},
foldMapWithIndex: function(dictMonoid) {
return foldMap2(dictMonoid);
},
Foldable0: function() {
return foldableObject;
}
};
var traversableWithIndexObject = {
traverseWithIndex: function(dictApplicative) {
var Apply0 = dictApplicative.Apply0();
var apply2 = apply(Apply0);
var map12 = map(Apply0.Functor0());
var pure1 = pure(dictApplicative);
return function(f) {
return function(ms) {
return fold2(function(acc) {
return function(k) {
return function(v) {
return apply2(map12(flip(insert(k)))(acc))(f(k)(v));
};
};
})(pure1(empty2))(ms);
};
};
},
FunctorWithIndex0: function() {
return functorWithIndexObject;
},
FoldableWithIndex1: function() {
return foldableWithIndexObject;
},
Traversable2: function() {
return traversableObject;
}
};
var traversableObject = {
traverse: function(dictApplicative) {
var $96 = traverseWithIndex(traversableWithIndexObject)(dictApplicative);
return function($97) {
return $96($$const($97));
};
},
sequence: function(dictApplicative) {
return traverse(traversableObject)(dictApplicative)(identity6);
},
Functor0: function() {
return functorObject;
},
Foldable1: function() {
return foldableObject;
}
};
// output/Data.Argonaut.Core/index.js
var verbJsonType = function(def) {
return function(f) {
return function(g) {
return g(def)(f);
};
};
};
var toJsonType = /* @__PURE__ */ (function() {
return verbJsonType(Nothing.value)(Just.create);
})();
var isJsonType = /* @__PURE__ */ verbJsonType(false)(/* @__PURE__ */ $$const(true));
var caseJsonString = function(d) {
return function(f) {
return function(j) {
return _caseJson($$const(d), $$const(d), $$const(d), f, $$const(d), $$const(d), j);
};
};
};
var caseJsonObject = function(d) {
return function(f) {
return function(j) {
return _caseJson($$const(d), $$const(d), $$const(d), $$const(d), $$const(d), f, j);
};
};
};
var toObject = /* @__PURE__ */ toJsonType(caseJsonObject);
var caseJsonNumber = function(d) {
return function(f) {
return function(j) {
return _caseJson($$const(d), $$const(d), f, $$const(d), $$const(d), $$const(d), j);
};
};
};
var caseJsonNull = function(d) {
return function(f) {
return function(j) {
return _caseJson(f, $$const(d), $$const(d), $$const(d), $$const(d), $$const(d), j);
};
};
};
var isNull = /* @__PURE__ */ isJsonType(caseJsonNull);
var caseJsonBoolean = function(d) {
return function(f) {
return function(j) {
return _caseJson($$const(d), f, $$const(d), $$const(d), $$const(d), $$const(d), j);
};
};
};
var caseJsonArray = function(d) {
return function(f) {
return function(j) {
return _caseJson($$const(d), $$const(d), $$const(d), $$const(d), f, $$const(d), j);
};
};
};
var toArray = /* @__PURE__ */ toJsonType(caseJsonArray);
// output/Data.Argonaut.Decode.Error/index.js
var show2 = /* @__PURE__ */ show(showString);
var show1 = /* @__PURE__ */ show(showInt);
var TypeMismatch = /* @__PURE__ */ (function() {
function TypeMismatch2(value0) {
this.value0 = value0;
}
;
TypeMismatch2.create = function(value0) {
return new TypeMismatch2(value0);
};
return TypeMismatch2;
})();
var UnexpectedValue = /* @__PURE__ */ (function() {
function UnexpectedValue2(value0) {
this.value0 = value0;
}
;
UnexpectedValue2.create = function(value0) {
return new UnexpectedValue2(value0);
};
return UnexpectedValue2;
})();
var AtIndex = /* @__PURE__ */ (function() {
function AtIndex2(value0, value1) {
this.value0 = value0;
this.value1 = value1;
}
;
AtIndex2.create = function(value0) {
return function(value1) {
return new AtIndex2(value0, value1);
};
};
return AtIndex2;
})();
var AtKey = /* @__PURE__ */ (function() {
function AtKey2(value0, value1) {
this.value0 = value0;
this.value1 = value1;
}
;
AtKey2.create = function(value0) {
return function(value1) {
return new AtKey2(value0, value1);
};
};
return AtKey2;
})();
var Named = /* @__PURE__ */ (function() {
function Named2(value0, value1) {
this.value0 = value0;
this.value1 = value1;
}
;
Named2.create = function(value0) {
return function(value1) {
return new Named2(value0, value1);
};
};
return Named2;
})();
var MissingValue = /* @__PURE__ */ (function() {
function MissingValue2() {
}
;
MissingValue2.value = new MissingValue2();
return MissingValue2;
})();
var showJsonDecodeError = {
show: function(v) {
if (v instanceof TypeMismatch) {
return "(TypeMismatch " + (show2(v.value0) + ")");
}
;
if (v instanceof UnexpectedValue) {
return "(UnexpectedValue " + (stringify(v.value0) + ")");
}
;
if (v instanceof AtIndex) {
return "(AtIndex " + (show1(v.value0) + (" " + (show(showJsonDecodeError)(v.value1) + ")")));
}
;
if (v instanceof AtKey) {
return "(AtKey " + (show2(v.value0) + (" " + (show(showJsonDecodeError)(v.value1) + ")")));
}
;
if (v instanceof Named) {
return "(Named " + (show2(v.value0) + (" " + (show(showJsonDecodeError)(v.value1) + ")")));
}
;
if (v instanceof MissingValue) {
return "MissingValue";
}
;
throw new Error("Failed pattern match at Data.Argonaut.Decode.Error (line 24, column 10 - line 30, column 35): " + [v.constructor.name]);
}
};
// output/Data.Argonaut.Decode.Decoders/index.js
var pure2 = /* @__PURE__ */ pure(applicativeEither);
var map9 = /* @__PURE__ */ map(functorEither);
var lmap2 = /* @__PURE__ */ lmap(bifunctorEither);
var composeKleisliFlipped2 = /* @__PURE__ */ composeKleisliFlipped(bindEither);
var traverse5 = /* @__PURE__ */ traverse(traversableObject)(applicativeEither);
var traverseWithIndex2 = /* @__PURE__ */ traverseWithIndex(traversableWithIndexArray)(applicativeEither);
var getFieldOptional$prime = function(decoder) {
return function(obj) {
return function(str) {
var decode = function(json) {
var $35 = isNull(json);
if ($35) {
return pure2(Nothing.value);
}
;
return map9(Just.create)(lmap2(AtKey.create(str))(decoder(json)));
};
return maybe(pure2(Nothing.value))(decode)(lookup(str)(obj));
};
};
};
var getField = function(decoder) {
return function(obj) {
return function(str) {
return maybe(new Left(new AtKey(str, MissingValue.value)))((function() {
var $48 = lmap2(AtKey.create(str));
return function($49) {
return $48(decoder($49));
};
})())(lookup(str)(obj));
};
};
};
var decodeString = /* @__PURE__ */ (function() {
return caseJsonString(new Left(new TypeMismatch("String")))(Right.create);
})();
var decodeNumber = /* @__PURE__ */ (function() {
return caseJsonNumber(new Left(new TypeMismatch("Number")))(Right.create);
})();
var decodeJObject = /* @__PURE__ */ (function() {
var $50 = note(new TypeMismatch("Object"));
return function($51) {
return $50(toObject($51));
};
})();
var decodeJArray = /* @__PURE__ */ (function() {
var $52 = note(new TypeMismatch("Array"));
return function($53) {
return $52(toArray($53));
};
})();
var decodeInt = /* @__PURE__ */ composeKleisliFlipped2(/* @__PURE__ */ (function() {
var $84 = note(new TypeMismatch("Integer"));
return function($85) {
return $84(fromNumber($85));
};
})())(decodeNumber);
var decodeForeignObject = function(decoder) {
return composeKleisliFlipped2((function() {
var $86 = lmap2(Named.create("ForeignObject"));
var $87 = traverse5(decoder);
return function($88) {
return $86($87($88));
};
})())(decodeJObject);
};
var decodeBoolean = /* @__PURE__ */ (function() {
return caseJsonBoolean(new Left(new TypeMismatch("Boolean")))(Right.create);
})();
var decodeArray = function(decoder) {
return composeKleisliFlipped2((function() {
var $89 = lmap2(Named.create("Array"));
var $90 = traverseWithIndex2(function(i) {
var $92 = lmap2(AtIndex.create(i));
return function($93) {
return $92(decoder($93));
};
});
return function($91) {
return $89($90($91));
};
})())(decodeJArray);
};
// output/Data.Argonaut.Decode.Class/index.js
var decodeJsonString = {
decodeJson: decodeString
};
var decodeJsonNumber = {
decodeJson: decodeNumber
};
var decodeJsonJson = /* @__PURE__ */ (function() {
return {
decodeJson: Right.create
};
})();
var decodeJsonInt = {
decodeJson: decodeInt
};
var decodeJsonBoolean = {
decodeJson: decodeBoolean
};
var decodeJson = function(dict) {
return dict.decodeJson;
};
var decodeForeignObject2 = function(dictDecodeJson) {
return {
decodeJson: decodeForeignObject(decodeJson(dictDecodeJson))
};
};
var decodeArray2 = function(dictDecodeJson) {
return {
decodeJson: decodeArray(decodeJson(dictDecodeJson))
};
};
// output/Data.Argonaut.Decode.Combinators/index.js
var getFieldOptional$prime2 = function(dictDecodeJson) {
return getFieldOptional$prime(decodeJson(dictDecodeJson));
};
var getField2 = function(dictDecodeJson) {
return getField(decodeJson(dictDecodeJson));
};
// output/Hgg.Plot.ThreeD.Codec/index.js
var bind2 = /* @__PURE__ */ bind(bindEither);
var decodeJson2 = /* @__PURE__ */ decodeJson(/* @__PURE__ */ decodeForeignObject2(decodeJsonJson));
var getFieldOptional$prime3 = /* @__PURE__ */ getFieldOptional$prime2(decodeJsonJson);
var pure3 = /* @__PURE__ */ pure(applicativeEither);
var map10 = /* @__PURE__ */ map(functorEither);
var decodeArray3 = /* @__PURE__ */ decodeArray2(decodeJsonNumber);
var decodeJson1 = /* @__PURE__ */ decodeJson(decodeArray3);
var getField3 = /* @__PURE__ */ getField2(decodeJsonString);
var getField1 = /* @__PURE__ */ getField2(decodeJsonNumber);
var decodeJson22 = /* @__PURE__ */ decodeJson(/* @__PURE__ */ decodeArray2(decodeJsonString));
var decodeJson3 = /* @__PURE__ */ decodeJson(/* @__PURE__ */ decodeArray2(decodeJsonInt));
var decodeJson4 = /* @__PURE__ */ decodeJson(decodeJsonString);
var decodeJson5 = /* @__PURE__ */ decodeJson(/* @__PURE__ */ decodeArray2(decodeArray3));
var decodeJson6 = /* @__PURE__ */ decodeJson(/* @__PURE__ */ decodeArray2(decodeJsonJson));
var decodeJson7 = /* @__PURE__ */ decodeJson(decodeJsonNumber);
var getField22 = /* @__PURE__ */ getField2(decodeJsonJson);
var decodeJson8 = /* @__PURE__ */ decodeJson(/* @__PURE__ */ decodeArray2(decodeJsonBoolean));
var getField32 = /* @__PURE__ */ getField2(decodeJsonInt);
var traverse2 = /* @__PURE__ */ traverse(traversableArray)(applicativeEither);
var decodeJson9 = /* @__PURE__ */ decodeJson(decodeJsonBoolean);
var decodeJson10 = /* @__PURE__ */ decodeJson(decodeJsonInt);
var M3Scatter = /* @__PURE__ */ (function() {
function M3Scatter2() {
}
;
M3Scatter2.value = new M3Scatter2();
return M3Scatter2;
})();
var M3Line = /* @__PURE__ */ (function() {
function M3Line2() {
}
;
M3Line2.value = new M3Line2();
return M3Line2;
})();
var M3Wireframe = /* @__PURE__ */ (function() {
function M3Wireframe2() {
}
;
M3Wireframe2.value = new M3Wireframe2();
return M3Wireframe2;
})();
var M3Surface = /* @__PURE__ */ (function() {
function M3Surface2() {
}
;
M3Surface2.value = new M3Surface2();
return M3Surface2;
})();
var M3Bar = /* @__PURE__ */ (function() {
function M3Bar2() {
}
;
M3Bar2.value = new M3Bar2();
return M3Bar2;
})();
var M3Text = /* @__PURE__ */ (function() {
function M3Text2() {
}
;
M3Text2.value = new M3Text2();
return M3Text2;
})();
var M3Stem = /* @__PURE__ */ (function() {
function M3Stem2() {
}
;
M3Stem2.value = new M3Stem2();
return M3Stem2;
})();
var M3Quiver = /* @__PURE__ */ (function() {
function M3Quiver2() {
}
;
M3Quiver2.value = new M3Quiver2();
return M3Quiver2;
})();
var M3Trisurf = /* @__PURE__ */ (function() {
function M3Trisurf2() {
}
;
M3Trisurf2.value = new M3Trisurf2();
return M3Trisurf2;
})();
var optionalAt = function(dec) {
return function(j) {
return function(key) {
return bind2(decodeJson2(j))(function(obj) {
return bind2(getFieldOptional$prime3(obj)(key))(function(mv) {
if (mv instanceof Nothing) {
return pure3(Nothing.value);
}
;
if (mv instanceof Just) {
var $45 = isNull(mv.value0);
if ($45) {
return pure3(Nothing.value);
}
;
return map10(Just.create)(dec(mv.value0));
}
;
throw new Error("Failed pattern match at Hgg.Plot.ThreeD.Codec (line 189, column 3 - line 193, column 37): " + [mv.constructor.name]);
});
});
};
};
};
var eqMark3DKind = {
eq: function(x) {
return function(y) {
if (x instanceof M3Scatter && y instanceof M3Scatter) {
return true;
}
;
if (x instanceof M3Line && y instanceof M3Line) {
return true;
}
;
if (x instanceof M3Wireframe && y instanceof M3Wireframe) {
return true;
}
;
if (x instanceof M3Surface && y instanceof M3Surface) {
return true;
}
;
if (x instanceof M3Bar && y instanceof M3Bar) {
return true;
}
;
if (x instanceof M3Text && y instanceof M3Text) {
return true;
}
;
if (x instanceof M3Stem && y instanceof M3Stem) {
return true;
}
;
if (x instanceof M3Quiver && y instanceof M3Quiver) {
return true;
}
;
if (x instanceof M3Trisurf && y instanceof M3Trisurf) {
return true;
}
;
return false;
};
}
};
var decodeVec3 = function(j) {
return bind2(decodeJson1(j))(function(v) {
if (v.length === 3) {
return pure3(new Vec3(v[0], v[1], v[2]));
}
;
return new Left(new TypeMismatch("Vec3 expects [x, y, z]"));
});
};
var decodeProjection3D = function(j) {
return bind2(decodeJson2(j))(function(obj) {
return bind2(getField3(obj)("tag"))(function(v) {
if (v === "Perspective") {
return bind2(getField1(obj)("perspFov"))(function(fov) {
return bind2(getField1(obj)("perspAspect"))(function(aspect) {
return bind2(getField1(obj)("perspNear"))(function(near) {
return bind2(getField1(obj)("perspFar"))(function(far) {
return pure3(new Perspective({
fov,
aspect,
near,
far
}));
});
});
});
});
}
;
if (v === "Orthographic") {
return bind2(getField1(obj)("orthoXHalf"))(function(xHalf) {
return bind2(getField1(obj)("orthoYHalf"))(function(yHalf) {
return bind2(getField1(obj)("orthoNear"))(function(near) {
return bind2(getField1(obj)("orthoFar"))(function(far) {
return pure3(new Orthographic({
xHalf,
yHalf,
near,
far
}));
});
});
});
});
}
;
return new Left(new TypeMismatch("unknown Projection3D tag: " + v));
});
});
};
var decodePoint3 = function(j) {
return bind2(decodeJson1(j))(function(v) {
if (v.length === 3) {
return pure3(new Point3(v[0], v[1], v[2]));
}
;
return new Left(new TypeMismatch("Point3 expects [x, y, z]"));
});
};
var decodePairSS = function(j) {
return bind2(decodeJson22(j))(function(v) {
if (v.length === 2) {
return pure3(new Tuple(v[0], v[1]));
}
;
return new Left(new TypeMismatch("(String, String) expects [a, b]"));
});
};
var decodePairNN = function(j) {
return bind2(decodeJson1(j))(function(v) {
if (v.length === 2) {
return pure3(new Tuple(v[0], v[1]));
}
;
return new Left(new TypeMismatch("(Number, Number) expects [a, b]"));
});
};
var decodePairII = function(j) {
return bind2(decodeJson3(j))(function(v) {
if (v.length === 2) {
return pure3(new Tuple(v[0], v[1]));
}
;
return new Left(new TypeMismatch("Tuple expects [a, b]"));
});
};
var decodeMark3DKind = function(j) {
return bind2(decodeJson4(j))(function(v) {
if (v === "M3Scatter") {
return new Right(M3Scatter.value);
}
;
if (v === "M3Line") {
return new Right(M3Line.value);
}
;
if (v === "M3Wireframe") {
return new Right(M3Wireframe.value);
}
;
if (v === "M3Surface") {
return new Right(M3Surface.value);
}
;
if (v === "M3Bar") {
return new Right(M3Bar.value);
}
;
if (v === "M3Text") {
return new Right(M3Text.value);
}
;
if (v === "M3Stem") {
return new Right(M3Stem.value);
}
;
if (v === "M3Quiver") {
return new Right(M3Quiver.value);
}
;
if (v === "M3Trisurf") {
return new Right(M3Trisurf.value);
}
;
return new Left(new TypeMismatch("unknown Mark3DKind: " + v));
});
};
var decodeGrid = function(j) {
return decodeJson5(j);
};
var decodeFace3 = function(j) {
return bind2(decodeJson3(j))(function(v) {
if (v.length === 3) {
return pure3({
a: v[0],
b: v[1],
c: v[2]
});
}
;
return new Left(new TypeMismatch("Face3 expects [a, b, c]"));
});
};
var decodeColorbar3 = function(j) {
return bind2(decodeJson6(j))(function(v) {
if (v.length === 3) {
return bind2(decodeJson22(v[0]))(function(stops) {
return bind2(decodeJson7(v[1]))(function(vMin) {
return bind2(decodeJson7(v[2]))(function(vMax) {
return pure3({
stops,
vMin,
vMax
});
});
});
});
}
;
return new Left(new TypeMismatch("Colorbar3 expects [stops, min, max]"));
});
};
var decodeCamera3D = function(j) {
return bind2(decodeJson2(j))(function(obj) {
return bind2(bind2(getField22(obj)("cameraEye"))(decodePoint3))(function(eye) {
return bind2(bind2(getField22(obj)("cameraTarget"))(decodePoint3))(function(tgt) {
return bind2(getField22(obj)("cameraUp"))(function(upJ) {
return bind2(decodeVec3(upJ))(function(up) {
return pure3({
eye,
target: tgt,
up
});
});
});
});
});
});
};
var decodeBool3 = function(j) {
return bind2(decodeJson8(j))(function(v) {
if (v.length === 3) {
return pure3({
x: v[0],
y: v[1],
z: v[2]
});
}
;
return new Left(new TypeMismatch("(Bool,Bool,Bool) expects [x, y, z]"));
});
};
var decodeAxes3D = function(j) {
return bind2(decodeJson2(j))(function(obj) {
return bind2(getField1(obj)("axesXMin"))(function(xMin) {
return bind2(getField1(obj)("axesXMax"))(function(xMax) {
return bind2(getField1(obj)("axesYMin"))(function(yMin) {
return bind2(getField1(obj)("axesYMax"))(function(yMax) {
return bind2(getField1(obj)("axesZMin"))(function(zMin) {
return bind2(getField1(obj)("axesZMax"))(function(zMax) {
return bind2(getField32(obj)("axesNTicks"))(function(nTicks) {
return pure3({
xMin,
xMax,
yMin,
yMax,
zMin,
zMax,
nTicks
});
});
});
});
});
});
});
});
});
};
var decodeArrayOf = function(dec) {
return function(j) {
return bind2(decodeJson6(j))(function(v) {
return traverse2(dec)(v);
});
};
};
var decodeLayer3D = function(j) {
return bind2(optionalAt(decodeMark3DKind)(j)("lyr3Kind"))(function(kind) {
return bind2(optionalAt(decodeArrayOf(decodePoint3))(j)("lyr3Points"))(function(points) {
return bind2(optionalAt(decodeJson4)(j)("lyr3Color"))(function(color) {
return bind2(optionalAt(decodeJson7)(j)("lyr3Size"))(function(size3) {
return bind2(optionalAt(decodeJson7)(j)("lyr3Alpha"))(function(alpha) {
return bind2(optionalAt(decodeJson7)(j)("lyr3Width"))(function(width) {
return bind2(optionalAt(decodeArrayOf(decodePairII))(j)("lyr3Edges"))(function(edges) {
return bind2(optionalAt(decodeGrid)(j)("lyr3Grid"))(function(grid) {
return bind2(optionalAt(decodePairNN)(j)("lyr3XRange"))(function(xRange) {
return bind2(optionalAt(decodePairNN)(j)("lyr3YRange"))(function(yRange) {
return bind2(optionalAt(decodeJson9)(j)("lyr3Shaded"))(function(shaded) {
return bind2(optionalAt(decodeJson9)(j)("lyr3SurfaceWire"))(function(surfaceWire) {
return bind2(optionalAt(decodeJson4)(j)("lyr3EdgeColor"))(function(edgeColor) {
return bind2(optionalAt(decodeArrayOf(decodeJson4))(j)("lyr3PtColors"))(function(ptColors) {
return bind2(optionalAt(decodeArrayOf(decodePairSS))(j)("lyr3Legend"))(function(legend) {
return bind2(optionalAt(decodeColorbar3)(j)("lyr3Colorbar"))(function(colorbar) {
return bind2(optionalAt(decodeArrayOf(decodeJson7))(j)("lyr3PtSizes"))(function(ptSizes) {
return bind2(optionalAt(decodeArrayOf(decodeJson7))(j)("lyr3PtErrs"))(function(ptErrs) {
return bind2(optionalAt(decodeArrayOf(decodeJson4))(j)("lyr3Labels"))(function(labels) {
return bind2(optionalAt(decodeArrayOf(decodeVec3))(j)("lyr3Vectors"))(function(vectors) {
return bind2(optionalAt(decodeJson7)(j)("lyr3VecScale"))(function(vecScale) {
return bind2(optionalAt(decodeJson7)(j)("lyr3StemBaseZ"))(function(stemBaseZ) {
return bind2(optionalAt(decodeJson7)(j)("lyr3BarBaseZ"))(function(barBaseZ) {
return bind2(optionalAt(decodeJson4)(j)("lyr3BarStyle"))(function(barStyle) {
return bind2(optionalAt(decodeJson7)(j)("lyr3BarWidth"))(function(barWidth) {
return bind2(optionalAt(decodeArrayOf(decodeFace3))(j)("lyr3Faces"))(function(faces) {
return pure3({
kind,
points,
color,
size: size3,
alpha,
width,
edges,
grid,
xRange,
yRange,
shaded,
surfaceWire,
edgeColor,
ptColors,
legend,
colorbar,
ptSizes,
ptErrs,
labels,
vectors,
vecScale,
stemBaseZ,
barBaseZ,
barStyle,
barWidth,
faces
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
};
var decodeVisualSpec3D = function(j) {
return bind2(decodeJson2(j))(function(obj) {
return bind2(getField22(obj)("vs3Layers"))(function(layersJ) {
return bind2(decodeArrayOf(decodeLayer3D)(layersJ))(function(layers) {
return bind2(optionalAt(decodeJson4)(j)("vs3Title"))(function(title) {
return bind2(optionalAt(decodeCamera3D)(j)("vs3Camera"))(function(camera) {
return bind2(optionalAt(decodeProjection3D)(j)("vs3Proj"))(function(proj) {
return bind2(optionalAt(decodeAxes3D)(j)("vs3Axes"))(function(axes) {
return bind2(optionalAt(decodeJson10)(j)("vs3Width"))(function(width) {
return bind2(optionalAt(decodeJson10)(j)("vs3Height"))(function(height) {
return bind2(optionalAt(decodeJson7)(j)("vs3XAspect"))(function(xAspect) {
return bind2(optionalAt(decodeJson7)(j)("vs3YAspect"))(function(yAspect) {
return bind2(optionalAt(decodeJson7)(j)("vs3ZAspect"))(function(zAspect) {
return bind2(optionalAt(decodeBool3)(j)("vs3Log"))(function(logScale) {
return pure3({
layers,
title,
camera,
proj,
axes,
width,
height,
xAspect,
yAspect,
zAspect,
logScale
});
});
});
});
});
});
});
});
});
});
});
});
});
});
};
// output/Effect.Class/index.js
var monadEffectEffect = {
liftEffect: /* @__PURE__ */ identity(categoryFn),
Monad0: function() {
return monadEffect;
}
};
var liftEffect = function(dict) {
return dict.liftEffect;
};
// output/Effect.Console/foreign.js
var log2 = function(s) {
return function() {
console.log(s);
};
};
// output/Effect.Class.Console/index.js
var log3 = function(dictMonadEffect) {
var $67 = liftEffect(dictMonadEffect);
return function($68) {
return $67(log2($68));
};
};
// output/Examples.WebGLPlot/index.js
var map11 = /* @__PURE__ */ map(functorArray);
var bind3 = /* @__PURE__ */ bind(bindMaybe);
var append4 = /* @__PURE__ */ append(semigroupArray);
var map1 = /* @__PURE__ */ map(functorMaybe);
var show3 = /* @__PURE__ */ show(showInt);
var show12 = /* @__PURE__ */ show(showNumber);
var log4 = /* @__PURE__ */ log3(monadEffectEffect);
var pure4 = /* @__PURE__ */ pure(applicativeEffect);
var div1 = /* @__PURE__ */ div(euclideanRingInt);
var minimum2 = /* @__PURE__ */ minimum(ordNumber)(foldableArray);
var maximum3 = /* @__PURE__ */ maximum(ordNumber)(foldableArray);
var bindFlipped2 = /* @__PURE__ */ bindFlipped(bindMaybe);
var for_2 = /* @__PURE__ */ for_(applicativeEffect)(foldableArray);
var when4 = /* @__PURE__ */ when(applicativeEffect);
var eq13 = /* @__PURE__ */ eq(/* @__PURE__ */ eqMaybe(eqMark3DKind));
var show22 = /* @__PURE__ */ show(showJsonDecodeError);
var unsafeIndex2 = index;
var truncate = truncateFFI;
var toWireframe = function(l) {
return {
points: fromMaybe([])(l.points),
edges: map11(function(v) {
return {
i: v.value0,
j: v.value1
};
})(fromMaybe([])(l.edges)),
color: fromMaybe("#2ca02c")(l.color),
width: fromMaybe(1)(l.width)
};
};
var toTrisurfEdges = function(l) {
return {
points: fromMaybe([])(l.points),
edges: concatMap(function(f) {
return [{
i: f.a,
j: f.b
}, {
i: f.b,
j: f.c
}, {
i: f.c,
j: f.a
}];
})(fromMaybe([])(l.faces)),
color: "#2c3e50",
width: 1
};
};
var toTextLabels = function(l) {
var sz = fromMaybe(12)(l.size);
var pts = fromMaybe([])(l.points);
var labels = fromMaybe([])(l.labels);
var col = fromMaybe("#333333")(l.color);
return map11(function(v) {
return {
point: v.value0,
text: v.value1,
color: col,
size: sz
};
})(zip(pts)(labels));
};
var toSurfaceWire = function(l) {
var grid = fromMaybe([])(l.grid);
var nx = (function() {
var v2 = index(grid)(0);
if (v2 instanceof Just) {
return length(v2.value0);
}
;
if (v2 instanceof Nothing) {
return 0;
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 385, column 12 - line 387, column 27): " + [v2.constructor.name]);
})();
var ny = length(grid);
var v = fromMaybe(new Tuple(-1, 1))(l.xRange);
var v1 = fromMaybe(new Tuple(-1, 1))(l.yRange);
var zAt = function(i) {
return function(j) {
return fromMaybe(0)(bind3(index(grid)(i))(function(row) {
return index(row)(j);
}));
};
};
var yAt = function(i) {
var $94 = ny <= 1;
if ($94) {
return v1.value0;
}
;
return v1.value0 + (v1.value1 - v1.value0) * toNumber(i) / toNumber(ny - 1 | 0);
};
var xAt = function(j) {
var $95 = nx <= 1;
if ($95) {
return v.value0;
}
;
return v.value0 + (v.value1 - v.value0) * toNumber(j) / toNumber(nx - 1 | 0);
};
var upto = function(lo) {
return function(hi) {
var $96 = hi < lo;
if ($96) {
return [];
}
;
return range2(lo)(hi);
};
};
var pts = concatMap(function(i) {
return map11(function(j) {
return new Point3(xAt(j), yAt(i), zAt(i)(j));
})(upto(0)(nx - 1 | 0));
})(upto(0)(ny - 1 | 0));
var idx = function(i) {
return function(j) {
return (i * nx | 0) + j | 0;
};
};
var vEdges = concatMap(function(i) {
return map11(function(j) {
return {
i: idx(i)(j),
j: idx(i + 1 | 0)(j)
};
})(upto(0)(nx - 1 | 0));
})(upto(0)(ny - 2 | 0));
var hEdges = concatMap(function(i) {
return map11(function(j) {
return {
i: idx(i)(j),
j: idx(i)(j + 1 | 0)
};
})(upto(0)(nx - 2 | 0));
})(upto(0)(ny - 1 | 0));
return {
points: pts,
edges: append4(hEdges)(vEdges),
color: fromMaybe("#5b9bd5")(l.color),
width: 1
};
};
var toSurface = function(l) {
return {
grid: fromMaybe([])(l.grid),
xRange: (function() {
var v = fromMaybe(new Tuple(-1, 1))(l.xRange);
return {
min: v.value0,
max: v.value1
};
})(),
yRange: (function() {
var v = fromMaybe(new Tuple(-1, 1))(l.yRange);
return {
min: v.value0,
max: v.value1
};
})(),
color: fromMaybe("#5b9bd5")(l.color),
edgeColor: fromMaybe("#3a73a6")(l.edgeColor),
shaded: fromMaybe(true)(l.shaded)
};
};
var toStem = function(l) {
return {
points: fromMaybe([])(l.points),
baseZ: fromMaybe(0)(l.stemBaseZ),
color: fromMaybe("#1f77b4")(l.color),
markerSize: fromMaybe(5)(l.size),
alpha: fromMaybe(0.95)(l.alpha)
};
};
var toScatterColored = function(l) {
return function(cols) {
var sz = fromMaybe(5)(l.size);
var pts = fromMaybe([])(l.points);
var sizes = (function() {
if (l.ptSizes instanceof Just) {
return l.ptSizes.value0;
}
;
if (l.ptSizes instanceof Nothing) {
return replicate(length(pts))(sz);
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 250, column 15 - line 252, column 45): " + [l.ptSizes.constructor.name]);
})();
return {
points: pts,
colors: cols,
sizes,
alpha: fromMaybe(0.85)(l.alpha)
};
};
};
var toScatter = function(l) {
return {
points: fromMaybe([])(l.points),
color: fromMaybe("#1f77b4")(l.color),
size: fromMaybe(5)(l.size),
alpha: fromMaybe(0.85)(l.alpha)
};
};
var toQuiver = function(v) {
return function(l) {
var maxNum2 = function(x) {
return function(y) {
var $111 = x >= y;
if ($111) {
return x;
}
;
return y;
};
};
return {
starts: fromMaybe([])(l.points),
vectors: fromMaybe([])(l.vectors),
vecScale: fromMaybe(1)(l.vecScale),
color: fromMaybe("#1f77b4")(l.color),
spanMax: maxNum2(v.xMax - v.xMin)(maxNum2(v.yMax - v.yMin)(v.zMax - v.zMin))
};
};
};
var toLine = function(l) {
return {
points: fromMaybe([])(l.points),
color: fromMaybe("#1f77b4")(l.color),
width: fromMaybe(1.5)(l.width)
};
};
var toBar = function(v) {
return function(l) {
var frac = fromMaybe(0.04)(l.barWidth);
return {
tops: fromMaybe([])(l.points),
baseZ: fromMaybe(0)(l.barBaseZ),
halfWx: frac * (v.xMax - v.xMin),
halfWy: frac * (v.yMax - v.yMin),
color: fromMaybe("#5b9bd5")(l.color),
alpha: fromMaybe(1)(l.alpha),
errs: fromMaybe([])(l.ptErrs)
};
};
};
var rangeArr = range2;
var niceTicksFor = function(isLog) {
return function(lo) {
return function(hi) {
if (isLog) {
var k1 = round2(floor(hi));
var k0 = round2(ceil(lo));
var $115 = k1 >= k0;
if ($115) {
return map11(toNumber)(range2(k0)(k1));
}
;
return extendedBreaks(5)(lo)(hi);
}
;
var eps = (hi - lo) * 1e-6;
return filter(function(t) {
return t >= lo - eps && t <= hi + eps;
})(extendedBreaks(5)(lo)(hi));
};
};
};
var lg10 = function(v) {
return log((function() {
var $116 = v < 1e-12;
if ($116) {
return 1e-12;
}
;
return v;
})()) / log(10);
};
var lgIf = function(flag) {
return function(v) {
if (flag) {
return lg10(v);
}
;
return v;
};
};
var logAxes = function(f) {
return function(v) {
return {
nTicks: v.nTicks,
xMin: lgIf(f.x)(v.xMin),
xMax: lgIf(f.x)(v.xMax),
yMin: lgIf(f.y)(v.yMin),
yMax: lgIf(f.y)(v.yMax),
zMin: lgIf(f.z)(v.zMin),
zMax: lgIf(f.z)(v.zMax)
};
};
};
var logPoint = function(f) {
return function(v) {
return new Point3(lgIf(f.x)(v.value0), lgIf(f.y)(v.value1), lgIf(f.z)(v.value2));
};
};
var logLayer = function(f) {
return function(v) {
var logTuple = function(v1) {
return new Tuple(lg10(v1.value0), lg10(v1.value1));
};
return {
kind: v.kind,
color: v.color,
size: v.size,
alpha: v.alpha,
width: v.width,
edges: v.edges,
shaded: v.shaded,
surfaceWire: v.surfaceWire,
edgeColor: v.edgeColor,
ptColors: v.ptColors,
legend: v.legend,
colorbar: v.colorbar,
ptSizes: v.ptSizes,
ptErrs: v.ptErrs,
labels: v.labels,
vectors: v.vectors,
vecScale: v.vecScale,
stemBaseZ: v.stemBaseZ,
barBaseZ: v.barBaseZ,
barStyle: v.barStyle,
barWidth: v.barWidth,
faces: v.faces,
points: map1(map11(logPoint(f)))(v.points),
grid: (function() {
if (f.z) {
return map1(map11(map11(lg10)))(v.grid);
}
;
return v.grid;
})(),
xRange: (function() {
if (f.x) {
return map1(logTuple)(v.xRange);
}
;
return v.xRange;
})(),
yRange: (function() {
if (f.y) {
return map1(logTuple)(v.yRange);
}
;
return v.yRange;
})()
};
};
};
var fmtNum = function(v) {
var ri = round2(v);
var d = v - toNumber(ri);
var $133 = d < 5e-3 && d > -5e-3;
if ($133) {
return show3(ri);
}
;
return show12(toNumber(round2(v * 100)) / 100);
};
var fmtAxis = function(isLog) {
return function(v) {
if (isLog) {
return fmtNum(pow(10)(v));
}
;
return fmtNum(v);
};
};
var faceNormal3 = function(ax) {
return function(ay) {
return function(az) {
return function(bx) {
return function(by) {
return function(bz) {
return function(cx) {
return function(cy) {
return function(cz) {
var vz = cz - az;
var vy = cy - ay;
var vx = cx - ax;
var uz = bz - az;
var uy = by - ay;
var ux = bx - ax;
var nz = ux * vy - uy * vx;
var ny = uz * vx - ux * vz;
var nx = uy * vz - uz * vy;
var ln = sqrt(nx * nx + ny * ny + nz * nz);
var $135 = ln < 1e-12;
if ($135) {
return [0, 0, 1];
}
;
return [nx / ln, ny / ln, nz / ln];
};
};
};
};
};
};
};
};
};
var toTrisurfMesh = function(l) {
var pts = fromMaybe([])(l.points);
var tri = function(f) {
var v = index(pts)(f.c);
var v1 = index(pts)(f.b);
var v2 = index(pts)(f.a);
if (v2 instanceof Just && (v1 instanceof Just && v instanceof Just)) {
var nrm = faceNormal3(v2.value0.value0)(v2.value0.value1)(v2.value0.value2)(v1.value0.value0)(v1.value0.value1)(v1.value0.value2)(v.value0.value0)(v.value0.value1)(v.value0.value2);
return {
pos: [v2.value0.value0, v2.value0.value1, v2.value0.value2, v1.value0.value0, v1.value0.value1, v1.value0.value2, v.value0.value0, v.value0.value1, v.value0.value2],
nor: append4(nrm)(append4(nrm)(nrm))
};
}
;
return {
pos: [],
nor: []
};
};
var faces = fromMaybe([])(l.faces);
var tris = map11(tri)(faces);
return {
positions: concatMap(function(v) {
return v.pos;
})(tris),
normals: concatMap(function(v) {
return v.nor;
})(tris),
color: fromMaybe("#5b9bd5")(l.color),
alpha: fromMaybe(1)(l.alpha),
shaded: true
};
};
var errPoints = function(l) {
return function(pts) {
if (l.ptErrs instanceof Nothing) {
return [];
}
;
if (l.ptErrs instanceof Just) {
return concatMap(function(v) {
return [new Point3(v.value0.value0, v.value0.value1, v.value0.value2 - v.value1), new Point3(v.value0.value0, v.value0.value1, v.value0.value2 + v.value1)];
})(zip(pts)(l.ptErrs.value0));
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 614, column 19 - line 617, column 40): " + [l.ptErrs.constructor.name]);
};
};
var drawLayer = function(ctx) {
return function(mvp) {
return function(axes) {
return function(v) {
if (v.kind instanceof Just && v.kind.value0 instanceof M3Scatter) {
if (v.ptColors instanceof Just) {
return function __do() {
var ep = mkScatterColorProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] scatter color program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawScatterColored(ctx)(ep.value0)(mvp)(toScatterColored(v)(v.ptColors.value0))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 159, column 7 - line 161, column 74): " + [ep.constructor.name]);
};
}
;
if (v.ptColors instanceof Nothing) {
return function __do() {
var ep = mkScatterProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] scatter program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawScatter(ctx)(ep.value0)(mvp)(toScatter(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 164, column 7 - line 166, column 55): " + [ep.constructor.name]);
};
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 156, column 21 - line 166, column 55): " + [v.ptColors.constructor.name]);
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Line) {
return function __do() {
var ep = mkLineProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] line program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawLine(ctx)(ep.value0)(mvp)(toLine(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 169, column 5 - line 171, column 47): " + [ep.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Wireframe) {
return function __do() {
var ep = mkLineProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] wireframe program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawWireframe(ctx)(ep.value0)(mvp)(toWireframe(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 174, column 5 - line 176, column 57): " + [ep.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Surface) {
if (v.surfaceWire instanceof Just && v.surfaceWire.value0) {
return function __do() {
var ep = mkLineProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] surface wire program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawWireframe(ctx)(ep.value0)(mvp)(toSurfaceWire(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 183, column 7 - line 185, column 61): " + [ep.constructor.name]);
};
}
;
return function __do() {
var ep = mkSurfaceProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] surface program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawSurface(ctx)(ep.value0)(mvp)(fromMaybe(1)(v.alpha))(toSurface(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 188, column 7 - line 190, column 79): " + [ep.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Stem) {
return function __do() {
var elp = mkLineProgram(ctx)();
var esp = mkScatterProgram(ctx)();
if (elp instanceof Right && esp instanceof Right) {
return drawStem(ctx)(elp.value0)(esp.value0)(mvp)(toStem(v))();
}
;
if (elp instanceof Left) {
return log4("[plot] stem line program: " + elp.value0)();
}
;
if (esp instanceof Left) {
return log4("[plot] stem scatter program: " + esp.value0)();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 196, column 5 - line 199, column 62): " + [elp.constructor.name, esp.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Quiver) {
return function __do() {
var ep = mkLineProgram(ctx)();
if (ep instanceof Left) {
return log4("[plot] quiver line program: " + ep.value0)();
}
;
if (ep instanceof Right) {
return drawQuiver(ctx)(ep.value0)(mvp)(toQuiver(axes)(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 203, column 5 - line 205, column 56): " + [ep.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Bar) {
return function __do() {
var esp = mkSurfaceProgram(ctx)();
var elp = mkLineProgram(ctx)();
if (esp instanceof Right && elp instanceof Right) {
return drawBar(ctx)(esp.value0)(elp.value0)(mvp)(toBar(axes)(v))();
}
;
if (esp instanceof Left) {
return log4("[plot] bar surface program: " + esp.value0)();
}
;
if (elp instanceof Left) {
return log4("[plot] bar line program: " + elp.value0)();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 210, column 5 - line 213, column 58): " + [esp.constructor.name, elp.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Trisurf) {
return function __do() {
var esp = mkSurfaceProgram(ctx)();
var elp = mkLineProgram(ctx)();
(function() {
if (esp instanceof Left) {
return log4("[plot] trisurf surface program: " + esp.value0)();
}
;
if (esp instanceof Right) {
return drawTriMesh(ctx)(esp.value0)(mvp)(toTrisurfMesh(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 220, column 5 - line 222, column 57): " + [esp.constructor.name]);
})();
if (elp instanceof Left) {
return log4("[plot] trisurf line program: " + elp.value0)();
}
;
if (elp instanceof Right) {
return drawWireframe(ctx)(elp.value0)(mvp)(toTrisurfEdges(v))();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 223, column 5 - line 225, column 62): " + [elp.constructor.name]);
};
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Text) {
return pure4(unit);
}
;
if (v.kind instanceof Nothing) {
return log4("[plot] layer with no kind, skipped");
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 153, column 44 - line 229, column 54): " + [v.kind.constructor.name]);
};
};
};
};
var drawAxes = function(ctx) {
return function(mvp) {
return function(ax) {
return function __do() {
var ep = compileProgram(ctx)(lineVS)(lineFS)();
if (ep instanceof Left) {
return unit;
}
;
if (ep instanceof Right) {
useProgram(ctx)(ep.value0)();
var aPos = getAttribLocation(ctx)(ep.value0)("aPosition")();
var muvp = getUniformLocation(ctx)(ep.value0)("uMVP")();
var mc = getUniformLocation(ctx)(ep.value0)("uColor")();
if (muvp instanceof Just && mc instanceof Just) {
uniformMatrix4fv(ctx)(muvp.value0)(mat4ToArrayColMajor(mvp))();
var col = parseHexColor("#444444");
uniform4f(ctx)(mc.value0)(col.r)(col.g)(col.b)(1)();
var buf = createBuffer(ctx)();
var flat = concatMap(function(v) {
return [v.value0, v.value1, v.value2];
})(axesBoxEdges(ax));
uploadAttribVec3(ctx)(buf)(aPos)(flat)();
return drawArrays(ctx)(glLINES)(0)(div1(length(flat))(3))();
}
;
return unit;
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 516, column 3 - line 535, column 26): " + [ep.constructor.name]);
};
};
};
};
var defaultPerspective = function(d) {
return new Perspective({
fov: pi / 4,
aspect: d.w / d.h,
near: 0.1,
far: 100
});
};
var concatMapA = concatMap;
var layerPoints = function(v) {
if (v.kind instanceof Just && v.kind.value0 instanceof M3Surface) {
var grid = fromMaybe([])(v.grid);
var v1 = fromMaybe(new Tuple(-1, 1))(v.xRange);
var v2 = fromMaybe(new Tuple(-1, 1))(v.yRange);
var ny = length(grid);
return concatMapA(function(rowIx) {
var v3 = unsafeIndex2(grid)(rowIx);
if (v3 instanceof Just) {
var yAt = (function() {
var $232 = ny <= 1;
if ($232) {
return v2.value0;
}
;
return v2.value0 + (v2.value1 - v2.value0) * toNumber(rowIx) / toNumber(ny - 1 | 0);
})();
var nx = length(v3.value0);
return concatMapA(function(colIx) {
var v4 = unsafeIndex2(v3.value0)(colIx);
if (v4 instanceof Just) {
var xAt = (function() {
var $234 = nx <= 1;
if ($234) {
return v1.value0;
}
;
return v1.value0 + (v1.value1 - v1.value0) * toNumber(colIx) / toNumber(nx - 1 | 0);
})();
return [new Point3(xAt, yAt, v4.value0)];
}
;
if (v4 instanceof Nothing) {
return [];
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 586, column 37 - line 591, column 30): " + [v4.constructor.name]);
})(rangeArr(0)(nx - 1 | 0));
}
;
if (v3 instanceof Nothing) {
return [];
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 581, column 30 - line 592, column 23): " + [v3.constructor.name]);
})(rangeArr(0)(ny - 1 | 0));
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Bar) {
var tops = fromMaybe([])(v.points);
var bz = fromMaybe(0)(v.barBaseZ);
var bases = map11(function(v12) {
return new Point3(v12.value0, v12.value1, bz);
})(tops);
return append4(tops)(append4(bases)(errPoints(v)(tops)));
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Stem) {
var tops = fromMaybe([])(v.points);
var bz = fromMaybe(0)(v.stemBaseZ);
var bases = map11(function(v12) {
return new Point3(v12.value0, v12.value1, bz);
})(tops);
return append4(tops)(append4(bases)(errPoints(v)(tops)));
}
;
if (v.kind instanceof Just && v.kind.value0 instanceof M3Quiver) {
return fromMaybe([])(v.points);
}
;
var pts = fromMaybe([])(v.points);
return append4(pts)(errPoints(v)(pts));
};
var canvasDims = canvasDimsFFI;
var cameraDistance = function(v) {
return Nothing.value;
};
var axisTicksOf = function(v) {
return function(f) {
return {
xs: niceTicksFor(f.x)(v.xMin)(v.xMax),
ys: niceTicksFor(f.y)(v.yMin)(v.yMax),
zs: niceTicksFor(f.z)(v.zMin)(v.zMax)
};
};
};
var axisTickLabels3D = function(v) {
return function(f) {
return function(t) {
var maxN3 = function(p) {
return function(q) {
return function(r) {
var $258 = p >= q;
if ($258) {
var $259 = p >= r;
if ($259) {
return p;
}
;
return r;
}
;
var $260 = q >= r;
if ($260) {
return q;
}
;
return r;
};
};
};
var span_ = maxN3(v.xMax - v.xMin)(v.yMax - v.yMin)(v.zMax - v.zMin);
var off = 0.05 * span_;
var mk = function(world) {
return function(txt) {
return {
point: world,
text: txt,
color: "#333333",
size: 11
};
};
};
var xL = map11(function(x) {
return mk(new Point3(x, v.yMin - off, v.zMin))(fmtAxis(f.x)(x));
})(t.xs);
var yL = map11(function(y) {
return mk(new Point3(v.xMin - off, y, v.zMin))(fmtAxis(f.y)(y));
})(t.ys);
var zL = map11(function(z) {
return mk(new Point3(v.xMin - off, v.yMin - off, z))(fmtAxis(f.z)(z));
})(t.zs);
return append4(xL)(append4(yL)(zL));
};
};
};
var autoAxesFromLayers = function(ls) {
var pts = concatMapA(layerPoints)(ls);
if (pts.length === 0) {
return {
xMin: -1,
xMax: 1,
yMin: -1,
yMax: 1,
zMin: -1,
zMax: 1,
nTicks: 5
};
}
;
var zs = map11(function(v) {
return v.value2;
})(pts);
var ys = map11(function(v) {
return v.value1;
})(pts);
var xs = map11(function(v) {
return v.value0;
})(pts);
return {
xMin: fromMaybe(-1)(minimum2(xs)),
xMax: fromMaybe(1)(maximum3(xs)),
yMin: fromMaybe(-1)(minimum2(ys)),
yMax: fromMaybe(1)(maximum3(ys)),
zMin: fromMaybe(-1)(minimum2(zs)),
zMax: fromMaybe(1)(maximum3(zs)),
nTicks: 5
};
};
var attachOrbitHandlers = function(c) {
return function(h) {
return function() {
return _attachOrbitHandlers(c, h);
};
};
};
var applyLogSpec = function(f) {
return function(vs) {
return {
title: vs.title,
camera: vs.camera,
proj: vs.proj,
width: vs.width,
height: vs.height,
xAspect: vs.xAspect,
yAspect: vs.yAspect,
zAspect: vs.zAspect,
logScale: vs.logScale,
layers: map11(logLayer(f))(vs.layers),
axes: map1(logAxes(f))(vs.axes)
};
};
};
var applyAspect = function(v) {
return function(sx) {
return function(sy) {
return function(sz) {
return function(mvp) {
var $279 = sx === 1 && (sy === 1 && sz === 1);
if ($279) {
return mvp;
}
;
var cz = (v.zMin + v.zMax) / 2;
var cy = (v.yMin + v.yMax) / 2;
var cx = (v.xMin + v.xMax) / 2;
var model = multMat4(translateMat4(cx)(cy)(cz))(multMat4(scaleMat4(sx)(sy)(sz))(translateMat4(-cx)(-cy)(-cz)));
return multMat4(mvp)(model);
};
};
};
};
};
var setupAndRender = function(canvas) {
return function(v) {
var vs = (function() {
if (v.logScale instanceof Just && (v.logScale.value0.x || (v.logScale.value0.y || v.logScale.value0.z))) {
return applyLogSpec(v.logScale.value0)(v);
}
;
return v;
})();
return function __do() {
var ec = initWebGL(canvas)();
if (ec instanceof Left) {
return log4("[plot] WebGL init: " + ec.value0)();
}
;
if (ec instanceof Right) {
var initialDist = fromMaybe(3)(bindFlipped2(cameraDistance)(vs.camera));
var orbitRef = $$new(defaultOrbitZUp(initialDist))();
var initDims = canvasDims(canvas)();
var proj = fromMaybe(defaultPerspective(initDims))(vs.proj);
var logF = fromMaybe({
x: false,
y: false,
z: false
})(vs.logScale);
var axes = fromMaybe(autoAxesFromLayers(vs.layers))(vs.axes);
var ticks3 = axisTicksOf(axes)(logF);
var aspZ = fromMaybe(1)(vs.zAspect);
var aspY = fromMaybe(1)(vs.yAspect);
var aspX = fromMaybe(1)(vs.xAspect);
var redraw = function __do2() {
var d = canvasDims(canvas)();
viewport(ec.value0)(0)(0)(truncate(d.w))(truncate(d.h))();
clearColor(ec.value0)(1)(1)(1)(1)();
clear(ec.value0)(glCOLOR_BUFFER_BIT + glDEPTH_BUFFER_BIT | 0)();
var orbit = read(orbitRef)();
var cam = orbitToCamera(orbit);
var mvp = applyAspect(axes)(aspX)(aspY)(aspZ)(computeMVP(cam)(proj));
var epp = mkSurfaceProgram(ec.value0)();
var elp = mkLineProgram(ec.value0)();
(function() {
if (epp instanceof Right && elp instanceof Right) {
return drawPanes(ec.value0)(epp.value0)(elp.value0)(mvp)(axes)(ticks3)();
}
;
return unit;
})();
drawAxes(ec.value0)(mvp)(axes)();
for_2(vs.layers)(drawLayer(ec.value0)(mvp)(axes))();
var ov = ensureOverlay(canvas)();
clearOverlay(ov)();
var mvpArr = mat4ToArrayColMajor(mvp);
drawLabels(ov)(mvpArr)(d.w)(d.h)(axisTickLabels3D(axes)(logF)(ticks3))();
return for_2(vs.layers)(function(v1) {
return function __do3() {
when4(eq13(v1.kind)(new Just(M3Text.value)))(drawLabels(ov)(mvpArr)(d.w)(d.h)(toTextLabels(v1)))();
(function() {
if (v1.legend instanceof Just) {
return drawLegend(ov)(map11(function(v2) {
return {
label: v2.value0,
color: v2.value1
};
})(v1.legend.value0))();
}
;
if (v1.legend instanceof Nothing) {
return unit;
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 129, column 17 - line 131, column 40): " + [v1.legend.constructor.name]);
})();
if (v1.colorbar instanceof Just) {
return drawColorbar(ov)(v1.colorbar.value0)();
}
;
if (v1.colorbar instanceof Nothing) {
return unit;
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 132, column 17 - line 134, column 39): " + [v1.colorbar.constructor.name]);
};
})();
};
redraw();
return attachOrbitHandlers(canvas)({
onRotate: function(dT, dP) {
modify_(rotateOrbit(dT)(dP))(orbitRef)();
return redraw();
},
onZoom: function(factor) {
modify_(zoomOrbit(factor))(orbitRef)();
return redraw();
},
onPan: function(dx, dy) {
modify_(panOrbit(dx)(dy))(orbitRef)();
return redraw();
}
})();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 81, column 3 - line 146, column 10): " + [ec.constructor.name]);
};
};
};
var renderFromSpec = function(canvasId) {
return function(json) {
var v = decodeVisualSpec3D(json);
if (v instanceof Left) {
return log4("[plot] decode failed: " + show22(v.value0));
}
;
if (v instanceof Right) {
return function __do() {
var mc = canvasById(canvasId)();
if (mc instanceof Nothing) {
return log4("[plot] canvas not found: " + canvasId)();
}
;
if (mc instanceof Just) {
return setupAndRender(mc.value0)(v.value0)();
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 69, column 5 - line 71, column 48): " + [mc.constructor.name]);
};
}
;
throw new Error("Failed pattern match at Examples.WebGLPlot (line 65, column 32 - line 71, column 48): " + [v.constructor.name]);
};
};
var main = /* @__PURE__ */ exposeGlobal(/* @__PURE__ */ mkEffectFn2(renderFromSpec));
// <stdin>
main();
})();