@ndmspc/ndmvr-core 1.0.1 → 1.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -1,28 +1,28 @@
1
- var we = Object.defineProperty;
2
- var Rt = (n) => {
1
+ var Ee = Object.defineProperty;
2
+ var se = (n) => {
3
3
  throw TypeError(n);
4
4
  };
5
- var be = (n, t, e) => t in n ? we(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
6
- var m = (n, t, e) => be(n, typeof t != "symbol" ? t + "" : t, e), Kt = (n, t, e) => t.has(n) || Rt("Cannot " + e);
7
- var w = (n, t, e) => (Kt(n, t, "read from private field"), e ? e.call(n) : t.get(n)), q = (n, t, e) => t.has(n) ? Rt("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(n) : t.set(n, e), I = (n, t, e, A) => (Kt(n, t, "write to private field"), A ? A.call(n, e) : t.set(n, e), e);
8
- import { ReplaySubject as ft, Subject as ne, BehaviorSubject as Lt, filter as ct, concatMap as ve, from as xe, finalize as ye, EMPTY as Ce } from "rxjs";
9
- import { openFile as Be, parse as _t, makeImage as De, create as ze, build3d as re } from "jsroot";
10
- import { Vector3 as H, Color as X, Vector2 as oe, Raycaster as Me, BoxGeometry as xt, EdgesGeometry as $t, InstancedBufferGeometry as yt, InstancedBufferAttribute as L, LineSegments as te, ShaderMaterial as ce, Mesh as Ct, Object3D as Oe, Box3 as Bt, PlaneGeometry as ae, MeshBasicMaterial as le, DoubleSide as he, TextureLoader as He, Loader as Pe, FileLoader as Ye, ShapePath as qe, Group as ue } from "three";
11
- class Ot {
12
- constructor(t, e, A, s) {
13
- this.url = t, this.ws = null, this.channel = A, e && this.connect(), this.initTime = Date.now(), this.timeout = s || 6e4, this.timeFlag = !0;
5
+ var Qe = (n, e, t) => e in n ? Ee(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
6
+ var m = (n, e, t) => Qe(n, typeof e != "symbol" ? e + "" : e, t), ie = (n, e, t) => e.has(n) || se("Cannot " + t);
7
+ var C = (n, e, t) => (ie(n, e, "read from private field"), t ? t.call(n) : e.get(n)), N = (n, e, t) => e.has(n) ? se("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(n) : e.set(n, t), O = (n, e, t, A) => (ie(n, e, "write to private field"), A ? A.call(n, t) : e.set(n, t), t);
8
+ import { ReplaySubject as ft, Subject as ge, BehaviorSubject as kt, filter as ct, concatMap as ze, from as Ge, finalize as Te, EMPTY as De } from "rxjs";
9
+ import { openFile as Ne, parse as ne, makeImage as je, create as Oe, build3d as fe } from "jsroot";
10
+ import { TextureLoader as de, SRGBColorSpace as Ye, SpriteMaterial as Ue, Sprite as Pe, Vector3 as D, Color as U, Vector2 as me, Raycaster as He, BoxGeometry as yt, EdgesGeometry as re, InstancedBufferGeometry as It, InstancedBufferAttribute as Z, LineSegments as oe, ShaderMaterial as Ce, Mesh as vt, Object3D as Se, Box3 as Et, PlaneGeometry as Be, MeshBasicMaterial as we, DoubleSide as pe, Loader as Fe, FileLoader as We, ShapePath as Xe, Group as be } from "three";
11
+ class Dt {
12
+ constructor(e, t, A, s) {
13
+ this.url = e, this.ws = null, this.channel = A, t && this.connect(), this.initTime = Date.now(), this.timeout = s || 6e4, this.timeFlag = !0;
14
14
  }
15
15
  connect() {
16
- return this.ws === null && (console.log("Trying to establish websocket connection on address: " + this.url), this.ws = new WebSocket(this.url)), this.ws.onerror = (t) => {
16
+ return this.ws === null && (console.log("Trying to establish websocket connection on address: " + this.url), this.ws = new WebSocket(this.url)), this.ws.onerror = (e) => {
17
17
  this.timeFlag || (this.initTime = Date.now(), this.timeFlag = !0), setTimeout(() => {
18
18
  this.initTime + this.timeout < Date.now() || this.connect();
19
19
  }, 500);
20
- }, this.ws.onclose = (t) => {
20
+ }, this.ws.onclose = (e) => {
21
21
  this.disconnect(), this.timeFlag || (this.initTime = Date.now(), this.timeFlag = !0), setTimeout(() => {
22
22
  this.initTime + this.timeout < Date.now() || this.connect();
23
23
  }, 500);
24
- }, this.ws.onmessage = (t) => {
25
- this.channel.next(t.data);
24
+ }, this.ws.onmessage = (e) => {
25
+ this.channel.next(e.data);
26
26
  }, this.ws.onopen = () => {
27
27
  console.log("Websocket connection established on address: " + this.url), this.timeFlag = !1;
28
28
  }, this;
@@ -30,151 +30,180 @@ class Ot {
30
30
  disconnect() {
31
31
  this.ws && (this.ws.close(), this.ws = null);
32
32
  }
33
- send(t) {
34
- this.ws === null && this.connect(), this.ws.send(t);
33
+ send(e) {
34
+ this.ws === null && this.connect(), this.ws.send(e);
35
35
  }
36
- subscribe(t) {
36
+ subscribe(e) {
37
37
  return this.channel.subscribe({
38
- next: (A) => t(A)
38
+ next: (A) => e(A)
39
39
  });
40
40
  }
41
- unsubscribe(t) {
42
- t.unsubscribe();
41
+ unsubscribe(e) {
42
+ e.unsubscribe();
43
43
  }
44
44
  }
45
- let Ht;
46
- var et, S;
47
- class Ee {
45
+ let Nt;
46
+ var At, J;
47
+ class Je {
48
48
  constructor() {
49
- q(this, et);
50
- q(this, S);
49
+ N(this, At);
50
+ N(this, J);
51
51
  /**
52
52
  * Function that adds ws to its map,
53
53
  * takes searchParams, can obtain it by <new URL(window.location.href).searchParams>
54
54
  * if not defined otherwise, client automatically connects to that websocket,
55
55
  * otherwise connectWs(url) must be called.
56
56
  * */
57
- m(this, "createWsFromParams", (t) => {
58
- const e = t.get("autoConnect") === "true", A = Number(t.get("timeout"));
59
- t.getAll("ws").forEach((s) => {
60
- this.createWs(s, e, A);
57
+ m(this, "createWsFromParams", (e) => {
58
+ const t = e.get("autoConnect") === "true", A = Number(e.get("timeout"));
59
+ e.getAll("ws").forEach((s) => {
60
+ this.createWs(s, t, A);
61
61
  });
62
62
  });
63
- m(this, "createWs", (t, e, A) => {
64
- w(this, S).has(t) && w(this, S).delete(t);
65
- const s = new Ot(t, e, w(this, et), A);
66
- w(this, S).set(t, s);
63
+ m(this, "createWs", (e, t, A) => {
64
+ C(this, J).has(e) && C(this, J).delete(e);
65
+ const s = new Dt(e, t, C(this, At), A);
66
+ C(this, J).set(e, s);
67
67
  });
68
- m(this, "getBrokerByUrl", (t, e) => {
69
- let A = w(this, S).get(t);
70
- return A || (A = new Ot(t, e, w(this, et)), w(this, S).set(t, A)), e && A.connect(), A;
68
+ m(this, "getBrokerByUrl", (e, t) => {
69
+ let A = C(this, J).get(e);
70
+ return A || (A = new Dt(e, t, C(this, At)), C(this, J).set(e, A)), t && A.connect(), A;
71
71
  });
72
- m(this, "connectWsByUrl", (t) => {
73
- let e = w(this, S).get(t);
74
- return e || (e = new Ot(t, !0, w(this, et)), w(this, S).set(t, e)), e.connect(), e;
72
+ m(this, "connectWsByUrl", (e) => {
73
+ let t = C(this, J).get(e);
74
+ return t || (t = new Dt(e, !0, C(this, At)), C(this, J).set(e, t)), t.connect(), t;
75
75
  });
76
76
  /**
77
77
  * Function that disconnects ws,
78
78
  * @param url if is defined, disconnects from that ws, if it's not disconnectAll
79
79
  * */
80
- m(this, "disconnectWsByUrl", (t) => {
81
- t ? w(this, S).get(t).disconnect() : w(this, S).forEach((e) => {
82
- e.disconnect();
80
+ m(this, "disconnectWsByUrl", (e) => {
81
+ e ? C(this, J).get(e).disconnect() : C(this, J).forEach((t) => {
82
+ t.disconnect();
83
83
  });
84
84
  });
85
- m(this, "getSubject", () => w(this, et));
86
- I(this, et, new ft(1)), I(this, S, /* @__PURE__ */ new Map());
85
+ m(this, "getSubject", () => C(this, At));
86
+ O(this, At, new ft(1)), O(this, J, /* @__PURE__ */ new Map());
87
87
  }
88
88
  }
89
- et = new WeakMap(), S = new WeakMap();
90
- const Ie = () => (Ht || (Ht = new Ee()), Ht), MA = () => {
91
- Ie().createWsFromParams(new URL(window.location.href).searchParams);
92
- }, OA = async (n) => {
89
+ At = new WeakMap(), J = new WeakMap();
90
+ const Ve = () => (Nt || (Nt = new Je()), Nt), XA = () => {
91
+ Ve().createWsFromParams(new URL(window.location.href).searchParams);
92
+ }, JA = async (n) => {
93
93
  try {
94
- const t = await fetch(n);
95
- if (!t.ok)
96
- throw new Error(`Response status: ${t.status}`);
97
- return t.json();
98
- } catch (t) {
99
- throw t;
94
+ const e = await fetch(n);
95
+ if (!e.ok)
96
+ throw new Error(`Response status: ${e.status}`);
97
+ return e.json();
98
+ } catch (e) {
99
+ throw e;
100
100
  }
101
101
  };
102
- let Pt;
102
+ let jt;
103
103
  var ht;
104
- class Xe {
104
+ class Le {
105
105
  constructor() {
106
- q(this, ht);
107
- I(this, ht, new ne());
106
+ N(this, ht);
107
+ O(this, ht, new ge());
108
108
  }
109
109
  getObservable() {
110
- return w(this, ht).asObservable();
110
+ return C(this, ht).asObservable();
111
111
  }
112
- next(t) {
113
- w(this, ht).next(t);
112
+ next(e) {
113
+ C(this, ht).next(e);
114
114
  }
115
115
  }
116
116
  ht = new WeakMap();
117
- const Ge = () => (Pt || (Pt = new Xe()), Pt);
118
- let Yt;
119
- var st;
120
- class Ve {
117
+ const Ze = () => (jt || (jt = new Le()), jt);
118
+ let Ot;
119
+ var nt;
120
+ class qe {
121
121
  constructor() {
122
- q(this, st);
123
- I(this, st, new Lt({
122
+ N(this, nt);
123
+ O(this, nt, new kt({
124
124
  inputDevice: "keyboard"
125
125
  }));
126
126
  }
127
127
  getObservable() {
128
- return w(this, st).asObservable();
128
+ return C(this, nt).asObservable();
129
129
  }
130
- next(t) {
131
- let e = w(this, st).getValue();
132
- t.inputDevice && (e.inputDevice = t.inputDevice), w(this, st).next(t);
130
+ next(e) {
131
+ let t = C(this, nt).getValue();
132
+ e.inputDevice && (t.inputDevice = e.inputDevice), C(this, nt).next(e);
133
133
  }
134
134
  }
135
- st = new WeakMap();
136
- const de = () => (Yt || (Yt = new Ve()), Yt);
137
- let qt;
138
- var it;
139
- class Qe {
135
+ nt = new WeakMap();
136
+ const Me = () => (Ot || (Ot = new qe()), Ot);
137
+ let Yt = /* @__PURE__ */ new Map();
138
+ var rt;
139
+ class ke {
140
140
  constructor() {
141
- q(this, it);
142
- I(this, it, new Lt({
141
+ N(this, rt);
142
+ O(this, rt, new kt({
143
143
  sets: [],
144
144
  selectedSet: [],
145
145
  arrays: ["content"],
146
- selectedArray: "content"
146
+ selectedArray: "content",
147
+ minMaxValue: []
147
148
  }));
148
149
  }
149
150
  getObservable() {
150
- return w(this, it).asObservable();
151
+ return C(this, rt).asObservable();
151
152
  }
152
153
  getValue() {
153
- return w(this, it).getValue();
154
+ return C(this, rt).getValue();
154
155
  }
155
- next(t) {
156
- w(this, it).next(t);
156
+ next(e) {
157
+ C(this, rt).next(e);
157
158
  }
158
159
  }
159
- it = new WeakMap();
160
- const tt = () => (qt || (qt = new Qe()), qt);
161
- let Et;
162
- var nt;
163
- class Fe {
160
+ rt = new WeakMap();
161
+ const k = (n) => {
162
+ if (!n) throw new Error("StateSubject id is undefined");
163
+ return Yt.get(n) || Yt.set(n, new ke()), Yt.get(n);
164
+ };
165
+ let Ut;
166
+ var K;
167
+ class Re {
164
168
  constructor() {
165
- q(this, nt);
166
- I(this, nt, new ft());
169
+ N(this, K);
170
+ O(this, K, new ft());
167
171
  }
168
172
  /**
169
173
  * Function that takes functions and proposes them to histogram with add flag.
170
174
  * @param input can be Array of objects with appropriate flags and functions, or single object with flag and function.
171
175
  * */
172
- addFunctions(t) {
173
- if (!t) return;
174
- let e;
175
- t instanceof Array ? e = t : e = Array.of(t), e.forEach((A) => {
176
+ addFunctions(e) {
177
+ if (!e) return;
178
+ let t;
179
+ e instanceof Array ? t = e : t = Array.of(e), t.forEach((A) => {
180
+ let s = A.target.id;
181
+ s instanceof Array || (s = Array.of(s)), C(this, K).next({
182
+ flag: "add",
183
+ target: {
184
+ entity: A.target.entity,
185
+ id: s
186
+ },
187
+ event: A.event,
188
+ function: A.function
189
+ });
190
+ });
191
+ }
192
+ /**
193
+ * Method to take functions and proposes them to histogram with set flag.
194
+ * @param input can be Array of objects with appropriate flags and functions, or single object with flag and function.
195
+ * */
196
+ setFunctions(e) {
197
+ if (!e) return;
198
+ let t;
199
+ e instanceof Array ? t = e : t = Array.of(e), t.forEach((A) => {
200
+ C(this, K).next({
201
+ flag: "removeAll",
202
+ target: A.target
203
+ });
204
+ }), t.forEach((A) => {
176
205
  let s = A.target.id;
177
- s instanceof Array || (s = Array.of(s)), w(this, nt).next({
206
+ s instanceof Array || (s = Array.of(s)), C(this, K).next({
178
207
  flag: "add",
179
208
  target: {
180
209
  entity: A.target.entity,
@@ -188,13 +217,13 @@ class Fe {
188
217
  /**
189
218
  * Function that takes array of functions and proposes them to histogram with delete flag.
190
219
  * */
191
- removeFunctions(t) {
192
- if (!t) return;
193
- let e;
194
- t instanceof Array ? e = t : e = Array.of(t), e.forEach((A) => {
220
+ removeFunctions(e) {
221
+ if (!e) return;
222
+ let t;
223
+ e instanceof Array ? t = e : t = Array.of(e), t.forEach((A) => {
195
224
  console.log(A);
196
225
  let s = A.target.id;
197
- s instanceof Array || (s = Array.of(s)), w(this, nt).next({
226
+ s instanceof Array || (s = Array.of(s)), C(this, K).next({
198
227
  flag: A.event ? "remove" : "removeAll",
199
228
  target: {
200
229
  entity: A.target.entity,
@@ -206,403 +235,420 @@ class Fe {
206
235
  });
207
236
  }
208
237
  getObservable() {
209
- return w(this, nt).asObservable();
238
+ return C(this, K).asObservable();
210
239
  }
211
240
  }
212
- nt = new WeakMap();
213
- const fe = () => (Et || (Et = new Fe()), Et);
214
- var Dt, zt, Mt, wt;
215
- class Te {
216
- constructor(t) {
217
- q(this, Dt);
218
- q(this, zt);
219
- q(this, Mt);
220
- q(this, wt);
221
- I(this, Dt, t), I(this, zt, this.open(t));
222
- }
223
- static async open(t) {
224
- return Be(t);
225
- }
226
- async getHistogram(t, e, A) {
227
- if (t === 0)
228
- return w(this, Mt).readObject("hMap");
241
+ K = new WeakMap();
242
+ const xe = () => (Ut || (Ut = new Re()), Ut);
243
+ var Qt, zt, Gt, pt;
244
+ class Ke {
245
+ constructor(e) {
246
+ N(this, Qt);
247
+ N(this, zt);
248
+ N(this, Gt);
249
+ N(this, pt);
250
+ O(this, Qt, e), O(this, zt, this.open(e));
251
+ }
252
+ static async open(e) {
253
+ return Ne(e);
254
+ }
255
+ async getHistogram(e, t, A) {
256
+ if (e === 0)
257
+ return C(this, Gt).readObject("hMap");
229
258
  {
230
- let s = w(this, wt).reduce((i, o) => i * o, 1);
231
- for (let i = 0; i <= t; i++)
232
- s /= w(this, wt)[i];
259
+ let s = C(this, pt).reduce((i, r) => i * r, 1);
260
+ for (let i = 0; i <= e; i++)
261
+ s /= C(this, pt)[i];
233
262
  }
234
263
  }
235
- static async parseFile(t) {
236
- const e = await this.open(t);
237
- await this.computeMaxInstancesPerLayer(e);
264
+ static async parseFile(e) {
265
+ const t = await this.open(e);
266
+ await this.computeMaxInstancesPerLayer(t);
238
267
  }
239
- static async computeMaxInstancesPerLayer(t) {
240
- if (!t) return;
241
- const e = await t.readObject("hMap");
242
- e.children = {};
243
- const A = e.fXaxis.fNbins * e.fYaxis.fNbins * e.fZaxis.fNbins;
268
+ static async computeMaxInstancesPerLayer(e) {
269
+ if (!e) return;
270
+ const t = await e.readObject("hMap");
271
+ t.children = {};
272
+ const A = t.fXaxis.fNbins * t.fYaxis.fNbins * t.fZaxis.fNbins;
244
273
  let s = [];
245
274
  s.push(A);
246
- const i = async (c, r) => {
247
- for (const a of Object.keys(e.children))
248
- for (let u = 0; u < c.length; u += 100) {
249
- const d = [], g = Math.min(u + 100, c.length);
250
- for (let p = u; p < g; p++)
251
- d.push(r.readObject(`content/${c[p].fName}/${a}`));
252
- console.log(`Processing batch: ${u} to ${g - 1} (${d.length} items)`), await Promise.all(d);
275
+ const i = async (a, o) => {
276
+ for (const l of Object.keys(t.children))
277
+ for (let u = 0; u < a.length; u += 100) {
278
+ const g = [], f = Math.min(u + 100, a.length);
279
+ for (let d = u; d < f; d++)
280
+ g.push(o.readObject(`content/${a[d].fName}/${l}`));
281
+ console.log(`Processing batch: ${u} to ${f - 1} (${g.length} items)`), await Promise.all(g);
253
282
  }
254
- return console.log("done"), c.forEach((a) => {
283
+ return console.log("done"), a.forEach((l) => {
255
284
  }), s;
256
- }, o = await t.readObject("content");
257
- return (await t.readObject(`content/${o.fKeys[0].fName}`)).fKeys.forEach((c) => {
258
- e.children[c.fName] = [];
259
- }), console.log(e), i(o.fKeys, t), s;
285
+ }, r = await e.readObject("content");
286
+ return (await e.readObject(`content/${r.fKeys[0].fName}`)).fKeys.forEach((a) => {
287
+ t.children[a.fName] = [];
288
+ }), console.log(t), i(r.fKeys, e), s;
260
289
  }
261
290
  }
262
- Dt = new WeakMap(), zt = new WeakMap(), Mt = new WeakMap(), wt = new WeakMap();
263
- function We(n, t, e, { scale: A, padding: s, origin: i }) {
264
- const o = n.config ?? {};
265
- o.environment || (o.environment = {}), o.environment.histogramPads || (o.environment.histogramPads = []);
266
- const l = o.environment.histogramPads;
267
- let c = 1, r = t.length;
268
- if (typeof e == "string") {
269
- const d = e.match(/^grid(\d+)x(\d+)$/i);
270
- d ? (c = parseInt(d[1], 10), r = parseInt(d[2], 10)) : (e === "simple" || e === "flex") && (c = 1, r = t.length);
271
- }
272
- c * r < t.length && (r = Math.ceil(Math.sqrt(t.length)), c = Math.ceil(t.length / r));
273
- let a = 0, u = 0;
274
- return t.forEach((d) => {
275
- const g = i.x + u * (A.x + s.x) + A.x / 2, p = i.y + (c - 1 - a) * (A.y + s.y) + A.y / 2, v = i.z - A.z / 2;
276
- l.push({
277
- id: d,
278
- position: { x: g, y: p, z: v },
291
+ Qt = new WeakMap(), zt = new WeakMap(), Gt = new WeakMap(), pt = new WeakMap();
292
+ const $e = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs0AAAKSCAYAAAApl+ajAAAIHHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmFwcC5kaWFncmFtcy5uZXQlMjIlMjBhZ2VudCUzRCUyMk1vemlsbGElMkY1LjAlMjAoV2luZG93cyUyME5UJTIwMTAuMCUzQiUyMFdpbjY0JTNCJTIweDY0JTNCJTIwcnYlM0ExNDcuMCklMjBHZWNrbyUyRjIwMTAwMTAxJTIwRmlyZWZveCUyRjE0Ny4wJTIyJTIwdmVyc2lvbiUzRCUyMjI5LjMuNCUyMiUyMHNjYWxlJTNEJTIyMSUyMiUyMGJvcmRlciUzRCUyMjAlMjIlM0UlMEElMjAlMjAlM0NkaWFncmFtJTIwaWQlM0QlMjJXODNfeE5jT2djZHpkOWl4aTEzSiUyMiUyMG5hbWUlM0QlMjJQYWdlLTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NteEdyYXBoTW9kZWwlMjBkeCUzRCUyMjE0MjYlMjIlMjBkeSUzRCUyMjc3OSUyMiUyMGdyaWQlM0QlMjIxJTIyJTIwZ3JpZFNpemUlM0QlMjIxMCUyMiUyMGd1aWRlcyUzRCUyMjElMjIlMjB0b29sdGlwcyUzRCUyMjElMjIlMjBjb25uZWN0JTNEJTIyMSUyMiUyMGFycm93cyUzRCUyMjElMjIlMjBmb2xkJTNEJTIyMSUyMiUyMHBhZ2UlM0QlMjIxJTIyJTIwcGFnZVNjYWxlJTNEJTIyMSUyMiUyMHBhZ2VXaWR0aCUzRCUyMjg1MCUyMiUyMHBhZ2VIZWlnaHQlM0QlMjIxMTAwJTIyJTIwbWF0aCUzRCUyMjAlMjIlMjBzaGFkb3clM0QlMjIwJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDcm9vdCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyMCUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ214Q2VsbCUyMGlkJTNEJTIyMSUyMiUyMHBhcmVudCUzRCUyMjAlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMlVuNXRYNmJId2UtUm42VVZDLXlkLTElMjIlMjBwYXJlbnQlM0QlMjIxJTIyJTIwc3R5bGUlM0QlMjJ2ZXJ0aWNhbExhYmVsUG9zaXRpb24lM0Rib3R0b20lM0J2ZXJ0aWNhbEFsaWduJTNEdG9wJTNCaHRtbCUzRDElM0JzaGFwZSUzRG14Z3JhcGguYmFzaWMueCUzQmZpbGxDb2xvciUzRCUyM0VDNTE1MSUzQnN0cm9rZUNvbG9yJTNEJTIzNDEwMDAwJTNCJTIyJTIwdmFsdWUlM0QlMjIlMjIlMjB2ZXJ0ZXglM0QlMjIxJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbXhHZW9tZXRyeSUyMGhlaWdodCUzRCUyMjU5MCUyMiUyMHdpZHRoJTNEJTIyNTkwJTIyJTIweCUzRCUyMjEyMCUyMiUyMGFzJTNEJTIyZ2VvbWV0cnklMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZteENlbGwlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NteENlbGwlMjBpZCUzRCUyMlVuNXRYNmJId2UtUm42VVZDLXlkLTIlMjIlMjBwYXJlbnQlM0QlMjIxJTIyJTIwc3R5bGUlM0QlMjJ0ZXh0JTNCaHRtbCUzRDElM0J3aGl0ZVNwYWNlJTNEd3JhcCUzQnN0cm9rZUNvbG9yJTNEbm9uZSUzQmZpbGxDb2xvciUzRG5vbmUlM0JhbGlnbiUzRGNlbnRlciUzQnZlcnRpY2FsQWxpZ24lM0RtaWRkbGUlM0Jyb3VuZGVkJTNEMCUzQiUyMiUyMHZhbHVlJTNEJTIyJTI2bHQlM0Jmb250JTIwZmFjZSUzRCUyNnF1b3QlM0JMdWNpZGElMjBDb25zb2xlJTI2cXVvdCUzQiUyMHN0eWxlJTNEJTI2cXVvdCUzQmZvbnQtc2l6ZSUzQSUyMDUwcHglM0IlMjZxdW90JTNCJTI2Z3QlM0IlMjZsdCUzQmIlMjZndCUzQkhpc3RvZ3JhbSUyMG5vdCUyMGZpbGxlZCUyNmx0JTNCJTJGYiUyNmd0JTNCJTI2bHQlM0IlMkZmb250JTI2Z3QlM0IlMjIlMjB2ZXJ0ZXglM0QlMjIx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";
293
+ function _e(n, e, t, { scale: A, padding: s, origin: i }) {
294
+ const r = n.config ?? {};
295
+ r.environment || (r.environment = {}), r.environment.histogramPads || (r.environment.histogramPads = []);
296
+ const c = r.environment.histogramPads;
297
+ let a = 1, o = e.length;
298
+ if (typeof t == "string") {
299
+ const g = t.match(/^grid(\d+)x(\d+)$/i);
300
+ g ? (a = parseInt(g[1], 10), o = parseInt(g[2], 10)) : (t === "simple" || t === "flex") && (a = 1, o = e.length);
301
+ }
302
+ a * o < e.length && (o = Math.ceil(Math.sqrt(e.length)), a = Math.ceil(e.length / o));
303
+ let l = 0, u = 0;
304
+ return e.forEach((g) => {
305
+ const f = i.x + u * (A.x + s.x) + A.x / 2, d = i.y + (a - 1 - l) * (A.y + s.y) + A.y / 2, w = i.z - A.z / 2;
306
+ c.push({
307
+ id: g,
308
+ position: { x: f, y: d, z: w },
279
309
  scale: { ...A },
280
310
  padding: { ...s },
281
311
  origin: { ...i },
282
312
  grid: {
283
- row: a,
313
+ row: l,
284
314
  col: u,
285
- rows: c,
286
- cols: r,
287
- disp_kind: e
315
+ rows: a,
316
+ cols: o,
317
+ disp_kind: t
288
318
  }
289
- }), u++, u >= r && (u = 0, a++);
319
+ }), u++, u >= o && (u = 0, l++);
290
320
  }), n;
291
321
  }
292
- function ke(n) {
293
- const t = {
322
+ function tA(n) {
323
+ const e = {
294
324
  resetHistogram: "r",
295
325
  goToPreviousLayer: "z",
296
326
  hideOutlines: "o"
297
327
  };
298
328
  n.bindings = n.bindings || {};
299
- for (const e in t)
300
- n.bindings.hasOwnProperty(e) || (n.bindings[e] = t[e]);
329
+ for (const t in e)
330
+ n.bindings.hasOwnProperty(t) || (n.bindings[t] = e[t]);
301
331
  return n;
302
332
  }
303
- function Nt(n, t = null) {
304
- const e = typeof n == "string" ? JSON.parse(n) : n;
305
- function A(c) {
306
- if (Array.isArray(c)) return c;
307
- if (c && typeof c == "object" && "type" in c) {
308
- const r = c.prefix ?? "histogram", h = c.type.match(/grid(\d+)x(\d+)x(\d+)/);
309
- if (!h) return [c];
310
- const a = +h[1], u = +h[2], d = +h[3], g = c.scale || { x: 1, y: 1, z: 1 }, p = c.padding || { x: 0, y: 0, z: 0 }, v = c.origin || { x: 0, y: 0, z: 0 }, f = new H(
311
- (g.x - p.x * (a - 1)) / a,
312
- (g.y - p.y * (u - 1)) / u,
313
- (g.z - p.z * (d - 1)) / d
314
- ), b = [];
315
- let y = 1;
316
- for (let x = 0; x < a; x++)
317
- for (let B = 0; B < u; B++)
318
- for (let D = 0; D < d; D++)
319
- b.push({
320
- id: `${r}${y++}`,
321
- position: new H(
322
- v.x + x * (f.x + p.x) + f.x / 2,
323
- v.y + B * (f.y + p.y) + f.y / 2,
324
- v.z - D * (f.z + p.z) - f.z / 2
333
+ function Zt(n, e = null) {
334
+ const t = typeof n == "string" ? JSON.parse(n) : n;
335
+ function A(a) {
336
+ if (Array.isArray(a)) return a;
337
+ if (a && typeof a == "object" && "type" in a) {
338
+ const o = a.prefix ?? "histogram", h = a.type.match(/grid(\d+)x(\d+)x(\d+)/);
339
+ if (!h) return [a];
340
+ const l = +h[1], u = +h[2], g = +h[3], f = a.scale || { x: 1, y: 1, z: 1 }, d = a.padding || { x: 0, y: 0, z: 0 }, w = a.origin || { x: 0, y: 0, z: 0 }, B = new D(
341
+ (f.x - d.x * (l - 1)) / l,
342
+ (f.y - d.y * (u - 1)) / u,
343
+ (f.z - d.z * (g - 1)) / g
344
+ ), M = [];
345
+ let p = 1;
346
+ for (let I = 0; I < l; I++)
347
+ for (let y = 0; y < u; y++)
348
+ for (let b = 0; b < g; b++)
349
+ M.push({
350
+ id: `${o}${p++}`,
351
+ position: new D(
352
+ w.x + I * (B.x + d.x) + B.x / 2,
353
+ w.y + y * (B.y + d.y) + B.y / 2,
354
+ w.z - b * (B.z + d.z) - B.z / 2
325
355
  ),
326
- scale: f.clone()
356
+ scale: B.clone()
327
357
  });
328
- return b;
358
+ return M;
329
359
  }
330
- return [c];
360
+ return [a];
331
361
  }
332
- function s(c) {
333
- const r = {};
334
- for (const h in c) {
335
- const a = c[h];
336
- a && typeof a == "object" && "x" in a && "y" in a && "z" in a && Object.keys(a).length === 3 ? r[h] = new H(a.x, a.y, a.z) : typeof a == "string" && a.startsWith("0x") ? r[h] = new X(parseInt(a)) : a && typeof a == "object" && !Array.isArray(a) ? r[h] = s(a) : r[h] = a;
362
+ function s(a) {
363
+ const o = {};
364
+ for (const h in a) {
365
+ const l = a[h];
366
+ l && typeof l == "object" && "x" in l && "y" in l && "z" in l && Object.keys(l).length === 3 ? o[h] = new D(l.x, l.y, l.z) : typeof l == "string" && l.startsWith("0x") ? o[h] = new U(parseInt(l)) : l && typeof l == "object" && !Array.isArray(l) ? o[h] = s(l) : o[h] = l;
337
367
  }
338
- return r;
339
- }
340
- function i(c, r = null, h = null, a = !1) {
341
- if (Array.isArray(c))
342
- return a ? c : c.map((u) => i(u, r, c, !1));
343
- if (c && typeof c == "object") {
344
- if (r === "histogramPads")
345
- return A(c).map((g) => s(g));
346
- if ("x" in c && "y" in c && "z" in c && Object.keys(c).length === 3)
347
- return new H(c.x, c.y, c.z);
368
+ return o;
369
+ }
370
+ function i(a, o = null, h = null, l = !1) {
371
+ if (Array.isArray(a))
372
+ return l ? a : a.map((u) => i(u, o, a, !1));
373
+ if (a && typeof a == "object") {
374
+ if (o === "histogramPads")
375
+ return A(a).map((f) => s(f));
376
+ if ("x" in a && "y" in a && "z" in a && Object.keys(a).length === 3)
377
+ return new D(a.x, a.y, a.z);
348
378
  const u = {};
349
- for (const d in c) {
350
- const g = d === "histogramPads";
351
- u[d] = i(c[d], d, c, g);
379
+ for (const g in a) {
380
+ const f = g === "histogramPads";
381
+ u[g] = i(a[g], g, a, f);
352
382
  }
353
383
  return "target" in u || (u.target = { entity: "*", id: "*" }), u;
354
384
  }
355
- return typeof c == "string" && c.startsWith("0x") ? new X(parseInt(c)) : c;
356
- }
357
- function o(c, r) {
358
- if (!c || Array.isArray(r) || !r || typeof r != "object" || r instanceof H || r instanceof X)
359
- return r;
360
- const h = { ...c };
361
- for (const a in r) {
362
- const u = c[a], d = r[a];
363
- u && typeof u == "object" && !Array.isArray(u) && !(u instanceof H) && !(u instanceof X) && d && typeof d == "object" && !Array.isArray(d) && !(d instanceof H) && !(d instanceof X) ? h[a] = o(u, d) : h[a] = d;
385
+ return typeof a == "string" && a.startsWith("0x") ? new U(parseInt(a)) : a;
386
+ }
387
+ function r(a, o) {
388
+ if (!a || Array.isArray(o) || !o || typeof o != "object" || o instanceof D || o instanceof U)
389
+ return o;
390
+ const h = { ...a };
391
+ for (const l in o) {
392
+ const u = a[l], g = o[l];
393
+ u && typeof u == "object" && !Array.isArray(u) && !(u instanceof D) && !(u instanceof U) && g && typeof g == "object" && !Array.isArray(g) && !(g instanceof D) && !(g instanceof U) ? h[l] = r(u, g) : h[l] = g;
364
394
  }
365
395
  return h;
366
396
  }
367
- const l = i(e);
368
- return o(t, l);
397
+ const c = i(t);
398
+ return r(e, c);
369
399
  }
370
- function Se(n) {
371
- for (const t in n)
372
- if (Object.prototype.hasOwnProperty.call(n, t))
400
+ function eA(n) {
401
+ for (const e in n)
402
+ if (Object.prototype.hasOwnProperty.call(n, e))
373
403
  return !1;
374
404
  return !0;
375
405
  }
376
- var K;
377
- class Ne {
378
- constructor(t) {
379
- q(this, K);
380
- I(this, K, _t(t));
381
- }
382
- static async parseJson(t) {
383
- const e = _t(t), A = (s) => {
384
- console.log("parsing JSON_______________"), s && typeof s == "object" && (s.children && Se(s.children) ? delete s.children : s.children && Object.values(s.children).forEach((i) => {
385
- Array.isArray(i) && i.forEach((o) => A(o));
406
+ function AA(n, e) {
407
+ return ["scale", "padding", "position"].every(
408
+ (A) => {
409
+ var s, i, r, c, a, o;
410
+ return ((s = n[A]) == null ? void 0 : s.x) === ((i = e[A]) == null ? void 0 : i.x) && ((r = n[A]) == null ? void 0 : r.y) === ((c = e[A]) == null ? void 0 : c.y) && ((a = n[A]) == null ? void 0 : a.z) === ((o = e[A]) == null ? void 0 : o.z);
411
+ }
412
+ );
413
+ }
414
+ function sA(n, e) {
415
+ const t = new de().load($e);
416
+ t.colorSpace = Ye;
417
+ const A = new Ue({ map: t, transparent: !0 }), s = new Pe(A);
418
+ return s.scale.set(...n.scale), s.position.set(...n.position), s.raycast = (i) => {
419
+ i._triggerSource === "shiftmousedbclick" && e();
420
+ }, s;
421
+ }
422
+ var $;
423
+ class iA {
424
+ constructor(e) {
425
+ N(this, $);
426
+ O(this, $, ne(e));
427
+ }
428
+ static async parseJson(e) {
429
+ const t = ne(e), A = (s) => {
430
+ s && typeof s == "object" && (s.children && eA(s.children) ? delete s.children : s.children && Object.values(s.children).forEach((i) => {
431
+ Array.isArray(i) && i.forEach((r) => A(r));
386
432
  }));
387
433
  };
388
- return A(e), e;
434
+ return A(t), t;
389
435
  }
390
436
  computeMaxInstancesPerLayer() {
391
- if (!w(this, K)) return;
392
- const t = w(this, K).fXaxis.fNbins * w(this, K).fYaxis.fNbins * w(this, K).fZaxis.fNbins;
393
- let e = [];
394
- e.push(t);
437
+ if (!C(this, $)) return;
438
+ const e = C(this, $).fXaxis.fNbins * C(this, $).fYaxis.fNbins * C(this, $).fZaxis.fNbins;
439
+ let t = [];
440
+ t.push(e);
395
441
  const A = (s, i = 1) => {
396
- let o = 0;
397
- return i >= e.length && e.push(0), Object.entries(s).forEach((l, c) => {
398
- l[1].forEach((r) => {
399
- r && (o = r.fXaxis.fNbins * r.fYaxis.fNbins * r.fZaxis.fNbins, o > e[i] && (e[i] = o), r.children && A(r.children, i + 1));
442
+ let r = 0;
443
+ return i >= t.length && t.push(0), Object.entries(s).forEach((c, a) => {
444
+ c[1].forEach((o) => {
445
+ o && (r = o.fXaxis.fNbins * o.fYaxis.fNbins * o.fZaxis.fNbins, r > t[i] && (t[i] = r), o.children && A(o.children, i + 1));
400
446
  });
401
- }), e;
447
+ }), t;
402
448
  };
403
- return A(w(this, K).children), Promise.resolve(e);
449
+ return A(C(this, $).children), Promise.resolve(t);
404
450
  }
405
451
  }
406
- K = new WeakMap();
407
- let It;
452
+ $ = new WeakMap();
453
+ let Pt;
408
454
  var _;
409
- class Le {
455
+ class nA {
410
456
  constructor() {
411
- q(this, _, /* @__PURE__ */ new Map());
457
+ N(this, _, /* @__PURE__ */ new Map());
412
458
  }
413
459
  // id → ReplaySubject(1)
414
- getStream(t) {
415
- return w(this, _).has(t) || w(this, _).set(t, new ft(1)), w(this, _).get(t).asObservable();
416
- }
417
- async next(t) {
418
- if (!t.id) throw new Error("Missing id in event");
419
- if (console.log(t), typeof t.obj == "string")
420
- t.obj = await Te.parseFile(t.obj);
421
- else if (typeof t.obj == "object")
422
- t.obj = await Ne.parseJson(t.obj), t.opts = t.opts || {}, t.opts.config = Nt(t.opts.config);
460
+ getStream(e) {
461
+ return C(this, _).has(e) || C(this, _).set(e, new ft(1)), C(this, _).get(e).asObservable();
462
+ }
463
+ async next(e) {
464
+ if (!e.id) throw new Error("Missing id in event");
465
+ if (console.log(e), typeof e.obj == "string")
466
+ e.obj = await Ke.parseFile(e.obj);
467
+ else if (typeof e.obj == "object")
468
+ e.obj = await iA.parseJson(e.obj), e.opts = e.opts || {}, e.opts.config = Zt(e.opts.config);
423
469
  else
424
470
  throw new Error("Unsupported data type");
425
- w(this, _).has(t.id) || w(this, _).set(t.id, new ft(1)), w(this, _).get(t.id).next(t);
471
+ C(this, _).has(e.id) || C(this, _).set(e.id, new ft(1)), C(this, _).get(e.id).next(e);
426
472
  }
427
473
  }
428
474
  _ = new WeakMap();
429
- const HA = () => (It || (It = new Le()), It);
430
- let Xt;
475
+ const VA = () => (Pt || (Pt = new nA()), Pt);
476
+ let Ht;
431
477
  var ut;
432
- class je {
478
+ class rA {
433
479
  constructor() {
434
- q(this, ut);
435
- I(this, ut, new ft(1));
480
+ N(this, ut);
481
+ O(this, ut, new ft(1));
436
482
  }
437
483
  getObservable() {
438
- return w(this, ut).asObservable();
484
+ return C(this, ut).asObservable();
439
485
  }
440
- next(t) {
441
- w(this, ut).next(t);
486
+ next(e) {
487
+ C(this, ut).next(e);
442
488
  }
443
489
  }
444
490
  ut = new WeakMap();
445
- const ge = () => (Xt || (Xt = new je()), Xt), Ue = { environment: { dbClickTimeout: 200, desktopSpeed: 10, vrSpeed: 10, camera: { position: { x: 0, y: 1.7, z: 10 } }, canvas: { position: { x: 0, y: 20, z: -20 }, rotation: { x: 8, y: 0, z: 0 }, scale: { x: 6, y: 5, z: 1 } }, histogramPads: { type: "grid1x1x1", prefix: "histogram", scale: { x: 20, y: 10, z: 10 }, padding: { x: 0, y: 0, z: 0 }, origin: { x: -10, y: 0, z: -5 } } }, histogram: { padding: { default: { x: 0, y: 0, z: 0 }, layer: [], sets: { x: 0, y: 0, z: 0 } }, scale: { default: { min: 0.5, max: 1 }, layer: [] }, sets: { scale: { maximum: "relative" } }, TH1ZScale: { default: 0.8, layer: [1, 1, 1, 1], set: 0.01 }, wireframe: { display: { start: 0, end: 4 }, displaySets: !1, layer: [], color: { default: "0x00FF00", layer: ["0x000000", "0x0000FF", "0x00FF00", "0x00FFFF"], set: [] } }, color: { default: { min: "0x0000ff", max: "0xff0000" }, layer: [], set: [{ min: "0x222222", max: "0xffaa00" }, { min: "0x00ffff", max: "0xff7f00" }, { min: "0x00ff00", max: "0x800080" }, { min: "0x0000ff", max: "0xff0000" }] } }, bindings: { resetHistogram: "r", goToPreviousLayer: "z", hideOutlines: "o" } }, Ze = {
446
- config: Ue
491
+ const ye = () => (Ht || (Ht = new rA()), Ht), oA = { environment: { dbClickTimeout: 200, desktopSpeed: 10, vrSpeed: 10, camera: { position: { x: 0, y: 1.7, z: 10 } }, canvas: { position: { x: 0, y: 20, z: -20 }, rotation: { x: 8, y: 0, z: 0 }, scale: { x: 6, y: 5, z: 1 } }, histogramPads: { type: "grid1x1x1", prefix: "histogram", scale: { x: 20, y: 10, z: 10 }, padding: { x: 0, y: 0, z: 0 }, origin: { x: -10, y: 0, z: -5 } } }, histogram: { padding: { default: { x: 0, y: 0, z: 0 }, layer: [], sets: { x: 0, y: 0, z: 0 } }, scale: { default: { min: 0.5, max: 1 }, layer: [] }, sets: { scale: { maximum: "relative" } }, TH1ZScale: { default: 0.8, layer: [1, 1, 1, 1], set: 0.01 }, wireframe: { display: { start: 0, end: 99 }, displaySets: !1, layer: [], color: { default: "0x00FF00", layer: ["0x000000", "0x0000FF", "0x00FF00", "0x00FFFF"], set: [] } }, color: { default: { min: "0x0000ff", max: "0xff0000" }, layer: [], set: [{ min: "0x222222", max: "0xffaa00" }, { min: "0x00ffff", max: "0xff7f00" }, { min: "0x00ff00", max: "0x800080" }, { min: "0x0000ff", max: "0xff0000" }] } }, bindings: { resetHistogram: "r", goToPreviousLayer: "z", hideOutlines: "o" } }, aA = {
492
+ config: oA
447
493
  };
448
- let Gt;
449
- var U;
450
- class Je {
494
+ let St;
495
+ var q;
496
+ class cA {
451
497
  constructor() {
452
- q(this, U);
453
- I(this, U, new Lt(Nt(Ze, {})));
498
+ N(this, q);
499
+ O(this, q, new kt(Zt(aA, {})));
454
500
  }
455
501
  getObservable() {
456
- return w(this, U).asObservable();
502
+ return C(this, q).asObservable();
457
503
  }
458
504
  getValue() {
459
- return w(this, U).getValue();
505
+ return C(this, q).getValue();
460
506
  }
461
- next(t) {
462
- const e = Nt(t, w(this, U).getValue());
463
- return w(this, U).next(e), e;
507
+ next(e) {
508
+ const t = Zt(e, C(this, q).getValue());
509
+ return C(this, q).next(t), t;
464
510
  }
465
- appendPads(t, e, A) {
466
- const s = We(w(this, U).getValue(), t, e, A);
467
- w(this, U).next(s);
511
+ appendPads(e, t, A) {
512
+ const s = _e(C(this, q).getValue(), e, t, A);
513
+ C(this, q).next(s);
468
514
  }
469
- mergeHistogramConfig(t, e = w(this, U).value.config.histogram) {
470
- if (t == null)
471
- return e;
472
- if (typeof e != "object" || e === null || typeof t != "object" || t === null)
515
+ mergeHistogramConfig(e, t = C(this, q).value.config.histogram) {
516
+ if (e == null)
473
517
  return t;
474
- const A = (i) => Array.isArray(i) || i instanceof X || i instanceof H || i && i.isColor === !0 || // Handle converted THREE.Color objects
518
+ if (typeof t != "object" || t === null || typeof e != "object" || e === null)
519
+ return e;
520
+ const A = (i) => Array.isArray(i) || i instanceof U || i instanceof D || i && i.isColor === !0 || // Handle converted THREE.Color objects
475
521
  i && i.isVector3 === !0;
476
- if (A(e))
477
- return A(t) ? t : e;
478
- const s = { ...e };
479
- for (const i in t)
480
- t.hasOwnProperty(i) && t[i] !== void 0 && (A(t[i]) || A(s[i]) ? s[i] = t[i] : /* Recursively merge if both are plain objects */ typeof t[i] == "object" && t[i] !== null && typeof s[i] == "object" && s[i] !== null ? s[i] = this.mergeHistogramConfig(t[i], s[i]) : s[i] = t[i]);
522
+ if (A(t))
523
+ return A(e) ? e : t;
524
+ const s = { ...t };
525
+ for (const i in e)
526
+ e.hasOwnProperty(i) && e[i] !== void 0 && (A(e[i]) || A(s[i]) ? s[i] = e[i] : /* Recursively merge if both are plain objects */ typeof e[i] == "object" && e[i] !== null && typeof s[i] == "object" && s[i] !== null ? s[i] = this.mergeHistogramConfig(e[i], s[i]) : s[i] = e[i]);
481
527
  return s;
482
528
  }
483
529
  }
484
- U = new WeakMap();
485
- const lt = () => (Gt || (Gt = new Je()), Gt);
486
- let Vt;
487
- var rt;
488
- class Re {
530
+ q = new WeakMap();
531
+ const dt = () => (St || (St = new cA()), St);
532
+ let Ft;
533
+ var ot;
534
+ class lA {
489
535
  constructor() {
490
- q(this, rt);
491
- I(this, rt, new ft(1));
536
+ N(this, ot);
537
+ O(this, ot, new ft(1));
492
538
  }
493
539
  getObservable() {
494
- return w(this, rt).asObservable();
540
+ return C(this, ot).asObservable();
495
541
  }
496
542
  getValue() {
497
- return w(this, rt).getValue();
543
+ return C(this, ot).getValue();
498
544
  }
499
- next(t) {
500
- w(this, rt).next(t);
545
+ next(e) {
546
+ C(this, ot).next(e);
501
547
  }
502
548
  }
503
- rt = new WeakMap();
504
- const me = () => (Vt || (Vt = new Re()), Vt);
505
- let Qt;
506
- var At, Z;
507
- class Ke {
549
+ ot = new WeakMap();
550
+ const Ie = () => (Ft || (Ft = new lA()), Ft);
551
+ let Wt;
552
+ var st, R;
553
+ class hA {
508
554
  constructor() {
509
- q(this, At);
510
- q(this, Z);
511
- I(this, At, document.createElement("a-entity")), w(this, At).id = "cameraRig", w(this, At).setAttribute("position", "0 1.6 0"), w(this, At).innerHTML = `
555
+ N(this, st);
556
+ N(this, R);
557
+ O(this, st, document.createElement("a-entity")), C(this, st).id = "cameraRig", C(this, st).setAttribute("position", "0 1.6 0"), C(this, st).innerHTML = `
512
558
  <a-camera id="camera" wasd-controls-custom="acceleration: 10" wasd-controls="acceleration: 50">
513
559
  </a-camera>
514
- `, I(this, Z, document.createElement("a-entity")), w(this, Z).id = "oculus-controller", w(this, Z).setAttribute("oculus-controller", ""), de().getObservable().subscribe(
560
+ `, O(this, R, document.createElement("a-entity")), C(this, R).id = "oculus-controller", C(this, R).setAttribute("oculus-controller", ""), Me().getObservable().subscribe(
515
561
  this.handleStateChange.bind(this)
516
562
  );
517
563
  }
518
- handleStateChange(t) {
519
- const e = document.getElementById("cameraRig");
520
- if (t.inputDevice === "oculus") {
521
- if (!e || e.contains(w(this, Z))) return;
522
- e.appendChild(w(this, Z));
564
+ handleStateChange(e) {
565
+ const t = document.getElementById("cameraRig");
566
+ if (e.inputDevice === "oculus") {
567
+ if (!t || t.contains(C(this, R))) return;
568
+ t.appendChild(C(this, R));
523
569
  } else {
524
- if (!e || !e.contains(w(this, Z))) return;
525
- e.removeChild(w(this, Z));
570
+ if (!t || !t.contains(C(this, R))) return;
571
+ t.removeChild(C(this, R));
526
572
  }
527
573
  }
528
574
  getCamera() {
529
- return w(this, At);
575
+ return C(this, st);
530
576
  }
531
577
  }
532
- At = new WeakMap(), Z = new WeakMap();
533
- const PA = () => (Qt || (Qt = new Ke()), Qt.getCamera());
534
- let Ft;
535
- var W, ot;
536
- class _e {
578
+ st = new WeakMap(), R = new WeakMap();
579
+ const LA = () => (Wt || (Wt = new hA()), Wt.getCamera());
580
+ let Xt;
581
+ var W, at;
582
+ class uA {
537
583
  constructor() {
538
- q(this, W);
539
- q(this, ot);
584
+ N(this, W);
585
+ N(this, at);
540
586
  /**
541
587
  * Zmena vertikálnej polohy kamery.
542
588
  * @param {boolean} moveUp - Ak je True, kamera vyššie ak je False kamera nižšie
543
589
  * @param {number} speed - Rýchlosť zmeny pozície kamery
544
590
  * @return {void}
545
591
  */
546
- m(this, "verticalMoveCamera", (t, e) => {
547
- if (w(this, W) === null && I(this, W, document.getElementById("cameraRig")), w(this, W) !== null) {
548
- const A = new H(), s = w(this, W).object3D.position.clone();
549
- t ? (A.copy(s).add(new H(0, +e, 0)), w(this, W).object3D.position.lerp(A, 0.5)) : w(this, W).object3D.position.y > 1.6 && (A.copy(s).add(new H(0, -e, 0)), w(this, W).object3D.position.lerp(A, 0.5));
592
+ m(this, "verticalMoveCamera", (e, t) => {
593
+ if (C(this, W) === null && O(this, W, document.getElementById("cameraRig")), C(this, W) !== null) {
594
+ const A = new D(), s = C(this, W).object3D.position.clone();
595
+ e ? (A.copy(s).add(new D(0, +t, 0)), C(this, W).object3D.position.lerp(A, 0.5)) : C(this, W).object3D.position.y > 1.6 && (A.copy(s).add(new D(0, -t, 0)), C(this, W).object3D.position.lerp(A, 0.5));
550
596
  }
551
597
  });
552
- m(this, "horizontalMoveCameraLocal", (t, e, A) => {
553
- if (!w(this, W) || !w(this, ot)) return;
554
- let s = new oe(t, e), i = w(this, ot).object3D.rotation.y;
555
- s.rotateAround(new H(0, 0), -i), s.normalize(), s.multiplyScalar(A), w(this, W).object3D.position.x += s.x, w(this, W).object3D.position.z += s.y;
598
+ m(this, "horizontalMoveCameraLocal", (e, t, A) => {
599
+ if (!C(this, W) || !C(this, at)) return;
600
+ let s = new me(e, t), i = C(this, at).object3D.rotation.y;
601
+ s.rotateAround(new D(0, 0), -i), s.normalize(), s.multiplyScalar(A), C(this, W).object3D.position.x += s.x, C(this, W).object3D.position.z += s.y;
556
602
  });
557
603
  setTimeout(() => {
558
- I(this, W, document.getElementById("cameraRig")), I(this, ot, document.getElementById("camera"));
604
+ O(this, W, document.getElementById("cameraRig")), O(this, at, document.getElementById("camera"));
559
605
  }, 100);
560
606
  }
561
607
  getCamera() {
562
- return w(this, ot);
608
+ return C(this, at);
563
609
  }
564
610
  }
565
- W = new WeakMap(), ot = new WeakMap();
566
- const $e = () => (Ft || (Ft = new _e()), Ft), ee = "data:image/png;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAws/8fNABrcJixPQsAAAAASUVORK5CYII=", tA = "data:image/png;base64,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", eA = "data:image/png;base64,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";
567
- var bt, vt, dt, $;
568
- class YA {
611
+ W = new WeakMap(), at = new WeakMap();
612
+ const gA = () => (Xt || (Xt = new uA()), Xt), ae = "data:image/png;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAws/8fNABrcJixPQsAAAAASUVORK5CYII=", fA = "data:image/png;base64,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", dA = "data:image/png;base64,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";
613
+ var bt, Mt, gt, tt;
614
+ class ZA {
569
615
  constructor() {
570
- q(this, bt);
571
- q(this, vt);
572
- q(this, dt);
573
- q(this, $);
574
- I(this, dt, $e()), setTimeout(() => {
616
+ N(this, bt);
617
+ N(this, Mt);
618
+ N(this, gt);
619
+ N(this, tt);
620
+ O(this, gt, gA()), setTimeout(() => {
575
621
  this.setUpArrowListener(), this.setDownArrowListener();
576
- }, 100), this.setUpArrowListener = this.setUpArrowListener.bind(this), this.startUpClick = this.startUpClick.bind(this), this.endUpClick = this.endUpClick.bind(this), this.upClickFunction = this.upClickFunction.bind(this), this.setDownArrowListener = this.setDownArrowListener.bind(this), this.startDownClick = this.startDownClick.bind(this), this.endDownClick = this.endDownClick.bind(this), this.downClickFunction = this.downClickFunction.bind(this), this.initController(), de().getObservable().subscribe((t) => {
577
- if (t.inputDevice === "mobile")
622
+ }, 100), this.setUpArrowListener = this.setUpArrowListener.bind(this), this.startUpClick = this.startUpClick.bind(this), this.endUpClick = this.endUpClick.bind(this), this.upClickFunction = this.upClickFunction.bind(this), this.setDownArrowListener = this.setDownArrowListener.bind(this), this.startDownClick = this.startDownClick.bind(this), this.endDownClick = this.endDownClick.bind(this), this.downClickFunction = this.downClickFunction.bind(this), this.initController(), Me().getObservable().subscribe((e) => {
623
+ if (e.inputDevice === "mobile")
578
624
  document.getElementById("container").appendChild(this.getController());
579
625
  else {
580
- const e = document.getElementById("container");
581
- if (!e || !e.contains(this.getController())) return;
582
- e.removeChild(this.getController());
626
+ const t = document.getElementById("container");
627
+ if (!t || !t.contains(this.getController())) return;
628
+ t.removeChild(this.getController());
583
629
  }
584
630
  });
585
631
  }
586
632
  getController() {
587
- return w(this, $);
633
+ return C(this, tt);
588
634
  }
589
635
  upClickFunction() {
590
- w(this, dt).verticalMoveCamera(!0, 0.15);
636
+ C(this, gt).verticalMoveCamera(!0, 0.15);
591
637
  }
592
638
  downClickFunction() {
593
- w(this, dt).verticalMoveCamera(!1, 0.15);
639
+ C(this, gt).verticalMoveCamera(!1, 0.15);
594
640
  }
595
- startUpClick(t) {
596
- t.preventDefault(), this.upClickFunction(), I(this, bt, setInterval(this.upClickFunction, 10));
641
+ startUpClick(e) {
642
+ e.preventDefault(), this.upClickFunction(), O(this, bt, setInterval(this.upClickFunction, 10));
597
643
  }
598
644
  endUpClick() {
599
- clearInterval(w(this, bt));
645
+ clearInterval(C(this, bt));
600
646
  }
601
- startDownClick(t) {
602
- t.preventDefault(), this.downClickFunction(), I(this, vt, setInterval(this.downClickFunction, 10));
647
+ startDownClick(e) {
648
+ e.preventDefault(), this.downClickFunction(), O(this, Mt, setInterval(this.downClickFunction, 10));
603
649
  }
604
650
  endDownClick() {
605
- clearInterval(w(this, vt));
651
+ clearInterval(C(this, Mt));
606
652
  }
607
653
  /**
608
654
  * Sets event listener for move up button.
@@ -610,8 +656,8 @@ class YA {
610
656
  * from cameraService with frequency 100ms is called to move camera up
611
657
  * */
612
658
  setUpArrowListener() {
613
- const t = document.getElementById("up-arrow");
614
- t ? (t.addEventListener("touchstart", this.startUpClick), t.addEventListener("touchend", this.endUpClick)) : setTimeout(this.setUpArrowListener, 100);
659
+ const e = document.getElementById("up-arrow");
660
+ e ? (e.addEventListener("touchstart", this.startUpClick), e.addEventListener("touchend", this.endUpClick)) : setTimeout(this.setUpArrowListener, 100);
615
661
  }
616
662
  /**
617
663
  * Sets event listener for move down button.
@@ -619,19 +665,19 @@ class YA {
619
665
  * from cameraService with frequency 100ms is called to move camera down
620
666
  * */
621
667
  setDownArrowListener() {
622
- const t = document.getElementById("down-arrow");
623
- t ? (t.addEventListener("touchstart", this.startDownClick), t.addEventListener("touchend", this.endDownClick)) : setTimeout(this.setUpArrowListener, 100);
668
+ const e = document.getElementById("down-arrow");
669
+ e ? (e.addEventListener("touchstart", this.startDownClick), e.addEventListener("touchend", this.endDownClick)) : setTimeout(this.setUpArrowListener, 100);
624
670
  }
625
671
  clearUpArrowListener() {
626
- const t = document.getElementById("up-arrow");
627
- t && (t.removeEventListener("touchstart", this.startUpClick), t.removeEventListener("touchend", this.endUpClick));
672
+ const e = document.getElementById("up-arrow");
673
+ e && (e.removeEventListener("touchstart", this.startUpClick), e.removeEventListener("touchend", this.endUpClick));
628
674
  }
629
675
  clearDownArrowListener() {
630
- const t = document.getElementById("down-arrow");
631
- t && (t.removeEventListener("touchstart", this.startDownClick), t.removeEventListener("touchend", this.endDownClick));
676
+ const e = document.getElementById("down-arrow");
677
+ e && (e.removeEventListener("touchstart", this.startDownClick), e.removeEventListener("touchend", this.endDownClick));
632
678
  }
633
679
  initController() {
634
- I(this, $, document.createElement("div")), w(this, $).className = "mainUI", w(this, $).id = "uiDiv", w(this, $).oncontextmenu = (t) => t.preventDefault(), w(this, $).innerHTML = `
680
+ O(this, tt, document.createElement("div")), C(this, tt).className = "mainUI", C(this, tt).id = "uiDiv", C(this, tt).oncontextmenu = (e) => e.preventDefault(), C(this, tt).innerHTML = `
635
681
  <div class="mainUI" id="uiDiv" oncontextmenu="event.preventDefault()">
636
682
  <!-- top-left-->
637
683
  <div class="regionUI skyColor" style="top: 10px; left: 10px;" oncontextmenu="event.preventDefault()">
@@ -645,16 +691,16 @@ class YA {
645
691
  <div class="regionUI" style="bottom: 50px; left: 50px; flex-direction: column;">
646
692
  <div style="display: flex; flex-direction: row; margin-left: -32px;">
647
693
  <div id="up-arrow" class="buttonUI" style="width: 64px; height: 64px;">
648
- <img style="transform: rotate(0deg);" src="${ee}" alt="Up Arrow" />
694
+ <img style="transform: rotate(0deg);" src="${ae}" alt="Up Arrow" />
649
695
  </div>
650
696
  <div id="down-arrow" class="buttonUI" style="width: 64px; height: 64px;">
651
- <img style="transform: rotate(180deg);" src="${ee}" alt="Down Arrow" />
697
+ <img style="transform: rotate(180deg);" src="${ae}" alt="Down Arrow" />
652
698
  </div>
653
699
  </div>
654
700
  <div class="buttonUI" style="width: 128px; opacity: 0.8;">
655
- <img src="${tA}" alt="Joystick Base" />
701
+ <img src="${fA}" alt="Joystick Base" />
656
702
  <div id="stick1" style="position: absolute;">
657
- <img src="${eA}" alt="Joystick Blue" />
703
+ <img src="${dA}" alt="Joystick Blue" />
658
704
  </div>
659
705
  </div>
660
706
  </div>
@@ -666,17 +712,17 @@ class YA {
666
712
  `;
667
713
  }
668
714
  }
669
- bt = new WeakMap(), vt = new WeakMap(), dt = new WeakMap(), $ = new WeakMap();
715
+ bt = new WeakMap(), Mt = new WeakMap(), gt = new WeakMap(), tt = new WeakMap();
670
716
  const qA = async (n) => {
671
- let t;
672
- n.startsWith("root://") ? t = n.replace(/^root:\/\//, "https://").replace(/\/\//g, "/") : t = n, console.log(`Fetching from URL: ${t}`);
673
- const e = await fetch(t);
674
- if (!e.ok)
675
- throw new Error(`Response status: ${e.status}`);
676
- return e.json();
717
+ let e;
718
+ n.startsWith("root://") ? e = n.replace(/^root:\/\//, "https://").replace(/\/\//g, "/") : e = n, console.log(`Fetching from URL: ${e}`);
719
+ const t = await fetch(e);
720
+ if (!t.ok)
721
+ throw new Error(`Response status: ${t.status}`);
722
+ return t.json();
677
723
  };
678
- class EA {
679
- constructor(t, e) {
724
+ class kA {
725
+ constructor(e, t) {
680
726
  m(this, "raycaster");
681
727
  m(this, "mouse");
682
728
  m(this, "cameraElement");
@@ -686,9 +732,9 @@ class EA {
686
732
  m(this, "configSub");
687
733
  m(this, "rendererElement");
688
734
  m(this, "raycastOn");
689
- this.singleClickTimer = null, this.dbClickTimeout = 190, this.raycastOn = !0, this.rendererElement = e, this.raycaster = new Me(), this.mouse = new oe(), this.sceneElement = t, this.checkInterval = 1, this.lastCheck = void 0, t.traverse((A) => {
735
+ this.singleClickTimer = null, this.dbClickTimeout = 190, this.raycastOn = !0, this.rendererElement = t, this.raycaster = new He(), this.mouse = new me(), this.sceneElement = e, this.checkInterval = 1, this.lastCheck = void 0, e.traverse((A) => {
690
736
  A.isCamera && (this.cameraElement = A);
691
- }), this.mousemoveEventHandle = this.mousemoveEventHandle.bind(this), this.clickEventHandle = this.clickEventHandle.bind(this), this.setupRaycasting(), this.configSub = lt().getObservable().subscribe((A) => {
737
+ }), this.mousemoveEventHandle = this.mousemoveEventHandle.bind(this), this.clickEventHandle = this.clickEventHandle.bind(this), this.setupRaycasting(), this.configSub = dt().getObservable().subscribe((A) => {
692
738
  this.dbClickTimeout = A.config.environment.dbClickTimeout ?? 190;
693
739
  });
694
740
  }
@@ -701,49 +747,49 @@ class EA {
701
747
  toggleRaycasting() {
702
748
  this.raycastOn = !this.raycastOn, this.raycastOn ? this.setupRaycasting() : this.destroyRaycasting();
703
749
  }
704
- mousemoveEventHandle(t) {
705
- const e = performance.now();
706
- e - this.lastCheck < this.checkInterval || (this.lastCheck = e, this.updateRaycaster(t));
750
+ mousemoveEventHandle(e) {
751
+ const t = performance.now();
752
+ t - this.lastCheck < this.checkInterval || (this.lastCheck = t, this.updateRaycaster(e));
707
753
  }
708
- clickEventHandle(t) {
709
- const e = this.rendererElement.getBoundingClientRect();
710
- this.mouse.x = (t.clientX - e.left) / e.width * 2 - 1, this.mouse.y = -((t.clientY - e.top) / e.height) * 2 + 1, this.raycaster.setFromCamera(this.mouse, this.cameraElement);
754
+ clickEventHandle(e) {
755
+ const t = this.rendererElement.getBoundingClientRect();
756
+ this.mouse.x = (e.clientX - t.left) / t.width * 2 - 1, this.mouse.y = -((e.clientY - t.top) / t.height) * 2 + 1, this.raycaster.setFromCamera(this.mouse, this.cameraElement);
711
757
  const A = Date.now(), i = (this.lastClick ? A - this.lastClick : 1 / 0) < this.dbClickTimeout;
712
- this.singleClickTimer && (clearTimeout(this.singleClickTimer), this.singleClickTimer = null), i ? (this.raycaster._triggerSource = t.shiftKey ? "shiftmousedbclick" : "mousedbclick", this.handleRaycast()) : this.singleClickTimer = setTimeout(() => {
713
- this.raycaster._triggerSource = t.shiftKey ? "shiftmouseclick" : "mouseclick", this.handleRaycast(), this.singleClickTimer = null;
758
+ this.singleClickTimer && (clearTimeout(this.singleClickTimer), this.singleClickTimer = null), i ? (this.raycaster._triggerSource = e.shiftKey ? "shiftmousedbclick" : "mousedbclick", this.handleRaycast()) : this.singleClickTimer = setTimeout(() => {
759
+ this.raycaster._triggerSource = e.shiftKey ? "shiftmouseclick" : "mouseclick", this.handleRaycast(), this.singleClickTimer = null;
714
760
  }, this.dbClickTimeout), this.lastClick = A;
715
761
  }
716
762
  handleRaycast() {
717
763
  this.raycaster.intersectObjects(this.sceneElement.children, !0).length > 0;
718
764
  }
719
- updateRaycaster(t) {
720
- const e = this.rendererElement.getBoundingClientRect();
721
- this.mouse.x = (t.clientX - e.left) / e.width * 2 - 1, this.mouse.y = -((t.clientY - e.top) / e.height) * 2 + 1, this.raycaster.setFromCamera(this.mouse, this.cameraElement), this.raycaster._triggerSource = "mousemove", this.raycaster.intersectObjects(this.sceneElement.children, !0);
765
+ updateRaycaster(e) {
766
+ const t = this.rendererElement.getBoundingClientRect();
767
+ this.mouse.x = (e.clientX - t.left) / t.width * 2 - 1, this.mouse.y = -((e.clientY - t.top) / t.height) * 2 + 1, this.raycaster.setFromCamera(this.mouse, this.cameraElement), this.raycaster._triggerSource = "mousemove", this.raycaster.intersectObjects(this.sceneElement.children, !0);
722
768
  }
723
769
  }
724
- class pe {
725
- constructor(t) {
726
- this.limits = new Int32Array(t), this.values = new Int32Array(t.length);
770
+ class ve {
771
+ constructor(e) {
772
+ this.limits = new Int32Array(e), this.values = new Int32Array(e.length);
727
773
  }
728
774
  increment() {
729
- for (let t = 0; t < this.values.length; t++) {
730
- if (this.values[t]++, this.values[t] < this.limits[t]) return !0;
731
- this.values[t] = 0;
775
+ for (let e = 0; e < this.values.length; e++) {
776
+ if (this.values[e]++, this.values[e] < this.limits[e]) return !0;
777
+ this.values[e] = 0;
732
778
  }
733
779
  return !1;
734
780
  }
735
781
  getIndex() {
736
- let t = 0, e = 1;
782
+ let e = 0, t = 1;
737
783
  for (let A = 0; A < this.values.length; A++)
738
- t += this.values[A] * e, e *= this.limits[A];
739
- return t;
784
+ e += this.values[A] * t, t *= this.limits[A];
785
+ return e;
740
786
  }
741
- setFromNumber(t) {
742
- for (let e = 0; e < this.limits.length; e++)
743
- this.values[e] = Math.floor(t % this.limits[e]), t = Math.floor(t / this.limits[e]);
787
+ setFromNumber(e) {
788
+ for (let t = 0; t < this.limits.length; t++)
789
+ this.values[t] = Math.floor(e % this.limits[t]), e = Math.floor(e / this.limits[t]);
744
790
  }
745
- getValueAt(t) {
746
- return this.values[t];
791
+ getValueAt(e) {
792
+ return this.values[e];
747
793
  }
748
794
  getValues() {
749
795
  return [...this.values];
@@ -752,394 +798,520 @@ class pe {
752
798
  this.values.fill(0);
753
799
  }
754
800
  }
755
- function AA(n, t) {
756
- return t <= 0 ? n.fXmin : t > n.fNbins ? n.fXmax : n.GetBinLowEdge(t + 1);
801
+ function mA(n, e) {
802
+ return e <= 0 ? n.fXmin : e > n.fNbins ? n.fXmax : n.GetBinLowEdge(e + 1);
757
803
  }
758
- function Tt(n, t, e, A, s, i, o) {
759
- const l = t + 1, c = n.GetBinLowEdge(l), r = AA(n, l), h = Math.abs(r - c);
760
- if (o.size = h, o.pos = c + h * 0.5 - n.fXmin, e) {
761
- const u = (n.fXmax - n.fXmin) * n.fNbins / (e * n.fNbins);
762
- o.pos /= u, o.size /= u, o.size *= 1 - A, o.pos -= e * 0.5, o.pos += s;
804
+ function Jt(n, e, t, A, s, i, r) {
805
+ const c = e + 1, a = n.GetBinLowEdge(c), o = mA(n, c), h = Math.abs(o - a);
806
+ if (r.size = h, r.pos = a + h * 0.5 - n.fXmin, t) {
807
+ const u = (n.fXmax - n.fXmin) * n.fNbins / (t * n.fNbins);
808
+ r.pos /= u, r.size /= u, r.size *= 1 - A, r.pos -= t * 0.5, r.pos += s;
763
809
  }
764
810
  }
765
- function sA(n, t, e, A, s, i, o) {
766
- Tt(n.fXaxis, t.x, e == null ? void 0 : e.x, A == null ? void 0 : A.x, s == null ? void 0 : s.x, i, o.x), Tt(n.fYaxis, t.y, e == null ? void 0 : e.z, A == null ? void 0 : A.y, s == null ? void 0 : s.z, i, o.y), Tt(n.fZaxis, t.z, e == null ? void 0 : e.y, A == null ? void 0 : A.z, s == null ? void 0 : s.y, i, o.z);
811
+ function CA(n, e, t, A, s, i, r) {
812
+ Jt(n.fXaxis, e.x, t == null ? void 0 : t.x, A == null ? void 0 : A.x, s == null ? void 0 : s.x, i, r.x), Jt(n.fYaxis, e.y, t == null ? void 0 : t.z, A == null ? void 0 : A.y, s == null ? void 0 : s.z, i, r.y), Jt(n.fZaxis, e.z, t == null ? void 0 : t.y, A == null ? void 0 : A.z, s == null ? void 0 : s.y, i, r.z);
767
813
  }
768
- function iA(n) {
769
- const t = n.y.size, e = n.y.pos;
770
- return n.y.size = n.z.size, n.y.pos = n.z.pos, n.z.size = t, n.z.pos = e, n;
814
+ function BA(n) {
815
+ const e = n.y.size, t = n.y.pos;
816
+ return n.y.size = n.z.size, n.y.pos = n.z.pos, n.z.size = e, n.z.pos = t, n;
771
817
  }
772
- function nA(n, t, e, A, s, i, o) {
773
- return sA(n, t, A, e, s, i, o), o;
818
+ function wA(n, e, t, A, s, i, r) {
819
+ return CA(n, e, A, t, s, i, r), r;
774
820
  }
775
- function rA(n, t, e) {
776
- return e.z.pos = 2 * n - e.z.pos, e;
821
+ function pA(n, e, t) {
822
+ return t.z.pos = 2 * n - t.z.pos, t;
777
823
  }
778
- function Ae(n, t) {
779
- if (n.length !== t.length) return !1;
780
- const e = {};
824
+ function ce(n, e) {
825
+ if (n.length !== e.length) return !1;
826
+ const t = {};
781
827
  for (const A of n)
782
- e[A] = (e[A] || 0) + 1;
783
- for (const A of t) {
784
- if (!e[A])
828
+ t[A] = (t[A] || 0) + 1;
829
+ for (const A of e) {
830
+ if (!t[A])
785
831
  return !1;
786
- e[A]--;
832
+ t[A]--;
787
833
  }
788
834
  return !0;
789
835
  }
790
- function Wt(n, t, e, A) {
836
+ function bA(n, e) {
837
+ if (!Array.isArray(n) || !Array.isArray(e) || n.length !== e.length)
838
+ return !1;
839
+ for (let t = 0; t < n.length; t++) {
840
+ const A = Object.keys(n[t]), s = Object.keys(e[t]);
841
+ if (A.length !== s.length)
842
+ return !1;
843
+ for (const i of A) {
844
+ if (!e[t].hasOwnProperty(i))
845
+ return !1;
846
+ const r = n[t][i], c = e[t][i];
847
+ if (typeof r != typeof c)
848
+ return !1;
849
+ if (typeof r == "object") {
850
+ if (!r || !c) {
851
+ if (r !== c) return !1;
852
+ continue;
853
+ }
854
+ const a = Object.keys(r), o = Object.keys(c);
855
+ if (a.length !== o.length)
856
+ return !1;
857
+ for (const h of a)
858
+ if (!c.hasOwnProperty(h) || r[h] !== c[h])
859
+ return !1;
860
+ } else if (r !== c)
861
+ return !1;
862
+ }
863
+ }
864
+ return !0;
865
+ }
866
+ function Vt(n, e, t, A) {
791
867
  let s = Array(n.length).fill(0);
792
- const i = (o, l, c) => {
793
- const r = l.fXaxis.fNbins, h = l.fYaxis.fNbins;
794
- l.fZaxis.fNbins;
795
- const u = e.slice(
796
- -e.length + o + 1
797
- ).reduce((d, g) => d * g, 1);
798
- if (s[c] += (n[o].x + n[o].y * r + n[o].z * r * h) * u, o + 1 < n.length) {
799
- let d;
800
- l.children.content ? d = l.children.content[l.getBin(
801
- n[o].x + 1,
802
- n[o].y + 1,
803
- n[o].z + 1
804
- )] : d = l.children[A[0]][l.getBin(
805
- n[o].x + 1,
806
- n[o].y + 1,
807
- n[o].z + 1
808
- )], c > o && i(o + 1, d, c);
868
+ const i = (r, c, a) => {
869
+ const o = c.fXaxis.fNbins, h = c.fYaxis.fNbins;
870
+ c.fZaxis.fNbins;
871
+ const u = t.slice(
872
+ -t.length + r + 1
873
+ ).reduce((g, f) => g * f, 1);
874
+ if (s[a] += (n[r].x + n[r].y * o + n[r].z * o * h) * u, r + 1 < n.length) {
875
+ let g;
876
+ c.children.content ? g = c.children.content[c.getBin(
877
+ n[r].x + 1,
878
+ n[r].y + 1,
879
+ n[r].z + 1
880
+ )] : g = c.children[A[0]][c.getBin(
881
+ n[r].x + 1,
882
+ n[r].y + 1,
883
+ n[r].z + 1
884
+ )], a > r && i(r + 1, g, a);
809
885
  }
810
886
  };
811
- for (let o = 0; o < n.length; o++)
812
- i(0, t, o);
887
+ for (let r = 0; r < n.length; r++)
888
+ i(0, e, r);
813
889
  return s;
814
890
  }
815
- function mt(n, t, e) {
891
+ function Bt(n, e, t) {
816
892
  var s, i;
817
893
  let A = Array(n.length).fill(0);
818
- for (let o = 0; o < n.length; o++)
819
- if (A[o] = t.getBin(
820
- n[o].x + 1,
821
- n[o].y + 1,
822
- n[o].z + 1
823
- ), t.children)
824
- (s = t.children) != null && s.content ? t = t.children.content[A[o]] : t = (i = t.children[e[0]]) == null ? void 0 : i[A[o]];
894
+ for (let r = 0; r < n.length; r++)
895
+ if (A[r] = e.getBin(
896
+ n[r].x + 1,
897
+ n[r].y + 1,
898
+ n[r].z + 1
899
+ ), e.children)
900
+ (s = e.children) != null && s.content ? e = e.children.content[A[r]] : e = (i = e.children[t[0]]) == null ? void 0 : i[A[r]];
825
901
  else
826
902
  return A;
827
903
  return A;
828
904
  }
829
- function pt(n, t, e, A, s, i = 0) {
830
- var r, h, a, u;
831
- const o = ["x", "y", "z"], l = Number.parseInt(e._typename.substring(2, 3), 10);
832
- let c = {};
905
+ function wt(n, e, t, A, s, i = 0) {
906
+ var o, h, l, u;
907
+ const r = ["x", "y", "z"], c = Number.parseInt(t._typename.substring(2, 3), 10);
908
+ let a = {};
833
909
  if (n[0]) {
834
- for (let d = 0; d < l; d++) {
835
- const g = o[d], p = e[`f${g.toUpperCase()}axis`], v = n[0][g];
836
- c[g] = {
837
- min: p.GetBinLowEdge(v + 1),
838
- max: p.GetBinCenter(v + 1) * 2 - p.GetBinLowEdge(v + 1),
839
- name: p.fName,
840
- title: p.fTitle,
841
- label: (h = (r = p.fLabels) == null ? void 0 : r.arr[v]) == null ? void 0 : h.fString
910
+ for (let g = 0; g < c; g++) {
911
+ const f = r[g], d = t[`f${f.toUpperCase()}axis`], w = n[0][f];
912
+ a[f] = {
913
+ min: d.GetBinLowEdge(w + 1),
914
+ max: d.GetBinCenter(w + 1) * 2 - d.GetBinLowEdge(w + 1),
915
+ name: d.fName,
916
+ title: d.fTitle,
917
+ label: (h = (o = d.fLabels) == null ? void 0 : o.arr[w]) == null ? void 0 : h.fString
842
918
  };
843
919
  }
844
- c = { ...c, color: A.getColorAt(i, t), name: e.fName };
920
+ a = { ...a, color: A.getColorAt(i, e), name: t.fName };
845
921
  }
846
922
  if (n[1]) {
847
- let d;
848
- return (a = e.children) != null && a.content ? d = e.children.content[e.getBin(n[0].x + 1, n[0].y + 1, n[0].z + 1)] : (u = e.children) != null && u[s[0]] && (d = e.children[s[0]][e.getBin(n[0].x + 1, n[0].y + 1, n[0].z + 1)]), [c, ...pt(n.slice(1), t, d, A, s, i + 1)];
923
+ let g;
924
+ return (l = t.children) != null && l.content ? g = t.children.content[t.getBin(n[0].x + 1, n[0].y + 1, n[0].z + 1)] : (u = t.children) != null && u[s[0]] && (g = t.children[s[0]][t.getBin(n[0].x + 1, n[0].y + 1, n[0].z + 1)]), [a, ...wt(n.slice(1), e, g, A, s, i + 1)];
849
925
  } else
850
- return [c];
926
+ return [a];
851
927
  }
852
- function oA(n, t, e, A) {
928
+ function MA(n, e, t, A) {
853
929
  let s = 0;
854
- const i = e.slice(1), o = [];
855
- for (let c = 0; c < i.length; c++) {
856
- const r = i.slice(c).reduce((h, a) => h * a, 1);
857
- o.push(r);
858
- }
859
- const l = (c, r) => {
860
- const { fNbins: h } = r.fXaxis, { fNbins: a } = r.fYaxis, { fNbins: u } = r.fZaxis, d = n[c].x + n[c].y * h + n[c].z * h * a;
861
- if (s += d * o[c], c + 1 < n.length) {
862
- const g = cA(r, n[c], A);
863
- l(c + 1, g);
930
+ const i = t.slice(1), r = [];
931
+ for (let a = 0; a < i.length; a++) {
932
+ const o = i.slice(a).reduce((h, l) => h * l, 1);
933
+ r.push(o);
934
+ }
935
+ const c = (a, o) => {
936
+ const { fNbins: h } = o.fXaxis, { fNbins: l } = o.fYaxis, { fNbins: u } = o.fZaxis, g = n[a].x + n[a].y * h + n[a].z * h * l;
937
+ if (s += g * r[a], a + 1 < n.length) {
938
+ const f = xA(o, n[a], A);
939
+ c(a + 1, f);
864
940
  }
865
941
  };
866
- return l(0, t), s;
942
+ return c(0, e), s;
867
943
  }
868
- function cA(n, t, e) {
944
+ function xA(n, e, t) {
869
945
  const A = n.getBin(
870
- t.x + 1,
871
- t.y + 1,
872
- t.z + 1
946
+ e.x + 1,
947
+ e.y + 1,
948
+ e.z + 1
873
949
  );
874
- return n.children.content ? n.children.content[A] : n.children[e[0]][A];
950
+ return n.children.content ? n.children.content[A] : n.children[t[0]][A];
951
+ }
952
+ function qt(n, e, t) {
953
+ const A = e.splice(0, 1)[0];
954
+ return e.length > 0 ? qt(n.children.content[A], e, t) : n.children.content ? n.children.content[A] : n.children[t][A];
875
955
  }
876
- function aA(n) {
956
+ function yA(n) {
877
957
  if (!n) return;
878
- const t = (s) => {
958
+ const e = (s) => {
879
959
  let i = -1 / 0;
880
- for (let o = 0; o < s.length; o++) {
881
- const l = s[o];
882
- l > i && (i = l);
960
+ for (let r = 0; r < s.length; r++) {
961
+ const c = s[r];
962
+ c > i && (i = c);
883
963
  }
884
964
  return i;
885
- }, e = [];
886
- e[0] = { content: t(n.fArray) }, n.fArrays && Object.keys(n == null ? void 0 : n.fArrays).forEach((s) => {
887
- e[0] = {
888
- ...e[0],
889
- [s]: t(n.fArrays[s])
965
+ }, t = [];
966
+ t[0] = { content: e(n.fArray) }, n.fArrays && Object.keys(n == null ? void 0 : n.fArrays).forEach((s) => {
967
+ t[0] = {
968
+ ...t[0],
969
+ [s]: e(n.fArrays[s].values)
890
970
  };
891
971
  });
892
972
  const A = (s, i = 1) => {
893
- e[i] || (e[i] = {}), Object.entries(s).forEach(([o, l]) => {
894
- l.forEach((c) => {
895
- if (!c) return;
896
- const r = t(c.fArray);
897
- (!(o in e[i]) || r > e[i][o]) && (e[i][o] = r), c.children && A(c.children, i + 1);
973
+ t[i] || (t[i] = {}), Object.entries(s).forEach(([r, c]) => {
974
+ c.forEach((a) => {
975
+ if (!a) return;
976
+ const o = e(a.fArray);
977
+ (!(r in t[i]) || o > t[i][r]) && (t[i][r] = o), a.fArrays && Object.keys(a.fArrays).forEach((h) => {
978
+ const l = a.fArrays[h].max;
979
+ (!(h in t[i]) || l > t[i][h]) && (t[i][h] = l), t[i][h] = Math.max(t[i][h], e(a.fArrays[h].values));
980
+ }), a.children && A(a.children, i + 1);
981
+ });
982
+ });
983
+ };
984
+ return n.children && A(n.children), t;
985
+ }
986
+ function IA(n, e) {
987
+ if (!n) return;
988
+ const t = (i) => {
989
+ let r = 0;
990
+ for (let c = 0; c < i.length; c++) {
991
+ const a = i[c];
992
+ a > r && (r = a);
993
+ }
994
+ return r;
995
+ }, A = [];
996
+ A[0] = { content: t(n.fSumw2) }, n.fArrays && Object.keys(n == null ? void 0 : n.fArrays).forEach((i) => {
997
+ n.fArrays[i].errors && (A[0] = {
998
+ ...A[0],
999
+ [i]: t(n.fArrays[i].errors)
1000
+ });
1001
+ });
1002
+ const s = (i, r = 1) => {
1003
+ A[r] || (A[r] = {}), Object.entries(i).forEach(([c, a]) => {
1004
+ a.forEach((o) => {
1005
+ if (!o) return;
1006
+ const h = t(o.fSumw2), l = isNaN(h) ? 0 : h;
1007
+ (!(c in A[r]) || l > A[r][c]) && (A[r][c] = l), o.fArrays && Object.keys(o.fArrays).forEach((u) => {
1008
+ o.fArrays[u].errors && ((!(u in A[r]) || l > A[r][u]) && (A[r][u] = l), A[r][u] = Math.max(A[r][u], t(o.fArrays[u].errors)));
1009
+ }), o.children && s(o.children, r + 1);
1010
+ });
1011
+ });
1012
+ };
1013
+ n.children && s(n.children);
1014
+ for (let i = 0; i < A.length; i++)
1015
+ Object.keys(A[i]).forEach((r) => {
1016
+ A[i][r] === 0 && (A[i][r] = Math.sqrt(e[i][r]));
1017
+ });
1018
+ return A;
1019
+ }
1020
+ function vA(n, e) {
1021
+ if (!n) return;
1022
+ const t = (i) => {
1023
+ let r = 1 / 0;
1024
+ for (let c = 0; c < i.length; c++) {
1025
+ const a = i[c];
1026
+ a < r && (r = a);
1027
+ }
1028
+ return r;
1029
+ }, A = [];
1030
+ A[0] = { content: t(n.fSumw2) }, n.fArrays && Object.keys(n == null ? void 0 : n.fArrays).forEach((i) => {
1031
+ n.fArrays[i].errors && (A[0] = {
1032
+ ...A[0],
1033
+ [i]: t(n.fArrays[i].errors)
1034
+ });
1035
+ });
1036
+ const s = (i, r = 1) => {
1037
+ A[r] || (A[r] = {}), Object.entries(i).forEach(([c, a]) => {
1038
+ a.forEach((o) => {
1039
+ if (!o) return;
1040
+ const h = t(o.fSumw2), l = isNaN(h) ? 0 : h;
1041
+ (!(c in A[r]) || l < A[r][c]) && (A[r][c] = l), o.fArrays && Object.keys(o.fArrays).forEach((u) => {
1042
+ o.fArrays[u].errors && ((!(u in A[r]) || l < A[r][u]) && (A[r][u] = l), A[r][u] = Math.min(A[r][u], t(o.fArrays[u].errors.filter((g) => g > 0))));
1043
+ }), o.children && s(o.children, r + 1);
898
1044
  });
899
1045
  });
900
1046
  };
901
- return n.children && A(n.children), e;
1047
+ n.children && s(n.children);
1048
+ for (let i = 0; i < A.length; i++)
1049
+ Object.keys(A[i]).forEach((r) => {
1050
+ (A[i][r] === 0 || A[i][r] === 1 / 0) && (A[i][r] = Math.sqrt(e[i][r]));
1051
+ });
1052
+ return A;
902
1053
  }
903
- function lA(n) {
1054
+ function EA(n) {
904
1055
  if (!n) return;
905
- const t = (s) => {
1056
+ const e = (s) => {
906
1057
  let i = 1 / 0;
907
- for (let o = 0; o < s.length; o++) {
908
- const l = s[o];
909
- l < i && (i = l);
1058
+ for (let r = 0; r < s.length; r++) {
1059
+ const c = s[r];
1060
+ c < i && (i = c);
910
1061
  }
911
1062
  return i;
912
- }, e = [];
913
- e[0] = {
914
- content: t(n.fArray.filter((s) => s !== 0))
1063
+ }, t = [];
1064
+ t[0] = {
1065
+ content: e(n.fArray.filter((s) => s !== 0))
915
1066
  }, n.fArrays && Object.keys(n == null ? void 0 : n.fArrays).forEach((s) => {
916
- e[0] = {
917
- ...e[0],
918
- [s]: t(
1067
+ t[0] = {
1068
+ ...t[0],
1069
+ [s]: e(
919
1070
  n.fArrays[s].values.filter((i) => i !== 0)
920
1071
  )
921
1072
  };
922
1073
  });
923
1074
  const A = (s, i = 1) => {
924
- e[i] || (e[i] = {}), Object.entries(s).forEach(([o, l]) => {
925
- l.forEach((c) => {
926
- if (!c) return;
927
- const r = t(c.fArray.filter((h) => h !== 0));
928
- (!(o in e[i]) || r > e[i][o]) && (e[i][o] = r), c.children && A(c.children, i + 1);
1075
+ t[i] || (t[i] = {}), Object.entries(s).forEach(([r, c]) => {
1076
+ c.forEach((a) => {
1077
+ if (!a) return;
1078
+ const o = e(a.fArray.filter((h) => h !== 0));
1079
+ (!(r in t[i]) || o < t[i][r]) && (t[i][r] = o), a.fArrays && Object.keys(a.fArrays).forEach((h) => {
1080
+ (!(h in t[i]) || o > t[i][h]) && (t[i][h] = o), t[i][h] = Math.min(
1081
+ t[i][h],
1082
+ e(a.fArrays[h].values.filter((l) => l !== 0))
1083
+ );
1084
+ }), a.children && A(a.children, i + 1);
929
1085
  });
930
1086
  });
931
1087
  };
932
- return n.children && A(n.children), e;
1088
+ return n.children && A(n.children), t;
933
1089
  }
934
- function hA(n) {
1090
+ function QA(n) {
935
1091
  if (!n) return;
936
- const t = n.fXaxis.fNbins * n.fYaxis.fNbins * n.fZaxis.fNbins;
937
- let e = [];
938
- e.push(t);
1092
+ const e = n.fXaxis.fNbins * n.fYaxis.fNbins * n.fZaxis.fNbins;
1093
+ let t = [];
1094
+ t.push(e);
939
1095
  const A = (s, i = 1) => {
940
- let o = 0;
941
- return i >= e.length && e.push(0), Object.entries(s).forEach((l, c) => {
942
- l[1].forEach((r) => {
943
- r && (o = r.fXaxis.fNbins * r.fYaxis.fNbins * r.fZaxis.fNbins, o > e[i] && (e[i] = o), r.children && A(r.children, i + 1));
1096
+ let r = 0;
1097
+ return i >= t.length && t.push(1), Object.entries(s).forEach((c, a) => {
1098
+ c[1].forEach((o) => {
1099
+ o && (r = o.fXaxis.fNbins * o.fYaxis.fNbins * o.fZaxis.fNbins, r > t[i] && (t[i] = r), o.children && A(o.children, i + 1));
944
1100
  });
945
- }), e;
1101
+ }), t;
946
1102
  };
947
- return n.children && A(n.children), e.push(1), e;
1103
+ return n.children && A(n.children), t.push(1), t;
948
1104
  }
949
- function uA(n, t, e) {
950
- new X(n.color.default.min).toArray(e, 0), new X(n.color.default.max).toArray(e, 3);
1105
+ function zA(n, e, t) {
1106
+ new U(n.color.default.min).toArray(t, 0), new U(n.color.default.max).toArray(t, 3);
951
1107
  let A = 1;
952
1108
  n.color.layer.forEach((s) => {
953
1109
  const i = A * 6;
954
- new X(s.min).toArray(e, i), new X(s.max).toArray(e, i + 3), A++;
1110
+ new U(s.min).toArray(t, i), new U(s.max).toArray(t, i + 3), A++;
955
1111
  }), n.color.set.forEach((s) => {
956
1112
  const i = A * 6;
957
- new X(s.min).toArray(e, i), new X(s.max).toArray(e, i + 3), A++;
958
- }), t.uniforms.colorPairs = { value: e }, t.uniformsNeedUpdate = !0;
1113
+ new U(s.min).toArray(t, i), new U(s.max).toArray(t, i + 3), A++;
1114
+ }), e.uniforms.colorPairs = { value: t }, e.uniformsNeedUpdate = !0;
959
1115
  }
960
- function dA(n, t, e, A, s, i, o) {
961
- const c = ((h, a, u) => (h - a) / (u - a))(e, A, s);
962
- let r = 0;
963
- return n.set[i] ? r = 1 + n.layer.length + i : n.layer[o] && (r = 1 + o), r + c;
1116
+ function le(n, e, t, A, s, i) {
1117
+ const c = ((o, h, l) => {
1118
+ let u = (o - h) / (l - h);
1119
+ return u > 1 && (u = 1), isNaN(u) || u === 1 / 0 ? 0 : u;
1120
+ })(e, t, A);
1121
+ let a = 0;
1122
+ return n.set[s] ? a = 1 + n.layer.length + s : n.layer[i] && (a = 1 + i), a + c;
964
1123
  }
965
- function se(n, t, e, A, s, i, o) {
1124
+ function he(n, e, t, A, s, i, r) {
966
1125
  if (!(1 / n === -1 / 0 || n < 0))
967
- return o[0] = t[n], o[1] = t[n + 1], o[2] = t[n + 2], o[3] = e[n], o[4] = e[n + 1], o[5] = e[n + 2], o;
968
- const c = Math.abs(n), r = i !== null ? A[s][i] : A[s];
969
- return o[0] = r.pos[c], o[1] = r.pos[c + 1], o[2] = r.pos[c + 2], o[3] = r.scale[c], o[4] = r.scale[c + 1], o[5] = r.scale[c + 2], o;
1126
+ return r[0] = e[n], r[1] = e[n + 1], r[2] = e[n + 2], r[3] = t[n], r[4] = t[n + 1], r[5] = t[n + 2], r;
1127
+ const a = Math.abs(n), o = i !== null ? A[s][i] : A[s];
1128
+ return r[0] = o.pos[a], r[1] = o.pos[a + 1], r[2] = o.pos[a + 2], r[3] = o.scale[a], r[4] = o.scale[a + 1], r[5] = o.scale[a + 2], r;
970
1129
  }
971
- const fA = (n) => {
1130
+ const GA = (n) => {
972
1131
  if (!n) return !1;
973
- for (const t in n)
974
- if (t !== "content" && Object.prototype.hasOwnProperty.call(n, t) && n[t] && typeof n[t] == "object" && Object.keys(n[t]).length > 0)
1132
+ for (const e in n)
1133
+ if (e !== "content" && Object.prototype.hasOwnProperty.call(n, e) && n[e] && typeof n[e] == "object" && Object.keys(n[e]).length > 0)
975
1134
  return !0;
976
1135
  return !1;
977
1136
  };
978
- function kt(n, t, e, A, s, i, o) {
979
- const l = t.fXaxis.fNbins, c = t.fYaxis.fNbins, r = t.fZaxis.fNbins;
980
- let h = 0, a = 0;
981
- const u = new Float32Array((l * c * r - 1) * 3), d = new Float32Array((l * c * r - 1) * 3), g = new Float32Array(l * c * r - 1), p = new Float32Array(l * c * r - 1), v = new Float32Array(l * c * r - 1), f = new Float32Array(6), b = new Float32Array(6), y = (C) => {
982
- const z = B * 3;
983
- u[z] = C[0], u[z + 1] = C[1], u[z + 2] = C[2], d[z] = C[3], d[z + 1] = C[4], d[z + 2] = C[5], g[B] = C[6], p[B] = C[7], v[B] = C[8];
984
- }, x = (C, z, O, E) => {
985
- se(C, u, d, n, O, E, f), se(z, u, d, n, O, E, b);
986
- const Y = f[0] - f[3] * 0.5 < b[0] - b[3] * 0.5 ? f[0] - f[3] * 0.5 : b[0] - b[3] * 0.5, P = f[1] - f[4] * 0.5 < b[1] - b[4] * 0.5 ? f[1] - f[4] * 0.5 : b[1] - b[4] * 0.5, k = f[2] - f[5] * 0.5 < b[2] - b[5] * 0.5 ? f[2] - f[5] * 0.5 : b[2] - b[5] * 0.5, V = f[0] + f[3] * 0.5 > b[0] + b[3] * 0.5 ? f[0] + f[3] * 0.5 : b[0] + b[3] * 0.5, N = f[1] + f[4] * 0.5 > b[1] + b[4] * 0.5 ? f[1] + f[4] * 0.5 : b[1] + b[4] * 0.5, Q = f[2] + f[5] * 0.5 > b[2] + b[5] * 0.5 ? f[2] + f[5] * 0.5 : b[2] + b[5] * 0.5, G = new Float32Array(9);
987
- return G[0] = (Y + V) * 0.5, G[1] = (P + N) * 0.5, G[2] = (k + Q) * 0.5, G[3] = V - Y, G[4] = N - P, G[5] = Q - k, G;
1137
+ function xt(n, e, t, A, s, i, r) {
1138
+ const c = e.fXaxis.fNbins, a = e.fYaxis.fNbins, o = e.fZaxis.fNbins;
1139
+ let h = 0, l = 0;
1140
+ const u = new Float32Array((c * a * o - 1) * 3), g = new Float32Array((c * a * o - 1) * 3), f = new Float32Array(c * a * o - 1), d = new Float32Array(c * a * o - 1), w = new Float32Array(c * a * o - 1), B = new Float32Array(6), M = new Float32Array(6), p = (x) => {
1141
+ const Q = y * 3;
1142
+ u[Q] = x[0], u[Q + 1] = x[1], u[Q + 2] = x[2], g[Q] = x[3], g[Q + 1] = x[4], g[Q + 2] = x[5], f[y] = x[6], d[y] = x[7], w[y] = x[8];
1143
+ }, I = (x, Q, E, T) => {
1144
+ he(x, u, g, n, E, T, B), he(Q, u, g, n, E, T, M);
1145
+ const G = B[0] - B[3] * 0.5 < M[0] - M[3] * 0.5 ? B[0] - B[3] * 0.5 : M[0] - M[3] * 0.5, z = B[1] - B[4] * 0.5 < M[1] - M[4] * 0.5 ? B[1] - B[4] * 0.5 : M[1] - M[4] * 0.5, F = B[2] - B[5] * 0.5 < M[2] - M[5] * 0.5 ? B[2] - B[5] * 0.5 : M[2] - M[5] * 0.5, P = B[0] + B[3] * 0.5 > M[0] + M[3] * 0.5 ? B[0] + B[3] * 0.5 : M[0] + M[3] * 0.5, V = B[1] + B[4] * 0.5 > M[1] + M[4] * 0.5 ? B[1] + B[4] * 0.5 : M[1] + M[4] * 0.5, S = B[2] + B[5] * 0.5 > M[2] + M[5] * 0.5 ? B[2] + B[5] * 0.5 : M[2] + M[5] * 0.5, H = new Float32Array(9);
1146
+ return H[0] = (G + P) * 0.5, H[1] = (z + V) * 0.5, H[2] = (F + S) * 0.5, H[3] = P - G, H[4] = V - z, H[5] = S - F, H;
988
1147
  };
989
- let B = 0;
990
- for (let C = 0; C < c; C++) {
991
- for (let O = 0; O < r; O++) {
992
- const E = h + o;
993
- let Y = new Array(l);
994
- for (let P = 0; P < l; P++)
995
- Y[P] = -P - E;
996
- for (; Y.length > 1; ) {
997
- let P = 0;
998
- const k = Math.floor(Y.length / 2);
999
- for (let V = 0; V < k; V++) {
1000
- const N = Y[P], Q = Y[P + 1], G = x(N * 3, Q * 3, e, A);
1001
- Y.splice(P, 2, B), St(G, i), G[6] = 1 / N === -1 / 0 || N < 0 ? N : v[N], G[7] = 1 / Q === -1 / 0 || Q < 0 ? Q : v[Q], G[8] = a, y(G), B += 1, a += 1, P += 1;
1148
+ let y = 0;
1149
+ for (let x = 0; x < a; x++) {
1150
+ for (let E = 0; E < o; E++) {
1151
+ const T = h + r;
1152
+ let G = new Array(c);
1153
+ for (let z = 0; z < c; z++)
1154
+ G[z] = -z - T;
1155
+ for (; G.length > 1; ) {
1156
+ let z = 0;
1157
+ const F = Math.floor(G.length / 2);
1158
+ for (let P = 0; P < F; P++) {
1159
+ const V = G[z], S = G[z + 1], H = I(V * 3, S * 3, t, A);
1160
+ G.splice(z, 2, y), Lt(H, i), H[6] = 1 / V === -1 / 0 || V < 0 ? V : w[V], H[7] = 1 / S === -1 / 0 || S < 0 ? S : w[S], H[8] = l, p(H), y += 1, l += 1, z += 1;
1002
1161
  }
1003
1162
  }
1004
- h += l;
1163
+ h += c;
1005
1164
  }
1006
- const z = new Array(r);
1007
- for (let O = 0; O < r; O++)
1008
- z[O] = B - 1 - (r - 1 - O) * (l - 1);
1009
- for (; z.length > 1; ) {
1010
- let O = 0;
1011
- const E = Math.floor(z.length / 2);
1012
- for (let Y = 0; Y < E; Y++) {
1013
- const P = z[O], k = z[O + 1], V = x(P * 3, k * 3, e, A);
1014
- z.splice(O, 2, B), St(V, i), V[6] = v[P], V[7] = v[k], V[8] = a, y(V), B += 1, a += 1, O += 1;
1165
+ const Q = new Array(o);
1166
+ for (let E = 0; E < o; E++)
1167
+ Q[E] = y - 1 - (o - 1 - E) * (c - 1);
1168
+ for (; Q.length > 1; ) {
1169
+ let E = 0;
1170
+ const T = Math.floor(Q.length / 2);
1171
+ for (let G = 0; G < T; G++) {
1172
+ const z = Q[E], F = Q[E + 1], P = I(z * 3, F * 3, t, A);
1173
+ Q.splice(E, 2, y), Lt(P, i), P[6] = w[z], P[7] = w[F], P[8] = l, p(P), y += 1, l += 1, E += 1;
1015
1174
  }
1016
1175
  }
1017
1176
  }
1018
- const D = new Array(c);
1019
- for (let C = 0; C < c; C++)
1020
- D[C] = B - 1 - (c - 1 - C) * (l * r - 1);
1021
- for (; D.length > 1; ) {
1022
- let C = 0;
1023
- const z = Math.floor(D.length / 2);
1024
- for (let O = 0; O < z; O++) {
1025
- const E = D[C], Y = D[C + 1], P = x(E * 3, Y * 3, e, A);
1026
- D.splice(C, 2, B), St(P, i), P[6] = v[E], P[7] = v[Y], P[8] = a, y(P), B += 1, a += 1, C += 1;
1177
+ const b = new Array(a);
1178
+ for (let x = 0; x < a; x++)
1179
+ b[x] = y - 1 - (a - 1 - x) * (c * o - 1);
1180
+ for (; b.length > 1; ) {
1181
+ let x = 0;
1182
+ const Q = Math.floor(b.length / 2);
1183
+ for (let E = 0; E < Q; E++) {
1184
+ const T = b[x], G = b[x + 1], z = I(T * 3, G * 3, t, A);
1185
+ b.splice(x, 2, y), Lt(z, i), z[6] = w[T], z[7] = w[G], z[8] = l, p(z), y += 1, l += 1, x += 1;
1027
1186
  }
1028
1187
  }
1029
1188
  return {
1030
1189
  pos: u,
1031
- scale: d,
1032
- left: g,
1033
- right: p
1190
+ scale: g,
1191
+ left: f,
1192
+ right: d
1034
1193
  };
1035
1194
  }
1036
- function gA(n, t, e, A, s, i, o) {
1037
- const l = new Array(n.length).fill().map((r) => []);
1038
- l[l.length - 1] = Array.from(
1039
- { length: s.length },
1195
+ function TA(n, e, t, A, s, i, r, c) {
1196
+ const a = new Array(n.length).fill().map((h) => []);
1197
+ a[a.length - 1] = Array.from(
1198
+ { length: i.length },
1040
1199
  () => []
1041
- ), l[0] = [kt(
1200
+ ), s === null ? a[0] = [xt(
1042
1201
  n,
1043
- t,
1044
1202
  e,
1203
+ t,
1045
1204
  null,
1046
- s,
1047
1205
  i,
1206
+ r,
1048
1207
  0
1049
- )];
1050
- const c = (r, h, a) => {
1051
- var v;
1052
- if (!r.children) return;
1053
- const u = new pe(
1208
+ )] : (a[0] = new Array(i.length), A.forEach((h) => a[0][i.indexOf(h)] = xt(
1209
+ n,
1210
+ e,
1211
+ t,
1212
+ i.indexOf(h),
1213
+ i,
1214
+ r,
1215
+ 0
1216
+ )));
1217
+ const o = (h, l, u) => {
1218
+ var B;
1219
+ if (!h.children) return;
1220
+ const g = new ve(
1054
1221
  [
1055
- r.fXaxis.fNbins,
1056
- r.fYaxis.fNbins,
1057
- r.fZaxis.fNbins
1222
+ h.fXaxis.fNbins,
1223
+ h.fYaxis.fNbins,
1224
+ h.fZaxis.fNbins
1058
1225
  ]
1059
- ), d = r.fXaxis.fNbins * r.fYaxis.fNbins * r.fZaxis.fNbins, g = o.slice(1, h - 1).reduce((f, b) => f * b, o[1]), p = o[h];
1060
- for (let f = 0; f < d; f++) {
1061
- const b = { x: u.getValueAt(0), y: u.getValueAt(1), z: u.getValueAt(2) };
1062
- if ((v = r == null ? void 0 : r.children) != null && v.content) {
1063
- const y = r.children.content[r.getBin(b.x + 1, b.y + 1, b.z + 1)];
1064
- if (!y) {
1065
- if (u.increment() === !1) break;
1226
+ ), f = h.fXaxis.fNbins * h.fYaxis.fNbins * h.fZaxis.fNbins, d = c.slice(1, l - 1).reduce((M, p) => M * p, c[1]), w = c[l];
1227
+ for (let M = 0; M < f; M++) {
1228
+ const p = { x: g.getValueAt(0), y: g.getValueAt(1), z: g.getValueAt(2) };
1229
+ if ((B = h == null ? void 0 : h.children) != null && B.content) {
1230
+ const I = h.children.content[h.getBin(p.x + 1, p.y + 1, p.z + 1)];
1231
+ if (!I) {
1232
+ if (g.increment() === !1) break;
1066
1233
  continue;
1067
1234
  }
1068
- l[h][f + a] = kt(
1235
+ a[l][M + u] = xt(
1069
1236
  n,
1070
- y,
1071
- h,
1237
+ I,
1238
+ l,
1072
1239
  null,
1073
- s,
1074
1240
  i,
1075
- (f + a) * p
1076
- ), c(y, h + 1, (u.getIndex() + a) * g);
1077
- } else fA(r.children) && A.forEach((y) => {
1078
- const x = s.indexOf(y), B = (f + a) * p;
1079
- let D = !1;
1080
- for (let z = B; z < B + o[h]; z++)
1081
- if (n[h][x].rendered[z] !== -1) {
1082
- D = !0;
1241
+ r,
1242
+ (M + u) * w
1243
+ ), o(I, l + 1, (g.getIndex() + u) * d);
1244
+ } else GA(h.children) && A.forEach((I) => {
1245
+ const y = i.indexOf(I), b = (M + u) * w;
1246
+ let x = !1;
1247
+ for (let E = b; E < b + c[l]; E++)
1248
+ if (n[l][y].rendered[E] !== -1) {
1249
+ x = !0;
1083
1250
  break;
1084
1251
  }
1085
- if (!D) {
1086
- l[h][x].push(null);
1252
+ if (!x) {
1253
+ a[l][y].push(null);
1087
1254
  return;
1088
1255
  }
1089
- const C = r.children[y][r.getBin(b.x + 1, b.z + 1, b.y + 1)];
1090
- C && (l[h][x][f + a] = kt(
1256
+ const Q = h.children[I][h.getBin(p.x + 1, p.z + 1, p.y + 1)];
1257
+ Q && (a[l][y][M + u] = xt(
1091
1258
  n,
1092
- C,
1093
- h,
1094
- x,
1095
- s,
1259
+ Q,
1260
+ l,
1261
+ y,
1096
1262
  i,
1097
- (f + a) * p
1098
- ), c(
1099
- C,
1100
- h + 1,
1101
- (u.getIndex() + a) * g
1263
+ r,
1264
+ (M + u) * w
1265
+ ), o(
1266
+ Q,
1267
+ l + 1,
1268
+ (g.getIndex() + u) * d
1102
1269
  ));
1103
1270
  });
1104
- if (u.increment() === !1) break;
1271
+ if (g.increment() === !1) break;
1105
1272
  }
1106
1273
  };
1107
- return c(t, 1, 0), l;
1274
+ return o(e, 1, 0), a;
1108
1275
  }
1109
- function St(n, t) {
1110
- const e = t.elements, A = Math.sqrt(e[0] * e[0] + e[1] * e[1] + e[2] * e[2]), s = Math.sqrt(e[4] * e[4] + e[5] * e[5] + e[6] * e[6]), i = Math.sqrt(e[8] * e[8] + e[9] * e[9] + e[10] * e[10]);
1111
- n[0] = n[0] * A + e[12], n[1] = n[1] * s + e[13], n[2] = n[2] * i + e[14], n[3] = n[3] * A, n[4] = n[4] * s, n[5] = n[5] * i;
1276
+ function Lt(n, e) {
1277
+ const t = e.elements, A = Math.sqrt(t[0] * t[0] + t[1] * t[1] + t[2] * t[2]), s = Math.sqrt(t[4] * t[4] + t[5] * t[5] + t[6] * t[6]), i = Math.sqrt(t[8] * t[8] + t[9] * t[9] + t[10] * t[10]);
1278
+ n[0] = n[0] * A + t[12], n[1] = n[1] * s + t[13], n[2] = n[2] * i + t[14], n[3] = n[3] * A, n[4] = n[4] * s, n[5] = n[5] * i;
1112
1279
  }
1113
- class ie {
1114
- constructor(t) {
1280
+ class ue {
1281
+ constructor(e) {
1115
1282
  m(this, "rootObj");
1116
1283
  m(this, "origin");
1117
1284
  m(this, "parentPath", []);
1118
1285
  m(this, "path");
1119
1286
  m(this, "title");
1120
1287
  m(this, "range", []);
1121
- m(this, "isOnSet", !1);
1122
- this.rootObj = t, this.origin = this.rootObj, this.title = this.origin.fTitle, this.path = this.origin.fName;
1288
+ m(this, "isOnSet", null);
1289
+ m(this, "isHistogramFilled", !0);
1290
+ this.rootObj = e, this.origin = this.rootObj, this.title = this.origin.fTitle, this.path = this.origin.fName;
1123
1291
  }
1124
1292
  /**
1125
1293
  * sets origin of pointer to one of child's.
1126
1294
  * @param index is an index in child mapping.
1127
1295
  * @param set if children contains sets, parameter need to be specified.
1128
1296
  * */
1129
- setOriginToChild(t, e, A) {
1130
- var i, o;
1131
- if (!t) return;
1132
- const s = t.splice(0, 1);
1297
+ setOriginToChild(e, t, A) {
1298
+ var i, r;
1299
+ if (!e) return;
1300
+ const s = e.splice(0, 1);
1133
1301
  if ((i = this.origin) != null && i.children) {
1134
- if ((o = this.origin.children) != null && o.content)
1135
- this.parentPath.push({ origin: this.origin, range: A, bin: s }), this.origin = this.origin.children.content[s], this.isOnSet = !1;
1136
- else if (Object.keys(this.origin.children).includes(e))
1137
- this.parentPath.push({ origin: this.origin, range: A, bin: s }), this.origin = this.origin.children[e][s], this.isOnSet = !0;
1138
- else {
1302
+ if ((r = this.origin.children) != null && r.content)
1303
+ this.parentPath.push({ origin: this.origin, range: A.splice(0, 1), bin: s }), this.origin = this.origin.children.content[s], this.isOnSet = null;
1304
+ else if (Object.keys(this.origin.children).includes(t)) {
1305
+ if (this.parentPath.push({ origin: this.origin, range: A.splice(0, 1), bin: s }), !this.origin.children[t][s]) {
1306
+ this.isHistogramFilled = !1, this.path = this.path + "/empty", this.origin = null;
1307
+ return;
1308
+ }
1309
+ this.origin = this.origin.children[t][s], this.isOnSet = t;
1310
+ } else {
1139
1311
  console.error("Bad set or index specified.");
1140
1312
  return;
1141
1313
  }
1142
- this.title = this.origin.fTitle, this.path = this.path + "/" + this.origin.fName, t.length > 0 && this.setOriginToChild(t, e);
1314
+ this.title = this.origin.fTitle, this.path = this.path + "/" + this.origin.fName, e.length > 0 && this.setOriginToChild(e, t, A), console.log(this.parentPath);
1143
1315
  }
1144
1316
  }
1145
1317
  /**
@@ -1154,26 +1326,26 @@ class ie {
1154
1326
  * */
1155
1327
  /**
1156
1328
  * */
1157
- getChildByPosition(t, e, A = this.origin) {
1329
+ getChildByPosition(e, t, A = this.origin) {
1158
1330
  var i;
1159
- if (!t || t.length === 0) return A;
1160
- const s = t.pop();
1161
- return A != null && A.children ? (i = A.children) != null && i.content ? this.getChildByPosition(t, e, A.children.content[s]) : Object.keys(A.children).includes(e) ? this.getChildByPosition(t, e, A.children[e][s]) : (console.error("Bad set or index specified."), null) : A;
1331
+ if (!e || e.length === 0) return A;
1332
+ const s = e.pop();
1333
+ return A != null && A.children ? (i = A.children) != null && i.content ? this.getChildByPosition(e, t, A.children.content[s]) : Object.keys(A.children).includes(t) ? this.getChildByPosition(e, t, A.children[t][s]) : (console.error("Bad set or index specified."), null) : A;
1162
1334
  }
1163
1335
  /**
1164
1336
  * sets origin of pointer to one of parent nodes.
1165
1337
  * @param steps (optional, default = 1) defines how many steps in path should pointer go upwards.
1166
1338
  * */
1167
- setOriginToParent(t = 1) {
1168
- if (t <= 0 || this.parentPath.length === 0) return;
1169
- const e = this.path.lastIndexOf("/");
1170
- this.path = this.path.slice(0, e);
1339
+ setOriginToParent(e = 1) {
1340
+ if (e <= 0 || this.parentPath.length === 0) return;
1341
+ const t = this.path.lastIndexOf("/");
1342
+ this.path = this.path.slice(0, t);
1171
1343
  const A = this.parentPath.pop();
1172
- A && (this.origin = A.origin), this.title = this.origin.fTitle, this.setOriginToParent(t - 1), this.isOnSet = !1;
1344
+ A && (this.origin = A.origin), this.title = this.origin.fTitle, this.setOriginToParent(e - 1), this.isOnSet = null, this.isHistogramFilled = !0;
1173
1345
  }
1174
1346
  }
1175
- class mA {
1176
- constructor(t, e, A) {
1347
+ class DA {
1348
+ constructor(e, t, A, s) {
1177
1349
  m(this, "wireframe");
1178
1350
  m(this, "instGeom");
1179
1351
  m(this, "material");
@@ -1188,93 +1360,94 @@ class mA {
1188
1360
  m(this, "config");
1189
1361
  m(this, "numOfavailableSets");
1190
1362
  m(this, "visibility", !0);
1191
- this.config = A, this.maxInstancesPerLayer = t;
1192
- const s = new xt(1, 1, 1), i = new $t(s);
1193
- this.instGeom = new yt(), this.instGeom.instanceCount = 0, this.instGeom.frustumCulled = !1, this.instGeom.index = i.index;
1194
- for (const o in i.attributes)
1195
- this.instGeom.setAttribute(o, i.attributes[o]);
1363
+ m(this, "id");
1364
+ this.config = A, this.maxInstancesPerLayer = e, this.id = s;
1365
+ const i = new yt(1, 1, 1), r = new re(i);
1366
+ this.instGeom = new It(), this.instGeom.instanceCount = 0, this.instGeom.frustumCulled = !1, this.instGeom.index = r.index;
1367
+ for (const c in r.attributes)
1368
+ this.instGeom.setAttribute(c, r.attributes[c]);
1196
1369
  this.material = this.createMaterial(), this.colorArray = new Float32Array(32 * 3), this.fillColorArray(), this.instancePositions = new Float32Array(3), this.instanceScales = new Float32Array(3), this.instanceColors = new Float32Array(1), this.instGeom.setAttribute(
1197
1370
  "instancePosition",
1198
- new L(this.instancePositions, 3)
1371
+ new Z(this.instancePositions, 3)
1199
1372
  ), this.instGeom.setAttribute(
1200
1373
  "instanceScale",
1201
- new L(this.instanceScales, 3)
1374
+ new Z(this.instanceScales, 3)
1202
1375
  ), this.instGeom.setAttribute(
1203
1376
  "instanceColorIndex",
1204
- new L(this.instanceColors, 1)
1205
- ), this.wireframe = new te(this.instGeom, this.material), this.wireframe.frustumCulled = !1, this.stateSub = tt().getObservable().subscribe((o) => {
1206
- this.numOfavailableSets = o.sets.length;
1377
+ new Z(this.instanceColors, 1)
1378
+ ), this.wireframe = new oe(this.instGeom, this.material), this.wireframe.frustumCulled = !1, this.stateSub = k(this.id).getObservable().subscribe((c) => {
1379
+ this.numOfavailableSets = c.sets.length;
1207
1380
  });
1208
1381
  }
1209
- pushVisibleInstances(t, e, A) {
1382
+ pushVisibleInstances(e, t, A) {
1210
1383
  let s = this.wireframe.parent;
1211
1384
  s && (s.remove(this.wireframe), this.instGeom.dispose());
1212
- const i = [];
1213
- let o = t.length - 1;
1214
- Array.isArray(t[o]) && (o = o - 1);
1385
+ const i = this.config.display.start ?? 0, r = this.config.display.end ?? e.length - 1, c = [];
1386
+ let a = e.length - 1;
1387
+ Array.isArray(e[a]) && (a = a - 1);
1215
1388
  {
1216
- const b = (Array.isArray(t[o]) ? t[o][A] : t[o]).rendered, y = new Uint8Array(b.length);
1217
- for (let x = 0; x < b.length; x++) y[x] = b[x] !== -1 ? 1 : 0;
1218
- i[o] = y;
1389
+ const I = (Array.isArray(e[a]) ? e[a][A] : e[a]).rendered, y = new Uint8Array(I.length);
1390
+ for (let b = 0; b < I.length; b++) y[b] = I[b] !== -1 ? 1 : 0;
1391
+ c[a] = y;
1219
1392
  }
1220
- for (let f = o - 1; f >= 0; f--) {
1221
- const y = (Array.isArray(t[f]) ? t[f][A] : t[f]).rendered, x = i[f + 1], B = e[f + 1] || 0, D = new Uint8Array(y.length);
1222
- for (let C = 0; C < y.length; C++) {
1223
- if (y[C] !== -1) {
1224
- D[C] = 1;
1393
+ for (let p = a - 1; p >= 0; p--) {
1394
+ const y = (Array.isArray(e[p]) ? e[p][A] : e[p]).rendered, b = c[p + 1], x = t[p + 1] || 0, Q = new Uint8Array(y.length);
1395
+ for (let E = 0; E < y.length; E++) {
1396
+ if (y[E] !== -1) {
1397
+ Q[E] = 1;
1225
1398
  continue;
1226
1399
  }
1227
- const z = C * B, O = z + B;
1228
- for (let E = z; E < O; E++)
1229
- if (x[E]) {
1230
- D[C] = 1;
1400
+ const T = E * x, G = T + x;
1401
+ for (let z = T; z < G; z++)
1402
+ if (b[z]) {
1403
+ Q[E] = 1;
1231
1404
  break;
1232
1405
  }
1233
1406
  }
1234
- i[f] = D;
1407
+ c[p] = Q;
1235
1408
  }
1236
- const l = (f, b) => i[f][b] === 1, c = (f, b) => {
1237
- let y = 0, x = f, B = b;
1238
- for (; x + 1 < t.length; ) {
1239
- x++, B *= e[x];
1240
- const D = t[x], C = Array.isArray(D) ? D[A === -1 ? 0 : A] : D;
1241
- for (let z = B; z < B + e[x]; z++)
1242
- if (C.rendered[z] !== -1) {
1243
- y = x - f;
1409
+ const o = (p, I) => p < i || p > r ? !1 : c[p][I] === 1, h = (p, I) => {
1410
+ let y = 0, b = p, x = I;
1411
+ for (; b + 1 < e.length; ) {
1412
+ b++, x *= t[b];
1413
+ const Q = e[b], E = Array.isArray(Q) ? Q[A === -1 ? 0 : A] : Q;
1414
+ for (let T = x; T < x + t[b]; T++)
1415
+ if (E.rendered[T] !== -1) {
1416
+ y = b - p;
1244
1417
  break;
1245
1418
  }
1246
1419
  }
1247
1420
  return y;
1248
1421
  };
1249
- let r = 0;
1250
- for (let f = 0; f < t.length; f++) {
1251
- const b = t[f];
1252
- if (!Array.isArray(b))
1253
- for (let y = 0; y < b.rendered.length; y++)
1254
- l(f, y) && r++;
1422
+ let l = 0;
1423
+ for (let p = 0; p < e.length; p++) {
1424
+ const I = e[p];
1425
+ if (!Array.isArray(I))
1426
+ for (let y = 0; y < I.rendered.length; y++)
1427
+ o(p, y) && l++;
1255
1428
  }
1256
- const h = new Float32Array(r * 3), a = new Float32Array(r * 3), u = new Float32Array(r);
1429
+ const u = new Float32Array(l * 3), g = new Float32Array(l * 3), f = new Float32Array(l);
1257
1430
  let d = 0;
1258
- for (let f = 0; f < t.length; f++) {
1259
- const b = t[f], y = this.getColorIndex(f, A);
1260
- if (!Array.isArray(b)) {
1261
- for (let x = 0; x < b.rendered.length; x++)
1262
- if (l(f, x)) {
1263
- const B = c(f, x) * 0.05;
1264
- h[d * 3] = b.pos[x * 3], h[d * 3 + 1] = b.pos[x * 3 + 1], h[d * 3 + 2] = b.pos[x * 3 + 2], a[d * 3] = b.scale[x * 3] + B, a[d * 3 + 1] = b.scale[x * 3 + 1] + B, a[d * 3 + 2] = b.scale[x * 3 + 2] + B, u[d++] = y;
1431
+ for (let p = 0; p < e.length; p++) {
1432
+ const I = e[p], y = this.getColorIndex(p, A);
1433
+ if (!Array.isArray(I)) {
1434
+ for (let b = 0; b < I.rendered.length; b++)
1435
+ if (o(p, b)) {
1436
+ const x = h(p, b) * 0.05;
1437
+ u[d * 3] = I.pos[b * 3], u[d * 3 + 1] = I.pos[b * 3 + 1], u[d * 3 + 2] = I.pos[b * 3 + 2], g[d * 3] = I.scale[b * 3] + x, g[d * 3 + 1] = I.scale[b * 3 + 1] + x, g[d * 3 + 2] = I.scale[b * 3 + 2] + x, f[d++] = y;
1265
1438
  }
1266
1439
  }
1267
1440
  }
1268
- const g = new xt(1, 1, 1), p = new $t(g);
1269
- this.instGeom = new yt(), this.instGeom.instanceCount = r, this.instGeom.frustumCulled = !1, this.instGeom.index = p.index;
1270
- const v = p.attributes;
1271
- for (const f in v)
1272
- this.instGeom.setAttribute(f, v[f]);
1273
- this.instancePositions = h, this.instanceScales = a, this.instanceColors = u, this.instGeom.setAttribute("instancePosition", new L(h, 3)), this.instGeom.setAttribute("instanceScale", new L(a, 3)), this.instGeom.setAttribute("instanceColorIndex", new L(u, 1)), this.wireframe = new te(this.instGeom, this.material), this.wireframe.frustumCulled = !1, s && s.add(this.wireframe);
1441
+ const w = new yt(1, 1, 1), B = new re(w);
1442
+ this.instGeom = new It(), this.instGeom.instanceCount = l, this.instGeom.frustumCulled = !1, this.instGeom.index = B.index;
1443
+ const M = B.attributes;
1444
+ for (const p in M)
1445
+ this.instGeom.setAttribute(p, M[p]);
1446
+ this.instancePositions = u, this.instanceScales = g, this.instanceColors = f, this.instGeom.setAttribute("instancePosition", new Z(u, 3)), this.instGeom.setAttribute("instanceScale", new Z(g, 3)), this.instGeom.setAttribute("instanceColorIndex", new Z(f, 1)), this.wireframe = new oe(this.instGeom, this.material), this.wireframe.frustumCulled = !1, s && s.add(this.wireframe);
1274
1447
  }
1275
1448
  //TODO cool
1276
- toggleVisibility(t, e, A) {
1277
- this.visibility = !this.visibility, this.visibility ? this.pushVisibleInstances(t, e, A) : this.clearWireframe();
1449
+ toggleVisibility(e, t, A) {
1450
+ this.visibility = !this.visibility, this.visibility ? this.pushVisibleInstances(e, t, A) : this.clearWireframe();
1278
1451
  }
1279
1452
  //TODO cool
1280
1453
  dispose() {
@@ -1286,19 +1459,19 @@ class mA {
1286
1459
  }
1287
1460
  //TODO cool
1288
1461
  fillColorArray() {
1289
- new X(this.config.color.default).toArray(this.colorArray, 0);
1290
- let t = 1;
1291
- this.config.color.layer.map((e) => new X(e)).forEach((e) => {
1292
- const A = t * 3;
1293
- e.toArray(this.colorArray, A), t++;
1294
- }), this.config.color.set.map((e) => new X(e)).forEach((e) => {
1295
- const A = t * 3;
1296
- e.toArray(this.colorArray, A), t++;
1462
+ new U(this.config.color.default).toArray(this.colorArray, 0);
1463
+ let e = 1;
1464
+ this.config.color.layer.map((t) => new U(t)).forEach((t) => {
1465
+ const A = e * 3;
1466
+ t.toArray(this.colorArray, A), e++;
1467
+ }), this.config.color.set.map((t) => new U(t)).forEach((t) => {
1468
+ const A = e * 3;
1469
+ t.toArray(this.colorArray, A), e++;
1297
1470
  }), this.material.uniforms.colorArray = { value: this.colorArray }, this.material.uniformsNeedUpdate = !0;
1298
1471
  }
1299
1472
  //TODO cool
1300
1473
  createMaterial() {
1301
- return new ce({
1474
+ return new Ce({
1302
1475
  vertexShader: `
1303
1476
  attribute vec3 instancePosition;
1304
1477
  attribute vec3 instanceScale;
@@ -1326,17 +1499,17 @@ class mA {
1326
1499
  });
1327
1500
  }
1328
1501
  //TODO cool
1329
- getColorIndex(t, e) {
1330
- return this.config.color.set[e] ? this.config.color.layer.length + 1 : this.config.color.layer[t] ? t + 1 : 0;
1502
+ getColorIndex(e, t) {
1503
+ return this.config.color.set[t] ? this.config.color.layer.length + 1 : this.config.color.layer[e] ? e + 1 : 0;
1331
1504
  }
1332
1505
  //TODO cool
1333
- getColorAt(t, e) {
1334
- return this.config.color.set[e] ? this.config.color.set[e] : this.config.color.layer[t] ? this.config.color.layer[t] : this.config.color.default;
1506
+ getColorAt(e, t) {
1507
+ return this.config.color.set[t] ? this.config.color.set[t] : this.config.color.layer[e] ? this.config.color.layer[e] : this.config.color.default;
1335
1508
  }
1336
1509
  }
1337
- class pA {
1510
+ class NA {
1338
1511
  //
1339
- constructor(t, e, A) {
1512
+ constructor(e, t, A) {
1340
1513
  m(this, "id");
1341
1514
  m(this, "functionSub");
1342
1515
  // stateSub = undefined;
@@ -1345,35 +1518,25 @@ class pA {
1345
1518
  m(this, "rootObj");
1346
1519
  m(this, "config");
1347
1520
  m(this, "limits", {
1348
- position: new H(0, 0, 0),
1349
- scale: new H(10, 10, 10)
1521
+ scale: { x: 20, y: 10, z: 20 },
1522
+ position: { x: 0, y: 0, z: -5 }
1350
1523
  });
1351
1524
  m(this, "mouseEvents", []);
1352
1525
  m(this, "keydownEvents", []);
1353
1526
  m(this, "keyupEvents", []);
1354
1527
  m(this, "keyBindings", {});
1528
+ m(this, "renderHistory", []);
1355
1529
  m(this, "opts");
1356
1530
  var s;
1357
- this.rootObj = t.obj, this.id = e, this.opts = A, this.config = lt().mergeHistogramConfig((s = this == null ? void 0 : this.opts) == null ? void 0 : s.config), this.functionSub = fe().getObservable().pipe(
1531
+ this.rootObj = e.obj, this.id = t, this.opts = A, this.config = dt().mergeHistogramConfig((s = this == null ? void 0 : this.opts) == null ? void 0 : s.config), this.functionSub = xe().getObservable().pipe(
1358
1532
  ct(
1359
1533
  (i) => i.target.entity === "nested-histogram" && (i.target.id.includes("*") || i.target.id.includes(this.id))
1360
1534
  )
1361
- ).subscribe((i) => this.functionSubjectHandler(i)), this.configSub = lt().getObservable().pipe(
1535
+ ).subscribe((i) => this.functionSubjectHandler(i)), this.configSub = dt().getObservable().pipe(
1362
1536
  ct(
1363
1537
  (i) => i.target.id.includes("*") || i.target.id.includes(this.id)
1364
1538
  )
1365
- ).subscribe((i) => {
1366
- var l;
1367
- this.config = lt().mergeHistogramConfig((l = this == null ? void 0 : this.opts) == null ? void 0 : l.config), this.keyBindings = ke(i.config.bindings);
1368
- const o = i.config.environment.histogramPads.find(
1369
- (c) => c.id === this.id
1370
- );
1371
- this.limits = o ?? {
1372
- scale: { x: 20, y: 10, z: 20 },
1373
- padding: { x: 0, y: 0, z: 0 },
1374
- position: { x: 0, y: 0, z: -5 }
1375
- };
1376
- }), this.dispatchSub = Ge().getObservable().pipe(
1539
+ ).subscribe((i) => this.configSubjectHandler(i)), this.dispatchSub = Ze().getObservable().pipe(
1377
1540
  ct((i) => i.target.id === "*" || i.target.id === this.id)
1378
1541
  ).subscribe((i) => this.dispatchSubjectHandler(i)), this.initDefaultFunctions();
1379
1542
  }
@@ -1383,32 +1546,35 @@ class pA {
1383
1546
  initDefaultFunctions() {
1384
1547
  this.keyDownHandler = this.keyDownHandler.bind(this), this.keyUpHandler = this.keyUpHandler.bind(this), this.raycastHandler = this.raycastHandler.bind(this), this.mouseClickDefault = this.mouseClickDefault.bind(this), this.mousemoveDefault = this.mousemoveDefault.bind(this), this.shiftMouseClickDefault = this.shiftMouseClickDefault.bind(this), this.mouseDBClickDefault = this.mouseDBClickDefault.bind(this), this.shiftMouseDBClickDefault = this.shiftMouseDBClickDefault.bind(this), window.addEventListener("keydown", this.keyDownHandler), window.addEventListener("keydown", this.keyUpHandler), this.addEvent("mouseclick", this.mouseClickDefault), this.addEvent("mousemove", this.mousemoveDefault), this.addEvent("shiftmouseclick", this.shiftMouseClickDefault), this.addEvent("mousedbclick", this.mouseDBClickDefault), this.addEvent("shiftmousedbclick", this.shiftMouseDBClickDefault);
1385
1548
  }
1386
- functionSubjectHandler(t) {
1387
- if (t.flag === "add")
1388
- if (t.function)
1389
- this.addEvent(t.event, t.function);
1549
+ configSubjectHandler(e) {
1550
+ console.log("default configSubjectHandler: ", e);
1551
+ }
1552
+ functionSubjectHandler(e) {
1553
+ if (e.flag === "add")
1554
+ if (e.function)
1555
+ this.addEvent(e.event, e.function);
1390
1556
  else
1391
- switch (t.event) {
1557
+ switch (e.event) {
1392
1558
  case "mousemove":
1393
- this.addEvent(t.event, this.mousemoveDefault);
1559
+ this.addEvent(e.event, this.mousemoveDefault);
1394
1560
  break;
1395
1561
  case "mouseclick":
1396
- this.addEvent(t.event, this.mouseClickDefault);
1562
+ this.addEvent(e.event, this.mouseClickDefault);
1397
1563
  break;
1398
1564
  case "shiftmouseclick":
1399
- this.addEvent(t.event, this.shiftMouseClickDefault);
1565
+ this.addEvent(e.event, this.shiftMouseClickDefault);
1400
1566
  break;
1401
1567
  case "mousedbclick":
1402
- this.addEvent(t.event, this.mouseDBClickDefault);
1568
+ this.addEvent(e.event, this.mouseDBClickDefault);
1403
1569
  break;
1404
1570
  case "shiftmousedbclick":
1405
- this.addEvent(t.event, this.shiftMouseDBClickDefault);
1571
+ this.addEvent(e.event, this.shiftMouseDBClickDefault);
1406
1572
  break;
1407
1573
  }
1408
- else if (t.flag === "remove" && t.function)
1409
- this.removeEvent(t.event, t.function);
1410
- else if (t.flag === "remove")
1411
- switch (t == null ? void 0 : t.state) {
1574
+ else if (e.flag === "remove" && e.function)
1575
+ this.removeEvent(e.event, e.function);
1576
+ else if (e.flag === "remove")
1577
+ switch (e == null ? void 0 : e.state) {
1412
1578
  case "keydown":
1413
1579
  this.keydownEvents = [];
1414
1580
  break;
@@ -1416,9 +1582,9 @@ class pA {
1416
1582
  this.keyupEvents = [];
1417
1583
  break;
1418
1584
  default:
1419
- this.mouseEvents = this.mouseEvents.filter((e) => e.event !== t.event);
1585
+ this.mouseEvents = this.mouseEvents.filter((t) => t.event !== e.event);
1420
1586
  }
1421
- else t.flag === "removeAll" && (this.keydownEvents = [], this.keyupEvents = [], this.mouseEvents = []);
1587
+ else e.flag === "removeAll" && (this.keydownEvents = [], this.keyupEvents = [], this.mouseEvents = []);
1422
1588
  }
1423
1589
  /**
1424
1590
  * @desc Adds function that will be called, if specified event is triggered.
@@ -1426,16 +1592,16 @@ class pA {
1426
1592
  * or keyboard event which has to concise state (keydown or keyup) and keyCode (e.g. Numpad1)
1427
1593
  * @param func Function that is called if event is triggered.
1428
1594
  * */
1429
- addEvent(t, e) {
1430
- (t == null ? void 0 : t.state) === "keydown" ? this.keydownEvents.push({
1431
- key: t.key,
1432
- function: e
1433
- }) : (t == null ? void 0 : t.state) === "keyup" ? this.keyupEvents.push({
1434
- key: t.key,
1435
- function: e
1595
+ addEvent(e, t) {
1596
+ (e == null ? void 0 : e.state) === "keydown" ? this.keydownEvents.push({
1597
+ key: e.key,
1598
+ function: t
1599
+ }) : (e == null ? void 0 : e.state) === "keyup" ? this.keyupEvents.push({
1600
+ key: e.key,
1601
+ function: t
1436
1602
  }) : this.mouseEvents.push({
1437
- event: t,
1438
- function: e
1603
+ event: e,
1604
+ function: t
1439
1605
  });
1440
1606
  }
1441
1607
  /**
@@ -1443,45 +1609,46 @@ class pA {
1443
1609
  * @param event Defines from which event should listening be removed.
1444
1610
  * @param func has to have same reference to one that was added by addEvent.
1445
1611
  * */
1446
- removeEvent(t, e) {
1447
- const A = this.mouseEvents.find((s) => s === e);
1612
+ removeEvent(e, t) {
1613
+ const A = this.mouseEvents.find((s) => s === t);
1448
1614
  A && this.mouseEvents.splice(A, 1);
1449
1615
  }
1450
- mouseClickDefault(t) {
1616
+ mouseClickDefault(e) {
1451
1617
  console.log("mouse click default");
1452
1618
  }
1453
- mousemoveDefault(t) {
1619
+ mousemoveDefault(e) {
1454
1620
  console.log("mouse move default");
1455
1621
  }
1456
- shiftMouseClickDefault(t) {
1622
+ shiftMouseClickDefault(e) {
1457
1623
  console.log("shift mouse click");
1458
1624
  }
1459
- mouseDBClickDefault(t) {
1625
+ mouseDBClickDefault(e) {
1460
1626
  console.log("mouseDBClick default");
1461
1627
  }
1462
- shiftMouseDBClickDefault(t) {
1628
+ shiftMouseDBClickDefault(e) {
1463
1629
  console.log("shift mouse db click default");
1464
1630
  }
1465
- dispatchSubjectHandler(t) {
1466
- console.log("dispatch: ", t);
1631
+ dispatchSubjectHandler(e) {
1632
+ console.log("dispatch: ", e);
1467
1633
  }
1468
1634
  }
1469
- class IA extends pA {
1470
- constructor(e, A, s) {
1471
- super(e, A, s);
1635
+ class RA extends NA {
1636
+ constructor(t, A, s) {
1637
+ super(t, A, s);
1472
1638
  m(this, "stateSub");
1473
1639
  m(this, "pointer");
1474
1640
  m(this, "wireframe");
1475
1641
  m(this, "BVHTree", []);
1642
+ m(this, "minMaxValue", []);
1476
1643
  m(this, "maxInstancesPerLayer");
1477
1644
  m(this, "maxContentPerLayer");
1645
+ m(this, "maxErrorPerLayer");
1478
1646
  m(this, "totalInstances");
1479
- m(this, "color", new X());
1647
+ m(this, "color", new U());
1480
1648
  m(this, "matrixCache");
1481
1649
  m(this, "selectedSet", []);
1482
1650
  m(this, "selectedArray", "content");
1483
1651
  m(this, "availableSets", []);
1484
- m(this, "renderHistory", []);
1485
1652
  m(this, "dirtyInstance", []);
1486
1653
  m(this, "mesh");
1487
1654
  m(this, "instGeom");
@@ -1490,19 +1657,21 @@ class IA extends pA {
1490
1657
  m(this, "instanceScales");
1491
1658
  m(this, "instanceColors");
1492
1659
  m(this, "colorArray");
1493
- this.pointer = new ie(this.rootObj), this.handleStateChange = this.handleStateChange.bind(this), this.stateSub = tt().getObservable().subscribe(this.handleStateChange), this.init(), this.renderHistogram(0, this.totalInstances, 0);
1660
+ this.pointer = new ue(this.rootObj), this.handleStateChange = this.handleStateChange.bind(this), this.stateSub = k(this.id).getObservable().subscribe(this.handleStateChange), this.init(!0), this.renderHistogram(0, this.totalInstances, 0);
1494
1661
  }
1495
- updateHistogram(e) {
1496
- const A = this.mesh.parent, s = this.mesh.raycast;
1497
- this.mesh.raycast = () => {
1498
- }, this.matrixCache = [], this.BVHTree = [], this.availableSets = [], this.selectedSet = [], tt().next({
1662
+ updateHistogram(t) {
1663
+ let A;
1664
+ const s = this.mesh.parent;
1665
+ s.remove(this.mesh), this.pointer.isHistogramFilled && (A = this.mesh.raycast, this.mesh.raycast = () => {
1666
+ }, this.wireframe.dispose(), this.instGeom.dispose()), this.matrixCache = [], this.BVHTree = [], this.availableSets = [], this.selectedSet = [], this.minMaxValue = [], k(this.id).next({
1499
1667
  sets: [],
1500
1668
  selectedSet: [],
1501
1669
  arrays: ["content"],
1502
- selectedArray: "content"
1503
- }), this.wireframe.dispose(), this.instGeom.dispose(), A.remove(this.mesh), this.rootObj = e.obj, this.pointer = new ie(this.rootObj), this.init(), this.renderHistogram(0, this.totalInstances, 0), setTimeout(() => {
1504
- A.add(this.mesh), this.mesh.raycast = s;
1505
- }, 0), A.add(this.wireframe.wireframe);
1670
+ selectedArray: "content",
1671
+ minMaxValue: []
1672
+ }), this.rootObj = t.obj, this.pointer = new ue(this.rootObj), this.init(!0), this.renderHistogram(0, this.totalInstances, 0), setTimeout(() => {
1673
+ s.add(this.mesh), this.mesh.raycast = A;
1674
+ }, 0), s.add(this.wireframe.wireframe);
1506
1675
  }
1507
1676
  remove() {
1508
1677
  super.remove(), this.matrixCache = [], this.instGeom.dispose(), this.mesh.parent && (this.mesh.parent.remove(this.mesh), this.wireframe.dispose()), this.stateSub.unsubscribe();
@@ -1510,25 +1679,40 @@ class IA extends pA {
1510
1679
  /**
1511
1680
  * @desc Initializes base values and objects.
1512
1681
  * */
1513
- init() {
1514
- this.setAvailableSets(this.pointer.origin), this.setAvailableArrays(this.pointer.origin), this.maxInstancesPerLayer = hA(this.pointer.origin), this.maxContentPerLayer = aA(this.pointer.origin), this.minContentPerLayer = lA(this.pointer.origin), this.totalInstances = this.maxInstancesPerLayer.reduce((e, A) => e * A, 1), this.setupInsBufGeom(), this.wireframe = new mA(
1682
+ init(t = !1) {
1683
+ if (this.maxInstancesPerLayer = QA(this.pointer.origin), t) {
1684
+ this.maxContentPerLayer = yA(this.pointer.origin), this.minContentPerLayer = EA(this.pointer.origin), this.maxErrorPerLayer = IA(this.pointer.origin, this.maxContentPerLayer), this.minErrorPerLayer = vA(this.pointer.origin, this.minContentPerLayer), this.setAvailableSets(this.pointer.origin), this.setAvailableArrays(this.pointer.origin);
1685
+ const A = new Array(this.maxContentPerLayer.length);
1686
+ for (let s = 0; s < this.maxContentPerLayer.length; s++)
1687
+ A[s] = {}, Object.keys(this.maxContentPerLayer[s]).forEach((i) => {
1688
+ A[s][i] = {
1689
+ value: { min: this.minContentPerLayer[s][i], max: this.maxContentPerLayer[s][i] },
1690
+ error: { min: this.minErrorPerLayer[s][i], max: this.maxErrorPerLayer[s][i] }
1691
+ };
1692
+ });
1693
+ console.log("minMaxValues: ", A), k(this.id).next(
1694
+ { ...k(this.id).getValue(), minMaxValue: A }
1695
+ );
1696
+ }
1697
+ this.totalInstances = this.maxInstancesPerLayer.reduce((A, s) => A * s, 1), this.setupInsBufGeom(), this.wireframe = new DA(
1515
1698
  this.maxInstancesPerLayer,
1516
1699
  this.matrixCache,
1517
- this.config.wireframe
1700
+ this.config.wireframe,
1701
+ this.id
1518
1702
  );
1519
1703
  }
1520
1704
  setupMatrixCache() {
1521
1705
  this.matrixCache = new Array(this.maxInstancesPerLayer.length - 1);
1522
- const e = this.availableSets.length > 0;
1523
- e && (this.matrixCache[this.matrixCache.length - 1] = new Array(this.availableSets.length));
1706
+ const t = this.availableSets.length > 0;
1707
+ t && (this.matrixCache[this.matrixCache.length - 1] = new Array(this.availableSets.length));
1524
1708
  let A = this.maxInstancesPerLayer[0];
1525
- for (let i = 0; i < this.maxInstancesPerLayer.length - 1 - (e ? 1 : 0); i++)
1709
+ for (let i = 0; i < this.maxInstancesPerLayer.length - 1 - (t ? 1 : 0); i++)
1526
1710
  this.matrixCache[i] = {
1527
1711
  pos: new Float32Array(A * 3),
1528
1712
  scale: new Float32Array(A * 3),
1529
1713
  rendered: new Float32Array(A).fill(-1)
1530
1714
  }, A *= this.maxInstancesPerLayer[i + 1];
1531
- if (!e) return;
1715
+ if (!t) return;
1532
1716
  const s = this.matrixCache[this.matrixCache.length - 1];
1533
1717
  for (let i = 0; i < s.length; i++)
1534
1718
  s[i] = {
@@ -1539,63 +1723,63 @@ class IA extends pA {
1539
1723
  }
1540
1724
  setupInsBufGeom() {
1541
1725
  this.setupMatrixCache();
1542
- let e = this.maxInstancesPerLayer.reduce((s, i) => s * i, 1);
1543
- this.selectedSet.length > 1 && (e *= this.selectedSet.length);
1544
- const A = new xt(1, 1, 1);
1545
- this.instGeom = new yt(), this.instGeom.instanceCount = 0, this.instGeom.frustumCulled = !1, this.instGeom.index = A.index;
1726
+ let t = this.maxInstancesPerLayer.reduce((s, i) => s * i, 1);
1727
+ this.selectedSet.length > 1 && (t *= this.selectedSet.length);
1728
+ const A = new yt(1, 1, 1);
1729
+ this.instGeom = new It(), this.instGeom.instanceCount = 0, this.instGeom.frustumCulled = !1, this.instGeom.index = A.index;
1546
1730
  for (const s in A.attributes)
1547
1731
  this.instGeom.setAttribute(s, A.attributes[s]);
1548
- this.material = this.createMaterial(), this.colorArray = new Float32Array(32 * 6), this.material.uniforms.colorArray = { value: this.colorArray }, uA(this.config, this.material, this.colorArray), this.instancePositions = new Float32Array(3), this.instanceScales = new Float32Array(3), this.instanceColors = new Float32Array(1), this.instGeom.setAttribute(
1732
+ this.material = this.createMaterial(), this.colorArray = new Float32Array(32 * 6), this.material.uniforms.colorArray = { value: this.colorArray }, zA(this.config, this.material, this.colorArray), this.instancePositions = new Float32Array(3), this.instanceScales = new Float32Array(3), this.instanceColors = new Float32Array(1), this.instGeom.setAttribute(
1549
1733
  "instancePosition",
1550
- new L(this.instancePositions, 3)
1734
+ new Z(this.instancePositions, 3)
1551
1735
  ), this.instGeom.setAttribute(
1552
1736
  "instanceScale",
1553
- new L(this.instanceScales, 3)
1737
+ new Z(this.instanceScales, 3)
1554
1738
  ), this.instGeom.setAttribute(
1555
1739
  "instanceColorIndex",
1556
- new L(this.instanceColors, 1)
1557
- ), this.mesh = new Ct(this.instGeom, this.material), this.mesh.raycast = this.raycastHandler, this.mesh.frustumCulled = !1, this.material.uniforms.colorArray = { value: this.colorArray }, this.mesh.material.uniformsNeedUpdate = !0;
1740
+ new Z(this.instanceColors, 1)
1741
+ ), this.mesh = new vt(this.instGeom, this.material), this.mesh.raycast = this.raycastHandler, this.mesh.frustumCulled = !1, this.material.uniforms.colorArray = { value: this.colorArray }, this.mesh.material.uniformsNeedUpdate = !0;
1558
1742
  }
1559
1743
  pushVisibleInstances() {
1560
- let e = this.mesh.parent;
1561
- e && (e.remove(this.mesh), this.instGeom.dispose());
1744
+ let t = this.mesh.parent;
1745
+ t && (t.remove(this.mesh), this.instGeom.dispose());
1562
1746
  let A = 0;
1563
1747
  for (let h = 0; h < this.matrixCache.length; h++) {
1564
- const a = this.matrixCache[h];
1565
- if (Array.isArray(a))
1566
- for (let u = 0; u < a.length; u++) {
1567
- const d = a[u];
1568
- for (let g = 0; g < d.rendered.length; g++)
1569
- d.rendered[g] !== -1 && A++;
1748
+ const l = this.matrixCache[h];
1749
+ if (Array.isArray(l))
1750
+ for (let u = 0; u < l.length; u++) {
1751
+ const g = l[u];
1752
+ for (let f = 0; f < g.rendered.length; f++)
1753
+ g.rendered[f] !== -1 && A++;
1570
1754
  }
1571
1755
  else
1572
- for (let u = 0; u < a.rendered.length; u++)
1573
- a.rendered[u] !== -1 && A++;
1756
+ for (let u = 0; u < l.rendered.length; u++)
1757
+ l.rendered[u] !== -1 && A++;
1574
1758
  }
1575
- const s = new Float32Array(A * 3), i = new Float32Array(A * 3), o = new Float32Array(A);
1576
- let l = 0;
1759
+ const s = new Float32Array(A * 3), i = new Float32Array(A * 3), r = new Float32Array(A);
1760
+ let c = 0;
1577
1761
  for (let h = 0; h < this.matrixCache.length; h++) {
1578
- const a = this.matrixCache[h];
1579
- if (Array.isArray(a))
1580
- for (let u = 0; u < a.length; u++) {
1581
- const d = a[u];
1582
- for (let g = 0; g < d.rendered.length; g++)
1583
- d.rendered[g] !== -1 && (s[l * 3] = d.pos[g * 3], s[l * 3 + 1] = d.pos[g * 3 + 1], s[l * 3 + 2] = d.pos[g * 3 + 2], i[l * 3] = d.scale[g * 3], i[l * 3 + 1] = d.scale[g * 3 + 1], i[l * 3 + 2] = d.scale[g * 3 + 2], o[l++] = d.rendered[g]);
1762
+ const l = this.matrixCache[h];
1763
+ if (Array.isArray(l))
1764
+ for (let u = 0; u < l.length; u++) {
1765
+ const g = l[u];
1766
+ for (let f = 0; f < g.rendered.length; f++)
1767
+ g.rendered[f] !== -1 && (s[c * 3] = g.pos[f * 3], s[c * 3 + 1] = g.pos[f * 3 + 1], s[c * 3 + 2] = g.pos[f * 3 + 2], i[c * 3] = g.scale[f * 3], i[c * 3 + 1] = g.scale[f * 3 + 1], i[c * 3 + 2] = g.scale[f * 3 + 2], r[c++] = g.rendered[f]);
1584
1768
  }
1585
1769
  else
1586
- for (let u = 0; u < a.rendered.length; u++)
1587
- a.rendered[u] !== -1 && (s[l * 3] = a.pos[u * 3], s[l * 3 + 1] = a.pos[u * 3 + 1], s[l * 3 + 2] = a.pos[u * 3 + 2], i[l * 3] = a.scale[u * 3], i[l * 3 + 1] = a.scale[u * 3 + 1], i[l * 3 + 2] = a.scale[u * 3 + 2], o[l++] = a.rendered[u]);
1770
+ for (let u = 0; u < l.rendered.length; u++)
1771
+ l.rendered[u] !== -1 && (s[c * 3] = l.pos[u * 3], s[c * 3 + 1] = l.pos[u * 3 + 1], s[c * 3 + 2] = l.pos[u * 3 + 2], i[c * 3] = l.scale[u * 3], i[c * 3 + 1] = l.scale[u * 3 + 1], i[c * 3 + 2] = l.scale[u * 3 + 2], r[c++] = l.rendered[u]);
1588
1772
  }
1589
- const c = new xt(1, 1, 1);
1590
- this.instGeom = new yt(), this.instGeom.instanceCount = A, this.instGeom.frustumCulled = !1, this.instGeom.index = c.index;
1591
- const r = c.attributes;
1592
- for (const h in r)
1593
- this.instGeom.setAttribute(h, r[h]);
1594
- this.instancePositions = s, this.instanceScales = i, this.instanceColors = o, this.instGeom.setAttribute("instancePosition", new L(s, 3)), this.instGeom.setAttribute("instanceScale", new L(i, 3)), this.instGeom.setAttribute("instanceColorIndex", new L(o, 1)), this.mesh = new Ct(this.instGeom, this.material), this.mesh.raycast = this.raycastHandler, this.mesh.frustumCulled = !1, e && e.add(this.mesh);
1773
+ const a = new yt(1, 1, 1);
1774
+ this.instGeom = new It(), this.instGeom.instanceCount = A, this.instGeom.frustumCulled = !1, this.instGeom.index = a.index;
1775
+ const o = a.attributes;
1776
+ for (const h in o)
1777
+ this.instGeom.setAttribute(h, o[h]);
1778
+ this.instancePositions = s, this.instanceScales = i, this.instanceColors = r, this.instGeom.setAttribute("instancePosition", new Z(s, 3)), this.instGeom.setAttribute("instanceScale", new Z(i, 3)), this.instGeom.setAttribute("instanceColorIndex", new Z(r, 1)), this.mesh = new vt(this.instGeom, this.material), this.mesh.raycast = this.raycastHandler, this.mesh.frustumCulled = !1, t && t.add(this.mesh);
1595
1779
  }
1596
- setMatrixCacheAt(e, A, s, i, o) {
1597
- const l = A !== null ? this.matrixCache[e][A] : this.matrixCache[e];
1598
- l.pos[s * 3] = i.x.pos, l.pos[s * 3 + 1] = i.y.pos, l.pos[s * 3 + 2] = i.z.pos, l.scale[s * 3] = i.x.size, l.scale[s * 3 + 1] = i.y.size, l.scale[s * 3 + 2] = i.z.size, l.rendered[s] = o;
1780
+ setMatrixCacheAt(t, A, s, i, r) {
1781
+ const c = A !== null ? this.matrixCache[t][A] : this.matrixCache[t];
1782
+ c.pos[s * 3] = i.x.pos, c.pos[s * 3 + 1] = i.y.pos, c.pos[s * 3 + 2] = i.z.pos, c.scale[s * 3] = i.x.size, c.scale[s * 3 + 1] = i.y.size, c.scale[s * 3 + 2] = i.z.size, c.rendered[s] = r;
1599
1783
  }
1600
1784
  /**
1601
1785
  * @desc Render whole or part of histogram.
@@ -1606,12 +1790,12 @@ class IA extends pA {
1606
1790
  * Bins of the deepest layer are offset by 1.
1607
1791
  * Bins from each upward layer are offset by maximum number of layer beneath.
1608
1792
  * */
1609
- renderHistogram(e, A, s) {
1793
+ renderHistogram(t, A, s) {
1610
1794
  if (!this.pointer || s >= this.maxInstancesPerLayer.length - 1) return;
1611
1795
  this.logRender({
1612
1796
  procedure: "render",
1613
1797
  value: {
1614
- startIndex: e,
1798
+ startIndex: t,
1615
1799
  endIndex: A,
1616
1800
  layer: s
1617
1801
  }
@@ -1620,129 +1804,172 @@ class IA extends pA {
1620
1804
  x: { size: 0, pos: 0 },
1621
1805
  y: { size: 0, pos: 0 },
1622
1806
  z: { size: 0, pos: 0 }
1623
- }, o = async (l, c, r, h, a, u) => {
1624
- var k, V, N, Q, G, jt, Ut;
1625
- if (r > s || !h) return;
1626
- const d = new pe(
1807
+ }, r = async (c, a, o, h, l, u) => {
1808
+ var S, H, Rt, Kt, $t, _t;
1809
+ if (o > s || !h) return;
1810
+ const g = new ve(
1627
1811
  [h.fXaxis.fNbins, h.fYaxis.fNbins, h.fZaxis.fNbins]
1628
1812
  );
1629
- let g, p, v, f;
1630
- const b = ((V = (k = h.fArrays) == null ? void 0 : k[this.selectedArray]) == null ? void 0 : V.outside) ?? !1, y = this.selectedSet.indexOf(u), x = this.availableSets.indexOf(u);
1631
- if (this.config.sets.scale.maximum === "relative") {
1632
- const T = (N = h.fArrays) == null ? void 0 : N[this.selectedArray];
1633
- if (T) {
1634
- const F = T.values.filter(
1635
- (M) => M !== 0
1636
- );
1637
- v = Math.min(...F), f = Math.max(...F), g = T.min ?? v, p = T.max ?? f;
1638
- } else {
1639
- const F = h.fArray.filter((M) => M !== 0);
1640
- g = Math.min(...F), p = Math.max(...F);
1641
- }
1642
- } else u && this.maxContentPerLayer[r][u] ? (p = this.maxContentPerLayer[r][u], g = this.minContentPerLayer[r][u]) : (p = this.maxContentPerLayer[r][this.selectedArray], g = this.minContentPerLayer[r][this.selectedArray]);
1643
- g === p && (g = p - 1);
1644
- const B = h._typename.substring(0, 3) === "TH3", D = h._typename.substring(0, 3) === "TH2", C = h._typename.substring(0, 3) === "TH1", z = this.maxInstancesPerLayer.slice(r + 1).reduce((T, F) => T * F, 1);
1645
- d.setFromNumber(l / z);
1646
- const O = this.config.padding.layer[r] ?? this.config.padding.default;
1647
- let E = !this.config.padding.layer[r] && C ? { x: O.x, y: O.y, z: O.z } : { ...O };
1648
- u && this.config.padding.sets && C && (E = { x: this.config.padding.sets.x, y: 0, z: 0 }), this.pointer.isOnSet && (E = { x: 0, y: 0, z: 0 });
1649
- const { min: Y, max: P } = (Q = this.config.scale) != null && Q[r] ? (G = this.config.scale) == null ? void 0 : G[r] : this.config.scale.default;
1650
- for (let T = l; T < c; T += z) {
1651
- const F = {
1652
- x: d.getValueAt(0),
1653
- y: d.getValueAt(1),
1654
- z: d.getValueAt(2)
1655
- }, M = rA(
1656
- a.position.z,
1657
- a.scale.z,
1658
- iA(nA(
1813
+ let f, d, w, B, M, p;
1814
+ const I = ((H = (S = h.fArrays) == null ? void 0 : S[this.selectedArray]) == null ? void 0 : H.outside) ?? !1, y = this.selectedSet.indexOf(u), b = this.availableSets.indexOf(u), x = this.config.scale.scaleBy === "value";
1815
+ if (u)
1816
+ if (this.config.scale.sets === "fixed")
1817
+ ({ min: f, max: d } = this.minMaxValue[o + this.pointer.parentPath.length][u].value), { min: B, max: w } = this.minMaxValue[o + this.pointer.parentPath.length][u].error;
1818
+ else if (this.config.scale.sets === "relative") {
1819
+ const j = h.fSumw2.filter((v) => v !== 0), Y = x ? h.fArray.filter((v) => v !== 0) : j;
1820
+ f = Math.min(...Y), d = Math.max(...Y), w = this.maxErrorPerLayer[o + this.pointer.parentPath.length][u], B = this.minErrorPerLayer[o + this.pointer.parentPath.length][u];
1821
+ } else
1822
+ f = x ? this.minContentPerLayer[o + this.pointer.parentPath.length][u] : -0.1, d = x ? this.maxContentPerLayer[o + this.pointer.parentPath.length][u] : this.maxErrorPerLayer[o + this.pointer.parentPath.length][u], w = this.maxErrorPerLayer[o + this.pointer.parentPath.length][u], B = this.minErrorPerLayer[o + this.pointer.parentPath.length][u];
1823
+ else if (this.selectedArray !== "content" && h.fArrays)
1824
+ if (this.config.scale.parameter === "fixed")
1825
+ ({ min: f, max: d } = this.minMaxValue[o + this.pointer.parentPath.length][this.selectedArray].value), { min: B, max: w } = this.minMaxValue[o + this.pointer.parentPath.length][this.selectedArray].error;
1826
+ else if (this.config.scale.parameter === "relative") {
1827
+ const j = h.fArrays[this.selectedArray].errors.filter((v) => v !== 0), Y = x ? h.fArrays[this.selectedArray].values.filter((v) => v !== 0) : j;
1828
+ f = Math.min(...Y), d = Math.max(...Y), w = this.maxErrorPerLayer[o + this.pointer.parentPath.length][this.selectedArray], B = this.minErrorPerLayer[o + this.pointer.parentPath.length][this.selectedArray];
1829
+ } else
1830
+ f = x ? this.minContentPerLayer[o + this.pointer.parentPath.length][this.selectedArray] : -0.1, d = x ? this.maxContentPerLayer[o + this.pointer.parentPath.length][this.selectedArray] : this.maxErrorPerLayer[o + this.pointer.parentPath.length][this.selectedArray], w = this.maxErrorPerLayer[o + this.pointer.parentPath.length][this.selectedArray], B = this.minErrorPerLayer[o + this.pointer.parentPath.length][this.selectedArray];
1831
+ else {
1832
+ const j = this.pointer.isOnSet ?? "content";
1833
+ if (this.config.scale.content === "fixed")
1834
+ ({ min: f, max: d } = this.minMaxValue[o + this.pointer.parentPath.length][j].value), { min: B, max: w } = this.minMaxValue[o + this.pointer.parentPath.length][j].error;
1835
+ else if (this.config.scale.content === "relative") {
1836
+ const Y = h.fSumw2.filter((et) => et !== 0), v = x ? h.fArray.filter((et) => et !== 0) : Y;
1837
+ f = Math.min(...v), d = Math.max(...v), w = this.maxErrorPerLayer[o + this.pointer.parentPath.length][j], B = this.minErrorPerLayer[o + this.pointer.parentPath.length][j];
1838
+ } else
1839
+ f = x ? this.minContentPerLayer[o + this.pointer.parentPath.length][j] : -0.1, d = x ? this.maxContentPerLayer[o + this.pointer.parentPath.length][j] : this.maxErrorPerLayer[o + this.pointer.parentPath.length][j], w = this.maxErrorPerLayer[o + this.pointer.parentPath.length][j], B = this.minErrorPerLayer[o + this.pointer.parentPath.length][j];
1840
+ }
1841
+ f === d && (f = d - 0.2);
1842
+ const Q = h._typename.substring(0, 3) === "TH3", E = h._typename.substring(0, 3) === "TH2", T = h._typename.substring(0, 3) === "TH1", G = this.maxInstancesPerLayer.slice(o + 1).reduce((j, Y) => j * Y, 1);
1843
+ g.setFromNumber(c / G);
1844
+ const z = this.config.padding.layer[o] ?? this.config.padding.default;
1845
+ let F = !this.config.padding.layer[o] && T ? { x: z.x, y: z.y, z: z.z } : { ...z };
1846
+ u && this.config.padding.sets && T && (F = { x: this.config.padding.sets.x, y: 0, z: 0 }), this.pointer.isOnSet && (F = { x: 0, y: 0, z: 0 });
1847
+ const { min: P, max: V } = (Rt = this.config.scale) != null && Rt[o] ? (Kt = this.config.scale) == null ? void 0 : Kt[o] : this.config.scale.default;
1848
+ for (let j = c; j < a; j += G) {
1849
+ const Y = {
1850
+ x: g.getValueAt(0),
1851
+ y: g.getValueAt(1),
1852
+ z: g.getValueAt(2)
1853
+ }, v = pA(
1854
+ l.position.z,
1855
+ l.scale.z,
1856
+ BA(wA(
1659
1857
  h,
1858
+ Y,
1660
1859
  F,
1661
- E,
1662
- a == null ? void 0 : a.scale,
1663
- a == null ? void 0 : a.position,
1664
- r,
1860
+ l == null ? void 0 : l.scale,
1861
+ l == null ? void 0 : l.position,
1862
+ o,
1665
1863
  i
1666
1864
  ))
1667
- ), J = this.getBinContent(
1865
+ ), et = this.getBinContent(
1668
1866
  h,
1669
- F.x,
1670
- F.y,
1671
- F.z,
1867
+ Y.x,
1868
+ Y.y,
1869
+ Y.z,
1672
1870
  this.selectedArray
1673
- );
1674
- let j = 1;
1675
- if ((J >= g && J <= p) == !b) {
1676
- const R = (J - g) / (p - g);
1677
- if (!b)
1678
- j = Number.isInteger(J) && J === 0 ? j = 0 : (P - Y) * R + Y;
1871
+ ), te = this.getBinError(h, Y.x, Y.y, Y.z, this.selectedArray), mt = this.config.scale.scaleBy === "value" ? et : te;
1872
+ let it = this.config.scale.scaleBy === "value" ? f : B;
1873
+ const Tt = this.config.scale.scaleBy === "value" ? d : w;
1874
+ it === Tt && (it -= it * 0.1);
1875
+ let X = 1;
1876
+ if (mt >= it == !I) {
1877
+ const L = (mt - it) / (Tt - it);
1878
+ if (!I)
1879
+ X = Number.isInteger(mt) && mt === 0 && this.config.scale.scaleBy === "value" ? X = 0 : (V - P) * L + P, X > 1 && (X = 1);
1679
1880
  else {
1680
- const at = (J - v) / (f - v);
1681
- j = Number.isInteger(J) && J === 0 ? j = 0 : (P - Y) * at + Y;
1881
+ const lt = (et - M) / (p - M);
1882
+ X = Number.isInteger(et) && et === 0 ? X = 0 : (V - P) * lt + P;
1682
1883
  }
1683
1884
  } else
1684
- j = 0;
1685
- this.color = dA(
1885
+ X = 0;
1886
+ this.config.color.scaleBy === "value" ? this.color = le(
1686
1887
  this.config.color,
1687
- this.availableSets,
1688
- J,
1689
- 0,
1690
- p,
1691
- x,
1692
- r
1888
+ mt,
1889
+ it,
1890
+ Tt,
1891
+ b,
1892
+ o
1893
+ ) : this.color = le(
1894
+ this.config.color,
1895
+ te,
1896
+ B,
1897
+ w,
1898
+ b,
1899
+ o
1693
1900
  );
1694
- const gt = M.y.size * j;
1695
- if (j === 0)
1696
- M.x.size = 0, M.z.size = 0, M.y.size = 0;
1697
- else if (B)
1698
- M.x.size *= j, M.z.size *= j, M.y.size = gt;
1699
- else if (D)
1700
- M.y.pos -= (M.y.size - gt) / 2, M.y.size = gt;
1701
- else if (M.y.pos -= (M.y.size - gt) / 2, M.y.size = gt, u) {
1702
- const R = this.config.TH1ZScale.set;
1703
- M.z.size = R || 0.01;
1901
+ const Ct = v.y.size * X;
1902
+ if (X === 0)
1903
+ v.x.size = 0, v.z.size = 0, v.y.size = 0;
1904
+ else if (Q)
1905
+ v.x.size *= X, v.z.size *= X, v.y.size = Ct;
1906
+ else if (E)
1907
+ v.y.pos -= (v.y.size - Ct) / 2, v.y.size = Ct;
1908
+ else if (v.y.pos -= (v.y.size - Ct) / 2, v.y.size = Ct, u) {
1909
+ const L = this.config.TH1ZScale.set;
1910
+ v.z.size = L || 0.01;
1704
1911
  } else
1705
- (Ut = (jt = this.config.TH1ZScale) == null ? void 0 : jt.layer) != null && Ut[r] ? M.z.size = a.scale.z * this.config.TH1ZScale.layer[r] : M.z.size = a.scale.z * this.config.TH1ZScale.default;
1706
- if (u ? (M.z.size = 0.01, M.z.pos += (y - (this.selectedSet.length - 1) / 2) * 0.1, this.setMatrixCacheAt(
1707
- r,
1708
- x,
1709
- T / z,
1710
- M,
1711
- r === s && j !== 0 ? this.color : -1
1712
- )) : (this.pointer.isOnSet && (M.z.size = 0.01, M.z.pos += (y - (this.selectedSet.length - 1) / 2) * 0.1), this.setMatrixCacheAt(
1713
- r,
1714
- null,
1715
- T / z,
1716
- M,
1717
- r === s && j !== 0 ? this.color : -1
1718
- )), r === s) {
1719
- let R = T;
1720
- u && (R += this.totalInstances * y);
1912
+ (_t = ($t = this.config.TH1ZScale) == null ? void 0 : $t.layer) != null && _t[o] ? v.z.size = l.scale.z * this.config.TH1ZScale.layer[o] : v.z.size = l.scale.z * this.config.TH1ZScale.default;
1913
+ if (u)
1914
+ v.z.size = 0.01, v.z.pos += (y - (this.selectedSet.length - 1) / 2) * 0.1, this.setMatrixCacheAt(
1915
+ o,
1916
+ b,
1917
+ j / G,
1918
+ v,
1919
+ o === s && X !== 0 ? this.color : -1
1920
+ );
1921
+ else {
1922
+ let L = null;
1923
+ this.pointer.isOnSet && (v.z.size = 0.01, v.z.pos += (y - (this.selectedSet.length - 1) / 2) * 0.1, L = this.availableSets.indexOf(this.pointer.isOnSet)), this.setMatrixCacheAt(
1924
+ o,
1925
+ L,
1926
+ j / G,
1927
+ v,
1928
+ o === s && X !== 0 ? this.color : -1
1929
+ );
1930
+ }
1931
+ if (o === s) {
1932
+ let L = j;
1933
+ u && (L += this.totalInstances * y);
1721
1934
  } else {
1722
- const R = h.getBin(F.x + 1, F.y + 1, F.z + 1);
1723
- let at;
1724
- const Zt = {
1725
- position: new H(M.x.pos, M.y.pos, M.z.pos),
1726
- scale: new H(M.x.size, M.y.size, M.z.size)
1935
+ const L = h.getBin(Y.x + 1, Y.y + 1, Y.z + 1);
1936
+ let lt;
1937
+ const ee = {
1938
+ position: new D(v.x.pos, v.y.pos, v.z.pos),
1939
+ scale: new D(v.x.size, v.y.size, v.z.size)
1727
1940
  };
1728
- h.children.content ? (at = h.children.content[R], o(T, c, r + 1, at, Zt)) : this.selectedSet.forEach((Jt) => {
1729
- at = h.children[Jt][R], o(T, c, r + 1, at, Zt, Jt);
1941
+ h.children.content ? (lt = h.children.content[L], r(j, a, o + 1, lt, ee)) : this.selectedSet.forEach((Ae) => {
1942
+ lt = h.children[Ae][L], r(j, a, o + 1, lt, ee, Ae);
1730
1943
  });
1731
1944
  }
1732
- if (!d.increment()) break;
1945
+ if (!g.increment()) break;
1733
1946
  }
1734
1947
  };
1735
- o(e, A, 0, this.pointer.origin, this.limits).then(() => {
1948
+ (this.pointer.isOnSet ? Promise.all(this.selectedSet.map((c) => r(
1949
+ t,
1950
+ A,
1951
+ 0,
1952
+ qt(
1953
+ this.pointer.rootObj,
1954
+ this.pointer.parentPath.map((a) => a.bin[0]),
1955
+ c
1956
+ ),
1957
+ this.limits,
1958
+ c
1959
+ ))) : r(t, A, 0, this.pointer.origin, this.limits)).then(() => {
1736
1960
  setTimeout(() => {
1737
- this.wireframe.pushVisibleInstances(
1961
+ this.pointer.isOnSet || this.wireframe.pushVisibleInstances(
1738
1962
  this.matrixCache,
1739
1963
  this.maxInstancesPerLayer,
1740
1964
  this.availableSets.indexOf(this.selectedSet[0])
1741
- ), this.pushVisibleInstances(), this.BVHTree = gA(
1965
+ ), this.pushVisibleInstances();
1966
+ const c = this.availableSets.indexOf(this.pointer.isOnSet) === -1 ? null : this.availableSets.indexOf(this.pointer.isOnSet);
1967
+ this.BVHTree = TA(
1742
1968
  this.matrixCache,
1743
1969
  this.pointer.origin,
1744
1970
  0,
1745
1971
  this.selectedSet,
1972
+ c,
1746
1973
  this.availableSets,
1747
1974
  this.mesh.matrixWorld,
1748
1975
  this.maxInstancesPerLayer
@@ -1751,7 +1978,7 @@ class IA extends pA {
1751
1978
  });
1752
1979
  }
1753
1980
  createMaterial() {
1754
- return new ce({
1981
+ return new Ce({
1755
1982
  vertexShader: `
1756
1983
  attribute vec3 instancePosition;
1757
1984
  attribute vec3 instanceScale;
@@ -1785,81 +2012,83 @@ class IA extends pA {
1785
2012
  transparent: !1
1786
2013
  });
1787
2014
  }
1788
- mouseClickDefault(e) {
1789
- this.showChildHistogram(e.index), ge().next({
2015
+ mouseClickDefault(t) {
2016
+ var A, s, i, r;
2017
+ this.showChildHistogram(t.index), t.selectedArray !== "content" && (t.jsrootObj.fArray = (A = t.jsrootObj.fArrays[t.selectedArray]) == null ? void 0 : A.values, t.jsrootObj.fSumw2 = (s = t.jsrootObj.fArrays[t.selectedArray]) == null ? void 0 : s.errors, t.jsrootObj.fMinimum = (i = t.jsrootObj.fArrays[t.selectedArray]) == null ? void 0 : i.min, t.jsrootObj.fMaximum = (r = t.jsrootObj.fArrays[t.selectedArray]) == null ? void 0 : r.max), ye().next({
1790
2018
  // id: this.id + "-cinema",
1791
2019
  id: "*",
1792
- obj: e.jsrootObj
2020
+ obj: t.jsrootObj
1793
2021
  });
1794
2022
  }
1795
- mousemoveDefault(e) {
1796
- if (((g, p) => {
1797
- if (g.length !== p.length) return !1;
1798
- for (let v = 0; v < g.length; v++) {
1799
- const f = g[v], b = p[v];
1800
- if (f.x !== b.x || f.y !== b.y || f.z !== b.z) return !1;
2023
+ mousemoveDefault(t) {
2024
+ if (((f, d) => {
2025
+ if (f.length !== d.length) return !1;
2026
+ for (let w = 0; w < f.length; w++) {
2027
+ const B = f[w], M = d[w];
2028
+ if (B.x !== M.x || B.y !== M.y || B.z !== M.z) return !1;
1801
2029
  }
1802
2030
  return !0;
1803
- })(e.index, this.dirtyInstance)) {
2031
+ })(t.index, this.dirtyInstance)) {
1804
2032
  this.dirtyInstance = null;
1805
2033
  return;
1806
2034
  }
1807
- const s = this.pointer.parentPath.map((g) => {
1808
- const p = g.range[0];
2035
+ const s = this.pointer.parentPath.map((f) => {
2036
+ const d = f.range[0];
1809
2037
  return {
1810
- bin: g.bin[0],
1811
- ...p
2038
+ bin: f.bin[0],
2039
+ ...d
1812
2040
  };
1813
2041
  });
1814
- e.range = e.range.map((g, p) => {
1815
- const v = e.jsrootInstance[p];
1816
- return { ...g, bin: v };
2042
+ t.range = t.range.map((f, d) => {
2043
+ const w = t.jsrootInstance[d];
2044
+ return { ...f, bin: w };
1817
2045
  });
1818
2046
  const i = {
1819
- ...e,
2047
+ ...t,
1820
2048
  level: s.length,
1821
- range: s.concat(e.range)
1822
- }, { range: o, level: l, content: c, error: r, set: h, triggerSource: a, instanceId: u } = i, d = { coords: o, level: l, content: c, error: r, set: h, triggerSource: a, instanceId: u };
1823
- me().next(d);
2049
+ range: s.concat(t.range)
2050
+ }, { range: r, level: c, content: a, error: o, set: h, triggerSource: l, instanceId: u } = i, g = { coords: r, level: c, content: a, error: o, set: h, triggerSource: l, instanceId: u };
2051
+ Ie().next(g);
1824
2052
  }
1825
- shiftMouseClickDefault(e) {
1826
- this.hideChildHistogram(e.index);
2053
+ shiftMouseClickDefault(t) {
2054
+ this.hideChildHistogram(t.index);
1827
2055
  }
1828
- mouseDBClickDefault(e) {
1829
- e.set ? this.setPointerToChild(e.index, e.set) : this.setPointerToChild(e.index, this.selectedSet[0]);
2056
+ mouseDBClickDefault(t) {
2057
+ t.set ? this.setPointerToChild(t.index, t.set) : this.setPointerToChild(t.index, this.selectedSet[0]);
1830
2058
  }
1831
- shiftMouseDBClickDefault(e) {
2059
+ shiftMouseDBClickDefault(t) {
1832
2060
  this.setPointerToParent();
1833
2061
  }
1834
- intersectionHandler(e, A) {
1835
- this.mouseEvents.filter((s) => s.event === A).forEach((s) => s.function(e, this)), this.dirtyInstance = e.index;
2062
+ intersectionHandler(t, A) {
2063
+ this.mouseEvents.filter((s) => s.event === A).forEach((s) => s.function(t, this)), this.dirtyInstance = t.index;
1836
2064
  }
1837
- raycastHandler(e) {
2065
+ raycastHandler(t) {
1838
2066
  try {
1839
- const s = this.checkIntersectionBVH(e.ray)[0];
2067
+ const s = this.checkIntersectionBVH(t.ray)[0];
1840
2068
  if (s) {
1841
- const i = e._triggerSource;
2069
+ const i = t._triggerSource;
1842
2070
  this.intersectionHandler(s, i);
1843
2071
  }
1844
2072
  } catch (A) {
1845
2073
  console.log(A);
1846
2074
  }
1847
2075
  }
1848
- handleStateChange(e) {
1849
- if (Ae(e.sets, this.availableSets) && (!Ae(e.selectedSet, this.selectedSet) || this.selectedArray !== e.selectedArray)) {
1850
- this.selectedArray = e.selectedArray, this.selectedSet = e.selectedSet;
2076
+ handleStateChange(t) {
2077
+ if (ce(t.sets, this.availableSets) && (!ce(t.selectedSet, this.selectedSet) || this.selectedArray !== t.selectedArray)) {
2078
+ this.selectedArray = t.selectedArray, this.selectedSet = t.selectedSet;
1851
2079
  const A = this.mesh.parent;
1852
- this.instGeom.dispose(), A.remove(this.mesh), this.setupInsBufGeom(), A.add(this.mesh);
1853
- const s = this.renderHistory;
1854
- this.renderHistory = [], s.forEach((i) => {
1855
- i.procedure === "render" ? this.renderHistogram(
1856
- i.value.startIndex,
1857
- i.value.endIndex,
1858
- i.value.layer
1859
- ) : i.procedure === "hide" && this.hideChildHistogram(i.value);
1860
- });
1861
- } else
1862
- this.availableSets = e.sets, this.selectedSet = e.selectedSet;
2080
+ this.instGeom.dispose(), A.remove(this.mesh), this.setupInsBufGeom(), A.add(this.mesh), this.renderHistogramHistory();
2081
+ } else this.minMaxValue.length !== 0 && bA(t.minMaxValue, this.minMaxValue) ? this.renderHistogramHistory() : (this.availableSets = t.sets, this.selectedSet = t.selectedSet, this.minMaxValue = t.minMaxValue);
2082
+ }
2083
+ renderHistogramHistory() {
2084
+ const t = this.renderHistory;
2085
+ this.renderHistory = [], t.forEach((A) => {
2086
+ A.procedure === "render" ? this.renderHistogram(
2087
+ A.value.startIndex,
2088
+ A.value.endIndex,
2089
+ A.value.layer
2090
+ ) : A.procedure === "hide" && this.hideChildHistogram(A.value);
2091
+ });
1863
2092
  }
1864
2093
  /**
1865
2094
  * @desc Method to set pointers origin to one of origins child.
@@ -1869,47 +2098,53 @@ class IA extends pA {
1869
2098
  * @param set Specifies from which set should child be chosen.
1870
2099
  * If children contains sets, parameter need to be specified.
1871
2100
  * */
1872
- setPointerToChild(e, A) {
2101
+ setPointerToChild(t, A) {
1873
2102
  const s = this.mesh.parent;
1874
2103
  this.matrixCache = [], this.instGeom.dispose(), this.wireframe.dispose(), s.remove(this.mesh);
1875
- const i = pt(
1876
- e,
2104
+ const i = wt(
2105
+ t,
1877
2106
  A,
1878
2107
  this.pointer.origin,
1879
2108
  this.wireframe,
1880
2109
  this.selectedSet
1881
2110
  );
1882
- this.pointer.setOriginToChild(
1883
- mt(e, this.pointer.origin, this.selectedSet),
2111
+ if (this.pointer.setOriginToChild(
2112
+ Bt(t, this.pointer.origin, this.selectedSet),
1884
2113
  A,
1885
2114
  i
1886
- ), this.init(), console.log("path: ", this.pointer.path), console.log("title: ", this.pointer.title), this.renderHistogram(0, this.totalInstances, 0), s.add(this.mesh), s.add(this.wireframe.wireframe);
2115
+ ), !this.pointer.isHistogramFilled) {
2116
+ this.mesh = sA(this.limits, this.setPointerToParent.bind(this)), s.add(this.mesh);
2117
+ return;
2118
+ }
2119
+ this.init(!1), console.log("path: ", this.pointer.path), console.log("title: ", this.pointer.title), setTimeout(() => {
2120
+ this.renderHistogram(0, this.totalInstances, 0), s.add(this.mesh), s.add(this.wireframe.wireframe);
2121
+ }, 0), this.pointer.isOnSet && this.wireframe.toggleVisibility(this.matrixCache, this.maxInstancesPerLayer, this.availableSets.indexOf(A));
1887
2122
  }
1888
2123
  /**
1889
2124
  * @desc Method to set pointers origin to its parent.
1890
2125
  * * */
1891
2126
  setPointerToParent() {
1892
- const e = this.mesh.parent;
1893
- this.matrixCache = [], this.instGeom.dispose(), this.wireframe.dispose(), e.remove(this.mesh), this.pointer.setOriginToParent(1), console.log("path: ", this.pointer.path), console.log("title: ", this.pointer.title), this.init(), this.renderHistogram(0, this.totalInstances, 0), e.add(this.mesh), e.add(this.wireframe.wireframe);
2127
+ const t = this.mesh.parent;
2128
+ t.remove(this.mesh), this.pointer.isHistogramFilled && (this.matrixCache = [], this.instGeom.dispose(), this.wireframe.dispose()), this.pointer.setOriginToParent(1), console.log("path: ", this.pointer.path), console.log("title: ", this.pointer.title), this.init(!1), this.renderHistogram(0, this.totalInstances, 0), t.add(this.mesh), t.add(this.wireframe.wireframe);
1894
2129
  }
1895
2130
  /**
1896
2131
  * @desc Method to show (render) histogram that is currently represented by bin.
1897
2132
  * @param position – should be array with position for each layer.
1898
2133
  * e.g. ([{x: 1, y: 3, z: 2}, {x: 89, 0, 0}])
1899
2134
  * */
1900
- showChildHistogram(e) {
1901
- const A = Wt(
1902
- e,
2135
+ showChildHistogram(t) {
2136
+ const A = Vt(
2137
+ t,
1903
2138
  this.pointer.origin,
1904
2139
  this.maxInstancesPerLayer,
1905
2140
  this.selectedSet
1906
2141
  ), i = this.maxInstancesPerLayer.slice(
1907
- -this.maxInstancesPerLayer.length + e.length
1908
- ).reduce((o, l) => o * l, 1);
2142
+ -this.maxInstancesPerLayer.length + t.length
2143
+ ).reduce((r, c) => r * c, 1);
1909
2144
  this.renderHistogram(
1910
2145
  A.slice(-1)[0],
1911
2146
  A.slice(-1)[0] + i,
1912
- e.length
2147
+ t.length
1913
2148
  );
1914
2149
  }
1915
2150
  /**
@@ -1917,34 +2152,34 @@ class IA extends pA {
1917
2152
  * @param position – should be array with position for each layer.
1918
2153
  * e.g. ([{x: 1, y: 3, z: 2}, {x: 89, 0, 0}])
1919
2154
  * */
1920
- hideChildHistogram(e) {
1921
- if (e.length === 1) return;
2155
+ hideChildHistogram(t) {
2156
+ if (t.length === 1) return;
1922
2157
  const A = this.maxInstancesPerLayer.slice(
1923
- e.length - 1
2158
+ t.length - 1
1924
2159
  ), s = this.maxInstancesPerLayer.slice(
1925
- e.length - 1,
2160
+ t.length - 1,
1926
2161
  this.maxInstancesPerLayer.length - 1
1927
2162
  ), i = A.reduce(
1928
- (c, r) => c * r,
2163
+ (a, o) => a * o,
1929
2164
  1
1930
- ), o = oA(
1931
- e,
2165
+ ), r = MA(
2166
+ t,
1932
2167
  this.pointer.origin,
1933
2168
  this.maxInstancesPerLayer,
1934
2169
  this.selectedSet
1935
- ), l = Math.floor(o / i) * i;
2170
+ ), c = Math.floor(r / i) * i;
1936
2171
  this.clearMatrixCacheRange(
1937
- l,
2172
+ c,
1938
2173
  i,
1939
2174
  s,
1940
- e.length - 1
2175
+ t.length - 1
1941
2176
  ), this.logRender({
1942
2177
  procedure: "hide",
1943
- value: e
2178
+ value: t
1944
2179
  }), this.renderHistogram(
1945
- l,
1946
- l + i,
1947
- e.length - 2
2180
+ c,
2181
+ c + i,
2182
+ t.length - 2
1948
2183
  ), this.renderHistory.pop();
1949
2184
  }
1950
2185
  /**
@@ -1956,22 +2191,22 @@ class IA extends pA {
1956
2191
  * @param dimensions Array with number of instances for each layer that will be cleared.
1957
2192
  * @param baseLayerIndex start index of layer from which cache is cleared.
1958
2193
  * */
1959
- clearMatrixCacheRange(e, A, s, i) {
1960
- let o = e, l = A;
1961
- const c = {
2194
+ clearMatrixCacheRange(t, A, s, i) {
2195
+ let r = t, c = A;
2196
+ const a = {
1962
2197
  x: { pos: 0, size: 0 },
1963
2198
  y: { pos: 0, size: 0 },
1964
2199
  z: { pos: 0, size: 0 }
1965
2200
  };
1966
- for (let r = i + s.length - 1; r >= i; r--) {
1967
- if (Array.isArray(this.matrixCache[r]))
1968
- for (let h = 0; h < this.matrixCache[r].length; h++)
1969
- for (let a = o; a < o + l; a++)
1970
- this.setMatrixCacheAt(r, h, a, c, -1);
2201
+ for (let o = i + s.length - 1; o >= i; o--) {
2202
+ if (Array.isArray(this.matrixCache[o]))
2203
+ for (let h = 0; h < this.matrixCache[o].length; h++)
2204
+ for (let l = r; l < r + c; l++)
2205
+ this.setMatrixCacheAt(o, h, l, a, -1);
1971
2206
  else
1972
- for (let h = o; h < o + l; h++)
1973
- this.setMatrixCacheAt(r, null, h, c, -1);
1974
- r > i && (o /= s[r - i], l /= s[r - i]);
2207
+ for (let h = r; h < r + c; h++)
2208
+ this.setMatrixCacheAt(o, null, h, a, -1);
2209
+ o > i && (r /= s[o - i], c /= s[o - i]);
1975
2210
  }
1976
2211
  }
1977
2212
  /**
@@ -1979,54 +2214,62 @@ class IA extends pA {
1979
2214
  * @param origin Jsroot histogram object
1980
2215
  * @return is null. Sets that are found are set in stateSubject.
1981
2216
  * */
1982
- setAvailableSets(e) {
2217
+ setAvailableSets(t) {
1983
2218
  var A;
1984
- if ((A = e.children) != null && A.content) {
1985
- const s = e.children.content.find((i) => i);
2219
+ if ((A = t.children) != null && A.content) {
2220
+ const s = t.children.content.find((i) => i);
1986
2221
  this.setAvailableSets(s);
1987
- } else if (e != null && e.children) {
1988
- const s = tt().getValue();
1989
- s.sets = Object.keys(e.children), s.selectedSet.length === 0 ? (this.selectedSet.push(s.sets[0]), s.selectedSet.push(s.sets[0])) : this.selectedSet.every((i) => s.sets.find((o) => o === i)) || (s.selectedSet = [s.sets[0]]), tt().next(s);
2222
+ } else if (t != null && t.children) {
2223
+ const s = k(this.id).getValue();
2224
+ s.sets = Object.keys(t.children), s.selectedSet.length === 0 ? (this.selectedSet.push(s.sets[0]), s.selectedSet.push(s.sets[0])) : this.selectedSet.every((i) => s.sets.find((r) => r === i)) || (s.selectedSet = [s.sets[0]]), k(this.id).next(s);
1990
2225
  } else {
1991
- const s = tt().getValue();
2226
+ const s = k(this.id).getValue();
1992
2227
  s.sets = [], s.selectedSet = [];
1993
2228
  }
1994
2229
  }
1995
- setAvailableArrays(e) {
2230
+ setAvailableArrays(t) {
1996
2231
  var i;
1997
- const A = tt().getValue();
1998
- A.arrays = [], e.fArrays && (A.arrays = Object.keys(e.fArrays)), A.arrays.unshift("content");
1999
- const s = (o) => {
2000
- var c;
2001
- const l = o.find((r) => r);
2002
- l.fArrays && (A.arrays = A.arrays.concat(Object.keys(l.fArrays))), (c = l.children) != null && c.content && s(l.children.content);
2232
+ const A = k(this.id).getValue();
2233
+ A.arrays = [], t.fArrays && (A.arrays = Object.keys(t.fArrays)), A.arrays.unshift("content");
2234
+ const s = (r) => {
2235
+ var a;
2236
+ const c = r.find((o) => o);
2237
+ c.fArrays && (A.arrays = A.arrays.concat(Object.keys(c.fArrays))), (a = c.children) != null && a.content && s(c.children.content);
2003
2238
  };
2004
- (i = e.children) != null && i.content && s(e.children.content), tt().next(A);
2239
+ (i = t.children) != null && i.content && s(t.children.content), k(this.id).next(A);
2240
+ }
2241
+ configSubjectHandler(t) {
2242
+ var s;
2243
+ this.config = dt().mergeHistogramConfig((s = this == null ? void 0 : this.opts) == null ? void 0 : s.config), this.keyBindings = tA(t.config.bindings);
2244
+ const A = t.config.environment.histogramPads.find(
2245
+ (i) => i.id === this.id
2246
+ );
2247
+ A && !AA(this.limits, A) && this.renderHistory.length > 0 && (this.limits = { ...A }, this.renderHistogramHistory()), this.limits = { ...A };
2005
2248
  }
2006
2249
  /**
2007
2250
  * @desc Key down handler for nested histogram.
2008
2251
  * Creates functionality where user can render each layer at once.
2009
2252
  * @param event Defines incoming event which will be put against regex.
2010
2253
  * */
2011
- keyDownHandler(e) {
2012
- const A = /^(?:Digit|Numpad)(\d+)$/, s = e.code.match(A);
2254
+ keyDownHandler(t) {
2255
+ const A = /^(?:Digit|Numpad)(\d+)$/, s = t.code.match(A);
2013
2256
  if (s) {
2014
2257
  if (parseInt(s[1]) > this.matrixCache.length) return;
2015
- const i = new Oe();
2258
+ const i = new Se();
2016
2259
  i.scale.set(0, 0, 0), i.updateMatrix();
2017
- let o = this.maxInstancesPerLayer.reduce((l, c) => l * c, 1);
2018
- this.selectedSet.length > 1 && (o *= this.selectedSet.length), this.setupMatrixCache(), this.wireframe.clearWireframe(), this.renderHistogram(
2260
+ let r = this.maxInstancesPerLayer.reduce((c, a) => c * a, 1);
2261
+ this.selectedSet.length > 1 && (r *= this.selectedSet.length), this.setupMatrixCache(), this.wireframe.clearWireframe(), this.renderHistogram(
2019
2262
  0,
2020
2263
  this.totalInstances,
2021
2264
  parseInt(s[1]) - 1
2022
2265
  );
2023
- } else e.key === this.keyBindings.hideOutlines ? this.wireframe.toggleVisibility(
2266
+ } else t.key === this.keyBindings.hideOutlines ? this.wireframe.toggleVisibility(
2024
2267
  this.matrixCache,
2025
2268
  this.maxInstancesPerLayer,
2026
2269
  this.availableSets.indexOf(this.selectedSet[0])
2027
- ) : e.key === this.keyBindings.resetHistogram ? this.resetHistogram() : e.key === this.keyBindings.goToPreviousLayer && this.setPointerToParent();
2270
+ ) : t.key === this.keyBindings.resetHistogram ? this.resetHistogram() : t.key === this.keyBindings.goToPreviousLayer && this.setPointerToParent();
2028
2271
  }
2029
- keyUpHandler(e) {
2272
+ keyUpHandler(t) {
2030
2273
  }
2031
2274
  resetHistogram() {
2032
2275
  this.updateHistogram({ obj: this.rootObj });
@@ -2046,196 +2289,218 @@ class IA extends pA {
2046
2289
  * @param {number} obj.value.endIndex - The ending index.
2047
2290
  * @param {number} obj.value.layer - The layer used in rendering.
2048
2291
  */
2049
- logRender(e) {
2050
- e.procedure === "render" && e.value.startIndex === 0 && e.value.endIndex === this.totalInstances && (this.renderHistory = []), this.renderHistory.push(e);
2292
+ logRender(t) {
2293
+ t.procedure === "render" && t.value.startIndex === 0 && t.value.endIndex === this.totalInstances && (this.renderHistory = []), this.renderHistory.push(t);
2051
2294
  }
2052
- getBinContent(e, A, s, i, o) {
2053
- var l;
2054
- if (o === "content" || !e.fArrays)
2055
- return e.getBinContent(A + 1, s + 1, i + 1);
2295
+ getBinContent(t, A, s, i, r) {
2296
+ var c;
2297
+ if (r === "content" || !t.fArrays)
2298
+ return t.getBinContent(A + 1, s + 1, i + 1);
2056
2299
  {
2057
- const c = e.getBin(A + 1, s + 1, i + 1);
2058
- return (l = e.fArrays) == null ? void 0 : l[o].values[c];
2300
+ const a = t.getBin(A + 1, s + 1, i + 1);
2301
+ return (c = t.fArrays) == null ? void 0 : c[r].values[a];
2059
2302
  }
2060
2303
  }
2061
- checkIntersectionBVH(e) {
2062
- const A = new H(), s = (r, h, a, u) => {
2063
- var d;
2304
+ getBinError(t, A, s, i, r) {
2305
+ var a;
2306
+ const c = t.getBin(A + 1, s + 1, i + 1);
2307
+ return r === "content" || !t.fArrays ? t.fSumw2.length !== 0 ? t.fSumw2[c] : t.getBinError(c) : (a = t.fArrays) == null ? void 0 : a[r].errors[c];
2308
+ }
2309
+ checkIntersectionBVH(t) {
2310
+ const A = new D(), s = (o, h, l, u) => {
2311
+ var g;
2064
2312
  if (h < 0 || 1 / h === -1 / 0) {
2065
- const g = h * -1, p = u && u !== "content" ? (d = this.matrixCache[r]) == null ? void 0 : d[this.availableSets.indexOf(u)] : this.matrixCache[r];
2066
- return p ? new Bt().setFromCenterAndSize(
2067
- new H(p.pos[g * 3], p.pos[g * 3 + 1], p.pos[g * 3 + 2]),
2068
- new H(p.scale[g * 3], p.scale[g * 3 + 1], p.scale[g * 3 + 2])
2313
+ const f = h * -1, d = u && u !== "content" ? (g = this.matrixCache[o]) == null ? void 0 : g[this.availableSets.indexOf(u)] : this.matrixCache[o];
2314
+ return d ? new Et().setFromCenterAndSize(
2315
+ new D(d.pos[f * 3], d.pos[f * 3 + 1], d.pos[f * 3 + 2]),
2316
+ new D(d.scale[f * 3], d.scale[f * 3 + 1], d.scale[f * 3 + 2])
2069
2317
  ) : void 0;
2070
2318
  } else {
2071
- const g = u && u !== "content" ? this.BVHTree[r][this.availableSets.indexOf(u)][a] : this.BVHTree[r][a];
2072
- return g ? new Bt().setFromCenterAndSize(
2073
- new H(g.pos[h * 3], g.pos[h * 3 + 1], g.pos[h * 3 + 2]),
2074
- new H(g.scale[h * 3], g.scale[h * 3 + 1], g.scale[h * 3 + 2])
2319
+ const f = u && u !== "content" ? Array.isArray(this.BVHTree[o][this.availableSets.indexOf(u)]) ? this.BVHTree[o][this.availableSets.indexOf(u)][l] : this.BVHTree[o][this.availableSets.indexOf(u)] : this.BVHTree[o][l];
2320
+ return f ? new Et().setFromCenterAndSize(
2321
+ new D(f.pos[h * 3], f.pos[h * 3 + 1], f.pos[h * 3 + 2]),
2322
+ new D(f.scale[h * 3], f.scale[h * 3 + 1], f.scale[h * 3 + 2])
2075
2323
  ) : void 0;
2076
2324
  }
2077
- }, i = (r, h) => {
2078
- let a = 0, u = r, d = h;
2325
+ }, i = (o, h) => {
2326
+ let l = 0, u = o, g = h;
2079
2327
  for (; u + 1 < this.matrixCache.length; ) {
2080
2328
  u++;
2081
- const g = this.matrixCache[u];
2082
- if (Array.isArray(g))
2083
- this.selectedSet.forEach((p) => {
2084
- const v = this.availableSets.indexOf(p);
2085
- for (let f = d; f < d + this.maxInstancesPerLayer[u]; f++)
2086
- if (g[v].rendered[f] !== -1) {
2087
- a = u - r;
2329
+ const f = this.matrixCache[u];
2330
+ if (Array.isArray(f))
2331
+ this.selectedSet.forEach((d) => {
2332
+ const w = this.availableSets.indexOf(d);
2333
+ for (let B = g; B < g + this.maxInstancesPerLayer[u]; B++)
2334
+ if (f[w].rendered[B] !== -1) {
2335
+ l = u - o;
2088
2336
  break;
2089
2337
  }
2090
2338
  });
2091
2339
  else {
2092
- if (!g) return a;
2093
- for (let p = d; p < d + this.maxInstancesPerLayer[u]; p++)
2094
- if (g.rendered[p] !== -1) {
2095
- a = u - r;
2340
+ if (!f) return l;
2341
+ for (let d = g; d < g + this.maxInstancesPerLayer[u]; d++)
2342
+ if (f.rendered[d] !== -1) {
2343
+ l = u - o;
2096
2344
  break;
2097
2345
  }
2098
2346
  }
2099
- d *= this.maxInstancesPerLayer[u + 1];
2347
+ g *= this.maxInstancesPerLayer[u + 1];
2100
2348
  }
2101
- return a;
2102
- }, o = (r, h, a, u) => {
2103
- const d = u && u !== "content" ? this.BVHTree[a][this.availableSets.indexOf(u)][h] : this.BVHTree[a][h], g = s(a, d.left[r], h, u), p = s(a, d.right[r], h, u), v = [];
2104
- return e.intersectBox(g, A) ? v.push({
2105
- index: d.left[r],
2349
+ return l;
2350
+ }, r = (o, h, l, u) => {
2351
+ const g = u && u !== "content" ? Array.isArray(this.BVHTree[l][this.availableSets.indexOf(u)]) ? this.BVHTree[l][this.availableSets.indexOf(u)][h] : this.BVHTree[l][this.availableSets.indexOf(u)] : this.BVHTree[l][h], f = s(l, g.left[o], h, u), d = s(l, g.right[o], h, u), w = [];
2352
+ return t.intersectBox(f, A) ? w.push({
2353
+ index: g.left[o],
2106
2354
  target: A.clone(),
2107
- distance: e.origin.distanceTo(A)
2108
- }) : v.push(null), e.intersectBox(p, A) ? v.push({
2109
- index: d.right[r],
2355
+ distance: t.origin.distanceTo(A)
2356
+ }) : w.push(null), t.intersectBox(d, A) ? w.push({
2357
+ index: g.right[o],
2110
2358
  target: A.clone(),
2111
- distance: e.origin.distanceTo(A)
2112
- }) : v.push(null), v;
2113
- }, l = (r, h, a) => {
2114
- const u = [], d = (p) => {
2115
- if (p.index < 0 || 1 / p.index === -1 / 0) {
2116
- u.push(p);
2359
+ distance: t.origin.distanceTo(A)
2360
+ }) : w.push(null), w;
2361
+ }, c = (o, h, l) => {
2362
+ const u = [], g = (d) => {
2363
+ if (d.index < 0 || 1 / d.index === -1 / 0) {
2364
+ u.push(d);
2117
2365
  return;
2118
2366
  }
2119
- const [v, f] = o(
2120
- p.index,
2367
+ const [w, B] = r(
2368
+ d.index,
2121
2369
  h,
2122
- r,
2123
- a
2370
+ o,
2371
+ l
2124
2372
  );
2125
- v && d(v), f && d(f);
2126
- }, g = a && a !== "content" ? this.BVHTree[r][this.availableSets.indexOf(a)][h] : this.BVHTree[r][h];
2127
- return g && d({
2128
- index: g.left.length - 1,
2373
+ w && g(w), B && g(B);
2374
+ }, f = l && l !== "content" ? Array.isArray(this.BVHTree[o][this.availableSets.indexOf(l)]) ? this.BVHTree[o][this.availableSets.indexOf(l)][h] : this.BVHTree[o][this.availableSets.indexOf(l)] : this.BVHTree[o][h];
2375
+ return !f || f.length === 0 || g({
2376
+ index: f.left.length - 1,
2129
2377
  target: null,
2130
2378
  distance: null
2131
2379
  }), u;
2132
- }, c = (r, h, a = 0, u = [], d = void 0) => {
2133
- const g = [], p = this.maxInstancesPerLayer[h + 1], v = this.maxInstancesPerLayer[h] * this.maxInstancesPerLayer[h + 1];
2134
- return l(h, a, d).forEach((f) => {
2135
- var C;
2136
- const b = Math.abs(f.index) - a * this.maxInstancesPerLayer[h], y = b % r.fXaxis.fNbins, x = Math.floor(
2137
- b % (r.fXaxis.fNbins * r.fYaxis.fNbins) / r.fXaxis.fNbins
2138
- ), B = Math.floor(
2139
- b / (r.fXaxis.fNbins * r.fYaxis.fNbins)
2140
- ), D = [...u, { x: y, y: x, z: B }];
2141
- if (r.children) {
2142
- const O = Object.entries(r.children).flatMap(([E, Y]) => {
2143
- const P = r.getBin(y + 1, x + 1, B + 1), k = Y == null ? void 0 : Y[P];
2144
- if (!k) return [];
2145
- const V = a * v + (y + x * r.fXaxis.fNbins + B * (r.fXaxis.fNbins * r.fYaxis.fNbins)) * p;
2146
- if (!(i(h, V) > 0)) return [];
2147
- let Q = c(
2148
- k,
2380
+ }, a = (o, h, l = 0, u = [], g = null) => {
2381
+ const f = [], d = this.maxInstancesPerLayer[h + 1], w = this.maxInstancesPerLayer[h] * this.maxInstancesPerLayer[h + 1];
2382
+ return c(h, l, g).forEach((B) => {
2383
+ var x;
2384
+ const M = Math.abs(B.index) - l * this.maxInstancesPerLayer[h], p = M % o.fXaxis.fNbins, I = Math.floor(
2385
+ M % (o.fXaxis.fNbins * o.fYaxis.fNbins) / o.fXaxis.fNbins
2386
+ ), y = Math.floor(
2387
+ M / (o.fXaxis.fNbins * o.fYaxis.fNbins)
2388
+ ), b = [...u, { x: p, y: I, z: y }];
2389
+ if (o.children) {
2390
+ const E = Object.entries(o.children).flatMap(([T, G]) => {
2391
+ const z = o.getBin(p + 1, I + 1, y + 1), F = G == null ? void 0 : G[z];
2392
+ if (!F) return [];
2393
+ const P = l * w + (p + I * o.fXaxis.fNbins + y * (o.fXaxis.fNbins * o.fYaxis.fNbins)) * d;
2394
+ if (!(i(h, P) > 0)) return [];
2395
+ let S = a(
2396
+ F,
2149
2397
  h + 1,
2150
- Math.abs(f.index),
2151
- D,
2152
- E
2398
+ Math.abs(B.index),
2399
+ b,
2400
+ T
2153
2401
  );
2154
- return E !== "content" && (Q = Q.map((G) => ({ ...G, set: E }))), Q;
2402
+ return T !== "content" && (S = S.map((H) => ({ ...H, set: T }))), S;
2155
2403
  });
2156
- if (O.length > 0)
2157
- g.push(...O);
2404
+ if (E.length > 0)
2405
+ f.push(...E);
2158
2406
  else {
2159
- const E = a * this.maxInstancesPerLayer[h] + (y + x * r.fXaxis.fNbins + B * (r.fXaxis.fNbins * r.fYaxis.fNbins));
2160
- (d && d !== "content" ? (C = this.matrixCache[h]) == null ? void 0 : C[this.availableSets.indexOf(d)] : this.matrixCache[h]).rendered[E] !== -1 && g.push({
2161
- index: D,
2162
- target: f.target,
2163
- distance: f.distance,
2164
- set: d,
2165
- instanceId: Wt(
2166
- D,
2407
+ const T = l * this.maxInstancesPerLayer[h] + (p + I * o.fXaxis.fNbins + y * (o.fXaxis.fNbins * o.fYaxis.fNbins));
2408
+ (g && g !== "content" ? (x = this.matrixCache[h]) == null ? void 0 : x[this.availableSets.indexOf(g)] : this.matrixCache[h]).rendered[T] !== -1 && f.push({
2409
+ index: b,
2410
+ target: B.target,
2411
+ distance: B.distance,
2412
+ set: g,
2413
+ selectedArray: this.selectedArray,
2414
+ instanceId: Vt(
2415
+ b,
2167
2416
  this.pointer.origin,
2168
2417
  this.maxInstancesPerLayer,
2169
2418
  this.selectedSet
2170
2419
  ),
2171
- jsrootInstance: mt(
2172
- D,
2420
+ jsrootInstance: Bt(
2421
+ b,
2173
2422
  this.pointer.origin,
2174
2423
  this.selectedSet
2175
2424
  ),
2176
- range: pt(
2177
- D,
2178
- d,
2425
+ range: wt(
2426
+ b,
2427
+ g,
2179
2428
  this.pointer.origin,
2180
2429
  this.wireframe,
2181
2430
  this.selectedSet
2182
2431
  ),
2183
2432
  origin: this,
2184
- jsrootObj: r,
2185
- content: this.getBinContent(r, y, x, B, this.selectedArray),
2186
- error: r.getBinError(y + 1, x + 1, B + 1)
2433
+ jsrootObj: o,
2434
+ content: this.getBinContent(o, p, I, y, this.selectedArray),
2435
+ error: this.getBinError(o, p, I, y, this.selectedArray)
2187
2436
  });
2188
2437
  }
2189
2438
  } else
2190
- g.push({
2191
- index: D,
2192
- target: f.target,
2193
- distance: f.distance,
2194
- set: d,
2195
- instanceId: Wt(
2196
- D,
2439
+ f.push({
2440
+ index: b,
2441
+ target: B.target,
2442
+ distance: B.distance,
2443
+ set: g,
2444
+ selectedArray: this.selectedArray,
2445
+ instanceId: Vt(
2446
+ b,
2197
2447
  this.pointer.origin,
2198
2448
  this.maxInstancesPerLayer,
2199
2449
  this.selectedSet
2200
2450
  ),
2201
- jsrootInstance: mt(
2202
- D,
2451
+ jsrootInstance: Bt(
2452
+ b,
2203
2453
  this.pointer.origin,
2204
2454
  this.selectedSet
2205
2455
  ),
2206
- range: pt(
2207
- D,
2208
- d,
2456
+ range: wt(
2457
+ b,
2458
+ g,
2209
2459
  this.pointer.origin,
2210
2460
  this.wireframe,
2211
2461
  this.selectedSet
2212
2462
  ),
2213
2463
  origin: this,
2214
- jsrootObj: r,
2215
- content: this.getBinContent(r, y, x, B, this.selectedArray),
2216
- error: r.getBinError(y + 1, x + 1, B + 1)
2464
+ jsrootObj: o,
2465
+ content: this.getBinContent(o, p, I, y, this.selectedArray),
2466
+ error: this.getBinError(o, p, I, y, this.selectedArray)
2217
2467
  });
2218
- }), g.sort((f, b) => f.distance - b.distance);
2468
+ }), f.sort((B, M) => B.distance - M.distance);
2219
2469
  };
2220
- return c(this.pointer.origin, 0);
2470
+ if (this.pointer.isOnSet === null)
2471
+ return a(this.pointer.origin, 0, 0, [], this.pointer.isOnSet);
2472
+ {
2473
+ const o = this.selectedSet.map((l) => a(
2474
+ qt(
2475
+ this.pointer.rootObj,
2476
+ this.pointer.parentPath.map((u) => u.bin[0]),
2477
+ l
2478
+ ),
2479
+ 0,
2480
+ 0,
2481
+ [],
2482
+ l
2483
+ )).filter((l) => l.length !== 0), h = Math.min(...o.map((l) => l[0].distance));
2484
+ return o.find((l) => l[0].distance === h) ?? [];
2485
+ }
2221
2486
  }
2222
- dispatchSubjectHandler(e) {
2223
- console.log("dispatch: ", e);
2224
- const A = e.event.index.map((o) => ({ x: o.x - 1, y: o.y - 1, z: o.z - 1 })), s = this.pointer.getChildByPosition(
2225
- mt([...A]).slice(0, -1),
2226
- e.event.set,
2487
+ dispatchSubjectHandler(t) {
2488
+ console.log("dispatch: ", t);
2489
+ const A = t.event.index.map((r) => ({ x: r.x - 1, y: r.y - 1, z: r.z - 1 })), s = this.pointer.getChildByPosition(
2490
+ Bt([...A]).slice(0, -1),
2491
+ t.event.set,
2227
2492
  this.selectedSet
2228
2493
  ), i = {
2229
2494
  index: A,
2230
- set: e.event.set,
2231
- jsrootInstance: mt(
2495
+ set: t.event.set,
2496
+ jsrootInstance: Bt(
2232
2497
  A,
2233
2498
  this.pointer.origin,
2234
2499
  this.selectedSet
2235
2500
  ),
2236
- range: pt(
2501
+ range: wt(
2237
2502
  A,
2238
- e.event.set,
2503
+ t.event.set,
2239
2504
  this.pointer.origin,
2240
2505
  this.wireframe,
2241
2506
  this.selectedSet
@@ -2251,11 +2516,11 @@ class IA extends pA {
2251
2516
  ),
2252
2517
  error: s.getBinError(A[0].x + 1, A[0].y + 1, A[0].z + 1)
2253
2518
  };
2254
- this.intersectionHandler(i, e.event.source);
2519
+ this.intersectionHandler(i, t.event.source);
2255
2520
  }
2256
2521
  }
2257
- class XA {
2258
- constructor(t, e, A, s, i) {
2522
+ class KA {
2523
+ constructor(e, t, A, s, i) {
2259
2524
  m(this, "plane");
2260
2525
  m(this, "cinemaSub");
2261
2526
  m(this, "position");
@@ -2263,55 +2528,55 @@ class XA {
2263
2528
  m(this, "scale");
2264
2529
  m(this, "id");
2265
2530
  m(this, "configSub");
2266
- const o = new ae(s.x, s.y), l = new le({
2267
- color: new X().setHex(16777215),
2268
- side: he
2531
+ const r = new Be(s.x, s.y), c = new we({
2532
+ color: new U().setHex(16777215),
2533
+ side: pe
2269
2534
  });
2270
- this.plane || (this.plane = new Ct(o, l), this.plane.position.set(e.x, e.y, e.z)), t && this.updateTexture(t), this.id = i, this.position = e, this.rotation = A, this.scale = s, this.cinemaSub = ge().getObservable().pipe(ct((c) => c.id === this.id || c.id === "*")).subscribe((c) => {
2271
- console.log("obj: ", c);
2272
- const r = c.obj;
2273
- De({ format: "png", object: r, width: 1200, height: 600 }).then(
2535
+ this.plane || (this.plane = new vt(r, c), this.plane.position.set(t.x, t.y, t.z)), e && this.updateTexture(e), this.id = i, this.position = t, this.rotation = A, this.scale = s, this.cinemaSub = ye().getObservable().pipe(ct((a) => a.id === this.id || a.id === "*")).subscribe((a) => {
2536
+ console.log("obj: ", a);
2537
+ const o = a.obj;
2538
+ je({ format: "png", option: "pE", object: o, width: 1200, height: 600 }).then(
2274
2539
  (h) => {
2275
2540
  this.updateTexture(h);
2276
2541
  }
2277
2542
  );
2278
- }), this.configSub = lt().getObservable().pipe(
2543
+ }), this.configSub = dt().getObservable().pipe(
2279
2544
  ct(
2280
- (c) => c.target.id.includes("*") || c.target.id.includes(this.id)
2545
+ (a) => a.target.id.includes("*") || a.target.id.includes(this.id)
2281
2546
  )
2282
- ).subscribe((c) => {
2283
- this.position = c.config.environment.canvas.position, this.rotation = c.config.environment.canvas.rotation, this.scale = c.config.environment.canvas.scale, this.updateMesh();
2547
+ ).subscribe((a) => {
2548
+ this.position = a.config.environment.canvas.position, this.rotation = a.config.environment.canvas.rotation, this.scale = a.config.environment.canvas.scale, this.updateMesh();
2284
2549
  });
2285
2550
  }
2286
2551
  updateMesh() {
2287
2552
  this.plane.scale.set(this.scale.x, this.scale.y, this.scale.z), this.plane.position.set(this.position.x, this.position.y, this.position.z);
2288
- const t = Math.PI / 180;
2553
+ const e = Math.PI / 180;
2289
2554
  this.plane.rotation.set(
2290
- this.rotation.x * t,
2291
- this.rotation.y * t,
2292
- this.rotation.z * t
2555
+ this.rotation.x * e,
2556
+ this.rotation.y * e,
2557
+ this.rotation.z * e
2293
2558
  );
2294
2559
  }
2295
- updateTexture(t) {
2296
- if (!t) {
2560
+ updateTexture(e) {
2561
+ if (!e) {
2297
2562
  console.warn("updateTexture called with null/undefined");
2298
2563
  return;
2299
2564
  }
2300
- const e = new He();
2301
- if (typeof t == "string" && (t.startsWith("data:") || t.startsWith("http")))
2302
- e.load(
2303
- t,
2565
+ const t = new de();
2566
+ if (typeof e == "string" && (e.startsWith("data:") || e.startsWith("http")))
2567
+ t.load(
2568
+ e,
2304
2569
  (A) => {
2305
2570
  this.plane.material.map = A, this.plane.material.needsUpdate = !0;
2306
2571
  },
2307
2572
  void 0,
2308
2573
  (A) => console.error("Texture load failed", A)
2309
2574
  );
2310
- else if (t instanceof HTMLImageElement) {
2311
- const A = new Texture(t);
2575
+ else if (e instanceof HTMLImageElement) {
2576
+ const A = new Texture(e);
2312
2577
  A.needsUpdate = !0, this.plane.material.map = A, this.plane.material.needsUpdate = !0;
2313
2578
  } else
2314
- console.error("Unsupported image type passed to updateTexture:", t);
2579
+ console.error("Unsupported image type passed to updateTexture:", e);
2315
2580
  }
2316
2581
  remove() {
2317
2582
  this.plane.parent && (this.plane.parent.remove(this.plane), this.cinemaSub.unsubscribe(), this.configSub.unsubscribe());
@@ -2320,78 +2585,78 @@ class XA {
2320
2585
  return this.plane;
2321
2586
  }
2322
2587
  }
2323
- class wA extends Pe {
2324
- constructor(t) {
2325
- super(t);
2326
- }
2327
- load(t, e, A, s) {
2328
- const i = this, o = new Ye(this.manager);
2329
- o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(this.withCredentials), o.load(t, function(l) {
2330
- const c = i.parse(JSON.parse(l));
2331
- e && e(c);
2588
+ class jA extends Fe {
2589
+ constructor(e) {
2590
+ super(e);
2591
+ }
2592
+ load(e, t, A, s) {
2593
+ const i = this, r = new We(this.manager);
2594
+ r.setPath(this.path), r.setRequestHeader(this.requestHeader), r.setWithCredentials(this.withCredentials), r.load(e, function(c) {
2595
+ const a = i.parse(JSON.parse(c));
2596
+ t && t(a);
2332
2597
  }, A, s);
2333
2598
  }
2334
- parse(t) {
2335
- return new bA(t);
2599
+ parse(e) {
2600
+ return new OA(e);
2336
2601
  }
2337
2602
  }
2338
- class bA {
2339
- constructor(t) {
2340
- this.isFont = !0, this.type = "Font", this.data = t;
2603
+ class OA {
2604
+ constructor(e) {
2605
+ this.isFont = !0, this.type = "Font", this.data = e;
2341
2606
  }
2342
- generateShapes(t, e = 100) {
2343
- const A = [], s = vA(t, e, this.data);
2344
- for (let i = 0, o = s.length; i < o; i++)
2607
+ generateShapes(e, t = 100) {
2608
+ const A = [], s = YA(e, t, this.data);
2609
+ for (let i = 0, r = s.length; i < r; i++)
2345
2610
  A.push(...s[i].toShapes());
2346
2611
  return A;
2347
2612
  }
2348
2613
  }
2349
- function vA(n, t, e) {
2350
- const A = Array.from(n), s = t / e.resolution, i = (e.boundingBox.yMax - e.boundingBox.yMin + e.underlineThickness) * s, o = [];
2351
- let l = 0, c = 0;
2352
- for (let r = 0; r < A.length; r++) {
2353
- const h = A[r];
2614
+ function YA(n, e, t) {
2615
+ const A = Array.from(n), s = e / t.resolution, i = (t.boundingBox.yMax - t.boundingBox.yMin + t.underlineThickness) * s, r = [];
2616
+ let c = 0, a = 0;
2617
+ for (let o = 0; o < A.length; o++) {
2618
+ const h = A[o];
2354
2619
  if (h === `
2355
2620
  `)
2356
- l = 0, c -= i;
2621
+ c = 0, a -= i;
2357
2622
  else {
2358
- const a = xA(h, s, l, c, e);
2359
- l += a.offsetX, o.push(a.path);
2623
+ const l = UA(h, s, c, a, t);
2624
+ c += l.offsetX, r.push(l.path);
2360
2625
  }
2361
2626
  }
2362
- return o;
2627
+ return r;
2363
2628
  }
2364
- function xA(n, t, e, A, s) {
2629
+ function UA(n, e, t, A, s) {
2365
2630
  const i = s.glyphs[n] || s.glyphs["?"];
2366
2631
  if (!i) {
2367
2632
  console.error('THREE.Font: character "' + n + '" does not exists in font family ' + s.familyName + ".");
2368
2633
  return;
2369
2634
  }
2370
- const o = new qe();
2371
- let l, c, r, h, a, u, d, g;
2635
+ const r = new Xe();
2636
+ let c, a, o, h, l, u, g, f;
2372
2637
  if (i.o) {
2373
- const p = i._cachedOutline || (i._cachedOutline = i.o.split(" "));
2374
- for (let v = 0, f = p.length; v < f; )
2375
- switch (p[v++]) {
2638
+ const d = i._cachedOutline || (i._cachedOutline = i.o.split(" "));
2639
+ for (let w = 0, B = d.length; w < B; )
2640
+ switch (d[w++]) {
2376
2641
  case "m":
2377
- l = p[v++] * t + e, c = p[v++] * t + A, o.moveTo(l, c);
2642
+ c = d[w++] * e + t, a = d[w++] * e + A, r.moveTo(c, a);
2378
2643
  break;
2379
2644
  case "l":
2380
- l = p[v++] * t + e, c = p[v++] * t + A, o.lineTo(l, c);
2645
+ c = d[w++] * e + t, a = d[w++] * e + A, r.lineTo(c, a);
2381
2646
  break;
2382
2647
  case "q":
2383
- r = p[v++] * t + e, h = p[v++] * t + A, a = p[v++] * t + e, u = p[v++] * t + A, o.quadraticCurveTo(a, u, r, h);
2648
+ o = d[w++] * e + t, h = d[w++] * e + A, l = d[w++] * e + t, u = d[w++] * e + A, r.quadraticCurveTo(l, u, o, h);
2384
2649
  break;
2385
2650
  case "b":
2386
- r = p[v++] * t + e, h = p[v++] * t + A, a = p[v++] * t + e, u = p[v++] * t + A, d = p[v++] * t + e, g = p[v++] * t + A, o.bezierCurveTo(a, u, d, g, r, h);
2651
+ o = d[w++] * e + t, h = d[w++] * e + A, l = d[w++] * e + t, u = d[w++] * e + A, g = d[w++] * e + t, f = d[w++] * e + A, r.bezierCurveTo(l, u, g, f, o, h);
2387
2652
  break;
2388
2653
  }
2389
2654
  }
2390
- return { offsetX: i.ha * t, path: o };
2655
+ return { offsetX: i.ha * e, path: r };
2391
2656
  }
2392
- class yA {
2393
- constructor(t, e = {}) {
2394
- this.camera = t, this.options = {
2657
+ class PA {
2658
+ constructor(e, t = {}) {
2659
+ this.camera = e, this.options = {
2395
2660
  backgroundColor: 11184810,
2396
2661
  textColor: 1,
2397
2662
  // ROOT color index
@@ -2401,88 +2666,88 @@ class yA {
2401
2666
  lineHeight: 2e-3,
2402
2667
  textSize: 10,
2403
2668
  width: 0.031,
2404
- ...e
2405
- }, this.loader = new wA(), this.queue = new ne();
2669
+ ...t
2670
+ }, this.loader = new jA(), this.queue = new ge();
2406
2671
  let A = !1, s = null;
2407
2672
  this.queueSub = this.queue.pipe(
2408
- ve((i) => A ? (s = i, Ce) : (A = !0, xe(this.updateVisualization(i)).pipe(
2409
- ye(() => {
2673
+ ze((i) => A ? (s = i, De) : (A = !0, Ge(this.updateVisualization(i)).pipe(
2674
+ Te(() => {
2410
2675
  if (A = !1, s) {
2411
- const o = s;
2412
- s = null, this.queue.next(o);
2676
+ const r = s;
2677
+ s = null, this.queue.next(r);
2413
2678
  }
2414
2679
  })
2415
2680
  )))
2416
- ).subscribe(), this.group = new ue();
2681
+ ).subscribe(), this.group = new be();
2417
2682
  }
2418
2683
  /**
2419
2684
  * Parse bin data and extract display information
2420
2685
  */
2421
- parseData(t) {
2422
- const e = [];
2423
- if (t.title && e.push({ text: t.title, isTitle: !0 }), t.coords && Array.isArray(t.coords) && t.coords.forEach((A) => {
2686
+ parseData(e) {
2687
+ const t = [];
2688
+ if (e.title && t.push({ text: e.title, isTitle: !0 }), e.coords && Array.isArray(e.coords) && e.coords.forEach((A) => {
2424
2689
  Object.entries(A).forEach(([s, i]) => {
2425
2690
  if (i && typeof i == "object" && !("isColor" in i)) {
2426
- const o = `${s} = [${i.min.toFixed(2)}, ${i.max.toFixed(2)})`;
2427
- e.push({ text: o, isTitle: !1 });
2691
+ const r = `${s} = [${i.min.toFixed(2)}, ${i.max.toFixed(2)})`;
2692
+ t.push({ text: r, isTitle: !1 });
2428
2693
  }
2429
2694
  });
2430
- }), t.index && Array.isArray(t.index) && t.index.forEach((A) => {
2431
- let s = `bin = ${t.object.bins[t.instanceId]}`;
2432
- Object.entries(A).forEach(([i, o]) => {
2433
- s += `, ${i}: ${o}`;
2434
- }), e.push({ text: s, isTitle: !1 });
2435
- }), t.content !== void 0) {
2436
- const A = Number.isInteger(t.content) ? `content = ${t.content}` : `content = ${t.content.toFixed(2)}`;
2437
- e.push({ text: A, isTitle: !1 });
2695
+ }), e.index && Array.isArray(e.index) && e.index.forEach((A) => {
2696
+ let s = `bin = ${e.object.bins[e.instanceId]}`;
2697
+ Object.entries(A).forEach(([i, r]) => {
2698
+ s += `, ${i}: ${r}`;
2699
+ }), t.push({ text: s, isTitle: !1 });
2700
+ }), e.content !== void 0) {
2701
+ const A = Number.isInteger(e.content) ? `content = ${e.content}` : `content = ${e.content.toFixed(2)}`;
2702
+ t.push({ text: A, isTitle: !1 });
2438
2703
  }
2439
- if (t.error !== void 0) {
2440
- const A = Number.isInteger(t.error) ? `error = ${t.error}` : `error = ${t.error.toFixed(2)}`;
2441
- e.push({ text: A, isTitle: !1 });
2704
+ if (e.error !== void 0) {
2705
+ const A = Number.isInteger(e.error) ? `error = ${e.error}` : `error = ${e.error.toFixed(2)}`;
2706
+ t.push({ text: A, isTitle: !1 });
2442
2707
  }
2443
- return e;
2708
+ return t;
2444
2709
  }
2445
2710
  /**
2446
2711
  * Create background panel
2447
2712
  */
2448
- createBackgroundPanel(t) {
2449
- const { width: e, backgroundColor: A } = this.options, s = new ae(e, t), i = new le({
2713
+ createBackgroundPanel(e) {
2714
+ const { width: t, backgroundColor: A } = this.options, s = new Be(t, e), i = new we({
2450
2715
  color: A,
2451
- side: he
2716
+ side: pe
2452
2717
  });
2453
- return new Ct(s, i);
2718
+ return new vt(s, i);
2454
2719
  }
2455
2720
  /**
2456
2721
  * Update the 3D visualization
2457
2722
  * @important DO NOT CALL THIS! Should only be called by queue subject!
2458
2723
  */
2459
- async updateVisualization(t) {
2460
- for (t === null && this.clear(); this.group.children.length > 0; ) {
2461
- const y = this.group.children[0];
2462
- y.geometry && y.geometry.dispose(), y.material && y.material.dispose(), this.group.remove(y);
2724
+ async updateVisualization(e) {
2725
+ for (e === null && this.clear(); this.group.children.length > 0; ) {
2726
+ const p = this.group.children[0];
2727
+ p.geometry && p.geometry.dispose(), p.material && p.material.dispose(), this.group.remove(p);
2463
2728
  }
2464
- const e = this.parseData(t);
2465
- if (e.length === 0) return;
2466
- const { padding: A, lineHeight: s, textSize: i, textColor: o, titleColor: l, width: c } = this.options, r = e.length * s + A * 2, h = this.createBackgroundPanel(r);
2729
+ const t = this.parseData(e);
2730
+ if (t.length === 0) return;
2731
+ const { padding: A, lineHeight: s, textSize: i, textColor: r, titleColor: c, width: a } = this.options, o = t.length * s + A * 2, h = this.createBackgroundPanel(o);
2467
2732
  this.group.add(h);
2468
- const a = r / 2 - A - s / 2;
2469
- for (let y = 0; y < e.length; y++) {
2470
- const x = e[y], B = a - y * s;
2733
+ const l = o / 2 - A - s / 2;
2734
+ for (let p = 0; p < t.length; p++) {
2735
+ const I = t[p], y = l - p * s;
2471
2736
  try {
2472
- const D = ze("TLatex");
2473
- D.fTitle = x.text, D.fTextAlign = 12, D.fTextFont = 2, D.fTitleFont = 2, D.fLabelFont = 2, D.fTextColor = x.isTitle ? l : o, D.fTextSize = x.isTitle ? i + 2 : i;
2474
- const C = await re(D, "p", B * 100, "", "");
2475
- C.scale.set(16e-5, 16e-5, 16e-5), C.position.x = -(c / 2) + A, C.position.y = B, C.position.z = 1e-3, this.group.add(C);
2476
- } catch (D) {
2477
- console.error("Error creating text line:", D);
2737
+ const b = Oe("TLatex");
2738
+ b.fTitle = I.text, b.fTextAlign = 12, b.fTextFont = 2, b.fTitleFont = 2, b.fLabelFont = 2, b.fTextColor = I.isTitle ? c : r, b.fTextSize = I.isTitle ? i + 2 : i;
2739
+ const x = await fe(b, "p", y * 100, "", "");
2740
+ x.scale.set(16e-5, 16e-5, 16e-5), x.position.x = -(a / 2) + A, x.position.y = y, x.position.z = 1e-3, this.group.add(x);
2741
+ } catch (b) {
2742
+ console.error("Error creating text line:", b);
2478
2743
  }
2479
2744
  }
2480
- const u = new H(t.point.x, t.point.y, t.point.z);
2745
+ const u = new D(e.point.x, e.point.y, e.point.z);
2481
2746
  this.camera.worldToLocal(u);
2482
- const d = new H().subVectors(u, this.camera.position).normalize(), p = new H().copy(this.camera.position).addScaledVector(d, 0.1), v = new Bt().setFromObject(this.group), f = new H();
2483
- v.getSize(f);
2484
- const b = f.clone().multiplyScalar(0.5);
2485
- p.add(new H(b.x, b.y, 0)), this.group.position.copy(p), this.camera.add(this.group);
2747
+ const g = new D().subVectors(u, this.camera.position).normalize(), d = new D().copy(this.camera.position).addScaledVector(g, 0.1), w = new Et().setFromObject(this.group), B = new D();
2748
+ w.getSize(B);
2749
+ const M = B.clone().multiplyScalar(0.5);
2750
+ d.add(new D(M.x, M.y, 0)), this.group.position.copy(d), this.camera.add(this.group);
2486
2751
  }
2487
2752
  /**
2488
2753
  * Get the THREE.Group containing the visualization
@@ -2493,22 +2758,22 @@ class yA {
2493
2758
  /**
2494
2759
  * Set position of the info panel
2495
2760
  */
2496
- setPosition(t, e, A) {
2497
- this.group.position.set(t, e, A);
2761
+ setPosition(e, t, A) {
2762
+ this.group.position.set(e, t, A);
2498
2763
  }
2499
2764
  /**
2500
2765
  * Set rotation of the info panel
2501
2766
  */
2502
- setRotation(t, e, A) {
2503
- this.group.rotation.set(t, e, A);
2767
+ setRotation(e, t, A) {
2768
+ this.group.rotation.set(e, t, A);
2504
2769
  }
2505
2770
  /**
2506
2771
  * Clear panel
2507
2772
  */
2508
2773
  clear() {
2509
2774
  for (; this.group.children.length > 0; ) {
2510
- const t = this.group.children[0];
2511
- t.geometry && t.geometry.dispose(), t.material && t.material.dispose(), this.group.remove(t);
2775
+ const e = this.group.children[0];
2776
+ e.geometry && e.geometry.dispose(), e.material && e.material.dispose(), this.group.remove(e);
2512
2777
  }
2513
2778
  }
2514
2779
  /**
@@ -2516,13 +2781,13 @@ class yA {
2516
2781
  */
2517
2782
  dispose() {
2518
2783
  for (this.queueSub.unsubscribe(); this.group.children.length > 0; ) {
2519
- const t = this.group.children[0];
2520
- t.geometry && t.geometry.dispose(), t.material && t.material.dispose(), this.group.remove(t);
2784
+ const e = this.group.children[0];
2785
+ e.geometry && e.geometry.dispose(), e.material && e.material.dispose(), this.group.remove(e);
2521
2786
  }
2522
2787
  }
2523
2788
  }
2524
- class GA {
2525
- constructor(t, e, A) {
2789
+ class $A {
2790
+ constructor(e, t, A) {
2526
2791
  m(this, "histogramGroup");
2527
2792
  m(this, "binInfoComponent");
2528
2793
  m(this, "id");
@@ -2532,10 +2797,10 @@ class GA {
2532
2797
  m(this, "dummyEl");
2533
2798
  m(this, "defaultRaycastHandler");
2534
2799
  m(this, "mouseEvents", []);
2535
- m(this, "color", new X());
2536
- m(this, "colorTarget", new X(65535));
2800
+ m(this, "color", new U());
2801
+ m(this, "colorTarget", new U(65535));
2537
2802
  m(this, "buildPromise");
2538
- this.id = t, this.rootObj = e, this.camera = A, this.histogramGroup = new ue(), this.dummyEl = document.getElementById("dummyDiv" + t), this.dummyEl && document.body.removeChild(this.dummyEl), this.binInfoComponent = new yA(
2803
+ this.id = e, this.rootObj = t, this.camera = A, this.histogramGroup = new be(), this.dummyEl = document.getElementById("dummyDiv" + e), this.dummyEl && document.body.removeChild(this.dummyEl), this.binInfoComponent = new PA(
2539
2804
  this.camera,
2540
2805
  {
2541
2806
  backgroundColor: 3556687,
@@ -2544,11 +2809,11 @@ class GA {
2544
2809
  titleColor: 0
2545
2810
  // ROOT color index
2546
2811
  }
2547
- ), this.dummyEl = document.createElement("div"), this.dummyEl.id = "dummyDiv" + t, document.body.appendChild(this.dummyEl), this.configSub = lt().getObservable().pipe(ct((s) => s.target.id.includes("*") || s.target.id.includes(this.id))).subscribe((s) => {
2812
+ ), this.dummyEl = document.createElement("div"), this.dummyEl.id = "dummyDiv" + e, document.body.appendChild(this.dummyEl), this.configSub = dt().getObservable().pipe(ct((s) => s.target.id.includes("*") || s.target.id.includes(this.id))).subscribe((s) => {
2548
2813
  this.config = { ...s.config };
2549
- const o = this.config.environment.histogramPads.find((l) => l.id === this.id).position;
2550
- this.histogramGroup.position.set(o.x, o.y, o.z);
2551
- }), this.sub = fe().getObservable().pipe(
2814
+ const r = this.config.environment.histogramPads.find((c) => c.id === this.id).position;
2815
+ this.histogramGroup.position.set(r.x, r.y, r.z);
2816
+ }), this.sub = xe().getObservable().pipe(
2552
2817
  ct(
2553
2818
  (s) => s.target.id.includes("*") || s.target.id.includes(this.id)
2554
2819
  )
@@ -2593,34 +2858,34 @@ class GA {
2593
2858
  else s.flag === "removeAll" && (this.keydownEvents = [], this.keyupEvents = [], this.mouseEvents = []);
2594
2859
  }), this.raycastHandler = this.raycastHandler.bind(this), this.mouseClickDefault = this.mouseClickDefault.bind(this), this.mousemoveDefault = this.mousemoveDefault.bind(this), this.shiftMouseClickDefault = this.shiftMouseClickDefault.bind(this), this.mouseDBClickDefault = this.mouseDBClickDefault.bind(this), this.shiftMouseDBClickDefault = this.shiftMouseDBClickDefault.bind(this), this.addEvent("mouseclick", this.mouseClickDefault), this.addEvent("mousemove", this.mousemoveDefault), this.addEvent("shiftmouseclick", this.shiftMouseClickDefault), this.addEvent("mousedbclick", this.mouseDBClickDefault), this.addEvent("shiftmousedbclick", this.shiftMouseDBClickDefault), this.buildPromise = this.renderWithBuild3d();
2595
2860
  }
2596
- updateHistogram(t) {
2597
- this.rootObj = t, this.histogramGroup.clear(), this.buildPromise = this.renderWithBuild3d();
2861
+ updateHistogram(e) {
2862
+ this.rootObj = e, this.histogramGroup.clear(), this.buildPromise = this.renderWithBuild3d();
2598
2863
  }
2599
2864
  renderWithBuild3d() {
2600
- return re(this.rootObj).then((t) => {
2601
- var o;
2602
- const e = (o = this.config.environment.histogramPads.find((l) => l.id === this.id)) == null ? void 0 : o.scale, A = new Bt().setFromObject(t), s = new H();
2603
- A.getSize(s), t.scale.set(
2604
- e.x / s.x,
2605
- e.z / s.y,
2606
- e.y / s.z
2607
- ), t.rotateX(-Math.PI / 2), t.translateZ(-(e.y / 2)), this.histogramGroup.add(t);
2865
+ return fe(this.rootObj).then((e) => {
2866
+ var r;
2867
+ const t = (r = this.config.environment.histogramPads.find((c) => c.id === this.id)) == null ? void 0 : r.scale, A = new Et().setFromObject(e), s = new D();
2868
+ A.getSize(s), e.scale.set(
2869
+ t.x / s.x,
2870
+ t.z / s.y,
2871
+ t.y / s.z
2872
+ ), e.rotateX(-Math.PI / 2), e.translateZ(-(t.y / 2)), this.histogramGroup.add(e);
2608
2873
  const i = this.getInstancedMesh();
2609
2874
  i && (this.defaultRaycastHandler = i.raycast.bind(i), i.raycast = this.raycastHandler.bind(this));
2610
- }).catch((t) => {
2611
- const e = this.config.environment.histogramPads.find((A) => A.id === this.id);
2612
- throw console.log("JSROOT was not able to build object: ", t, e), {
2613
- message: t,
2614
- scale: e == null ? void 0 : e.scale,
2615
- position: e == null ? void 0 : e.position
2875
+ }).catch((e) => {
2876
+ const t = this.config.environment.histogramPads.find((A) => A.id === this.id);
2877
+ throw console.log("JSROOT was not able to build object: ", e, t), {
2878
+ message: e,
2879
+ scale: t == null ? void 0 : t.scale,
2880
+ position: t == null ? void 0 : t.position
2616
2881
  };
2617
2882
  });
2618
2883
  }
2619
- raycastHandler(t, e) {
2620
- this.defaultRaycastHandler(t, e), setTimeout(() => {
2621
- const A = e.filter((a) => a.instanceId !== void 0).sort((a, u) => a.distance - u.distance)[0];
2884
+ raycastHandler(e, t) {
2885
+ this.defaultRaycastHandler(e, t), setTimeout(() => {
2886
+ const A = t.filter((l) => l.instanceId !== void 0).sort((l, u) => l.distance - u.distance)[0];
2622
2887
  if (!A) {
2623
- this.mouseEvents.filter((a) => a.event === "mousemove").forEach((a) => a.function(
2888
+ this.mouseEvents.filter((l) => l.event === "mousemove").forEach((l) => l.function(
2624
2889
  {
2625
2890
  instanceId: void 0,
2626
2891
  object: this.getInstancedMesh()
@@ -2629,18 +2894,18 @@ class GA {
2629
2894
  ));
2630
2895
  return;
2631
2896
  }
2632
- const s = A.object.bins[A.instanceId], i = this.rootObj.fXaxis.fNbins + 2, o = this.rootObj.fYaxis.fNbins + 2, l = {
2897
+ const s = A.object.bins[A.instanceId], i = this.rootObj.fXaxis.fNbins + 2, r = this.rootObj.fYaxis.fNbins + 2, c = {
2633
2898
  x: s % i,
2634
- y: Math.floor(s % (i * o) / i),
2635
- z: Math.floor(s / (i * o))
2636
- }, c = this.getRangeByPosition([l]), r = this.rootObj.fName, h = {
2899
+ y: Math.floor(s % (i * r) / i),
2900
+ z: Math.floor(s / (i * r))
2901
+ }, a = this.getRangeByPosition([c]), o = this.rootObj.fName, h = {
2637
2902
  ...A,
2638
- index: [l],
2639
- coords: [{ ...c, bin: s, name: r }],
2640
- content: this.rootObj.getBinContent(l.x, l.y, l.z),
2641
- error: this.rootObj.getBinError(l.x, l.y, l.z)
2903
+ index: [c],
2904
+ coords: [{ ...a, bin: s, name: o }],
2905
+ content: this.rootObj.getBinContent(c.x, c.y, c.z),
2906
+ error: this.rootObj.getBinError(c.x, c.y, c.z)
2642
2907
  };
2643
- this.mouseEvents.filter((a) => a.event === t._triggerSource).forEach((a) => a.function(h, this)), this.dirtyInstance = A.instanceId;
2908
+ this.mouseEvents.filter((l) => l.event === e._triggerSource).forEach((l) => l.function(h, this)), this.dirtyInstance = A.instanceId;
2644
2909
  }, 0);
2645
2910
  }
2646
2911
  /**
@@ -2649,16 +2914,16 @@ class GA {
2649
2914
  * or keyboard event which has to concise state (keydown or keyup) and keyCode (e.g. Numpad1)
2650
2915
  * @param func Function that is called if event is triggered.
2651
2916
  * */
2652
- addEvent(t, e) {
2653
- (t == null ? void 0 : t.state) === "keydown" ? this.keydownEvents.push({
2654
- key: t.key,
2655
- function: e
2656
- }) : (t == null ? void 0 : t.state) === "keyup" ? this.keyupEvents.push({
2657
- key: t.key,
2658
- function: e
2917
+ addEvent(e, t) {
2918
+ (e == null ? void 0 : e.state) === "keydown" ? this.keydownEvents.push({
2919
+ key: e.key,
2920
+ function: t
2921
+ }) : (e == null ? void 0 : e.state) === "keyup" ? this.keyupEvents.push({
2922
+ key: e.key,
2923
+ function: t
2659
2924
  }) : this.mouseEvents.push({
2660
- event: t,
2661
- function: e
2925
+ event: e,
2926
+ function: t
2662
2927
  });
2663
2928
  }
2664
2929
  /**
@@ -2666,39 +2931,39 @@ class GA {
2666
2931
  * @param event Defines from which event should listening be removed.
2667
2932
  * @param func has to have same reference to one that was added by addEvent.
2668
2933
  * */
2669
- removeEvent(t, e) {
2670
- const A = this.mouseEvents.find((s) => s === e);
2934
+ removeEvent(e, t) {
2935
+ const A = this.mouseEvents.find((s) => s === t);
2671
2936
  A && this.mouseEvents.splice(A, 1);
2672
2937
  }
2673
- mouseClickDefault(t) {
2938
+ mouseClickDefault(e) {
2674
2939
  console.log("mouseclick default");
2675
2940
  }
2676
- mousemoveDefault(t) {
2677
- if (t.instanceId === this.dirtyInstance) return;
2678
- const e = t.object;
2941
+ mousemoveDefault(e) {
2942
+ if (e.instanceId === this.dirtyInstance) return;
2943
+ const t = e.object;
2679
2944
  if (this.dirtyInstance !== void 0) {
2680
- e.getColorAt(this.dirtyInstance, this.color);
2945
+ t.getColorAt(this.dirtyInstance, this.color);
2681
2946
  const A = 0.5;
2682
- this.color.lerp(this.colorTarget, -A / (1 - A)), e.setColorAt(this.dirtyInstance, this.color);
2947
+ this.color.lerp(this.colorTarget, -A / (1 - A)), t.setColorAt(this.dirtyInstance, this.color);
2683
2948
  }
2684
- this.dirtyInstance = t.instanceId, e.getColorAt(this.dirtyInstance, this.color), this.color.lerp(this.colorTarget, 0.5), e.setColorAt(this.dirtyInstance, this.color), e.instanceColor.needsUpdate = !0, this.binInfoComponent.queue.next(t), me().next(t);
2949
+ this.dirtyInstance = e.instanceId, t.getColorAt(this.dirtyInstance, this.color), this.color.lerp(this.colorTarget, 0.5), t.setColorAt(this.dirtyInstance, this.color), t.instanceColor.needsUpdate = !0, this.binInfoComponent.queue.next(e), Ie().next(e);
2685
2950
  }
2686
- shiftMouseClickDefault(t) {
2951
+ shiftMouseClickDefault(e) {
2687
2952
  console.log("shiftMouseClickDefault");
2688
2953
  }
2689
- mouseDBClickDefault(t) {
2954
+ mouseDBClickDefault(e) {
2690
2955
  console.log("mouseDBClickDefault");
2691
2956
  }
2692
- shiftMouseDBClickDefault(t) {
2957
+ shiftMouseDBClickDefault(e) {
2693
2958
  console.log("shiftMouseDBClickDefault");
2694
2959
  }
2695
- getInstancedMesh(t = this.histogramGroup) {
2696
- if (!t) return null;
2697
- if (t.isInstancedMesh === !0)
2698
- return t;
2699
- if (t.children && t.children.length > 0)
2700
- for (const e of t.children) {
2701
- const A = this.getInstancedMesh(e);
2960
+ getInstancedMesh(e = this.histogramGroup) {
2961
+ if (!e) return null;
2962
+ if (e.isInstancedMesh === !0)
2963
+ return e;
2964
+ if (e.children && e.children.length > 0)
2965
+ for (const t of e.children) {
2966
+ const A = this.getInstancedMesh(t);
2702
2967
  if (A) return A;
2703
2968
  }
2704
2969
  return null;
@@ -2708,20 +2973,20 @@ class GA {
2708
2973
  * @param position – should be array with position for each layer.
2709
2974
  * e.g. ([{x: 1, y: 3, z: 2}, {x: 89, 0, 0}])
2710
2975
  * */
2711
- getRangeByPosition(t) {
2712
- const e = ["x", "y", "z"], A = Number.parseInt(this.rootObj._typename.substring(2, 3), 10);
2976
+ getRangeByPosition(e) {
2977
+ const t = ["x", "y", "z"], A = Number.parseInt(this.rootObj._typename.substring(2, 3), 10);
2713
2978
  let s = {};
2714
- if (t[0]) {
2979
+ if (e[0]) {
2715
2980
  for (let i = 0; i < A; i++) {
2716
- const o = e[i], l = this.rootObj[`f${o.toUpperCase()}axis`], c = t[0][o];
2717
- s[o] = {
2718
- min: l.GetBinLowEdge(c),
2719
- max: l.GetBinCenter(c) * 2 - l.GetBinLowEdge(c),
2720
- name: l.fName,
2721
- title: l.fTitle
2981
+ const r = t[i], c = this.rootObj[`f${r.toUpperCase()}axis`], a = e[0][r];
2982
+ s[r] = {
2983
+ min: c.GetBinLowEdge(a),
2984
+ max: c.GetBinCenter(a) * 2 - c.GetBinLowEdge(a),
2985
+ name: c.fName,
2986
+ title: c.fTitle
2722
2987
  };
2723
2988
  }
2724
- s = { ...s, color: new X(0) };
2989
+ s = { ...s, color: new U(0) };
2725
2990
  }
2726
2991
  return s;
2727
2992
  }
@@ -2733,23 +2998,23 @@ class GA {
2733
2998
  }
2734
2999
  }
2735
3000
  export {
2736
- XA as CanvasClass,
2737
- GA as HistogramJsrootClass,
2738
- ie as HistogramPointerClass,
2739
- YA as MobileController,
2740
- EA as NdmvrRaycaster,
2741
- IA as THnPainter,
2742
- me as binInfoSubjectGet,
2743
- Ie as brokerManagerGet,
2744
- ge as canvasSubjectGet,
2745
- lt as configSubjectGet,
2746
- Ge as dispatchSubjectGet,
3001
+ KA as CanvasClass,
3002
+ $A as HistogramJsrootClass,
3003
+ ue as HistogramPointerClass,
3004
+ ZA as MobileController,
3005
+ kA as NdmvrRaycaster,
3006
+ RA as THnPainter,
3007
+ Ie as binInfoSubjectGet,
3008
+ Ve as brokerManagerGet,
3009
+ ye as canvasSubjectGet,
3010
+ dt as configSubjectGet,
3011
+ Ze as dispatchSubjectGet,
2747
3012
  qA as fetchTFile,
2748
- fe as functionSubjectGet,
2749
- PA as getCameraComponent,
2750
- HA as histogramSubjectGet,
2751
- OA as httpRequest,
2752
- MA as initNdmvrAframe,
2753
- de as inputDeviceSubjectGet,
2754
- tt as stateSubjectGet
3013
+ xe as functionSubjectGet,
3014
+ LA as getCameraComponent,
3015
+ VA as histogramSubjectGet,
3016
+ JA as httpRequest,
3017
+ XA as initNdmvrAframe,
3018
+ Me as inputDeviceSubjectGet,
3019
+ k as stateSubjectGet
2755
3020
  };