@bicharts/chart-host 0.6.6 → 0.6.7

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.
@@ -22,8 +22,8 @@ var require_papaparse_min = __commonJS({
22
22
  "function" == typeof define && define.amd ? define([], t) : "object" == typeof module && "undefined" != typeof exports ? module.exports = t() : e.Papa = t();
23
23
  })(exports, function r() {
24
24
  var n = "undefined" != typeof self ? self : "undefined" != typeof window ? window : void 0 !== n ? n : {};
25
- var d2, s = !n.document && !!n.postMessage, a4 = n.IS_PAPA_WORKER || false, o = {}, h3 = 0, v3 = {};
26
- function P5(e) {
25
+ var d2, s = !n.document && !!n.postMessage, a4 = n.IS_PAPA_WORKER || false, o = {}, h3 = 0, v4 = {};
26
+ function P4(e) {
27
27
  return 65279 === e.charCodeAt(0) ? e.slice(1) : e;
28
28
  }
29
29
  function u2(e) {
@@ -37,25 +37,25 @@ var require_papaparse_min = __commonJS({
37
37
  let e4 = this._config.newline;
38
38
  e4 || (r2 = this._config.quoteChar || '"', e4 = this._handle.guessLineEndings(t, r2)), t = [...t.split(e4).slice(i2)].join(e4);
39
39
  }
40
- this.isFirstChunk && q4(this._config.beforeFirstChunk) && void 0 !== (r2 = this._config.beforeFirstChunk(t)) && (t = r2), this.isFirstChunk = false, this._halted = false;
40
+ this.isFirstChunk && q3(this._config.beforeFirstChunk) && void 0 !== (r2 = this._config.beforeFirstChunk(t)) && (t = r2), this.isFirstChunk = false, this._halted = false;
41
41
  var i2 = this._partialLine + t, r2 = (this._partialLine = "", this._handle.parse(i2, this._baseIndex, !this._finished));
42
42
  if (!this._handle.paused() && !this._handle.aborted()) {
43
43
  t = r2.meta.cursor, i2 = (this._finished || (this._partialLine = i2.substring(t - this._baseIndex), this._baseIndex = t), r2 && r2.data && (this._rowCount += r2.data.length), this._finished || this._config.preview && this._rowCount >= this._config.preview);
44
- if (a4) n.postMessage({ results: r2, workerId: v3.WORKER_ID, finished: i2 });
45
- else if (q4(this._config.chunk) && !e2) {
44
+ if (a4) n.postMessage({ results: r2, workerId: v4.WORKER_ID, finished: i2 });
45
+ else if (q3(this._config.chunk) && !e2) {
46
46
  if (this._config.chunk(r2, this._handle), this._handle.paused() || this._handle.aborted()) return void (this._halted = true);
47
47
  this._completeResults = r2 = void 0;
48
48
  }
49
- return this._config.step || this._config.chunk || (this._completeResults.data = this._completeResults.data.concat(r2.data), this._completeResults.errors = this._completeResults.errors.concat(r2.errors), this._completeResults.meta = r2.meta), this._completed || !i2 || !q4(this._config.complete) || r2 && r2.meta.aborted || (this._config.complete(this._completeResults, this._input), this._completed = true), i2 || r2 && r2.meta.paused || this._nextChunk(), r2;
49
+ return this._config.step || this._config.chunk || (this._completeResults.data = this._completeResults.data.concat(r2.data), this._completeResults.errors = this._completeResults.errors.concat(r2.errors), this._completeResults.meta = r2.meta), this._completed || !i2 || !q3(this._config.complete) || r2 && r2.meta.aborted || (this._config.complete(this._completeResults, this._input), this._completed = true), i2 || r2 && r2.meta.paused || this._nextChunk(), r2;
50
50
  }
51
51
  this._halted = true;
52
52
  }, this._sendError = function(e2) {
53
- q4(this._config.error) ? this._config.error(e2) : a4 && this._config.error && n.postMessage({ workerId: v3.WORKER_ID, error: e2, finished: false });
53
+ q3(this._config.error) ? this._config.error(e2) : a4 && this._config.error && n.postMessage({ workerId: v4.WORKER_ID, error: e2, finished: false });
54
54
  };
55
55
  }
56
56
  function f4(e) {
57
57
  var r2;
58
- (e = e || {}).chunkSize || (e.chunkSize = v3.RemoteChunkSize), u2.call(this, e), this._nextChunk = s ? function() {
58
+ (e = e || {}).chunkSize || (e.chunkSize = v4.RemoteChunkSize), u2.call(this, e), this._nextChunk = s ? function() {
59
59
  this._readChunk(), this._chunkLoaded();
60
60
  } : function() {
61
61
  this._readChunk();
@@ -85,7 +85,7 @@ var require_papaparse_min = __commonJS({
85
85
  };
86
86
  }
87
87
  function l(e) {
88
- (e = e || {}).chunkSize || (e.chunkSize = v3.LocalChunkSize), u2.call(this, e);
88
+ (e = e || {}).chunkSize || (e.chunkSize = v4.LocalChunkSize), u2.call(this, e);
89
89
  var i2, r2, n2 = "undefined" != typeof FileReader;
90
90
  this.stream = function(e2) {
91
91
  this._input = e2, r2 = e2.slice || e2.webkitSlice || e2.mozSlice, n2 ? ((i2 = new FileReader()).onload = y5(this._chunkLoaded, this), i2.onerror = y5(this._chunkError, this)) : i2 = new FileReaderSync(), this._nextChunk();
@@ -142,11 +142,11 @@ var require_papaparse_min = __commonJS({
142
142
  return "greedy" === m2.skipEmptyLines ? "" === e2.join("").trim() : 1 === e2.length && 0 === e2[0].length;
143
143
  }
144
144
  function g4() {
145
- if (p4 && a5 && (k4("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + v3.DefaultDelimiter + "'"), a5 = false), m2.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
145
+ if (p4 && a5 && (k3("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + v4.DefaultDelimiter + "'"), a5 = false), m2.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
146
146
  return !y6(e4);
147
147
  })), _3()) {
148
148
  let t4 = function(e4, t5) {
149
- e4 = P5(e4), q4(m2.transformHeader) && (e4 = m2.transformHeader(e4, t5)), c4.push(e4);
149
+ e4 = P4(e4), q3(m2.transformHeader) && (e4 = m2.transformHeader(e4, t5)), c4.push(e4);
150
150
  };
151
151
  var t2 = t4;
152
152
  if (p4) if (Array.isArray(p4.data[0])) {
@@ -164,7 +164,7 @@ var require_papaparse_min = __commonJS({
164
164
  })(t5) ? parseFloat(t5) : d3.test(t5) ? new Date(t5) : "" === t5 ? null : t5) : t5)(n4 = m2.header ? r5 >= c4.length ? "__parsed_extra" : c4[r5] : n4, s4 = m2.transform ? m2.transform(s4, n4) : s4);
165
165
  "__parsed_extra" === n4 ? (i5[n4] = i5[n4] || [], i5[n4].push(s4)) : i5[n4] = s4;
166
166
  }
167
- return m2.header && (r5 > c4.length ? k4("FieldMismatch", "TooManyFields", "Too many fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4) : r5 < c4.length && k4("FieldMismatch", "TooFewFields", "Too few fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4)), i5;
167
+ return m2.header && (r5 > c4.length ? k3("FieldMismatch", "TooManyFields", "Too many fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4) : r5 < c4.length && k3("FieldMismatch", "TooFewFields", "Too few fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4)), i5;
168
168
  }
169
169
  var r4;
170
170
  p4 && (m2.header || m2.dynamicTyping || m2.transform) && (r4 = 1, !p4.data.length || Array.isArray(p4.data[0]) ? (p4.data = p4.data.map(i4), r4 = p4.data.length) : p4.data = i4(p4.data, 0), m2.header && p4.meta && (p4.meta.fields = c4), f5 += r4);
@@ -172,33 +172,33 @@ var require_papaparse_min = __commonJS({
172
172
  function _3() {
173
173
  return m2.header && 0 === c4.length;
174
174
  }
175
- function k4(e2, t2, i4, r4) {
175
+ function k3(e2, t2, i4, r4) {
176
176
  e2 = { type: e2, code: t2, message: i4 };
177
177
  void 0 !== r4 && (e2.row = r4), p4.errors.push(e2);
178
178
  }
179
- q4(m2.step) && (t = m2.step, m2.step = function(e2) {
179
+ q3(m2.step) && (t = m2.step, m2.step = function(e2) {
180
180
  p4 = e2, _3() ? g4() : (g4(), 0 !== p4.data.length && (r2 += e2.data.length, m2.preview && r2 > m2.preview ? s2.abort() : (p4.data = p4.data[0], t(p4, i2))));
181
181
  }), this.parse = function(e2, t2, i4) {
182
- var r4 = m2.quoteChar || '"', r4 = (m2.newline || (m2.newline = this.guessLineEndings(e2, r4)), a5 = false, m2.delimiter ? q4(m2.delimiter) && (m2.delimiter = m2.delimiter(e2), p4.meta.delimiter = m2.delimiter) : ((r4 = ((e4, t4, i5, r5, n4) => {
182
+ var r4 = m2.quoteChar || '"', r4 = (m2.newline || (m2.newline = this.guessLineEndings(e2, r4)), a5 = false, m2.delimiter ? q3(m2.delimiter) && (m2.delimiter = m2.delimiter(e2), p4.meta.delimiter = m2.delimiter) : ((r4 = ((e4, t4, i5, r5, n4) => {
183
183
  var s4, a6, o4, h5;
184
- n4 = n4 || [",", " ", "|", ";", v3.RECORD_SEP, v3.UNIT_SEP];
184
+ n4 = n4 || [",", " ", "|", ";", v4.RECORD_SEP, v4.UNIT_SEP];
185
185
  for (var u5 = 0; u5 < n4.length; u5++) {
186
186
  for (var d4, f6 = n4[u5], l3 = 0, c5 = 0, p5 = 0, g5 = (o4 = void 0, new E4({ comments: r5, delimiter: f6, newline: t4, preview: 10 }).parse(e4)), _4 = 0; _4 < g5.data.length; _4++) i5 && y6(g5.data[_4]) ? p5++ : (d4 = g5.data[_4].length, c5 += d4, void 0 === o4 ? o4 = d4 : 0 < d4 && (l3 += Math.abs(d4 - o4), o4 = d4));
187
187
  0 < g5.data.length && (c5 /= g5.data.length - p5), (void 0 === a6 || l3 <= a6) && (void 0 === h5 || h5 < c5) && 1.99 < c5 && (a6 = l3, s4 = f6, h5 = c5);
188
188
  }
189
189
  return { successful: !!(m2.delimiter = s4), bestDelimiter: s4 };
190
- })(e2, m2.newline, m2.skipEmptyLines, m2.comments, m2.delimitersToGuess)).successful ? m2.delimiter = r4.bestDelimiter : (a5 = true, m2.delimiter = v3.DefaultDelimiter), p4.meta.delimiter = m2.delimiter), b4(m2));
190
+ })(e2, m2.newline, m2.skipEmptyLines, m2.comments, m2.delimitersToGuess)).successful ? m2.delimiter = r4.bestDelimiter : (a5 = true, m2.delimiter = v4.DefaultDelimiter), p4.meta.delimiter = m2.delimiter), b4(m2));
191
191
  return m2.preview && m2.header && r4.preview++, n2 = e2, s2 = new E4(r4), p4 = s2.parse(n2, t2, i4), g4(), l2 ? { meta: { paused: true } } : p4 || { meta: { paused: false } };
192
192
  }, this.paused = function() {
193
193
  return l2;
194
194
  }, this.pause = function() {
195
- l2 = true, s2.abort(), n2 = q4(m2.chunk) ? "" : n2.substring(s2.getCharIndex());
195
+ l2 = true, s2.abort(), n2 = q3(m2.chunk) ? "" : n2.substring(s2.getCharIndex());
196
196
  }, this.resume = function() {
197
197
  i2.streamer._halted ? (l2 = false, i2.streamer.parseChunk(n2, true)) : setTimeout(i2.resume, 3);
198
198
  }, this.aborted = function() {
199
199
  return e;
200
200
  }, this.abort = function() {
201
- e = true, s2.abort(), p4.meta.aborted = true, q4(m2.complete) && m2.complete(p4), n2 = "";
201
+ e = true, s2.abort(), p4.meta.aborted = true, q3(m2.complete) && m2.complete(p4), n2 = "";
202
202
  }, this.guessLineEndings = function(e2, t2) {
203
203
  e2 = e2.substring(0, 1048576);
204
204
  var t2 = new RegExp(U3(t2) + "([^]*?)" + U3(t2), "gm"), i4 = (e2 = e2.replace(t2, "")).split("\r"), t2 = e2.split("\n"), e2 = 1 < t2.length && t2[0].length < i4[0].length;
@@ -211,89 +211,89 @@ var require_papaparse_min = __commonJS({
211
211
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
212
212
  }
213
213
  function E4(C2) {
214
- var S = (C2 = C2 || {}).delimiter, O4 = C2.newline, x3 = C2.comments, I4 = C2.step, A2 = C2.preview, T3 = C2.fastMode, D3 = null, L2 = false, F4 = null == C2.quoteChar ? '"' : C2.quoteChar, j3 = F4;
215
- if (void 0 !== C2.escapeChar && (j3 = C2.escapeChar), ("string" != typeof S || -1 < v3.BAD_DELIMITERS.indexOf(S)) && (S = ","), x3 === S) throw new Error("Comment character same as delimiter");
216
- true === x3 ? x3 = "#" : ("string" != typeof x3 || -1 < v3.BAD_DELIMITERS.indexOf(x3)) && (x3 = false), "\n" !== O4 && "\r" !== O4 && "\r\n" !== O4 && (O4 = "\n");
214
+ var S = (C2 = C2 || {}).delimiter, O3 = C2.newline, x2 = C2.comments, I4 = C2.step, A2 = C2.preview, T4 = C2.fastMode, D4 = null, L2 = false, F3 = null == C2.quoteChar ? '"' : C2.quoteChar, j2 = F3;
215
+ if (void 0 !== C2.escapeChar && (j2 = C2.escapeChar), ("string" != typeof S || -1 < v4.BAD_DELIMITERS.indexOf(S)) && (S = ","), x2 === S) throw new Error("Comment character same as delimiter");
216
+ true === x2 ? x2 = "#" : ("string" != typeof x2 || -1 < v4.BAD_DELIMITERS.indexOf(x2)) && (x2 = false), "\n" !== O3 && "\r" !== O3 && "\r\n" !== O3 && (O3 = "\n");
217
217
  var z4 = 0, M = false;
218
218
  this.parse = function(i2, t, r2) {
219
219
  if ("string" != typeof i2) throw new Error("Input must be a string");
220
- var n2 = i2.length, e = S.length, s2 = O4.length, a5 = x3.length, o2 = q4(I4), h4 = [], u4 = [], d3 = [], f5 = z4 = 0;
221
- if (!i2) return w4();
222
- if (T3 || false !== T3 && -1 === i2.indexOf(F4)) {
223
- for (var l2 = i2.split(O4), c4 = 0; c4 < l2.length; c4++) {
224
- if (d3 = l2[c4], z4 += d3.length, c4 !== l2.length - 1) z4 += O4.length;
225
- else if (r2) return w4();
226
- if (!x3 || d3.substring(0, a5) !== x3) {
220
+ var n2 = i2.length, e = S.length, s2 = O3.length, a5 = x2.length, o2 = q3(I4), h4 = [], u4 = [], d3 = [], f5 = z4 = 0;
221
+ if (!i2) return w3();
222
+ if (T4 || false !== T4 && -1 === i2.indexOf(F3)) {
223
+ for (var l2 = i2.split(O3), c4 = 0; c4 < l2.length; c4++) {
224
+ if (d3 = l2[c4], z4 += d3.length, c4 !== l2.length - 1) z4 += O3.length;
225
+ else if (r2) return w3();
226
+ if (!x2 || d3.substring(0, a5) !== x2) {
227
227
  if (o2) {
228
- if (h4 = [], k4(d3.split(S)), R2(), M) return w4();
229
- } else k4(d3.split(S));
230
- if (A2 && A2 <= c4) return h4 = h4.slice(0, A2), w4(true);
228
+ if (h4 = [], k3(d3.split(S)), R2(), M) return w3();
229
+ } else k3(d3.split(S));
230
+ if (A2 && A2 <= c4) return h4 = h4.slice(0, A2), w3(true);
231
231
  }
232
232
  }
233
- return w4();
233
+ return w3();
234
234
  }
235
- for (var p4 = i2.indexOf(S, z4), g4 = i2.indexOf(O4, z4), _3 = new RegExp(U3(j3) + U3(F4), "g"), m2 = i2.indexOf(F4, z4); ; ) if (i2[z4] === F4) for (m2 = z4, z4++; ; ) {
236
- if (-1 === (m2 = i2.indexOf(F4, m2 + 1))) return r2 || u4.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h4.length, index: z4 }), E5();
237
- if (m2 === n2 - 1) return E5(i2.substring(z4, m2).replace(_3, F4));
238
- if (F4 === j3 && i2[m2 + 1] === j3) m2++;
239
- else if (F4 === j3 || 0 === m2 || i2[m2 - 1] !== j3) {
235
+ for (var p4 = i2.indexOf(S, z4), g4 = i2.indexOf(O3, z4), _3 = new RegExp(U3(j2) + U3(F3), "g"), m2 = i2.indexOf(F3, z4); ; ) if (i2[z4] === F3) for (m2 = z4, z4++; ; ) {
236
+ if (-1 === (m2 = i2.indexOf(F3, m2 + 1))) return r2 || u4.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h4.length, index: z4 }), E5();
237
+ if (m2 === n2 - 1) return E5(i2.substring(z4, m2).replace(_3, F3));
238
+ if (F3 === j2 && i2[m2 + 1] === j2) m2++;
239
+ else if (F3 === j2 || 0 === m2 || i2[m2 - 1] !== j2) {
240
240
  -1 !== p4 && p4 < m2 + 1 && (p4 = i2.indexOf(S, m2 + 1));
241
- var y6 = v4(-1 === (g4 = -1 !== g4 && g4 < m2 + 1 ? i2.indexOf(O4, m2 + 1) : g4) ? p4 : Math.min(p4, g4));
241
+ var y6 = v5(-1 === (g4 = -1 !== g4 && g4 < m2 + 1 ? i2.indexOf(O3, m2 + 1) : g4) ? p4 : Math.min(p4, g4));
242
242
  if (i2.substr(m2 + 1 + y6, e) === S) {
243
- d3.push(i2.substring(z4, m2).replace(_3, F4)), i2[z4 = m2 + 1 + y6 + e] !== F4 && (m2 = i2.indexOf(F4, z4)), p4 = i2.indexOf(S, z4), g4 = i2.indexOf(O4, z4);
243
+ d3.push(i2.substring(z4, m2).replace(_3, F3)), i2[z4 = m2 + 1 + y6 + e] !== F3 && (m2 = i2.indexOf(F3, z4)), p4 = i2.indexOf(S, z4), g4 = i2.indexOf(O3, z4);
244
244
  break;
245
245
  }
246
- y6 = v4(g4);
247
- if (i2.substring(m2 + 1 + y6, m2 + 1 + y6 + s2) === O4) {
248
- if (d3.push(i2.substring(z4, m2).replace(_3, F4)), b5(m2 + 1 + y6 + s2), p4 = i2.indexOf(S, z4), m2 = i2.indexOf(F4, z4), o2 && (R2(), M)) return w4();
249
- if (A2 && h4.length >= A2) return w4(true);
246
+ y6 = v5(g4);
247
+ if (i2.substring(m2 + 1 + y6, m2 + 1 + y6 + s2) === O3) {
248
+ if (d3.push(i2.substring(z4, m2).replace(_3, F3)), b5(m2 + 1 + y6 + s2), p4 = i2.indexOf(S, z4), m2 = i2.indexOf(F3, z4), o2 && (R2(), M)) return w3();
249
+ if (A2 && h4.length >= A2) return w3(true);
250
250
  break;
251
251
  }
252
252
  u4.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row: h4.length, index: z4 }), m2++;
253
253
  }
254
254
  }
255
- else if (x3 && 0 === d3.length && i2.substring(z4, z4 + a5) === x3) {
256
- if (-1 === g4) return w4();
257
- z4 = g4 + s2, g4 = i2.indexOf(O4, z4), p4 = i2.indexOf(S, z4);
255
+ else if (x2 && 0 === d3.length && i2.substring(z4, z4 + a5) === x2) {
256
+ if (-1 === g4) return w3();
257
+ z4 = g4 + s2, g4 = i2.indexOf(O3, z4), p4 = i2.indexOf(S, z4);
258
258
  } else if (-1 !== p4 && (p4 < g4 || -1 === g4)) d3.push(i2.substring(z4, p4)), z4 = p4 + e, p4 = i2.indexOf(S, z4);
259
259
  else {
260
260
  if (-1 === g4) break;
261
- if (d3.push(i2.substring(z4, g4)), b5(g4 + s2), o2 && (R2(), M)) return w4();
262
- if (A2 && h4.length >= A2) return w4(true);
261
+ if (d3.push(i2.substring(z4, g4)), b5(g4 + s2), o2 && (R2(), M)) return w3();
262
+ if (A2 && h4.length >= A2) return w3(true);
263
263
  }
264
264
  return E5();
265
- function k4(e2) {
265
+ function k3(e2) {
266
266
  h4.push(e2), f5 = z4;
267
267
  }
268
- function v4(e2) {
268
+ function v5(e2) {
269
269
  var t2 = 0;
270
270
  return t2 = -1 !== e2 && (e2 = i2.substring(m2 + 1, e2)) && "" === e2.trim() ? e2.length : t2;
271
271
  }
272
272
  function E5(e2) {
273
- return r2 || (void 0 === e2 && (e2 = i2.substring(z4)), d3.push(e2), z4 = n2, k4(d3), o2 && R2()), w4();
273
+ return r2 || (void 0 === e2 && (e2 = i2.substring(z4)), d3.push(e2), z4 = n2, k3(d3), o2 && R2()), w3();
274
274
  }
275
275
  function b5(e2) {
276
- z4 = e2, k4(d3), d3 = [], g4 = i2.indexOf(O4, z4);
276
+ z4 = e2, k3(d3), d3 = [], g4 = i2.indexOf(O3, z4);
277
277
  }
278
- function w4(e2) {
278
+ function w3(e2) {
279
279
  if (C2.header && !t && h4.length && !L2) {
280
280
  var s4 = h4[0], a6 = /* @__PURE__ */ Object.create(null), o4 = new Set(s4);
281
281
  let n4 = false;
282
282
  for (let r4 = 0; r4 < s4.length; r4++) {
283
- let i4 = P5(s4[r4]);
284
- if (a6[i4 = q4(C2.transformHeader) ? C2.transformHeader(i4, r4) : i4]) {
283
+ let i4 = P4(s4[r4]);
284
+ if (a6[i4 = q3(C2.transformHeader) ? C2.transformHeader(i4, r4) : i4]) {
285
285
  let e4, t2 = a6[i4];
286
286
  for (; e4 = i4 + "_" + t2, t2++, o4.has(e4); ) ;
287
- o4.add(e4), s4[r4] = e4, a6[i4]++, n4 = true, (D3 = null === D3 ? {} : D3)[e4] = i4;
287
+ o4.add(e4), s4[r4] = e4, a6[i4]++, n4 = true, (D4 = null === D4 ? {} : D4)[e4] = i4;
288
288
  } else a6[i4] = 1, s4[r4] = i4;
289
289
  o4.add(i4);
290
290
  }
291
291
  n4 && console.warn("Duplicate headers found and renamed."), L2 = true;
292
292
  }
293
- return { data: h4, errors: u4, meta: { delimiter: S, linebreak: O4, aborted: M, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D3 } };
293
+ return { data: h4, errors: u4, meta: { delimiter: S, linebreak: O3, aborted: M, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D4 } };
294
294
  }
295
295
  function R2() {
296
- I4(w4()), h4 = [], u4 = [];
296
+ I4(w3()), h4 = [], u4 = [];
297
297
  }
298
298
  }, this.abort = function() {
299
299
  M = true;
@@ -308,16 +308,16 @@ var require_papaparse_min = __commonJS({
308
308
  var n2 = { abort: function() {
309
309
  r2 = true, _2(t.workerId, { data: [], errors: [], meta: { aborted: true } });
310
310
  }, pause: m, resume: m };
311
- if (q4(i2.userStep)) {
311
+ if (q3(i2.userStep)) {
312
312
  for (var s2 = 0; s2 < t.results.data.length && (i2.userStep({ data: t.results.data[s2], errors: t.results.errors, meta: t.results.meta }, n2), !r2); s2++) ;
313
313
  delete t.results;
314
- } else q4(i2.userChunk) && (i2.userChunk(t.results, n2, t.file), delete t.results);
314
+ } else q3(i2.userChunk) && (i2.userChunk(t.results, n2, t.file), delete t.results);
315
315
  }
316
316
  t.finished && !r2 && _2(t.workerId, t.results);
317
317
  }
318
318
  function _2(e, t) {
319
319
  var i2 = o[e];
320
- q4(i2.userComplete) && i2.userComplete(t), i2.terminate(), delete o[e];
320
+ q3(i2.userComplete) && i2.userComplete(t), i2.terminate(), delete o[e];
321
321
  }
322
322
  function m() {
323
323
  throw new Error("Not implemented.");
@@ -333,24 +333,24 @@ var require_papaparse_min = __commonJS({
333
333
  e.apply(t, arguments);
334
334
  };
335
335
  }
336
- function q4(e) {
336
+ function q3(e) {
337
337
  return "function" == typeof e;
338
338
  }
339
- return v3.parse = function(e, t) {
339
+ return v4.parse = function(e, t) {
340
340
  var i2 = (t = t || {}).dynamicTyping || false;
341
- q4(i2) && (t.dynamicTypingFunction = i2, i2 = {});
342
- if (t.dynamicTyping = i2, t.transform = !!q4(t.transform) && t.transform, !t.worker || !v3.WORKERS_SUPPORTED) return i2 = null, v3.NODE_STREAM_INPUT, "string" == typeof e ? (e = P5(e), i2 = new (t.download ? f4 : c2)(t)) : true === e.readable && q4(e.read) && q4(e.on) ? i2 = new p2(t) : (n.File && e instanceof File || e instanceof Object) && (i2 = new l(t)), i2.stream(e);
341
+ q3(i2) && (t.dynamicTypingFunction = i2, i2 = {});
342
+ if (t.dynamicTyping = i2, t.transform = !!q3(t.transform) && t.transform, !t.worker || !v4.WORKERS_SUPPORTED) return i2 = null, v4.NODE_STREAM_INPUT, "string" == typeof e ? (e = P4(e), i2 = new (t.download ? f4 : c2)(t)) : true === e.readable && q3(e.read) && q3(e.on) ? i2 = new p2(t) : (n.File && e instanceof File || e instanceof Object) && (i2 = new l(t)), i2.stream(e);
343
343
  (i2 = (() => {
344
344
  var e2;
345
- return !!v3.WORKERS_SUPPORTED && (e2 = (() => {
345
+ return !!v4.WORKERS_SUPPORTED && (e2 = (() => {
346
346
  var e4 = n.URL || n.webkitURL || null, t2 = r.toString();
347
- return v3.BLOB_URL || (v3.BLOB_URL = e4.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ", "(", t2, ")();"], { type: "text/javascript" })));
347
+ return v4.BLOB_URL || (v4.BLOB_URL = e4.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ", "(", t2, ")();"], { type: "text/javascript" })));
348
348
  })(), (e2 = new n.Worker(e2)).onmessage = g3, e2.id = h3++, o[e2.id] = e2);
349
- })()).userStep = t.step, i2.userChunk = t.chunk, i2.userComplete = t.complete, i2.userError = t.error, t.step = q4(t.step), t.chunk = q4(t.chunk), t.complete = q4(t.complete), t.error = q4(t.error), delete t.worker, i2.postMessage({ input: e, config: t, workerId: i2.id });
350
- }, v3.unparse = function(e, t) {
349
+ })()).userStep = t.step, i2.userChunk = t.chunk, i2.userComplete = t.complete, i2.userError = t.error, t.step = q3(t.step), t.chunk = q3(t.chunk), t.complete = q3(t.complete), t.error = q3(t.error), delete t.worker, i2.postMessage({ input: e, config: t, workerId: i2.id });
350
+ }, v4.unparse = function(e, t) {
351
351
  var s2 = false, _3 = true, m2 = ",", y6 = "\r\n", a5 = '"', o2 = a5 + a5, i2 = false, r2 = null, h4 = false, u4 = ((() => {
352
352
  if ("object" == typeof t) {
353
- if ("string" != typeof t.delimiter || v3.BAD_DELIMITERS.filter(function(e2) {
353
+ if ("string" != typeof t.delimiter || v4.BAD_DELIMITERS.filter(function(e2) {
354
354
  return -1 !== t.delimiter.indexOf(e2);
355
355
  }).length || (m2 = t.delimiter), "boolean" != typeof t.quotes && "function" != typeof t.quotes && !Array.isArray(t.quotes) || (s2 = t.quotes), "boolean" != typeof t.skipEmptyLines && "string" != typeof t.skipEmptyLines || (i2 = t.skipEmptyLines), "string" == typeof t.newline && (y6 = t.newline), "string" == typeof t.quoteChar && (a5 = t.quoteChar, o2 = a5 + a5), "boolean" == typeof t.header && (_3 = t.header), Array.isArray(t.columns)) {
356
356
  if (0 === t.columns.length) throw new Error("Option columns is empty");
@@ -368,7 +368,7 @@ var require_papaparse_min = __commonJS({
368
368
  function n2(e2, t2, i4) {
369
369
  var r4 = "", n4 = ("string" == typeof e2 && (e2 = JSON.parse(e2)), "string" == typeof t2 && (t2 = JSON.parse(t2)), Array.isArray(e2) && 0 < e2.length), s4 = !Array.isArray(t2[0]);
370
370
  if (n4 && _3) {
371
- for (var a6 = 0; a6 < e2.length; a6++) 0 < a6 && (r4 += m2), r4 += k4(e2[a6], a6);
371
+ for (var a6 = 0; a6 < e2.length; a6++) 0 < a6 && (r4 += m2), r4 += k3(e2[a6], a6);
372
372
  0 < t2.length && (r4 += y6);
373
373
  }
374
374
  for (var o4 = 0; o4 < t2.length; o4++) {
@@ -384,42 +384,42 @@ var require_papaparse_min = __commonJS({
384
384
  for (var p4 = 0; p4 < h5; p4++) {
385
385
  0 < p4 && !d3 && (r4 += m2);
386
386
  var g4 = n4 && s4 ? e2[p4] : p4;
387
- r4 += k4(t2[o4][g4], p4);
387
+ r4 += k3(t2[o4][g4], p4);
388
388
  }
389
389
  o4 < t2.length - 1 && (!i4 || 0 < h5 && !d3) && (r4 += y6);
390
390
  }
391
391
  }
392
392
  return r4;
393
393
  }
394
- function k4(e2, t2) {
394
+ function k3(e2, t2) {
395
395
  var i4, r4, n4;
396
396
  return null == e2 ? "" : e2.constructor === Date ? JSON.stringify(e2).slice(1, 25) : (n4 = false, h4 && "string" == typeof e2 && h4.test(e2) && (e2 = "'" + e2, n4 = true), r4 = (i4 = e2.toString()).replace(u4, o2), (n4 = n4 || true === s2 || "function" == typeof s2 && s2(e2, t2) || Array.isArray(s2) && s2[t2] || ((e4, t4) => {
397
397
  for (var i5 = 0; i5 < t4.length; i5++) if (-1 < e4.indexOf(t4[i5])) return true;
398
398
  return false;
399
- })(r4, v3.BAD_DELIMITERS) || -1 < r4.indexOf(m2) || -1 < i4.indexOf(a5) || " " === r4.charAt(0) || " " === r4.charAt(r4.length - 1)) ? a5 + r4 + a5 : r4);
399
+ })(r4, v4.BAD_DELIMITERS) || -1 < r4.indexOf(m2) || -1 < i4.indexOf(a5) || " " === r4.charAt(0) || " " === r4.charAt(r4.length - 1)) ? a5 + r4 + a5 : r4);
400
400
  }
401
- }, v3.RECORD_SEP = String.fromCharCode(30), v3.UNIT_SEP = String.fromCharCode(31), v3.BYTE_ORDER_MARK = "\uFEFF", v3.BAD_DELIMITERS = ["\r", "\n", '"', v3.BYTE_ORDER_MARK], v3.WORKERS_SUPPORTED = !s && !!n.Worker, v3.NODE_STREAM_INPUT = 1, v3.LocalChunkSize = 10485760, v3.RemoteChunkSize = 5242880, v3.DefaultDelimiter = ",", v3.Parser = E4, v3.ParserHandle = i, v3.NetworkStreamer = f4, v3.FileStreamer = l, v3.StringStreamer = c2, v3.ReadableStreamStreamer = p2, n.jQuery && ((d2 = n.jQuery).fn.parse = function(o2) {
401
+ }, v4.RECORD_SEP = String.fromCharCode(30), v4.UNIT_SEP = String.fromCharCode(31), v4.BYTE_ORDER_MARK = "\uFEFF", v4.BAD_DELIMITERS = ["\r", "\n", '"', v4.BYTE_ORDER_MARK], v4.WORKERS_SUPPORTED = !s && !!n.Worker, v4.NODE_STREAM_INPUT = 1, v4.LocalChunkSize = 10485760, v4.RemoteChunkSize = 5242880, v4.DefaultDelimiter = ",", v4.Parser = E4, v4.ParserHandle = i, v4.NetworkStreamer = f4, v4.FileStreamer = l, v4.StringStreamer = c2, v4.ReadableStreamStreamer = p2, n.jQuery && ((d2 = n.jQuery).fn.parse = function(o2) {
402
402
  var i2 = o2.config || {}, h4 = [];
403
403
  return this.each(function(e2) {
404
404
  if (!("INPUT" === d2(this).prop("tagName").toUpperCase() && "file" === d2(this).attr("type").toLowerCase() && n.FileReader) || !this.files || 0 === this.files.length) return true;
405
405
  for (var t = 0; t < this.files.length; t++) h4.push({ file: this.files[t], inputElem: this, instanceConfig: d2.extend({}, i2) });
406
406
  }), e(), this;
407
407
  function e() {
408
- if (0 === h4.length) q4(o2.complete) && o2.complete();
408
+ if (0 === h4.length) q3(o2.complete) && o2.complete();
409
409
  else {
410
410
  var e2, t, i4, r2, n2 = h4[0];
411
- if (q4(o2.before)) {
411
+ if (q3(o2.before)) {
412
412
  var s2 = o2.before(n2.file, n2.inputElem);
413
413
  if ("object" == typeof s2) {
414
- if ("abort" === s2.action) return e2 = "AbortError", t = n2.file, i4 = n2.inputElem, r2 = s2.reason, void (q4(o2.error) && o2.error({ name: e2 }, t, i4, r2));
414
+ if ("abort" === s2.action) return e2 = "AbortError", t = n2.file, i4 = n2.inputElem, r2 = s2.reason, void (q3(o2.error) && o2.error({ name: e2 }, t, i4, r2));
415
415
  if ("skip" === s2.action) return void u4();
416
416
  "object" == typeof s2.config && (n2.instanceConfig = d2.extend(n2.instanceConfig, s2.config));
417
417
  } else if ("skip" === s2) return void u4();
418
418
  }
419
419
  var a5 = n2.instanceConfig.complete;
420
420
  n2.instanceConfig.complete = function(e4) {
421
- q4(a5) && a5(e4, n2.file, n2.inputElem), u4();
422
- }, v3.parse(n2.file, n2.instanceConfig);
421
+ q3(a5) && a5(e4, n2.file, n2.inputElem), u4();
422
+ }, v4.parse(n2.file, n2.instanceConfig);
423
423
  }
424
424
  }
425
425
  function u4() {
@@ -427,9 +427,9 @@ var require_papaparse_min = __commonJS({
427
427
  }
428
428
  }), a4 && (n.onmessage = function(e) {
429
429
  e = e.data;
430
- void 0 === v3.WORKER_ID && e && (v3.WORKER_ID = e.workerId);
431
- "string" == typeof e.input ? n.postMessage({ workerId: v3.WORKER_ID, results: v3.parse(e.input, e.config), finished: true }) : (n.File && e.input instanceof File || e.input instanceof Object) && (e = v3.parse(e.input, e.config)) && n.postMessage({ workerId: v3.WORKER_ID, results: e, finished: true });
432
- }), (f4.prototype = Object.create(u2.prototype)).constructor = f4, (l.prototype = Object.create(u2.prototype)).constructor = l, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p2.prototype = Object.create(u2.prototype)).constructor = p2, v3;
430
+ void 0 === v4.WORKER_ID && e && (v4.WORKER_ID = e.workerId);
431
+ "string" == typeof e.input ? n.postMessage({ workerId: v4.WORKER_ID, results: v4.parse(e.input, e.config), finished: true }) : (n.File && e.input instanceof File || e.input instanceof Object) && (e = v4.parse(e.input, e.config)) && n.postMessage({ workerId: v4.WORKER_ID, results: e, finished: true });
432
+ }), (f4.prototype = Object.create(u2.prototype)).constructor = f4, (l.prototype = Object.create(u2.prototype)).constructor = l, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p2.prototype = Object.create(u2.prototype)).constructor = p2, v4;
433
433
  });
434
434
  }
435
435
  });
@@ -451,9 +451,9 @@ var CONTAINER_SLOT_UI_STATE = "__lchUiState";
451
451
  var VIEW_ONLY_UI_STATE_KEYS = Object.freeze(["camera", "llmZoom"]);
452
452
  function withoutViewOnlyKeys(bag) {
453
453
  if (!bag || typeof bag !== "object") return bag;
454
- if (!VIEW_ONLY_UI_STATE_KEYS.some((k4) => Object.prototype.hasOwnProperty.call(bag, k4))) return bag;
454
+ if (!VIEW_ONLY_UI_STATE_KEYS.some((k3) => Object.prototype.hasOwnProperty.call(bag, k3))) return bag;
455
455
  const out = { ...bag };
456
- for (const k4 of VIEW_ONLY_UI_STATE_KEYS) delete out[k4];
456
+ for (const k3 of VIEW_ONLY_UI_STATE_KEYS) delete out[k3];
457
457
  return out;
458
458
  }
459
459
  var HOST_CONTAINER_CLASS = "bic-chart-host";
@@ -496,8 +496,8 @@ var MAX_MAP_POINTS_DEFAULT = 2e3;
496
496
 
497
497
  // src/deltaE.ts
498
498
  function linearise(c2) {
499
- const v3 = c2 / 255;
500
- return v3 <= 0.04045 ? v3 / 12.92 : Math.pow((v3 + 0.055) / 1.055, 2.4);
499
+ const v4 = c2 / 255;
500
+ return v4 <= 0.04045 ? v4 / 12.92 : Math.pow((v4 + 0.055) / 1.055, 2.4);
501
501
  }
502
502
  var Xn = 0.95047;
503
503
  var Yn = 1;
@@ -508,11 +508,11 @@ function f(t) {
508
508
  return t > EPS ? Math.cbrt(t) : (KAPPA * t + 16) / 116;
509
509
  }
510
510
  function rgbToLab(r, g3, b4) {
511
- const R2 = linearise(r), G3 = linearise(g3), B3 = linearise(b4);
512
- const X4 = 0.4124564 * R2 + 0.3575761 * G3 + 0.1804375 * B3;
513
- const Y3 = 0.2126729 * R2 + 0.7151522 * G3 + 0.072175 * B3;
514
- const Z3 = 0.0193339 * R2 + 0.119192 * G3 + 0.9503041 * B3;
515
- const fx = f(X4 / Xn), fy = f(Y3 / Yn), fz = f(Z3 / Zn);
511
+ const R2 = linearise(r), G3 = linearise(g3), B4 = linearise(b4);
512
+ const X5 = 0.4124564 * R2 + 0.3575761 * G3 + 0.1804375 * B4;
513
+ const Y4 = 0.2126729 * R2 + 0.7151522 * G3 + 0.072175 * B4;
514
+ const Z4 = 0.0193339 * R2 + 0.119192 * G3 + 0.9503041 * B4;
515
+ const fx = f(X5 / Xn), fy = f(Y4 / Yn), fz = f(Z4 / Zn);
516
516
  return { L: 116 * fy - 16, a: 500 * (fx - fy), b: 200 * (fy - fz) };
517
517
  }
518
518
  function hexToLab(hex2) {
@@ -549,7 +549,7 @@ function deltaE2000(c1, c2) {
549
549
  else if (Math.abs(h1p - h2p) <= 180) hbarp = (h1p + h2p) / 2;
550
550
  else if (h1p + h2p < 360) hbarp = (h1p + h2p + 360) / 2;
551
551
  else hbarp = (h1p + h2p - 360) / 2;
552
- const T3 = 1 - 0.17 * Math.cos((hbarp - 30) * RAD) + 0.24 * Math.cos(2 * hbarp * RAD) + 0.32 * Math.cos((3 * hbarp + 6) * RAD) - 0.2 * Math.cos((4 * hbarp - 63) * RAD);
552
+ const T4 = 1 - 0.17 * Math.cos((hbarp - 30) * RAD) + 0.24 * Math.cos(2 * hbarp * RAD) + 0.32 * Math.cos((3 * hbarp + 6) * RAD) - 0.2 * Math.cos((4 * hbarp - 63) * RAD);
553
553
  const dTheta = 30 * Math.exp(-Math.pow((hbarp - 275) / 25, 2));
554
554
  const Cbarp7 = Math.pow(Cbarp, 7);
555
555
  const RC = 2 * Math.sqrt(Cbarp7 / (Cbarp7 + Math.pow(25, 7)));
@@ -557,7 +557,7 @@ function deltaE2000(c1, c2) {
557
557
  const Lm50 = Math.pow(Lbarp - 50, 2);
558
558
  const SL = 1 + 0.015 * Lm50 / Math.sqrt(20 + Lm50);
559
559
  const SC = 1 + 0.045 * Cbarp;
560
- const SH = 1 + 0.015 * Cbarp * T3;
560
+ const SH = 1 + 0.015 * Cbarp * T4;
561
561
  const tL = dLp / SL, tC = dCp / SC, tH = dHp / SH;
562
562
  return Math.sqrt(tL * tL + tC * tC + tH * tH + RT * tC * tH);
563
563
  }
@@ -567,16 +567,16 @@ function labToHex(lab) {
567
567
  return t32 > EPS ? t32 : (116 * t - 16) / KAPPA;
568
568
  };
569
569
  const fy = (lab.L + 16) / 116, fx = fy + lab.a / 500, fz = fy - lab.b / 200;
570
- const X4 = Xn * finv(fx);
571
- const Y3 = Yn * (lab.L > KAPPA * EPS ? fy * fy * fy : lab.L / KAPPA);
572
- const Z3 = Zn * finv(fz);
570
+ const X5 = Xn * finv(fx);
571
+ const Y4 = Yn * (lab.L > KAPPA * EPS ? fy * fy * fy : lab.L / KAPPA);
572
+ const Z4 = Zn * finv(fz);
573
573
  const lin = [
574
- 3.2404542 * X4 - 1.5371385 * Y3 - 0.4985314 * Z3,
575
- -0.969266 * X4 + 1.8760108 * Y3 + 0.041556 * Z3,
576
- 0.0556434 * X4 - 0.2040259 * Y3 + 1.0572252 * Z3
574
+ 3.2404542 * X5 - 1.5371385 * Y4 - 0.4985314 * Z4,
575
+ -0.969266 * X5 + 1.8760108 * Y4 + 0.041556 * Z4,
576
+ 0.0556434 * X5 - 0.2040259 * Y4 + 1.0572252 * Z4
577
577
  ];
578
- return "#" + lin.map((v3) => {
579
- const c2 = Math.max(0, Math.min(1, v3));
578
+ return "#" + lin.map((v4) => {
579
+ const c2 = Math.max(0, Math.min(1, v4));
580
580
  const g3 = c2 <= 31308e-7 ? 12.92 * c2 : 1.055 * Math.pow(c2, 1 / 2.4) - 0.055;
581
581
  return Math.round(g3 * 255).toString(16).padStart(2, "0");
582
582
  }).join("");
@@ -635,7 +635,7 @@ function cellKey(rgb) {
635
635
  ].join(",");
636
636
  }
637
637
  function hex(rgb) {
638
- return "#" + rgb.map((v3) => Math.max(0, Math.min(255, v3)).toString(16).padStart(2, "0")).join("");
638
+ return "#" + rgb.map((v4) => Math.max(0, Math.min(255, v4)).toString(16).padStart(2, "0")).join("");
639
639
  }
640
640
  function censusColourSpread(container, doc) {
641
641
  if (!container || typeof container.querySelectorAll !== "function") return EMPTY;
@@ -666,10 +666,10 @@ function censusColourSpread(container, doc) {
666
666
  for (const { rgb } of counted) {
667
667
  marks++;
668
668
  distinct.add(rgb.join(","));
669
- const k4 = cellKey(rgb);
670
- const cur = cells.get(k4);
669
+ const k3 = cellKey(rgb);
670
+ const cur = cells.get(k3);
671
671
  if (cur) cur.n++;
672
- else cells.set(k4, { rgb, n: 1 });
672
+ else cells.set(k3, { rgb, n: 1 });
673
673
  }
674
674
  if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
675
675
  const top = [...cells.values()].sort((a4, b4) => b4.n - a4.n).slice(0, MAX_CELLS);
@@ -678,14 +678,14 @@ function censusColourSpread(container, doc) {
678
678
  const d2 = cs.map(() => new Array(cs.length).fill(0));
679
679
  let span = 0, lo = 0, hi = 1;
680
680
  for (let i = 0; i < cs.length; i++) {
681
- for (let j3 = i + 1; j3 < cs.length; j3++) {
682
- const v3 = deltaE2000(cs[i], cs[j3]);
683
- d2[i][j3] = v3;
684
- d2[j3][i] = v3;
685
- if (v3 > span) {
686
- span = v3;
681
+ for (let j2 = i + 1; j2 < cs.length; j2++) {
682
+ const v4 = deltaE2000(cs[i], cs[j2]);
683
+ d2[i][j2] = v4;
684
+ d2[j2][i] = v4;
685
+ if (v4 > span) {
686
+ span = v4;
687
687
  lo = i;
688
- hi = j3;
688
+ hi = j2;
689
689
  }
690
690
  }
691
691
  }
@@ -700,8 +700,8 @@ function censusColourSpread(container, doc) {
700
700
  let crowd = 0;
701
701
  for (let i = 0; i < cs.length; i++) {
702
702
  let n = 0;
703
- for (let j3 = 0; j3 < cs.length; j3++) {
704
- if (i === j3 || d2[i][j3] <= SAME_SHADE_DELTA_E) n += top[j3].n;
703
+ for (let j2 = 0; j2 < cs.length; j2++) {
704
+ if (i === j2 || d2[i][j2] <= SAME_SHADE_DELTA_E) n += top[j2].n;
705
705
  }
706
706
  if (n > crowd) crowd = n;
707
707
  }
@@ -740,7 +740,7 @@ function mixLab(a4, b4, t) {
740
740
  function paintedOver(fg, canvas, alpha) {
741
741
  const f4 = [1, 3, 5].map((i) => parseInt(fg.slice(i, i + 2), 16));
742
742
  const c2 = [1, 3, 5].map((i) => parseInt(canvas.slice(i, i + 2), 16));
743
- const mixed = f4.map((v3, i) => Math.round(v3 * alpha + c2[i] * (1 - alpha))).map((v3) => v3.toString(16).padStart(2, "0"));
743
+ const mixed = f4.map((v4, i) => Math.round(v4 * alpha + c2[i] * (1 - alpha))).map((v4) => v4.toString(16).padStart(2, "0"));
744
744
  return hexToLab("#" + mixed.join(""));
745
745
  }
746
746
  function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity = AUTO_RAMP_DRAWN_OPACITY) {
@@ -748,8 +748,8 @@ function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity
748
748
  const bg = normHex(canvas);
749
749
  if (!lo || !hi || !bg || classes < 2) return NaN;
750
750
  let prev = null, min = Infinity;
751
- for (let k4 = 0; k4 < classes; k4++) {
752
- const painted = paintedOver(labToHex(mixLab(lo, hi, k4 / (classes - 1))), bg, opacity);
751
+ for (let k3 = 0; k3 < classes; k3++) {
752
+ const painted = paintedOver(labToHex(mixLab(lo, hi, k3 / (classes - 1))), bg, opacity);
753
753
  if (prev) min = Math.min(min, deltaE2000(prev, painted));
754
754
  prev = painted;
755
755
  }
@@ -872,20 +872,20 @@ function resolveOptions(p2) {
872
872
  // never reach a chart as a live mode. Both of these are read on EVERY render, so a
873
873
  // reader can change their mind about a cached chart without regenerating it.
874
874
  approximatePositions: (() => {
875
- const v3 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
876
- return v3 === "mark" || v3 === "aggregate" || v3 === "skip" ? v3 : APPROXIMATE_POSITIONS_DEFAULT;
875
+ const v4 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
876
+ return v4 === "mark" || v4 === "aggregate" || v4 === "skip" ? v4 : APPROXIMATE_POSITIONS_DEFAULT;
877
877
  })(),
878
878
  valueAxisBaseline: (() => {
879
- const v3 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
880
- return v3 === "zero" || v3 === "fit" || v3 === "auto" ? v3 : VALUE_AXIS_BASELINE_DEFAULT;
879
+ const v4 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
880
+ return v4 === "zero" || v4 === "fit" || v4 === "auto" ? v4 : VALUE_AXIS_BASELINE_DEFAULT;
881
881
  })(),
882
882
  // Same shape, and the same reason for it: an unrecognised string must never reach a chart
883
883
  // as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
884
884
  // the setting that makes the chart PROVE the grid before it names a period, so a garbled
885
885
  // value withdraws the claim rather than asserting one.
886
886
  seasonalMarkers: (() => {
887
- const v3 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
888
- return v3 === "auto" || v3 === "always" || v3 === "never" ? v3 : SEASONAL_MARKERS_DEFAULT;
887
+ const v4 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
888
+ return v4 === "auto" || v4 === "always" || v4 === "never" ? v4 : SEASONAL_MARKERS_DEFAULT;
889
889
  })(),
890
890
  // ---- animation: booleans, default+clamp numerics, "" default enum ----
891
891
  animAutoPlay: !!p2.animAutoPlay,
@@ -953,12 +953,12 @@ var byAsset = /* @__PURE__ */ new Map();
953
953
  var _na;
954
954
  function geoAssetFor(geoKind) {
955
955
  if (!geoKind) return null;
956
- const k4 = geoKind.toLowerCase();
957
- if (/^country/.test(k4)) return "world";
958
- if (k4 === "north-america") return "world";
959
- if (k4 === "world") return "world";
960
- if (k4 === "us-state-code" || k4 === "us-state-name") return "us-states";
961
- if (k4 === "us-zip5") return "us-zip3";
956
+ const k3 = geoKind.toLowerCase();
957
+ if (/^country/.test(k3)) return "world";
958
+ if (k3 === "north-america") return "world";
959
+ if (k3 === "world") return "world";
960
+ if (k3 === "us-state-code" || k3 === "us-state-name") return "us-states";
961
+ if (k3 === "us-zip5") return "us-zip3";
962
962
  return null;
963
963
  }
964
964
  var _worldBase;
@@ -1461,11 +1461,11 @@ function It(n, s) {
1461
1461
  }
1462
1462
  function Wt(n, s) {
1463
1463
  let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M = [], h3 = 0;
1464
- for (let N4 = 0; N4 < n.length; ++N4) {
1465
- let I4 = Mt(n[N4], s), O4 = I4 !== null && It(I4, s) ? I4 : null;
1466
- if (i[N4] = O4, O4 !== null) h3++;
1464
+ for (let N3 = 0; N3 < n.length; ++N3) {
1465
+ let I4 = Mt(n[N3], s), O3 = I4 !== null && It(I4, s) ? I4 : null;
1466
+ if (i[N3] = O3, O3 !== null) h3++;
1467
1467
  else {
1468
- let d2 = n[N4];
1468
+ let d2 = n[N3];
1469
1469
  if (d2 != null) {
1470
1470
  let p2 = String(d2).trim();
1471
1471
  if (p2.length > 0) {
@@ -1582,147 +1582,147 @@ var Ct = new RegExp([String.raw`\bisMeasure\b`, String.raw`\bdataType\b`, String
1582
1582
 
1583
1583
  // ../shape-core/dist/index.mjs
1584
1584
  /*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
1585
- var w3 = 2;
1586
- var q3 = 400;
1587
- function k3(r) {
1588
- return !!E(r);
1589
- }
1590
- function P4(r) {
1591
- let n = /* @__PURE__ */ new Set();
1592
- for (let t of r) {
1585
+ var z3 = 2;
1586
+ var Y3 = 400;
1587
+ function W2(n) {
1588
+ return !!E(n);
1589
+ }
1590
+ function v3(n) {
1591
+ let e = /* @__PURE__ */ new Set();
1592
+ for (let t of n) {
1593
1593
  if (t == null) continue;
1594
1594
  let i = u(String(t));
1595
- if (!V(i) && !n.has(i) && (n.add(i), n.size >= q3)) break;
1595
+ if (!V(i) && !e.has(i) && (e.add(i), e.size >= Y3)) break;
1596
1596
  }
1597
- return Array.from(n);
1597
+ return Array.from(e);
1598
1598
  }
1599
- function x2(r) {
1600
- let n = P4(r);
1601
- if (n.length === 0 || F3(r) < 95) return false;
1602
- let t = n.filter((c2) => k3(c2) && !Y(c2)).length, i = n.filter((c2) => !k3(c2) && !!Y(c2)).length;
1599
+ function T3(n) {
1600
+ let e = v3(n);
1601
+ if (e.length === 0 || $2(n) < 95) return false;
1602
+ let t = e.filter((c2) => W2(c2) && !Y(c2)).length, i = e.filter((c2) => !W2(c2) && !!Y(c2)).length;
1603
1603
  return t >= 1 && t >= i;
1604
1604
  }
1605
- function V3(r, n) {
1606
- if (!Y(r)) return false;
1607
- let t = E(r);
1608
- return t ? n === "world" ? true : s3.has(t) : false;
1605
+ function Z3(n, e) {
1606
+ if (!Y(n)) return false;
1607
+ let t = E(n);
1608
+ return t ? e === "world" ? true : s3.has(t) : false;
1609
1609
  }
1610
- function F3(r) {
1611
- let n = P4(r);
1612
- if (n.length === 0) return 0;
1610
+ function $2(n) {
1611
+ let e = v3(n);
1612
+ if (e.length === 0) return 0;
1613
1613
  let t = 0;
1614
- for (let i of n) k3(i) && t++;
1615
- return Math.round(t / n.length * 1e3) / 10;
1614
+ for (let i of e) W2(i) && t++;
1615
+ return Math.round(t / e.length * 1e3) / 10;
1616
1616
  }
1617
- function N3(r) {
1618
- let n = P4(r);
1619
- if (n.length === 0) return 0;
1617
+ function D3(n) {
1618
+ let e = v3(n);
1619
+ if (e.length === 0) return 0;
1620
1620
  let t = 0;
1621
- for (let i of n) Y(i) && t++;
1622
- return Math.round(t / n.length * 1e3) / 10;
1621
+ for (let i of e) Y(i) && t++;
1622
+ return Math.round(t / e.length * 1e3) / 10;
1623
1623
  }
1624
- function $2(r) {
1625
- let n = /* @__PURE__ */ new Set();
1626
- for (let t of r) {
1624
+ function V3(n) {
1625
+ let e = /* @__PURE__ */ new Set();
1626
+ for (let t of n) {
1627
1627
  if (t == null) continue;
1628
1628
  let i = String(t).trim();
1629
- if (!V(u(i)) && !n.has(i) && (n.add(i), n.size >= q3)) break;
1629
+ if (!V(u(i)) && !e.has(i) && (e.add(i), e.size >= Y3)) break;
1630
1630
  }
1631
- return Array.from(n);
1631
+ return Array.from(e);
1632
1632
  }
1633
- function z3(r) {
1634
- let n = $2(r);
1635
- if (n.length === 0) return 0;
1633
+ function K4(n) {
1634
+ let e = V3(n);
1635
+ if (e.length === 0) return 0;
1636
1636
  let t = 0;
1637
- for (let i of n) Z(i).length > 0 && t++;
1638
- return Math.round(t / n.length * 1e3) / 10;
1637
+ for (let i of e) Z(i).length > 0 && t++;
1638
+ return Math.round(t / e.length * 1e3) / 10;
1639
1639
  }
1640
- function j2(r, n) {
1641
- return y4(n, rt) ? true : $2(r).some((t) => /^\d{5}(-\d{4})?$/.test(t.replace(/\.0+$/, "")));
1640
+ function X4(n, e) {
1641
+ return y4(e, rt) ? true : V3(n).some((t) => /^\d{5}(-\d{4})?$/.test(t.replace(/\.0+$/, "")));
1642
1642
  }
1643
- function Ut(r, n) {
1644
- let t = P4(r);
1643
+ function jn(n, e) {
1644
+ let t = v3(n);
1645
1645
  if (t.length === 0) return 0;
1646
1646
  let i = 0;
1647
- for (let c2 of t) p3(c2, n) && i++;
1647
+ for (let c2 of t) p3(c2, e) && i++;
1648
1648
  return Math.round(i / t.length * 1e3) / 10;
1649
1649
  }
1650
- function O3(r, n) {
1650
+ function B3(n, e) {
1651
1651
  let t = 0;
1652
- for (let i of P4(r)) n(i) && t++;
1652
+ for (let i of v3(n)) e(i) && t++;
1653
1653
  return t;
1654
1654
  }
1655
- function Bt(r, n) {
1655
+ function qn(n, e) {
1656
1656
  let t = 0;
1657
- for (let i of $2(r)) n(i) && t++;
1657
+ for (let i of V3(n)) e(i) && t++;
1658
1658
  return t;
1659
1659
  }
1660
- function Ht(r, n, t, i, c2) {
1661
- let u2 = [], a4 = [], o = {}, T3 = {}, h3 = new Set(r), m = (e) => n.map((s) => s[e]);
1662
- for (let e of ["city", "country"]) {
1663
- let s = t?.[e];
1664
- s && h3.has(s) && (o[e] = s);
1665
- }
1666
- let Y3 = new Set(c2 ?? r);
1667
- for (let e of ["lat", "lon"]) {
1668
- let s = t?.[e];
1669
- s && Y3.has(s) && (o[e] = s);
1670
- }
1671
- let g3 = t?.zip;
1672
- if (g3 && h3.has(g3)) {
1673
- let e = m(g3), s = z3(e);
1674
- s < 95 ? a4.push(`zip=${g3} (only ${s}% of values read as ZIPs)`) : j2(e, g3) ? o.zip = g3 : a4.push(`zip=${g3} (all values are 3-4 digits with nothing to say they are postal)`);
1675
- }
1676
- let p2 = t?.state;
1677
- if (p2 && h3.has(p2)) {
1678
- let e = m(p2), s = P4(e);
1679
- s.length > 0 && s.every((l) => V3(l, i)) ? a4.push(`state=${p2} (every value is "CA", which is both Canada and California)`) : x2(e) ? (a4.push(`state=${p2} (every value is a country, not a state)`), o.country || (o.country = p2)) : N3(e) < 95 ? a4.push(`state=${p2} (only ${N3(e)}% of values are states/provinces)`) : o.state = p2;
1680
- }
1681
- let y5 = new Set(Object.values(o).filter(Boolean)), R2 = r.filter((e) => !y5.has(e) && !e.startsWith("__"));
1682
- if (!o.state) {
1683
- let e = null;
1684
- for (let s of R2) {
1685
- let l = m(s);
1686
- if (x2(l)) continue;
1687
- let f4 = N3(l);
1688
- if (f4 < 95) continue;
1689
- let L2 = O3(l, (A2) => !!Y(A2)), Q4 = O3(l, (A2) => !!Y(A2) && !V3(A2, i));
1690
- L2 < w3 && Q4 < 1 || (!e || f4 > e.pct) && (e = { name: s, pct: f4 });
1691
- }
1692
- e && (o.state = e.name, y5.add(e.name), u2.push(`state=${e.name} (${e.pct}% states/provinces)`));
1693
- }
1694
- if (!o.zip) for (let e of R2) {
1695
- if (y5.has(e)) continue;
1696
- let s = m(e), l = z3(s);
1697
- if (!(l < 95) && j2(s, e) && !(Bt(s, (f4) => Z(f4).length > 0) < w3)) {
1698
- o.zip = e, y5.add(e), u2.push(`zip=${e} (${l}% ZIP codes)`);
1660
+ function Zn2(n, e, t, i, c2) {
1661
+ let a4 = [], s = [], r = {}, C2 = {}, x2 = new Set(n), d2 = (o) => e.map((u2) => u2[o]);
1662
+ for (let o of ["city", "country"]) {
1663
+ let u2 = t?.[o];
1664
+ u2 && x2.has(u2) && (r[o] = u2);
1665
+ }
1666
+ let re2 = new Set(c2 ?? n);
1667
+ for (let o of ["lat", "lon"]) {
1668
+ let u2 = t?.[o];
1669
+ u2 && re2.has(u2) && (r[o] = u2);
1670
+ }
1671
+ let P4 = t?.zip;
1672
+ if (P4 && x2.has(P4)) {
1673
+ let o = d2(P4), u2 = K4(o);
1674
+ u2 < 95 ? s.push(`zip=${P4} (only ${u2}% of values read as ZIPs)`) : X4(o, P4) ? r.zip = P4 : s.push(`zip=${P4} (all values are 3-4 digits with nothing to say they are postal)`);
1675
+ }
1676
+ let g3 = t?.state;
1677
+ if (g3 && x2.has(g3)) {
1678
+ let o = d2(g3), u2 = v3(o);
1679
+ u2.length > 0 && u2.every((m) => Z3(m, i)) ? s.push(`state=${g3} (every value is "CA", which is both Canada and California)`) : T3(o) ? (s.push(`state=${g3} (every value is a country, not a state)`), r.country || (r.country = g3)) : D3(o) < 95 ? s.push(`state=${g3} (only ${D3(o)}% of values are states/provinces)`) : r.state = g3;
1680
+ }
1681
+ let h3 = new Set(Object.values(r).filter(Boolean)), A2 = n.filter((o) => !h3.has(o) && !o.startsWith("__"));
1682
+ if (!r.state) {
1683
+ let o = null;
1684
+ for (let u2 of A2) {
1685
+ let m = d2(u2);
1686
+ if (T3(m)) continue;
1687
+ let p2 = D3(m);
1688
+ if (p2 < 95) continue;
1689
+ let _2 = B3(m, (N3) => !!Y(N3)), se = B3(m, (N3) => !!Y(N3) && !Z3(N3, i));
1690
+ _2 < z3 && se < 1 || (!o || p2 > o.pct) && (o = { name: u2, pct: p2 });
1691
+ }
1692
+ o && (r.state = o.name, h3.add(o.name), a4.push(`state=${o.name} (${o.pct}% states/provinces)`));
1693
+ }
1694
+ if (!r.zip) for (let o of A2) {
1695
+ if (h3.has(o)) continue;
1696
+ let u2 = d2(o), m = K4(u2);
1697
+ if (!(m < 95) && X4(u2, o) && !(qn(u2, (p2) => Z(p2).length > 0) < z3)) {
1698
+ r.zip = o, h3.add(o), a4.push(`zip=${o} (${m}% ZIP codes)`);
1699
1699
  break;
1700
1700
  }
1701
1701
  }
1702
- let S = o.country;
1703
- if (!S || !x2(m(S))) {
1704
- let e = null;
1705
- for (let s of R2) {
1706
- if (y5.has(s) || !x2(m(s))) continue;
1707
- let l = F3(m(s));
1708
- (!e || l > e.pct) && (e = { name: s, pct: l });
1702
+ let b4 = r.country;
1703
+ if (!b4 || !T3(d2(b4))) {
1704
+ let o = null;
1705
+ for (let u2 of A2) {
1706
+ if (h3.has(u2) || !T3(d2(u2))) continue;
1707
+ let m = $2(d2(u2));
1708
+ (!o || m > o.pct) && (o = { name: u2, pct: m });
1709
1709
  }
1710
- e && (S && (a4.push(`country=${S} (only ${F3(m(S))}% of values are country identifiers; using ${e.name} instead)`), T3.country = S), o.country = e.name, y5.add(e.name), u2.push(`country=${e.name}`));
1710
+ o && (b4 && (s.push(`country=${b4} (only ${$2(d2(b4))}% of values are country identifiers; using ${o.name} instead)`), C2.country = b4), r.country = o.name, h3.add(o.name), a4.push(`country=${o.name}`));
1711
1711
  }
1712
- if (!o.city) {
1713
- let e = null;
1714
- for (let s of R2) {
1715
- if (y5.has(s)) continue;
1716
- let l = m(s), f4 = Ut(l, i);
1717
- f4 < m3 || O3(l, (L2) => p3(L2, i)) < w3 || (!e || f4 > e.pct) && (e = { name: s, pct: f4 });
1712
+ if (!r.city) {
1713
+ let o = null;
1714
+ for (let u2 of A2) {
1715
+ if (h3.has(u2)) continue;
1716
+ let m = d2(u2), p2 = jn(m, i);
1717
+ p2 < m3 || B3(m, (_2) => p3(_2, i)) < z3 || (!o || p2 > o.pct) && (o = { name: u2, pct: p2 });
1718
1718
  }
1719
- e && (o.city = e.name, u2.push(`city=${e.name} (${e.pct}% known cities)`));
1719
+ o && (r.city = o.name, a4.push(`city=${o.name} (${o.pct}% known cities)`));
1720
1720
  }
1721
- let U3 = o.country ? m(o.country) : [], _2 = !!o.country && x2(U3), J3 = _2 ? new Set(U3.map((e) => E(e == null ? null : String(e))).filter(Boolean)).size : 0, B3 = _2 && J3 >= 2, D3 = !!(o.lat && o.lon) && n.some((e) => {
1722
- let s = +String(e[o.lat] ?? "").trim(), l = +String(e[o.lon] ?? "").trim();
1723
- return isFinite(s) && isFinite(l) && s >= -90 && s <= 90 && l >= -180 && l <= 180 && String(e[o.lat] ?? "").trim() !== "" && String(e[o.lon] ?? "").trim() !== "";
1721
+ let U3 = r.country ? d2(r.country) : [], G3 = !!r.country && T3(U3), ie = G3 ? new Set(U3.map((o) => E(o == null ? null : String(o))).filter(Boolean)).size : 0, H3 = G3 && ie >= 2, O3 = !!(r.lat && r.lon) && e.some((o) => {
1722
+ let u2 = +String(o[r.lat] ?? "").trim(), m = +String(o[r.lon] ?? "").trim();
1723
+ return isFinite(u2) && isFinite(m) && u2 >= -90 && u2 <= 90 && m >= -180 && m <= 180 && String(o[r.lat] ?? "").trim() !== "" && String(o[r.lon] ?? "").trim() !== "";
1724
1724
  });
1725
- return o.lat && o.lon && !D3 && a4.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !B3 && !(o.city || o.state || o.zip || D3) && a4.push(_2 ? `country=${o.country} (every row resolves to the same country - nothing to place apart)` : `country=${o.country} (values are not country identifiers)`), { bind: !!(o.city || o.state || o.zip || B3 || D3) ? o : null, backfilled: u2, refused: a4, ...Object.keys(T3).length ? { labelFallback: T3 } : {} };
1725
+ return r.lat && r.lon && !O3 && s.push(`lat/lon=${r.lat}/${r.lon} (no row holds a usable coordinate pair)`), r.country && !H3 && !(r.city || r.state || r.zip || O3) && s.push(G3 ? `country=${r.country} (every row resolves to the same country - nothing to place apart)` : `country=${r.country} (values are not country identifiers)`), { bind: !!(r.city || r.state || r.zip || H3 || O3) ? r : null, backfilled: a4, refused: s, ...Object.keys(C2).length ? { labelFallback: C2 } : {} };
1726
1726
  }
1727
1727
 
1728
1728
  // src/payload.ts
@@ -1737,7 +1737,7 @@ function resolvePointChannel(cols, rowObjs, point) {
1737
1737
  let labelCol;
1738
1738
  if (bind) {
1739
1739
  const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
1740
- const res = Ht(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
1740
+ const res = Zn2(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
1741
1741
  bind = res.bind;
1742
1742
  rolesBackfilled = res.backfilled;
1743
1743
  rolesRefused = res.refused;
@@ -1825,27 +1825,27 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
1825
1825
  const row = rowObjs[r];
1826
1826
  const a4 = new Array(cols.length + extra);
1827
1827
  for (let c2 = 0; c2 < cols.length; c2++) {
1828
- const v3 = row[colNames[c2]];
1829
- if (v3 instanceof Date) {
1830
- a4[c2] = v3.toISOString();
1828
+ const v4 = row[colNames[c2]];
1829
+ if (v4 instanceof Date) {
1830
+ a4[c2] = v4.toISOString();
1831
1831
  } else {
1832
- a4[c2] = v3 ?? null;
1832
+ a4[c2] = v4 ?? null;
1833
1833
  }
1834
1834
  }
1835
- let k4 = cols.length;
1836
- a4[k4++] = r;
1837
- if (geoIso) a4[k4++] = geoIso[r];
1835
+ let k3 = cols.length;
1836
+ a4[k3++] = r;
1837
+ if (geoIso) a4[k3++] = geoIso[r];
1838
1838
  if (pLat && pLon) {
1839
- a4[k4++] = pLat[r];
1840
- a4[k4++] = pLon[r];
1841
- a4[k4++] = pPrec ? pPrec[r] : null;
1839
+ a4[k3++] = pLat[r];
1840
+ a4[k3++] = pLon[r];
1841
+ a4[k3++] = pPrec ? pPrec[r] : null;
1842
1842
  }
1843
1843
  if (dLat && dLon) {
1844
- a4[k4++] = dLat[r];
1845
- a4[k4++] = dLon[r];
1846
- a4[k4++] = dPrec ? dPrec[r] : null;
1844
+ a4[k3++] = dLat[r];
1845
+ a4[k3++] = dLon[r];
1846
+ a4[k3++] = dPrec ? dPrec[r] : null;
1847
1847
  }
1848
- for (const ac of aliasCols) a4[k4++] = a4[ac.from];
1848
+ for (const ac of aliasCols) a4[k3++] = a4[ac.from];
1849
1849
  out[r] = a4;
1850
1850
  }
1851
1851
  const colsOut = [...cols, { name: "__rowIdx__", dataType: "Integer", isMeasure: false, modelDesc: "" }];
@@ -1928,10 +1928,10 @@ function stripJsComments(code) {
1928
1928
  continue;
1929
1929
  }
1930
1930
  if (ch === "/" && next === "/") {
1931
- let j3 = i + 2;
1932
- while (j3 < n && src[j3] !== "\n" && src[j3] !== "\r") j3++;
1931
+ let j2 = i + 2;
1932
+ while (j2 < n && src[j2] !== "\n" && src[j2] !== "\r") j2++;
1933
1933
  out += " ";
1934
- i = j3;
1934
+ i = j2;
1935
1935
  wordOpen = false;
1936
1936
  continue;
1937
1937
  }
@@ -1945,10 +1945,10 @@ function stripJsComments(code) {
1945
1945
  continue;
1946
1946
  }
1947
1947
  if (ch === "'" || ch === '"') {
1948
- let j3 = i + 1;
1949
- while (j3 < n && src[j3] !== ch && src[j3] !== "\n") j3 += src[j3] === "\\" ? 2 : 1;
1950
- out += src.slice(i, Math.min(j3 + 1, n));
1951
- i = j3 + 1;
1948
+ let j2 = i + 1;
1949
+ while (j2 < n && src[j2] !== ch && src[j2] !== "\n") j2 += src[j2] === "\\" ? 2 : 1;
1950
+ out += src.slice(i, Math.min(j2 + 1, n));
1951
+ i = j2 + 1;
1952
1952
  prevSig = ch;
1953
1953
  prevWord = "";
1954
1954
  wordOpen = false;
@@ -1962,23 +1962,23 @@ function stripJsComments(code) {
1962
1962
  continue;
1963
1963
  }
1964
1964
  if (ch === "/" && regexMayFollow()) {
1965
- let j3 = i + 1, inClass = false;
1966
- while (j3 < n && src[j3] !== "\n") {
1967
- const c2 = src[j3];
1965
+ let j2 = i + 1, inClass = false;
1966
+ while (j2 < n && src[j2] !== "\n") {
1967
+ const c2 = src[j2];
1968
1968
  if (c2 === "\\") {
1969
- j3 += 2;
1969
+ j2 += 2;
1970
1970
  continue;
1971
1971
  }
1972
1972
  if (c2 === "[") inClass = true;
1973
1973
  else if (c2 === "]") inClass = false;
1974
1974
  else if (c2 === "/" && !inClass) break;
1975
- j3++;
1975
+ j2++;
1976
1976
  }
1977
- if (j3 < n && src[j3] === "/") {
1978
- j3++;
1979
- while (j3 < n && /[A-Za-z]/.test(src[j3])) j3++;
1980
- out += src.slice(i, j3);
1981
- i = j3;
1977
+ if (j2 < n && src[j2] === "/") {
1978
+ j2++;
1979
+ while (j2 < n && /[A-Za-z]/.test(src[j2])) j2++;
1980
+ out += src.slice(i, j2);
1981
+ i = j2;
1982
1982
  prevSig = "/";
1983
1983
  prevWord = "";
1984
1984
  wordOpen = false;
@@ -2048,26 +2048,26 @@ function createMarkResolver(env) {
2048
2048
  const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
2049
2049
  return s === "transparent" || s === "none" || so <= 0.01;
2050
2050
  };
2051
- const distToPathCenterline = (el, x3, y5) => {
2051
+ const distToPathCenterline = (el, x2, y5) => {
2052
2052
  const L2 = el.getTotalLength();
2053
2053
  if (!(L2 > 0)) return Number.MAX_VALUE;
2054
2054
  const m = el.getScreenCTM();
2055
2055
  if (!m) return Number.MAX_VALUE;
2056
2056
  let best = Number.MAX_VALUE;
2057
- const N4 = 64;
2058
- for (let i = 0; i <= N4; i++) {
2059
- const pt2 = el.getPointAtLength(L2 * i / N4);
2060
- const dx = m.a * pt2.x + m.c * pt2.y + m.e - x3;
2057
+ const N3 = 64;
2058
+ for (let i = 0; i <= N3; i++) {
2059
+ const pt2 = el.getPointAtLength(L2 * i / N3);
2060
+ const dx = m.a * pt2.x + m.c * pt2.y + m.e - x2;
2061
2061
  const dy = m.b * pt2.x + m.d * pt2.y + m.f - y5;
2062
2062
  const d2 = dx * dx + dy * dy;
2063
2063
  if (d2 < best) best = d2;
2064
2064
  }
2065
2065
  return Math.sqrt(best);
2066
2066
  };
2067
- const refineHitCorridor = (mark, x3, y5, sel) => {
2067
+ const refineHitCorridor = (mark, x2, y5, sel) => {
2068
2068
  try {
2069
2069
  if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
2070
- const stack = doc.elementsFromPoint(x3, y5);
2070
+ const stack = doc.elementsFromPoint(x2, y5);
2071
2071
  const candidates = [];
2072
2072
  for (const el of stack) {
2073
2073
  if (!root.contains(el)) continue;
@@ -2081,7 +2081,7 @@ function createMarkResolver(env) {
2081
2081
  let best = mark;
2082
2082
  let bestD = Number.MAX_VALUE;
2083
2083
  for (const el of candidates) {
2084
- const d2 = distToPathCenterline(el, x3, y5);
2084
+ const d2 = distToPathCenterline(el, x2, y5);
2085
2085
  if (d2 < bestD) {
2086
2086
  bestD = d2;
2087
2087
  best = el;
@@ -2118,9 +2118,9 @@ function createMarkResolver(env) {
2118
2118
  }
2119
2119
  return out;
2120
2120
  };
2121
- const penetrateOverlayAt = (x3, y5, sel) => {
2121
+ const penetrateOverlayAt = (x2, y5, sel) => {
2122
2122
  try {
2123
- const stack = doc.elementsFromPoint(x3, y5);
2123
+ const stack = doc.elementsFromPoint(x2, y5);
2124
2124
  for (const el of stack) {
2125
2125
  if (!root.contains(el) || !isElement(el)) continue;
2126
2126
  const cand = el.matches(sel) ? el : el.closest(sel);
@@ -2132,7 +2132,7 @@ function createMarkResolver(env) {
2132
2132
  }
2133
2133
  return null;
2134
2134
  };
2135
- const resolveByGeometry = (x3, y5, sel) => {
2135
+ const resolveByGeometry = (x2, y5, sel) => {
2136
2136
  try {
2137
2137
  const cands = root.querySelectorAll(sel);
2138
2138
  let best = null, bestArea = Number.MAX_VALUE;
@@ -2141,7 +2141,7 @@ function createMarkResolver(env) {
2141
2141
  if (!el.getAttribute("data-row-idx")) continue;
2142
2142
  const r = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
2143
2143
  if (!r || r.width <= 0 || r.height <= 0) continue;
2144
- if (x3 < r.left || x3 > r.right || y5 < r.top || y5 > r.bottom) continue;
2144
+ if (x2 < r.left || x2 > r.right || y5 < r.top || y5 > r.bottom) continue;
2145
2145
  const area = r.width * r.height;
2146
2146
  if (area < bestArea) {
2147
2147
  bestArea = area;
@@ -2338,13 +2338,13 @@ function censusHitBands(container, doc) {
2338
2338
  if (!OPEN_TAGS.has(tag)) continue;
2339
2339
  const cs = styleOf2(el, ownerDoc);
2340
2340
  const open = isUnfilled(attrOrComputed(el, "fill", cs));
2341
- const w4 = widthPx(attrOrComputed(el, "stroke-width", cs) || "1");
2341
+ const w3 = widthPx(attrOrComputed(el, "stroke-width", cs) || "1");
2342
2342
  const geom = String(el.getAttribute?.("d") ?? "") || `${tag}#${String(el.getAttribute?.(ROW_IDX_ATTR) ?? "")}`;
2343
2343
  const inert = String(cs?.pointerEvents ?? el.style?.pointerEvents ?? "") === "none";
2344
- rows.push({ el, geom, w: w4, open, inert });
2345
- if (isFinite(w4)) {
2344
+ rows.push({ el, geom, w: w3, open, inert });
2345
+ if (isFinite(w3)) {
2346
2346
  const prev = widestByGeom.get(geom);
2347
- if (prev === void 0 || w4 > prev) widestByGeom.set(geom, w4);
2347
+ if (prev === void 0 || w3 > prev) widestByGeom.set(geom, w3);
2348
2348
  }
2349
2349
  }
2350
2350
  const out = { ...EMPTY3 };
@@ -2377,9 +2377,9 @@ var VALUE_AXIS_MIN_FIT = 0.8;
2377
2377
  var MIN_AXIS_SPAN_PX = 40;
2378
2378
  var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
2379
2379
  function num(el, name) {
2380
- const v3 = el.getAttribute?.(name);
2381
- if (v3 === null || v3 === void 0 || String(v3).trim() === "") return NaN;
2382
- return parseFloat(String(v3));
2380
+ const v4 = el.getAttribute?.(name);
2381
+ if (v4 === null || v4 === void 0 || String(v4).trim() === "") return NaN;
2382
+ return parseFloat(String(v4));
2383
2383
  }
2384
2384
  function median(xs) {
2385
2385
  if (!xs.length) return NaN;
@@ -2387,23 +2387,23 @@ function median(xs) {
2387
2387
  const m = s.length >> 1;
2388
2388
  return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
2389
2389
  }
2390
- function robustLine(v3, pos) {
2391
- const n = v3.length;
2390
+ function robustLine(v4, pos) {
2391
+ const n = v4.length;
2392
2392
  const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
2393
2393
  const idx = [];
2394
2394
  for (let i = 0; i < n; i += step) idx.push(i);
2395
2395
  const slopes = [];
2396
2396
  for (let p2 = 0; p2 < idx.length; p2++) {
2397
- for (let q4 = p2 + 1; q4 < idx.length; q4++) {
2398
- const dv = v3[idx[q4]] - v3[idx[p2]];
2397
+ for (let q3 = p2 + 1; q3 < idx.length; q3++) {
2398
+ const dv = v4[idx[q3]] - v4[idx[p2]];
2399
2399
  if (Math.abs(dv) < 1e-12) continue;
2400
- slopes.push((pos[idx[q4]] - pos[idx[p2]]) / dv);
2400
+ slopes.push((pos[idx[q3]] - pos[idx[p2]]) / dv);
2401
2401
  }
2402
2402
  }
2403
2403
  if (slopes.length < 3) return null;
2404
2404
  const b4 = median(slopes);
2405
2405
  if (!Number.isFinite(b4) || Math.abs(b4) < 1e-12) return null;
2406
- const a4 = median(pos.map((y5, i) => y5 - b4 * v3[i]));
2406
+ const a4 = median(pos.map((y5, i) => y5 - b4 * v4[i]));
2407
2407
  return Number.isFinite(a4) ? { a: a4, b: b4 } : null;
2408
2408
  }
2409
2409
  function censusValuePlacement(container, data) {
@@ -2421,40 +2421,40 @@ function censusValuePlacement(container, data) {
2421
2421
  if (!/^\d+$/.test(raw)) continue;
2422
2422
  const i = +raw;
2423
2423
  const row = rows[i];
2424
- const x3 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
2425
- if (!row || !Number.isFinite(x3) || !Number.isFinite(y5) || !(r > 0)) continue;
2424
+ const x2 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
2425
+ if (!row || !Number.isFinite(x2) || !Number.isFinite(y5) || !(r > 0)) continue;
2426
2426
  seen.add(i);
2427
- dots.push({ row, x: x3, y: y5, r });
2427
+ dots.push({ row, x: x2, y: y5, r });
2428
2428
  }
2429
2429
  if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
2430
2430
  let best = null;
2431
2431
  for (let c2 = 0; c2 < columns.length; c2++) {
2432
2432
  if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
2433
2433
  const vals = dots.map((d2) => {
2434
- const v3 = d2.row[c2];
2435
- return v3 === null || v3 === void 0 || v3 === "" ? NaN : typeof v3 === "number" ? v3 : Number(v3);
2434
+ const v4 = d2.row[c2];
2435
+ return v4 === null || v4 === void 0 || v4 === "" ? NaN : typeof v4 === "number" ? v4 : Number(v4);
2436
2436
  });
2437
2437
  const finite = vals.filter(Number.isFinite);
2438
2438
  if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
2439
- const logs = finite.every((v3) => v3 > 0) ? [false, true] : [false];
2439
+ const logs = finite.every((v4) => v4 > 0) ? [false, true] : [false];
2440
2440
  for (const log of logs) {
2441
2441
  for (const axis of ["x", "y"]) {
2442
2442
  const keep = [];
2443
- const v3 = [], pos = [];
2444
- dots.forEach((d2, k4) => {
2445
- if (!Number.isFinite(vals[k4])) return;
2446
- keep.push(k4);
2447
- v3.push(log ? Math.log10(vals[k4]) : vals[k4]);
2443
+ const v4 = [], pos = [];
2444
+ dots.forEach((d2, k3) => {
2445
+ if (!Number.isFinite(vals[k3])) return;
2446
+ keep.push(k3);
2447
+ v4.push(log ? Math.log10(vals[k3]) : vals[k3]);
2448
2448
  pos.push(axis === "x" ? d2.x : d2.y);
2449
2449
  });
2450
- const line = robustLine(v3, pos);
2450
+ const line = robustLine(v4, pos);
2451
2451
  if (!line) continue;
2452
2452
  const lo = Math.min(...pos), hi = Math.max(...pos);
2453
2453
  if (hi - lo < MIN_AXIS_SPAN_PX) continue;
2454
2454
  const mean = pos.reduce((s, p2) => s + p2, 0) / pos.length;
2455
2455
  let ssRes = 0, ssTot = 0;
2456
- const res = pos.map((p2, k4) => {
2457
- const e = p2 - (line.a + line.b * v3[k4]);
2456
+ const res = pos.map((p2, k3) => {
2457
+ const e = p2 - (line.a + line.b * v4[k3]);
2458
2458
  ssRes += e * e;
2459
2459
  ssTot += (p2 - mean) ** 2;
2460
2460
  return e;
@@ -2463,8 +2463,8 @@ function censusValuePlacement(container, data) {
2463
2463
  const fit = 1 - ssRes / ssTot;
2464
2464
  if (fit >= VALUE_AXIS_MIN_FIT && (!best || fit > best.fit)) {
2465
2465
  const full = new Array(dots.length).fill(NaN);
2466
- keep.forEach((k4, j3) => {
2467
- full[k4] = res[j3];
2466
+ keep.forEach((k3, j2) => {
2467
+ full[k3] = res[j2];
2468
2468
  });
2469
2469
  best = { col: c2, axis, fit, res: full, log };
2470
2470
  }
@@ -2474,8 +2474,8 @@ function censusValuePlacement(container, data) {
2474
2474
  if (!best) return EMPTY4;
2475
2475
  let off = 0, measured = 0;
2476
2476
  const radii = [];
2477
- dots.forEach((d2, k4) => {
2478
- const e = best.res[k4];
2477
+ dots.forEach((d2, k3) => {
2478
+ const e = best.res[k3];
2479
2479
  if (!Number.isFinite(e)) return;
2480
2480
  measured++;
2481
2481
  const inRadii = Math.abs(e) / Math.max(d2.r, 1);
@@ -2515,12 +2515,12 @@ function contentExtentOf(boxes) {
2515
2515
  if (usable.length === 0) return { w: 0, h: 0, source: "none" };
2516
2516
  const inFlow = usable.filter((b4) => !b4.floating);
2517
2517
  const counted = inFlow.length > 0 ? inFlow : usable;
2518
- let w4 = 0, h3 = 0;
2518
+ let w3 = 0, h3 = 0;
2519
2519
  for (const b4 of counted) {
2520
- if (b4.right > w4) w4 = b4.right;
2520
+ if (b4.right > w3) w3 = b4.right;
2521
2521
  if (b4.bottom > h3) h3 = b4.bottom;
2522
2522
  }
2523
- return { w: w4, h: h3, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
2523
+ return { w: w3, h: h3, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
2524
2524
  }
2525
2525
  function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
2526
2526
  return {
@@ -2530,8 +2530,8 @@ function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL
2530
2530
  }
2531
2531
  var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
2532
2532
  var PHANTOM_FRACTION = 0.95;
2533
- function isPhantomBox(w4, h3, refW, refH) {
2534
- return w4 > refW * PHANTOM_FRACTION || h3 > refH * PHANTOM_FRACTION;
2533
+ function isPhantomBox(w3, h3, refW, refH) {
2534
+ return w3 > refW * PHANTOM_FRACTION || h3 > refH * PHANTOM_FRACTION;
2535
2535
  }
2536
2536
  var MAX_FRAME_GROW_FACTOR = 20;
2537
2537
  function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
@@ -2830,8 +2830,8 @@ function pinScrolledAxis(container, svg) {
2830
2830
  }
2831
2831
  const pinSvg = doc.createElementNS(SVG_NS2, "svg");
2832
2832
  for (const a4 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
2833
- const v3 = svg.getAttribute(a4);
2834
- if (v3) pinSvg.setAttribute(a4, v3);
2833
+ const v4 = svg.getAttribute(a4);
2834
+ if (v4) pinSvg.setAttribute(a4, v4);
2835
2835
  }
2836
2836
  const styles = svg.querySelectorAll("style");
2837
2837
  for (let i = 0; i < styles.length; i++) pinSvg.appendChild(styles[i].cloneNode(true));
@@ -3050,8 +3050,8 @@ var NAMED = {
3050
3050
  };
3051
3051
  function toRGBA(c2) {
3052
3052
  if (typeof c2 !== "string") return null;
3053
- const k4 = c2.trim().toLowerCase();
3054
- if (k4 in NAMED) return NAMED[k4];
3053
+ const k3 = c2.trim().toLowerCase();
3054
+ if (k3 in NAMED) return NAMED[k3];
3055
3055
  return parseRGBA(c2);
3056
3056
  }
3057
3057
  function compositeOver(fg, bg) {
@@ -3063,8 +3063,8 @@ function compositeOver(fg, bg) {
3063
3063
  ];
3064
3064
  }
3065
3065
  function relativeLuminance(rgb) {
3066
- const lin = rgb.map((v3) => {
3067
- const s = v3 / 255;
3066
+ const lin = rgb.map((v4) => {
3067
+ const s = v4 / 255;
3068
3068
  return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
3069
3069
  });
3070
3070
  return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
@@ -3101,20 +3101,20 @@ var GLYPH_SAMPLE_N = 3;
3101
3101
  function glyphSampleGrid(box, n = GLYPH_SAMPLE_N) {
3102
3102
  const out = [];
3103
3103
  if (!box || !(box.width > 0) || !(box.height > 0) || !(n >= 1)) return out;
3104
- const k4 = Math.floor(n);
3105
- for (let i = 0; i < k4; i++) {
3106
- for (let j3 = 0; j3 < k4; j3++) {
3104
+ const k3 = Math.floor(n);
3105
+ for (let i = 0; i < k3; i++) {
3106
+ for (let j2 = 0; j2 < k3; j2++) {
3107
3107
  out.push({
3108
- x: box.left + box.width * (i + 0.5) / k4,
3109
- y: box.top + box.height * (j3 + 0.5) / k4
3108
+ x: box.left + box.width * (i + 0.5) / k3,
3109
+ y: box.top + box.height * (j2 + 0.5) / k3
3110
3110
  });
3111
3111
  }
3112
3112
  }
3113
3113
  return out;
3114
3114
  }
3115
- function clamp01(v3) {
3116
- if (typeof v3 !== "number" || !isFinite(v3)) return 1;
3117
- return Math.max(0, Math.min(1, v3));
3115
+ function clamp01(v4) {
3116
+ if (typeof v4 !== "number" || !isFinite(v4)) return 1;
3117
+ return Math.max(0, Math.min(1, v4));
3118
3118
  }
3119
3119
  function hexToRGB(hex2) {
3120
3120
  const p2 = toRGBA(hex2);
@@ -3230,31 +3230,31 @@ function applyLabelContrast(container, opts = {}) {
3230
3230
  const glyphArea = tr.width * tr.height;
3231
3231
  const txRoot = paintRoot(tx, container);
3232
3232
  let over = 0;
3233
- const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x3) => {
3234
- if (!(x3.ov > 0)) return false;
3235
- if (drawnBeneath(x3.mk, tx, txRoot)) return true;
3236
- if (effAlpha(x3.mk) >= PILL_MIN_ALPHA) over++;
3233
+ const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x2) => {
3234
+ if (!(x2.ov > 0)) return false;
3235
+ if (drawnBeneath(x2.mk, tx, txRoot)) return true;
3236
+ if (effAlpha(x2.mk) >= PILL_MIN_ALPHA) over++;
3237
3237
  return false;
3238
3238
  });
3239
3239
  if (over > 0) report.paintedOver++;
3240
3240
  const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
3241
3241
  const painted = pts.map(() => false);
3242
3242
  let unmeasured = 0;
3243
- const under = boxed.map((x3) => {
3244
- const mask = backedSamples(x3.mk.el, pts);
3243
+ const under = boxed.map((x2) => {
3244
+ const mask = backedSamples(x2.mk.el, pts);
3245
3245
  if (mask === null) {
3246
3246
  unmeasured++;
3247
- return x3;
3247
+ return x2;
3248
3248
  }
3249
3249
  let inside = 0;
3250
- const paints = effAlpha(x3.mk) >= PILL_MIN_ALPHA;
3250
+ const paints = effAlpha(x2.mk) >= PILL_MIN_ALPHA;
3251
3251
  for (let i = 0; i < mask.length; i++) {
3252
3252
  if (!mask[i]) continue;
3253
3253
  inside++;
3254
3254
  if (paints) painted[i] = true;
3255
3255
  }
3256
- return { mk: x3.mk, ov: glyphArea * (inside / mask.length) };
3257
- }).filter((x3) => x3.ov > 0);
3256
+ return { mk: x2.mk, ov: glyphArea * (inside / mask.length) };
3257
+ }).filter((x2) => x2.ov > 0);
3258
3258
  if (under.length === 0 && boxed.length > 0) report.offFill++;
3259
3259
  if (under.length === 0) continue;
3260
3260
  if (unmeasured === 0 && pts.length > 0) {
@@ -3266,10 +3266,10 @@ function applyLabelContrast(container, opts = {}) {
3266
3266
  }
3267
3267
  }
3268
3268
  report.scanned++;
3269
- const opaqueUnder = under.filter((x3) => effAlpha(x3.mk) >= PILL_OPAQUE_ALPHA);
3269
+ const opaqueUnder = under.filter((x2) => effAlpha(x2.mk) >= PILL_OPAQUE_ALPHA);
3270
3270
  const cellEntry = (opaqueUnder.length ? opaqueUnder : under).reduce((a4, b4) => b4.ov > a4.ov || b4.ov === a4.ov && b4.mk.ord > a4.mk.ord ? b4 : a4);
3271
3271
  const cell = cellEntry.mk;
3272
- const pill = under.find((x3) => x3.mk !== cell && isPillBackdropAlpha(effAlpha(x3.mk)) && x3.mk.ord > cell.ord && pillBacksGlyph(x3.ov, glyphArea))?.mk;
3272
+ const pill = under.find((x2) => x2.mk !== cell && isPillBackdropAlpha(effAlpha(x2.mk)) && x2.mk.ord > cell.ord && pillBacksGlyph(x2.ov, glyphArea))?.mk;
3273
3273
  const cellRGBA = toRGBA(cell.fill);
3274
3274
  let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
3275
3275
  if (pill) {
@@ -3321,7 +3321,7 @@ function sessionViewStateProvider(container) {
3321
3321
  load: () => store,
3322
3322
  save: (next) => {
3323
3323
  if (!next || typeof next !== "object") return;
3324
- for (const k4 of Object.keys(store)) delete store[k4];
3324
+ for (const k3 of Object.keys(store)) delete store[k3];
3325
3325
  Object.assign(store, next);
3326
3326
  }
3327
3327
  };
@@ -3330,7 +3330,7 @@ function noopViewStateProvider() {
3330
3330
  return { load: () => ({}), save: () => {
3331
3331
  } };
3332
3332
  }
3333
- var parseRowIdxs = (s) => (s || "").split(",").map((x3) => parseInt(x3, 10)).filter((n) => Number.isFinite(n));
3333
+ var parseRowIdxs = (s) => (s || "").split(",").map((x2) => parseInt(x2, 10)).filter((n) => Number.isFinite(n));
3334
3334
  function assembleD3(base, ...plugins) {
3335
3335
  return Object.assign({}, base, ...plugins);
3336
3336
  }
@@ -3424,7 +3424,7 @@ function compileRenderFn(code, win, doc, d3) {
3424
3424
  return fn2;
3425
3425
  }
3426
3426
  var ASYNC_RENDER_TIMEOUT_MS = 15e3;
3427
- var isThenable = (v3) => !!v3 && (typeof v3 === "object" || typeof v3 === "function") && typeof v3.then === "function";
3427
+ var isThenable = (v4) => !!v4 && (typeof v4 === "object" || typeof v4 === "function") && typeof v4.then === "function";
3428
3428
  function createChartHost(container, config) {
3429
3429
  const doc = container.ownerDocument;
3430
3430
  const win = doc?.defaultView ?? globalThis;
@@ -3432,7 +3432,7 @@ function createChartHost(container, config) {
3432
3432
  let data = config.data;
3433
3433
  {
3434
3434
  const stamped = config.data?.meta?.hostContract;
3435
- const major = (v3) => (v3 || "").split(".")[0];
3435
+ const major = (v4) => (v4 || "").split(".")[0];
3436
3436
  if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
3437
3437
  try {
3438
3438
  (win?.console ?? console)?.warn(