@bicharts/chart-host 0.5.118 → 0.5.119

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 = {}, h4 = 0, v3 = {};
26
- function P4(e) {
25
+ var d2, s = !n.document && !!n.postMessage, a4 = n.IS_PAPA_WORKER || false, o = {}, h3 = 0, v2 = {};
26
+ function P2(e) {
27
27
  return 65279 === e.charCodeAt(0) ? e.slice(1) : e;
28
28
  }
29
29
  function u2(e) {
@@ -41,7 +41,7 @@ var require_papaparse_min = __commonJS({
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 });
44
+ if (a4) n.postMessage({ results: r2, workerId: v2.WORKER_ID, finished: i2 });
45
45
  else if (q4(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;
@@ -50,12 +50,12 @@ var require_papaparse_min = __commonJS({
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
+ q4(this._config.error) ? this._config.error(e2) : a4 && this._config.error && n.postMessage({ workerId: v2.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 = v2.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 = v2.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();
@@ -137,20 +137,20 @@ var require_papaparse_min = __commonJS({
137
137
  }, this);
138
138
  }
139
139
  function i(m4) {
140
- var n2, s2, a5, t, o2 = Math.pow(2, 53), h5 = -o2, u4 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, d3 = /^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/, i2 = this, r2 = 0, f5 = 0, l2 = false, e = false, c4 = [], p4 = { data: [], errors: [], meta: {} };
140
+ var n2, s2, a5, t, o2 = Math.pow(2, 53), h4 = -o2, u4 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, d3 = /^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/, i2 = this, r2 = 0, f5 = 0, l2 = false, e = false, c4 = [], p4 = { data: [], errors: [], meta: {} };
141
141
  function y6(e2) {
142
142
  return "greedy" === m4.skipEmptyLines ? "" === e2.join("").trim() : 1 === e2.length && 0 === e2[0].length;
143
143
  }
144
144
  function g4() {
145
- if (p4 && a5 && (k2("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + v3.DefaultDelimiter + "'"), a5 = false), m4.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
145
+ if (p4 && a5 && (k3("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + v2.DefaultDelimiter + "'"), a5 = false), m4.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
146
146
  return !y6(e4);
147
- })), _3()) {
147
+ })), _4()) {
148
148
  let t4 = function(e4, t5) {
149
- e4 = P4(e4), q4(m4.transformHeader) && (e4 = m4.transformHeader(e4, t5)), c4.push(e4);
149
+ e4 = P2(e4), q4(m4.transformHeader) && (e4 = m4.transformHeader(e4, t5)), c4.push(e4);
150
150
  };
151
151
  var t2 = t4;
152
152
  if (p4) if (Array.isArray(p4.data[0])) {
153
- for (var e2 = 0; _3() && e2 < p4.data.length; e2++) p4.data[e2].forEach(t4);
153
+ for (var e2 = 0; _4() && e2 < p4.data.length; e2++) p4.data[e2].forEach(t4);
154
154
  p4.data.splice(0, 1);
155
155
  } else p4.data.forEach(t4);
156
156
  }
@@ -159,35 +159,35 @@ var require_papaparse_min = __commonJS({
159
159
  var n4 = r5, s4 = e4[r5], s4 = ((e5, t5) => ((e6) => (m4.dynamicTypingFunction && void 0 === m4.dynamicTyping[e6] && (m4.dynamicTyping[e6] = m4.dynamicTypingFunction(e6)), true === (m4.dynamicTyping[e6] || m4.dynamicTyping)))(e5) ? "true" === t5 || "TRUE" === t5 || "false" !== t5 && "FALSE" !== t5 && (((e6) => {
160
160
  if (u4.test(e6)) {
161
161
  e6 = parseFloat(e6);
162
- if (h5 < e6 && e6 < o2) return 1;
162
+ if (h4 < e6 && e6 < o2) return 1;
163
163
  }
164
164
  })(t5) ? parseFloat(t5) : d3.test(t5) ? new Date(t5) : "" === t5 ? null : t5) : t5)(n4 = m4.header ? r5 >= c4.length ? "__parsed_extra" : c4[r5] : n4, s4 = m4.transform ? m4.transform(s4, n4) : s4);
165
165
  "__parsed_extra" === n4 ? (i5[n4] = i5[n4] || [], i5[n4].push(s4)) : i5[n4] = s4;
166
166
  }
167
- return m4.header && (r5 > c4.length ? k2("FieldMismatch", "TooManyFields", "Too many fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4) : r5 < c4.length && k2("FieldMismatch", "TooFewFields", "Too few fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4)), i5;
167
+ return m4.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 && (m4.header || m4.dynamicTyping || m4.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), m4.header && p4.meta && (p4.meta.fields = c4), f5 += r4);
171
171
  }
172
- function _3() {
172
+ function _4() {
173
173
  return m4.header && 0 === c4.length;
174
174
  }
175
- function k2(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
179
  q4(m4.step) && (t = m4.step, m4.step = function(e2) {
180
- p4 = e2, _3() ? g4() : (g4(), 0 !== p4.data.length && (r2 += e2.data.length, m4.preview && r2 > m4.preview ? s2.abort() : (p4.data = p4.data[0], t(p4, i2))));
180
+ p4 = e2, _4() ? g4() : (g4(), 0 !== p4.data.length && (r2 += e2.data.length, m4.preview && r2 > m4.preview ? s2.abort() : (p4.data = p4.data[0], t(p4, i2))));
181
181
  }), this.parse = function(e2, t2, i4) {
182
182
  var r4 = m4.quoteChar || '"', r4 = (m4.newline || (m4.newline = this.guessLineEndings(e2, r4)), a5 = false, m4.delimiter ? q4(m4.delimiter) && (m4.delimiter = m4.delimiter(e2), p4.meta.delimiter = m4.delimiter) : ((r4 = ((e4, t4, i5, r5, n4) => {
183
- var s4, a6, o4, h6;
184
- n4 = n4 || [",", " ", "|", ";", v3.RECORD_SEP, v3.UNIT_SEP];
183
+ var s4, a6, o4, h5;
184
+ n4 = n4 || [",", " ", "|", ";", v2.RECORD_SEP, v2.UNIT_SEP];
185
185
  for (var u5 = 0; u5 < n4.length; u5++) {
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
- 0 < g5.data.length && (c5 /= g5.data.length - p5), (void 0 === a6 || l3 <= a6) && (void 0 === h6 || h6 < c5) && 1.99 < c5 && (a6 = l3, s4 = f6, h6 = c5);
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)), _5 = 0; _5 < g5.data.length; _5++) i5 && y6(g5.data[_5]) ? p5++ : (d4 = g5.data[_5].length, c5 += d4, void 0 === o4 ? o4 = d4 : 0 < d4 && (l3 += Math.abs(d4 - o4), o4 = d4));
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: !!(m4.delimiter = s4), bestDelimiter: s4 };
190
- })(e2, m4.newline, m4.skipEmptyLines, m4.comments, m4.delimitersToGuess)).successful ? m4.delimiter = r4.bestDelimiter : (a5 = true, m4.delimiter = v3.DefaultDelimiter), p4.meta.delimiter = m4.delimiter), b4(m4));
190
+ })(e2, m4.newline, m4.skipEmptyLines, m4.comments, m4.delimitersToGuess)).successful ? m4.delimiter = r4.bestDelimiter : (a5 = true, m4.delimiter = v2.DefaultDelimiter), p4.meta.delimiter = m4.delimiter), b4(m4));
191
191
  return m4.preview && m4.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;
@@ -211,89 +211,89 @@ var require_papaparse_min = __commonJS({
211
211
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
212
212
  }
213
213
  function E4(C) {
214
- var S = (C = C || {}).delimiter, O2 = C.newline, x3 = C.comments, I2 = C.step, A = C.preview, T3 = C.fastMode, D4 = null, L2 = false, F4 = null == C.quoteChar ? '"' : C.quoteChar, j2 = F4;
215
- if (void 0 !== C.escapeChar && (j2 = C.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" !== O2 && "\r" !== O2 && "\r\n" !== O2 && (O2 = "\n");
214
+ var S = (C = C || {}).delimiter, O3 = C.newline, x4 = C.comments, I2 = C.step, A2 = C.preview, T3 = C.fastMode, D3 = null, L2 = false, F3 = null == C.quoteChar ? '"' : C.quoteChar, j3 = F3;
215
+ if (void 0 !== C.escapeChar && (j3 = C.escapeChar), ("string" != typeof S || -1 < v2.BAD_DELIMITERS.indexOf(S)) && (S = ","), x4 === S) throw new Error("Comment character same as delimiter");
216
+ true === x4 ? x4 = "#" : ("string" != typeof x4 || -1 < v2.BAD_DELIMITERS.indexOf(x4)) && (x4 = false), "\n" !== O3 && "\r" !== O3 && "\r\n" !== O3 && (O3 = "\n");
217
217
  var z3 = 0, M2 = 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 = O2.length, a5 = x3.length, o2 = q4(I2), h5 = [], u4 = [], d3 = [], f5 = z3 = 0;
220
+ var n2 = i2.length, e = S.length, s2 = O3.length, a5 = x4.length, o2 = q4(I2), h4 = [], u4 = [], d3 = [], f5 = z3 = 0;
221
221
  if (!i2) return w2();
222
- if (T3 || false !== T3 && -1 === i2.indexOf(F4)) {
223
- for (var l2 = i2.split(O2), c4 = 0; c4 < l2.length; c4++) {
224
- if (d3 = l2[c4], z3 += d3.length, c4 !== l2.length - 1) z3 += O2.length;
222
+ if (T3 || false !== T3 && -1 === i2.indexOf(F3)) {
223
+ for (var l2 = i2.split(O3), c4 = 0; c4 < l2.length; c4++) {
224
+ if (d3 = l2[c4], z3 += d3.length, c4 !== l2.length - 1) z3 += O3.length;
225
225
  else if (r2) return w2();
226
- if (!x3 || d3.substring(0, a5) !== x3) {
226
+ if (!x4 || d3.substring(0, a5) !== x4) {
227
227
  if (o2) {
228
- if (h5 = [], k2(d3.split(S)), R2(), M2) return w2();
229
- } else k2(d3.split(S));
230
- if (A && A <= c4) return h5 = h5.slice(0, A), w2(true);
228
+ if (h4 = [], k3(d3.split(S)), R2(), M2) return w2();
229
+ } else k3(d3.split(S));
230
+ if (A2 && A2 <= c4) return h4 = h4.slice(0, A2), w2(true);
231
231
  }
232
232
  }
233
233
  return w2();
234
234
  }
235
- for (var p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O2, z3), _3 = new RegExp(U2(j2) + U2(F4), "g"), m4 = i2.indexOf(F4, z3); ; ) if (i2[z3] === F4) for (m4 = z3, z3++; ; ) {
236
- if (-1 === (m4 = i2.indexOf(F4, m4 + 1))) return r2 || u4.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h5.length, index: z3 }), E5();
237
- if (m4 === n2 - 1) return E5(i2.substring(z3, m4).replace(_3, F4));
238
- if (F4 === j2 && i2[m4 + 1] === j2) m4++;
239
- else if (F4 === j2 || 0 === m4 || i2[m4 - 1] !== j2) {
235
+ for (var p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O3, z3), _4 = new RegExp(U2(j3) + U2(F3), "g"), m4 = i2.indexOf(F3, z3); ; ) if (i2[z3] === F3) for (m4 = z3, z3++; ; ) {
236
+ if (-1 === (m4 = i2.indexOf(F3, m4 + 1))) return r2 || u4.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h4.length, index: z3 }), E5();
237
+ if (m4 === n2 - 1) return E5(i2.substring(z3, m4).replace(_4, F3));
238
+ if (F3 === j3 && i2[m4 + 1] === j3) m4++;
239
+ else if (F3 === j3 || 0 === m4 || i2[m4 - 1] !== j3) {
240
240
  -1 !== p4 && p4 < m4 + 1 && (p4 = i2.indexOf(S, m4 + 1));
241
- var y6 = v4(-1 === (g4 = -1 !== g4 && g4 < m4 + 1 ? i2.indexOf(O2, m4 + 1) : g4) ? p4 : Math.min(p4, g4));
241
+ var y6 = v3(-1 === (g4 = -1 !== g4 && g4 < m4 + 1 ? i2.indexOf(O3, m4 + 1) : g4) ? p4 : Math.min(p4, g4));
242
242
  if (i2.substr(m4 + 1 + y6, e) === S) {
243
- d3.push(i2.substring(z3, m4).replace(_3, F4)), i2[z3 = m4 + 1 + y6 + e] !== F4 && (m4 = i2.indexOf(F4, z3)), p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O2, z3);
243
+ d3.push(i2.substring(z3, m4).replace(_4, F3)), i2[z3 = m4 + 1 + y6 + e] !== F3 && (m4 = i2.indexOf(F3, z3)), p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O3, z3);
244
244
  break;
245
245
  }
246
- y6 = v4(g4);
247
- if (i2.substring(m4 + 1 + y6, m4 + 1 + y6 + s2) === O2) {
248
- if (d3.push(i2.substring(z3, m4).replace(_3, F4)), b5(m4 + 1 + y6 + s2), p4 = i2.indexOf(S, z3), m4 = i2.indexOf(F4, z3), o2 && (R2(), M2)) return w2();
249
- if (A && h5.length >= A) return w2(true);
246
+ y6 = v3(g4);
247
+ if (i2.substring(m4 + 1 + y6, m4 + 1 + y6 + s2) === O3) {
248
+ if (d3.push(i2.substring(z3, m4).replace(_4, F3)), b5(m4 + 1 + y6 + s2), p4 = i2.indexOf(S, z3), m4 = i2.indexOf(F3, z3), o2 && (R2(), M2)) return w2();
249
+ if (A2 && h4.length >= A2) return w2(true);
250
250
  break;
251
251
  }
252
- u4.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row: h5.length, index: z3 }), m4++;
252
+ u4.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row: h4.length, index: z3 }), m4++;
253
253
  }
254
254
  }
255
- else if (x3 && 0 === d3.length && i2.substring(z3, z3 + a5) === x3) {
255
+ else if (x4 && 0 === d3.length && i2.substring(z3, z3 + a5) === x4) {
256
256
  if (-1 === g4) return w2();
257
- z3 = g4 + s2, g4 = i2.indexOf(O2, z3), p4 = i2.indexOf(S, z3);
257
+ z3 = g4 + s2, g4 = i2.indexOf(O3, z3), p4 = i2.indexOf(S, z3);
258
258
  } else if (-1 !== p4 && (p4 < g4 || -1 === g4)) d3.push(i2.substring(z3, p4)), z3 = p4 + e, p4 = i2.indexOf(S, z3);
259
259
  else {
260
260
  if (-1 === g4) break;
261
261
  if (d3.push(i2.substring(z3, g4)), b5(g4 + s2), o2 && (R2(), M2)) return w2();
262
- if (A && h5.length >= A) return w2(true);
262
+ if (A2 && h4.length >= A2) return w2(true);
263
263
  }
264
264
  return E5();
265
- function k2(e2) {
266
- h5.push(e2), f5 = z3;
265
+ function k3(e2) {
266
+ h4.push(e2), f5 = z3;
267
267
  }
268
- function v4(e2) {
268
+ function v3(e2) {
269
269
  var t2 = 0;
270
270
  return t2 = -1 !== e2 && (e2 = i2.substring(m4 + 1, e2)) && "" === e2.trim() ? e2.length : t2;
271
271
  }
272
272
  function E5(e2) {
273
- return r2 || (void 0 === e2 && (e2 = i2.substring(z3)), d3.push(e2), z3 = n2, k2(d3), o2 && R2()), w2();
273
+ return r2 || (void 0 === e2 && (e2 = i2.substring(z3)), d3.push(e2), z3 = n2, k3(d3), o2 && R2()), w2();
274
274
  }
275
275
  function b5(e2) {
276
- z3 = e2, k2(d3), d3 = [], g4 = i2.indexOf(O2, z3);
276
+ z3 = e2, k3(d3), d3 = [], g4 = i2.indexOf(O3, z3);
277
277
  }
278
278
  function w2(e2) {
279
- if (C.header && !t && h5.length && !L2) {
280
- var s4 = h5[0], a6 = /* @__PURE__ */ Object.create(null), o4 = new Set(s4);
279
+ if (C.header && !t && h4.length && !L2) {
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 = P4(s4[r4]);
283
+ let i4 = P2(s4[r4]);
284
284
  if (a6[i4 = q4(C.transformHeader) ? C.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, (D4 = null === D4 ? {} : D4)[e4] = i4;
287
+ o4.add(e4), s4[r4] = e4, a6[i4]++, n4 = true, (D3 = null === D3 ? {} : D3)[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: h5, errors: u4, meta: { delimiter: S, linebreak: O2, aborted: M2, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D4 } };
293
+ return { data: h4, errors: u4, meta: { delimiter: S, linebreak: O3, aborted: M2, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D3 } };
294
294
  }
295
295
  function R2() {
296
- I2(w2()), h5 = [], u4 = [];
296
+ I2(w2()), h4 = [], u4 = [];
297
297
  }
298
298
  }, this.abort = function() {
299
299
  M2 = true;
@@ -306,16 +306,16 @@ var require_papaparse_min = __commonJS({
306
306
  if (t.error) i2.userError(t.error, t.file);
307
307
  else if (t.results && t.results.data) {
308
308
  var n2 = { abort: function() {
309
- r2 = true, _2(t.workerId, { data: [], errors: [], meta: { aborted: true } });
309
+ r2 = true, _3(t.workerId, { data: [], errors: [], meta: { aborted: true } });
310
310
  }, pause: m2, resume: m2 };
311
311
  if (q4(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
314
  } else q4(i2.userChunk) && (i2.userChunk(t.results, n2, t.file), delete t.results);
315
315
  }
316
- t.finished && !r2 && _2(t.workerId, t.results);
316
+ t.finished && !r2 && _3(t.workerId, t.results);
317
317
  }
318
- function _2(e, t) {
318
+ function _3(e, t) {
319
319
  var i2 = o[e];
320
320
  q4(i2.userComplete) && i2.userComplete(t), i2.terminate(), delete o[e];
321
321
  }
@@ -336,27 +336,27 @@ var require_papaparse_min = __commonJS({
336
336
  function q4(e) {
337
337
  return "function" == typeof e;
338
338
  }
339
- return v3.parse = function(e, t) {
339
+ return v2.parse = function(e, t) {
340
340
  var i2 = (t = t || {}).dynamicTyping || false;
341
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 = P4(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);
342
+ if (t.dynamicTyping = i2, t.transform = !!q4(t.transform) && t.transform, !t.worker || !v2.WORKERS_SUPPORTED) return i2 = null, v2.NODE_STREAM_INPUT, "string" == typeof e ? (e = P2(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);
343
343
  (i2 = (() => {
344
344
  var e2;
345
- return !!v3.WORKERS_SUPPORTED && (e2 = (() => {
345
+ return !!v2.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" })));
348
- })(), (e2 = new n.Worker(e2)).onmessage = g3, e2.id = h4++, o[e2.id] = e2);
347
+ return v2.BLOB_URL || (v2.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
+ })(), (e2 = new n.Worker(e2)).onmessage = g3, e2.id = h3++, o[e2.id] = e2);
349
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) {
351
- var s2 = false, _3 = true, m4 = ",", y6 = "\r\n", a5 = '"', o2 = a5 + a5, i2 = false, r2 = null, h5 = false, u4 = ((() => {
350
+ }, v2.unparse = function(e, t) {
351
+ var s2 = false, _4 = true, m4 = ",", 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 || v2.BAD_DELIMITERS.filter(function(e2) {
354
354
  return -1 !== t.delimiter.indexOf(e2);
355
- }).length || (m4 = 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)) {
355
+ }).length || (m4 = 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 && (_4 = t.header), Array.isArray(t.columns)) {
356
356
  if (0 === t.columns.length) throw new Error("Option columns is empty");
357
357
  r2 = t.columns;
358
358
  }
359
- void 0 !== t.escapeChar && (o2 = t.escapeChar + a5), t.escapeFormulae instanceof RegExp ? h5 = t.escapeFormulae : "boolean" == typeof t.escapeFormulae && t.escapeFormulae && (h5 = /^[=+\-@\t\r].*$/);
359
+ void 0 !== t.escapeChar && (o2 = t.escapeChar + a5), t.escapeFormulae instanceof RegExp ? h4 = t.escapeFormulae : "boolean" == typeof t.escapeFormulae && t.escapeFormulae && (h4 = /^[=+\-@\t\r].*$/);
360
360
  }
361
361
  })(), new RegExp(U2(a5), "g"));
362
362
  "string" == typeof e && (e = JSON.parse(e));
@@ -367,47 +367,47 @@ var require_papaparse_min = __commonJS({
367
367
  throw new Error("Unable to serialize unrecognized input");
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
- if (n4 && _3) {
371
- for (var a6 = 0; a6 < e2.length; a6++) 0 < a6 && (r4 += m4), r4 += k2(e2[a6], a6);
370
+ if (n4 && _4) {
371
+ for (var a6 = 0; a6 < e2.length; a6++) 0 < a6 && (r4 += m4), r4 += k3(e2[a6], a6);
372
372
  0 < t2.length && (r4 += y6);
373
373
  }
374
374
  for (var o4 = 0; o4 < t2.length; o4++) {
375
- var h6 = (n4 ? e2 : t2[o4]).length, u5 = false, d3 = n4 ? 0 === Object.keys(t2[o4]).length : 0 === t2[o4].length;
375
+ var h5 = (n4 ? e2 : t2[o4]).length, u5 = false, d3 = n4 ? 0 === Object.keys(t2[o4]).length : 0 === t2[o4].length;
376
376
  if (i4 && !n4 && (u5 = "greedy" === i4 ? "" === t2[o4].join("").trim() : 1 === t2[o4].length && 0 === t2[o4][0].length), "greedy" === i4 && n4) {
377
- for (var f5 = [], l2 = 0; l2 < h6; l2++) {
377
+ for (var f5 = [], l2 = 0; l2 < h5; l2++) {
378
378
  var c4 = s4 ? e2[l2] : l2;
379
379
  f5.push(t2[o4][c4]);
380
380
  }
381
381
  u5 = "" === f5.join("").trim();
382
382
  }
383
383
  if (!u5) {
384
- for (var p4 = 0; p4 < h6; p4++) {
384
+ for (var p4 = 0; p4 < h5; p4++) {
385
385
  0 < p4 && !d3 && (r4 += m4);
386
386
  var g4 = n4 && s4 ? e2[p4] : p4;
387
- r4 += k2(t2[o4][g4], p4);
387
+ r4 += k3(t2[o4][g4], p4);
388
388
  }
389
- o4 < t2.length - 1 && (!i4 || 0 < h6 && !d3) && (r4 += y6);
389
+ o4 < t2.length - 1 && (!i4 || 0 < h5 && !d3) && (r4 += y6);
390
390
  }
391
391
  }
392
392
  return r4;
393
393
  }
394
- function k2(e2, t2) {
394
+ function k3(e2, t2) {
395
395
  var i4, r4, n4;
396
- return null == e2 ? "" : e2.constructor === Date ? JSON.stringify(e2).slice(1, 25) : (n4 = false, h5 && "string" == typeof e2 && h5.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) => {
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(m4) || -1 < i4.indexOf(a5) || " " === r4.charAt(0) || " " === r4.charAt(r4.length - 1)) ? a5 + r4 + a5 : r4);
399
+ })(r4, v2.BAD_DELIMITERS) || -1 < r4.indexOf(m4) || -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) {
402
- var i2 = o2.config || {}, h5 = [];
401
+ }, v2.RECORD_SEP = String.fromCharCode(30), v2.UNIT_SEP = String.fromCharCode(31), v2.BYTE_ORDER_MARK = "\uFEFF", v2.BAD_DELIMITERS = ["\r", "\n", '"', v2.BYTE_ORDER_MARK], v2.WORKERS_SUPPORTED = !s && !!n.Worker, v2.NODE_STREAM_INPUT = 1, v2.LocalChunkSize = 10485760, v2.RemoteChunkSize = 5242880, v2.DefaultDelimiter = ",", v2.Parser = E4, v2.ParserHandle = i, v2.NetworkStreamer = f4, v2.FileStreamer = l, v2.StringStreamer = c2, v2.ReadableStreamStreamer = p2, n.jQuery && ((d2 = n.jQuery).fn.parse = function(o2) {
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
- for (var t = 0; t < this.files.length; t++) h5.push({ file: this.files[t], inputElem: this, instanceConfig: d2.extend({}, i2) });
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 === h5.length) q4(o2.complete) && o2.complete();
408
+ if (0 === h4.length) q4(o2.complete) && o2.complete();
409
409
  else {
410
- var e2, t, i4, r2, n2 = h5[0];
410
+ var e2, t, i4, r2, n2 = h4[0];
411
411
  if (q4(o2.before)) {
412
412
  var s2 = o2.before(n2.file, n2.inputElem);
413
413
  if ("object" == typeof s2) {
@@ -419,17 +419,17 @@ var require_papaparse_min = __commonJS({
419
419
  var a5 = n2.instanceConfig.complete;
420
420
  n2.instanceConfig.complete = function(e4) {
421
421
  q4(a5) && a5(e4, n2.file, n2.inputElem), u4();
422
- }, v3.parse(n2.file, n2.instanceConfig);
422
+ }, v2.parse(n2.file, n2.instanceConfig);
423
423
  }
424
424
  }
425
425
  function u4() {
426
- h5.splice(0, 1), e();
426
+ h4.splice(0, 1), e();
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 === v2.WORKER_ID && e && (v2.WORKER_ID = e.workerId);
431
+ "string" == typeof e.input ? n.postMessage({ workerId: v2.WORKER_ID, results: v2.parse(e.input, e.config), finished: true }) : (n.File && e.input instanceof File || e.input instanceof Object) && (e = v2.parse(e.input, e.config)) && n.postMessage({ workerId: v2.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, v2;
433
433
  });
434
434
  }
435
435
  });
@@ -487,8 +487,8 @@ var MAX_MAP_POINTS_DEFAULT = 2e3;
487
487
 
488
488
  // src/deltaE.ts
489
489
  function linearise(c2) {
490
- const v3 = c2 / 255;
491
- return v3 <= 0.04045 ? v3 / 12.92 : Math.pow((v3 + 0.055) / 1.055, 2.4);
490
+ const v2 = c2 / 255;
491
+ return v2 <= 0.04045 ? v2 / 12.92 : Math.pow((v2 + 0.055) / 1.055, 2.4);
492
492
  }
493
493
  var Xn = 0.95047;
494
494
  var Yn = 1;
@@ -502,15 +502,15 @@ function rgbToLab(r, g3, b4) {
502
502
  const R2 = linearise(r), G3 = linearise(g3), B2 = linearise(b4);
503
503
  const X2 = 0.4124564 * R2 + 0.3575761 * G3 + 0.1804375 * B2;
504
504
  const Y2 = 0.2126729 * R2 + 0.7151522 * G3 + 0.072175 * B2;
505
- const Z3 = 0.0193339 * R2 + 0.119192 * G3 + 0.9503041 * B2;
506
- const fx = f(X2 / Xn), fy = f(Y2 / Yn), fz = f(Z3 / Zn);
505
+ const Z2 = 0.0193339 * R2 + 0.119192 * G3 + 0.9503041 * B2;
506
+ const fx = f(X2 / Xn), fy = f(Y2 / Yn), fz = f(Z2 / Zn);
507
507
  return { L: 116 * fy - 16, a: 500 * (fx - fy), b: 200 * (fy - fz) };
508
508
  }
509
509
  function hexToLab(hex2) {
510
510
  const m2 = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex2.trim());
511
511
  if (!m2) return null;
512
- const h4 = m2[1].length === 3 ? m2[1][0] + m2[1][0] + m2[1][1] + m2[1][1] + m2[1][2] + m2[1][2] : m2[1];
513
- return rgbToLab(parseInt(h4.slice(0, 2), 16), parseInt(h4.slice(2, 4), 16), parseInt(h4.slice(4, 6), 16));
512
+ const h3 = m2[1].length === 3 ? m2[1][0] + m2[1][0] + m2[1][1] + m2[1][1] + m2[1][2] + m2[1][2] : m2[1];
513
+ return rgbToLab(parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16));
514
514
  }
515
515
  var RAD = Math.PI / 180;
516
516
  var DEG = 180 / Math.PI;
@@ -560,14 +560,14 @@ function labToHex(lab) {
560
560
  const fy = (lab.L + 16) / 116, fx = fy + lab.a / 500, fz = fy - lab.b / 200;
561
561
  const X2 = Xn * finv(fx);
562
562
  const Y2 = Yn * (lab.L > KAPPA * EPS ? fy * fy * fy : lab.L / KAPPA);
563
- const Z3 = Zn * finv(fz);
563
+ const Z2 = Zn * finv(fz);
564
564
  const lin = [
565
- 3.2404542 * X2 - 1.5371385 * Y2 - 0.4985314 * Z3,
566
- -0.969266 * X2 + 1.8760108 * Y2 + 0.041556 * Z3,
567
- 0.0556434 * X2 - 0.2040259 * Y2 + 1.0572252 * Z3
565
+ 3.2404542 * X2 - 1.5371385 * Y2 - 0.4985314 * Z2,
566
+ -0.969266 * X2 + 1.8760108 * Y2 + 0.041556 * Z2,
567
+ 0.0556434 * X2 - 0.2040259 * Y2 + 1.0572252 * Z2
568
568
  ];
569
- return "#" + lin.map((v3) => {
570
- const c2 = Math.max(0, Math.min(1, v3));
569
+ return "#" + lin.map((v2) => {
570
+ const c2 = Math.max(0, Math.min(1, v2));
571
571
  const g3 = c2 <= 31308e-7 ? 12.92 * c2 : 1.055 * Math.pow(c2, 1 / 2.4) - 0.055;
572
572
  return Math.round(g3 * 255).toString(16).padStart(2, "0");
573
573
  }).join("");
@@ -605,8 +605,8 @@ function toRgb(raw) {
605
605
  if (!s || s === "none" || s === "transparent") return null;
606
606
  const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(s);
607
607
  if (hex2) {
608
- const h4 = hex2[1];
609
- const full = h4.length === 3 ? h4[0] + h4[0] + h4[1] + h4[1] + h4[2] + h4[2] : h4;
608
+ const h3 = hex2[1];
609
+ const full = h3.length === 3 ? h3[0] + h3[0] + h3[1] + h3[1] + h3[2] + h3[2] : h3;
610
610
  return [
611
611
  parseInt(full.slice(0, 2), 16),
612
612
  parseInt(full.slice(2, 4), 16),
@@ -626,7 +626,7 @@ function cellKey(rgb) {
626
626
  ].join(",");
627
627
  }
628
628
  function hex(rgb) {
629
- return "#" + rgb.map((v3) => Math.max(0, Math.min(255, v3)).toString(16).padStart(2, "0")).join("");
629
+ return "#" + rgb.map((v2) => Math.max(0, Math.min(255, v2)).toString(16).padStart(2, "0")).join("");
630
630
  }
631
631
  function censusColourSpread(container, doc) {
632
632
  if (!container || typeof container.querySelectorAll !== "function") return EMPTY;
@@ -657,10 +657,10 @@ function censusColourSpread(container, doc) {
657
657
  for (const { rgb } of counted) {
658
658
  marks++;
659
659
  distinct.add(rgb.join(","));
660
- const k2 = cellKey(rgb);
661
- const cur = cells.get(k2);
660
+ const k3 = cellKey(rgb);
661
+ const cur = cells.get(k3);
662
662
  if (cur) cur.n++;
663
- else cells.set(k2, { rgb, n: 1 });
663
+ else cells.set(k3, { rgb, n: 1 });
664
664
  }
665
665
  if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
666
666
  const top = [...cells.values()].sort((a4, b4) => b4.n - a4.n).slice(0, MAX_CELLS);
@@ -669,14 +669,14 @@ function censusColourSpread(container, doc) {
669
669
  const d2 = cs.map(() => new Array(cs.length).fill(0));
670
670
  let span = 0, lo = 0, hi = 1;
671
671
  for (let i = 0; i < cs.length; i++) {
672
- for (let j2 = i + 1; j2 < cs.length; j2++) {
673
- const v3 = deltaE2000(cs[i], cs[j2]);
674
- d2[i][j2] = v3;
675
- d2[j2][i] = v3;
676
- if (v3 > span) {
677
- span = v3;
672
+ for (let j3 = i + 1; j3 < cs.length; j3++) {
673
+ const v2 = deltaE2000(cs[i], cs[j3]);
674
+ d2[i][j3] = v2;
675
+ d2[j3][i] = v2;
676
+ if (v2 > span) {
677
+ span = v2;
678
678
  lo = i;
679
- hi = j2;
679
+ hi = j3;
680
680
  }
681
681
  }
682
682
  }
@@ -691,8 +691,8 @@ function censusColourSpread(container, doc) {
691
691
  let crowd = 0;
692
692
  for (let i = 0; i < cs.length; i++) {
693
693
  let n = 0;
694
- for (let j2 = 0; j2 < cs.length; j2++) {
695
- if (i === j2 || d2[i][j2] <= SAME_SHADE_DELTA_E) n += top[j2].n;
694
+ for (let j3 = 0; j3 < cs.length; j3++) {
695
+ if (i === j3 || d2[i][j3] <= SAME_SHADE_DELTA_E) n += top[j3].n;
696
696
  }
697
697
  if (n > crowd) crowd = n;
698
698
  }
@@ -722,8 +722,8 @@ function normHex(raw) {
722
722
  if (typeof raw !== "string") return null;
723
723
  const m2 = HEX.exec(raw.trim());
724
724
  if (!m2) return null;
725
- const h4 = m2[1].length === 3 ? m2[1].split("").map((c2) => c2 + c2).join("") : m2[1];
726
- return "#" + h4.toLowerCase();
725
+ const h3 = m2[1].length === 3 ? m2[1].split("").map((c2) => c2 + c2).join("") : m2[1];
726
+ return "#" + h3.toLowerCase();
727
727
  }
728
728
  function mixLab(a4, b4, t) {
729
729
  return { L: a4.L + (b4.L - a4.L) * t, a: a4.a + (b4.a - a4.a) * t, b: a4.b + (b4.b - a4.b) * t };
@@ -731,7 +731,7 @@ function mixLab(a4, b4, t) {
731
731
  function paintedOver(fg, canvas, alpha) {
732
732
  const f4 = [1, 3, 5].map((i) => parseInt(fg.slice(i, i + 2), 16));
733
733
  const c2 = [1, 3, 5].map((i) => parseInt(canvas.slice(i, i + 2), 16));
734
- const mixed = f4.map((v3, i) => Math.round(v3 * alpha + c2[i] * (1 - alpha))).map((v3) => v3.toString(16).padStart(2, "0"));
734
+ const mixed = f4.map((v2, i) => Math.round(v2 * alpha + c2[i] * (1 - alpha))).map((v2) => v2.toString(16).padStart(2, "0"));
735
735
  return hexToLab("#" + mixed.join(""));
736
736
  }
737
737
  function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity = AUTO_RAMP_DRAWN_OPACITY) {
@@ -739,8 +739,8 @@ function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity
739
739
  const bg = normHex(canvas);
740
740
  if (!lo || !hi || !bg || classes < 2) return NaN;
741
741
  let prev = null, min = Infinity;
742
- for (let k2 = 0; k2 < classes; k2++) {
743
- const painted = paintedOver(labToHex(mixLab(lo, hi, k2 / (classes - 1))), bg, opacity);
742
+ for (let k3 = 0; k3 < classes; k3++) {
743
+ const painted = paintedOver(labToHex(mixLab(lo, hi, k3 / (classes - 1))), bg, opacity);
744
744
  if (prev) min = Math.min(min, deltaE2000(prev, painted));
745
745
  prev = painted;
746
746
  }
@@ -764,15 +764,15 @@ function resolveAutoColorScale(p2) {
764
764
  };
765
765
  const candidates = p2.isHighContrast ? [normHex(p2.themeAccent), normHex(p2.themeFg)] : [...palette.map(normHex), normHex(p2.themeAccent), normHex(p2.themeFg)];
766
766
  const accent = candidates.find(usable) ?? FALLBACK_ACCENT;
767
- const A = hexToLab(accent);
767
+ const A2 = hexToLab(accent);
768
768
  let t = 0.1;
769
- let low = mixLab(bg, A, t);
769
+ let low = mixLab(bg, A2, t);
770
770
  while (t < 0.6 && deltaE2000(paintedOver(labToHex(low), canvas, AUTO_RAMP_DRAWN_OPACITY), bg) < SAME_SHADE_DELTA_E) {
771
771
  t += 0.02;
772
- low = mixLab(bg, A, t);
772
+ low = mixLab(bg, A2, t);
773
773
  }
774
774
  const lowHex = labToHex(low);
775
- let high = { ...A };
775
+ let high = { ...A2 };
776
776
  let highHex = labToHex(high);
777
777
  for (let step = 0; step < 80 && autoRampMinStep(lowHex, highHex, canvas) < AUTO_RAMP_MIN_STEP_DELTA_E; step++) {
778
778
  const L2 = Math.max(4, Math.min(98, high.L + (darkCanvas ? 1 : -1)));
@@ -863,20 +863,20 @@ function resolveOptions(p2) {
863
863
  // never reach a chart as a live mode. Both of these are read on EVERY render, so a
864
864
  // reader can change their mind about a cached chart without regenerating it.
865
865
  approximatePositions: (() => {
866
- const v3 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
867
- return v3 === "mark" || v3 === "aggregate" || v3 === "skip" ? v3 : APPROXIMATE_POSITIONS_DEFAULT;
866
+ const v2 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
867
+ return v2 === "mark" || v2 === "aggregate" || v2 === "skip" ? v2 : APPROXIMATE_POSITIONS_DEFAULT;
868
868
  })(),
869
869
  valueAxisBaseline: (() => {
870
- const v3 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
871
- return v3 === "zero" || v3 === "fit" || v3 === "auto" ? v3 : VALUE_AXIS_BASELINE_DEFAULT;
870
+ const v2 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
871
+ return v2 === "zero" || v2 === "fit" || v2 === "auto" ? v2 : VALUE_AXIS_BASELINE_DEFAULT;
872
872
  })(),
873
873
  // Same shape, and the same reason for it: an unrecognised string must never reach a chart
874
874
  // as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
875
875
  // the setting that makes the chart PROVE the grid before it names a period, so a garbled
876
876
  // value withdraws the claim rather than asserting one.
877
877
  seasonalMarkers: (() => {
878
- const v3 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
879
- return v3 === "auto" || v3 === "always" || v3 === "never" ? v3 : SEASONAL_MARKERS_DEFAULT;
878
+ const v2 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
879
+ return v2 === "auto" || v2 === "always" || v2 === "never" ? v2 : SEASONAL_MARKERS_DEFAULT;
880
880
  })(),
881
881
  // ---- animation: booleans, default+clamp numerics, "" default enum ----
882
882
  animAutoPlay: !!p2.animAutoPlay,
@@ -944,12 +944,12 @@ var byAsset = /* @__PURE__ */ new Map();
944
944
  var _na;
945
945
  function geoAssetFor(geoKind) {
946
946
  if (!geoKind) return null;
947
- const k2 = geoKind.toLowerCase();
948
- if (/^country/.test(k2)) return "world";
949
- if (k2 === "north-america") return "world";
950
- if (k2 === "world") return "world";
951
- if (k2 === "us-state-code" || k2 === "us-state-name") return "us-states";
952
- if (k2 === "us-zip5") return "us-zip3";
947
+ const k3 = geoKind.toLowerCase();
948
+ if (/^country/.test(k3)) return "world";
949
+ if (k3 === "north-america") return "world";
950
+ if (k3 === "world") return "world";
951
+ if (k3 === "us-state-code" || k3 === "us-state-name") return "us-states";
952
+ if (k3 === "us-zip5") return "us-zip3";
953
953
  return null;
954
954
  }
955
955
  var _worldBase;
@@ -1231,12 +1231,12 @@ function A3(n) {
1231
1231
  if (f4 && f4.length) {
1232
1232
  let d2 = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), R2 = d2 ? u(d2) : "", g3 = d2 ? Y(d2) : null, S = [], m2 = -1;
1233
1233
  for (let c2 of f4) {
1234
- let l = c2.row, A = 0;
1235
- if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R2) A++;
1234
+ let l = c2.row, A2 = 0;
1235
+ if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R2) A2++;
1236
1236
  else continue;
1237
- if (i) if (T(l.cc) === i) A++;
1237
+ if (i) if (T(l.cc) === i) A2++;
1238
1238
  else continue;
1239
- A > m2 ? (m2 = A, S = [c2]) : A === m2 && S.push(c2);
1239
+ A2 > m2 ? (m2 = A2, S = [c2]) : A2 === m2 && S.push(c2);
1240
1240
  }
1241
1241
  S.some((c2) => c2.primary) && (S = S.filter((c2) => c2.primary));
1242
1242
  let p2 = /* @__PURE__ */ new Map();
@@ -1267,19 +1267,19 @@ var x = 8;
1267
1267
  function y3(n, e) {
1268
1268
  let t = new Array(n.length), o = new Array(n.length), i = new Array(n.length), r = /* @__PURE__ */ new Set(), a4 = [], s = /* @__PURE__ */ new Set(), f4 = [], d2 = /* @__PURE__ */ new Set(), R2 = [], g3 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, S = 0, m2 = 0, p2 = null;
1269
1269
  for (let l = 0; l < n.length; ++l) {
1270
- let A = n[l], C = A3({ ...A, mapKind: e });
1270
+ let A2 = n[l], C = A3({ ...A2, mapKind: e });
1271
1271
  if (S3(C)) {
1272
1272
  t[l] = null, o[l] = null, i[l] = null, m2++;
1273
- let M2 = K(A);
1273
+ let M2 = K(A2);
1274
1274
  M2 && !d2.has(M2.toLowerCase()) && (d2.add(M2.toLowerCase()), R2.length < x && R2.push(M2));
1275
1275
  } else if (C) {
1276
1276
  if (t[l] = C.lat, o[l] = C.lon, i[l] = C.precision, S++, g3[C.precision]++, (p2 === null || G[C.precision] > G[p2]) && (p2 = C.precision), G[C.precision] > G.city) {
1277
- let M2 = K(A);
1277
+ let M2 = K(A2);
1278
1278
  M2 && !s.has(M2.toLowerCase()) && (s.add(M2.toLowerCase()), f4.length < x && f4.push(M2));
1279
1279
  }
1280
1280
  } else {
1281
1281
  t[l] = null, o[l] = null, i[l] = null;
1282
- let M2 = K(A);
1282
+ let M2 = K(A2);
1283
1283
  M2 && !r.has(M2.toLowerCase()) && (r.add(M2.toLowerCase()), a4.push(M2));
1284
1284
  }
1285
1285
  }
@@ -1425,10 +1425,10 @@ function It(n, s) {
1425
1425
  return s === "us-zip5" ? w.has(n.slice(0, 3)) : true;
1426
1426
  }
1427
1427
  function Wt(n, s) {
1428
- let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M2 = [], h4 = 0;
1428
+ let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M2 = [], h3 = 0;
1429
1429
  for (let N2 = 0; N2 < n.length; ++N2) {
1430
- let I2 = Mt(n[N2], s), O2 = I2 !== null && It(I2, s) ? I2 : null;
1431
- if (i[N2] = O2, O2 !== null) h4++;
1430
+ let I2 = Mt(n[N2], s), O3 = I2 !== null && It(I2, s) ? I2 : null;
1431
+ if (i[N2] = O3, O3 !== null) h3++;
1432
1432
  else {
1433
1433
  let d2 = n[N2];
1434
1434
  if (d2 != null) {
@@ -1440,10 +1440,10 @@ function Wt(n, s) {
1440
1440
  }
1441
1441
  }
1442
1442
  }
1443
- return { iso: i, unmatched: M2, matchedRows: h4, totalRows: n.length };
1443
+ return { iso: i, unmatched: M2, matchedRows: h3, totalRows: n.length };
1444
1444
  }
1445
1445
 
1446
- // ../shape-core/dist/chunk-RS7LNZD7.mjs
1446
+ // ../shape-core/dist/chunk-NY26PXWD.mjs
1447
1447
  var import_papaparse = __toESM(require_papaparse_min(), 1);
1448
1448
  /*! @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. */
1449
1449
  var Se = { "north-america": "AG AI AW BB BL BM BQ BS BZ CA CR CU CW DM DO GD GL GP GT HN HT JM KN KY LC MF MQ MS MX NI PA PM PR SV SX TC TT US VC VG VI", "south-america": "AR BO BR CL CO EC FK GF GY PE PY SR UY VE", europe: "AD AL AT AX BA BE BG BY CH CY CZ DE DK EE ES FI FO FR GB GG GI GR HR HU IE IM IS IT JE LI LT LU LV MC MD ME MK MT NL NO PL PT RO RS RU SE SI SJ SK SM UA VA", africa: "AO BF BI BJ BW CD CF CG CI CM CV DJ DZ EG EH ER ET GA GH GM GN GQ GW KE KM LR LS LY MA MG ML MR MU MW MZ NA NE NG RE RW SC SD SH SL SN SO SS ST SZ TD TG TN TZ UG YT ZA ZM ZW", asia: "AE AF AM AZ BD BH BN BT CC CN CX GE HK ID IL IN IO IQ IR JO JP KG KH KP KR KW KZ LA LB LK MM MN MO MV MY NP OM PH PK PS QA SA SG SY TH TJ TL TM TR TW UZ VN YE", oceania: "AS AU CK FJ FM GU KI MH MP NC NF NR NU NZ PF PG PN PW SB TK TO TV UM VU WF WS", antarctica: "AQ BV GS HM TF" };
@@ -1550,51 +1550,51 @@ var ct2 = new RegExp([String.raw`\bisMeasure\b`, String.raw`\bdataType\b`, Strin
1550
1550
 
1551
1551
  // ../shape-core/dist/index.mjs
1552
1552
  /*! @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. */
1553
- var E2 = 2;
1554
- var Z2 = 400;
1555
- function F3(i) {
1553
+ var G2 = 2;
1554
+ var q3 = 400;
1555
+ function O2(i) {
1556
1556
  return !!E(i);
1557
1557
  }
1558
- function P2(i) {
1558
+ function A(i) {
1559
1559
  let n = /* @__PURE__ */ new Set();
1560
1560
  for (let t of i) {
1561
1561
  if (t == null) continue;
1562
- let s = u(String(t));
1563
- if (!V(s) && !n.has(s) && (n.add(s), n.size >= Z2)) break;
1562
+ let r = u(String(t));
1563
+ if (!V(r) && !n.has(r) && (n.add(r), n.size >= q3)) break;
1564
1564
  }
1565
1565
  return Array.from(n);
1566
1566
  }
1567
- function h3(i) {
1568
- let n = P2(i);
1569
- if (n.length === 0 || G2(i) < 95) return false;
1570
- let t = n.filter((l) => F3(l) && !Y(l)).length, s = n.filter((l) => !F3(l) && !!Y(l)).length;
1571
- return t >= 1 && t >= s;
1567
+ function x3(i) {
1568
+ let n = A(i);
1569
+ if (n.length === 0 || E2(i) < 95) return false;
1570
+ let t = n.filter((c2) => O2(c2) && !Y(c2)).length, r = n.filter((c2) => !O2(c2) && !!Y(c2)).length;
1571
+ return t >= 1 && t >= r;
1572
1572
  }
1573
1573
  function W2(i, n) {
1574
1574
  if (!Y(i)) return false;
1575
1575
  let t = E(i);
1576
1576
  return t ? n === "world" ? true : s3.has(t) : false;
1577
1577
  }
1578
- function G2(i) {
1579
- let n = P2(i);
1578
+ function E2(i) {
1579
+ let n = A(i);
1580
1580
  if (n.length === 0) return 0;
1581
1581
  let t = 0;
1582
- for (let s of n) F3(s) && t++;
1582
+ for (let r of n) O2(r) && t++;
1583
1583
  return Math.round(t / n.length * 1e3) / 10;
1584
1584
  }
1585
- function v2(i) {
1586
- let n = P2(i);
1585
+ function _2(i) {
1586
+ let n = A(i);
1587
1587
  if (n.length === 0) return 0;
1588
1588
  let t = 0;
1589
- for (let s of n) Y(s) && t++;
1589
+ for (let r of n) Y(r) && t++;
1590
1590
  return Math.round(t / n.length * 1e3) / 10;
1591
1591
  }
1592
1592
  function $2(i) {
1593
1593
  let n = /* @__PURE__ */ new Set();
1594
1594
  for (let t of i) {
1595
1595
  if (t == null) continue;
1596
- let s = String(t).trim();
1597
- if (!V(u(s)) && !n.has(s) && (n.add(s), n.size >= Z2)) break;
1596
+ let r = String(t).trim();
1597
+ if (!V(u(r)) && !n.has(r) && (n.add(r), n.size >= q3)) break;
1598
1598
  }
1599
1599
  return Array.from(n);
1600
1600
  }
@@ -1602,95 +1602,95 @@ function z2(i) {
1602
1602
  let n = $2(i);
1603
1603
  if (n.length === 0) return 0;
1604
1604
  let t = 0;
1605
- for (let s of n) Z(s).length > 0 && t++;
1605
+ for (let r of n) Z(r).length > 0 && t++;
1606
1606
  return Math.round(t / n.length * 1e3) / 10;
1607
1607
  }
1608
- function q3(i, n) {
1608
+ function j2(i, n) {
1609
1609
  return y2(n, rt) ? true : $2(i).some((t) => /^\d{5}(-\d{4})?$/.test(t.replace(/\.0+$/, "")));
1610
1610
  }
1611
- function gt(i, n) {
1612
- let t = P2(i);
1611
+ function yt2(i, n) {
1612
+ let t = A(i);
1613
1613
  if (t.length === 0) return 0;
1614
- let s = 0;
1615
- for (let l of t) p3(l, n) && s++;
1616
- return Math.round(s / t.length * 1e3) / 10;
1614
+ let r = 0;
1615
+ for (let c2 of t) p3(c2, n) && r++;
1616
+ return Math.round(r / t.length * 1e3) / 10;
1617
1617
  }
1618
- function D3(i, n) {
1618
+ function k2(i, n) {
1619
1619
  let t = 0;
1620
- for (let s of P2(i)) n(s) && t++;
1620
+ for (let r of A(i)) n(r) && t++;
1621
1621
  return t;
1622
1622
  }
1623
- function yt2(i, n) {
1623
+ function Ct(i, n) {
1624
1624
  let t = 0;
1625
- for (let s of $2(i)) n(s) && t++;
1625
+ for (let r of $2(i)) n(r) && t++;
1626
1626
  return t;
1627
1627
  }
1628
- function Ct(i, n, t, s, l) {
1629
- let x3 = [], c2 = [], o = {}, I2 = {}, _2 = new Set(i), u2 = (e) => n.map((r) => r[e]);
1628
+ function ht(i, n, t, r, c2) {
1629
+ let l = [], a4 = [], o = {}, R2 = {}, h3 = new Set(i), f4 = (e) => n.map((s) => s[e]);
1630
1630
  for (let e of ["city", "country"]) {
1631
- let r = t?.[e];
1632
- r && _2.has(r) && (o[e] = r);
1631
+ let s = t?.[e];
1632
+ s && h3.has(s) && (o[e] = s);
1633
1633
  }
1634
- let X2 = new Set(l ?? i);
1634
+ let Y2 = new Set(c2 ?? i);
1635
1635
  for (let e of ["lat", "lon"]) {
1636
- let r = t?.[e];
1637
- r && X2.has(r) && (o[e] = r);
1636
+ let s = t?.[e];
1637
+ s && Y2.has(s) && (o[e] = s);
1638
1638
  }
1639
- let d2 = t?.zip;
1640
- if (d2 && _2.has(d2)) {
1641
- let e = u2(d2), r = z2(e);
1642
- r < 95 ? c2.push(`zip=${d2} (only ${r}% of values read as ZIPs)`) : q3(e, d2) ? o.zip = d2 : c2.push(`zip=${d2} (all values are 3-4 digits with nothing to say they are postal)`);
1639
+ let g3 = t?.zip;
1640
+ if (g3 && h3.has(g3)) {
1641
+ let e = f4(g3), s = z2(e);
1642
+ 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)`);
1643
1643
  }
1644
- let m2 = t?.state;
1645
- if (m2 && _2.has(m2)) {
1646
- let e = u2(m2), r = P2(e);
1647
- r.length > 0 && r.every((a4) => W2(a4, s)) ? c2.push(`state=${m2} (every value is "CA", which is both Canada and California)`) : h3(e) ? (c2.push(`state=${m2} (every value is a country, not a state)`), o.country || (o.country = m2)) : v2(e) < 95 ? c2.push(`state=${m2} (only ${v2(e)}% of values are states/provinces)`) : o.state = m2;
1644
+ let p2 = t?.state;
1645
+ if (p2 && h3.has(p2)) {
1646
+ let e = f4(p2), s = A(e);
1647
+ s.length > 0 && s.every((u2) => W2(u2, r)) ? a4.push(`state=${p2} (every value is "CA", which is both Canada and California)`) : x3(e) ? (a4.push(`state=${p2} (every value is a country, not a state)`), o.country || (o.country = p2)) : _2(e) < 95 ? a4.push(`state=${p2} (only ${_2(e)}% of values are states/provinces)`) : o.state = p2;
1648
1648
  }
1649
- let g3 = new Set(Object.values(o).filter(Boolean)), A = i.filter((e) => !g3.has(e) && !e.startsWith("__"));
1649
+ let y5 = new Set(Object.values(o).filter(Boolean)), S = i.filter((e) => !y5.has(e) && !e.startsWith("__"));
1650
1650
  if (!o.state) {
1651
1651
  let e = null;
1652
- for (let r of A) {
1653
- let a4 = u2(r);
1654
- if (h3(a4)) continue;
1655
- let f4 = v2(a4);
1656
- if (f4 < 95) continue;
1657
- let k2 = D3(a4, (R2) => !!Y(R2)), J2 = D3(a4, (R2) => !!Y(R2) && !W2(R2, s));
1658
- k2 < E2 && J2 < 1 || (!e || f4 > e.pct) && (e = { name: r, pct: f4 });
1659
- }
1660
- e && (o.state = e.name, g3.add(e.name), x3.push(`state=${e.name} (${e.pct}% states/provinces)`));
1661
- }
1662
- if (!o.zip) for (let e of A) {
1663
- if (g3.has(e)) continue;
1664
- let r = u2(e), a4 = z2(r);
1665
- if (!(a4 < 95) && q3(r, e) && !(yt2(r, (f4) => Z(f4).length > 0) < E2)) {
1666
- o.zip = e, g3.add(e), x3.push(`zip=${e} (${a4}% ZIP codes)`);
1652
+ for (let s of S) {
1653
+ let u2 = f4(s);
1654
+ if (x3(u2)) continue;
1655
+ let m2 = _2(u2);
1656
+ if (m2 < 95) continue;
1657
+ let w2 = k2(u2, (T3) => !!Y(T3)), Q3 = k2(u2, (T3) => !!Y(T3) && !W2(T3, r));
1658
+ w2 < G2 && Q3 < 1 || (!e || m2 > e.pct) && (e = { name: s, pct: m2 });
1659
+ }
1660
+ e && (o.state = e.name, y5.add(e.name), l.push(`state=${e.name} (${e.pct}% states/provinces)`));
1661
+ }
1662
+ if (!o.zip) for (let e of S) {
1663
+ if (y5.has(e)) continue;
1664
+ let s = f4(e), u2 = z2(s);
1665
+ if (!(u2 < 95) && j2(s, e) && !(Ct(s, (m2) => Z(m2).length > 0) < G2)) {
1666
+ o.zip = e, y5.add(e), l.push(`zip=${e} (${u2}% ZIP codes)`);
1667
1667
  break;
1668
1668
  }
1669
1669
  }
1670
- let C = o.country;
1671
- if (!C || !h3(u2(C))) {
1670
+ let P2 = o.country;
1671
+ if (!P2 || !x3(f4(P2))) {
1672
1672
  let e = null;
1673
- for (let r of A) {
1674
- if (g3.has(r) || !h3(u2(r))) continue;
1675
- let a4 = G2(u2(r));
1676
- (!e || a4 > e.pct) && (e = { name: r, pct: a4 });
1673
+ for (let s of S) {
1674
+ if (y5.has(s) || !x3(f4(s))) continue;
1675
+ let u2 = E2(f4(s));
1676
+ (!e || u2 > e.pct) && (e = { name: s, pct: u2 });
1677
1677
  }
1678
- e && (C && (c2.push(`country=${C} (only ${G2(u2(C))}% of values are country identifiers; using ${e.name} instead)`), I2.country = C), o.country = e.name, g3.add(e.name), x3.push(`country=${e.name}`));
1678
+ e && (P2 && (a4.push(`country=${P2} (only ${E2(f4(P2))}% of values are country identifiers; using ${e.name} instead)`), R2.country = P2), o.country = e.name, y5.add(e.name), l.push(`country=${e.name}`));
1679
1679
  }
1680
1680
  if (!o.city) {
1681
1681
  let e = null;
1682
- for (let r of A) {
1683
- if (g3.has(r)) continue;
1684
- let a4 = u2(r), f4 = gt(a4, s);
1685
- f4 < m3 || D3(a4, (k2) => p3(k2, s)) < E2 || (!e || f4 > e.pct) && (e = { name: r, pct: f4 });
1682
+ for (let s of S) {
1683
+ if (y5.has(s)) continue;
1684
+ let u2 = f4(s), m2 = yt2(u2, r);
1685
+ m2 < m3 || k2(u2, (w2) => p3(w2, r)) < G2 || (!e || m2 > e.pct) && (e = { name: s, pct: m2 });
1686
1686
  }
1687
- e && (o.city = e.name, x3.push(`city=${e.name} (${e.pct}% known cities)`));
1687
+ e && (o.city = e.name, l.push(`city=${e.name} (${e.pct}% known cities)`));
1688
1688
  }
1689
- let B2 = o.country ? u2(o.country) : [], L2 = !!o.country && h3(B2), Y2 = L2 ? new Set(B2.map((e) => E(e == null ? null : String(e))).filter(Boolean)).size : 0, K3 = L2 && Y2 >= 2, N2 = !!(o.lat && o.lon) && n.some((e) => {
1690
- let r = +String(e[o.lat] ?? "").trim(), a4 = +String(e[o.lon] ?? "").trim();
1691
- return isFinite(r) && isFinite(a4) && r >= -90 && r <= 90 && a4 >= -180 && a4 <= 180 && String(e[o.lat] ?? "").trim() !== "" && String(e[o.lon] ?? "").trim() !== "";
1689
+ let B2 = o.country ? f4(o.country) : [], D3 = !!o.country && x3(B2), J2 = D3 ? new Set(B2.map((e) => E(e == null ? null : String(e))).filter(Boolean)).size : 0, H2 = D3 && J2 >= 2, L2 = !!(o.lat && o.lon) && n.some((e) => {
1690
+ let s = +String(e[o.lat] ?? "").trim(), u2 = +String(e[o.lon] ?? "").trim();
1691
+ return isFinite(s) && isFinite(u2) && s >= -90 && s <= 90 && u2 >= -180 && u2 <= 180 && String(e[o.lat] ?? "").trim() !== "" && String(e[o.lon] ?? "").trim() !== "";
1692
1692
  });
1693
- return o.lat && o.lon && !N2 && c2.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !K3 && !(o.city || o.state || o.zip || N2) && c2.push(L2 ? `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 || K3 || N2) ? o : null, backfilled: x3, refused: c2, ...Object.keys(I2).length ? { labelFallback: I2 } : {} };
1693
+ return o.lat && o.lon && !L2 && a4.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !H2 && !(o.city || o.state || o.zip || L2) && a4.push(D3 ? `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 || H2 || L2) ? o : null, backfilled: l, refused: a4, ...Object.keys(R2).length ? { labelFallback: R2 } : {} };
1694
1694
  }
1695
1695
 
1696
1696
  // src/payload.ts
@@ -1705,7 +1705,7 @@ function resolvePointChannel(cols, rowObjs, point) {
1705
1705
  let labelCol;
1706
1706
  if (bind) {
1707
1707
  const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
1708
- const res = Ct(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
1708
+ const res = ht(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
1709
1709
  bind = res.bind;
1710
1710
  rolesBackfilled = res.backfilled;
1711
1711
  rolesRefused = res.refused;
@@ -1793,27 +1793,27 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
1793
1793
  const row = rowObjs[r];
1794
1794
  const a4 = new Array(cols.length + extra);
1795
1795
  for (let c2 = 0; c2 < cols.length; c2++) {
1796
- const v3 = row[colNames[c2]];
1797
- if (v3 instanceof Date) {
1798
- a4[c2] = v3.toISOString();
1796
+ const v2 = row[colNames[c2]];
1797
+ if (v2 instanceof Date) {
1798
+ a4[c2] = v2.toISOString();
1799
1799
  } else {
1800
- a4[c2] = v3 ?? null;
1800
+ a4[c2] = v2 ?? null;
1801
1801
  }
1802
1802
  }
1803
- let k2 = cols.length;
1804
- a4[k2++] = r;
1805
- if (geoIso) a4[k2++] = geoIso[r];
1803
+ let k3 = cols.length;
1804
+ a4[k3++] = r;
1805
+ if (geoIso) a4[k3++] = geoIso[r];
1806
1806
  if (pLat && pLon) {
1807
- a4[k2++] = pLat[r];
1808
- a4[k2++] = pLon[r];
1809
- a4[k2++] = pPrec ? pPrec[r] : null;
1807
+ a4[k3++] = pLat[r];
1808
+ a4[k3++] = pLon[r];
1809
+ a4[k3++] = pPrec ? pPrec[r] : null;
1810
1810
  }
1811
1811
  if (dLat && dLon) {
1812
- a4[k2++] = dLat[r];
1813
- a4[k2++] = dLon[r];
1814
- a4[k2++] = dPrec ? dPrec[r] : null;
1812
+ a4[k3++] = dLat[r];
1813
+ a4[k3++] = dLon[r];
1814
+ a4[k3++] = dPrec ? dPrec[r] : null;
1815
1815
  }
1816
- for (const ac of aliasCols) a4[k2++] = a4[ac.from];
1816
+ for (const ac of aliasCols) a4[k3++] = a4[ac.from];
1817
1817
  out[r] = a4;
1818
1818
  }
1819
1819
  const colsOut = [...cols, { name: "__rowIdx__", dataType: "Integer", isMeasure: false, modelDesc: "" }];
@@ -1848,6 +1848,141 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
1848
1848
  };
1849
1849
  }
1850
1850
 
1851
+ // src/codeComments.ts
1852
+ function stripJsComments(code) {
1853
+ const src = String(code ?? "");
1854
+ const n = src.length;
1855
+ let out = "";
1856
+ let i = 0;
1857
+ const templates = [];
1858
+ let prevSig = "";
1859
+ let prevWord = "";
1860
+ let wordOpen = false;
1861
+ const regexMayFollow = () => {
1862
+ if (prevSig === "") return true;
1863
+ if ("(,=:[!&|?{};+-*%<>~^".includes(prevSig)) return true;
1864
+ return /^(return|typeof|instanceof|in|of|new|delete|void|throw|case|do|else|yield|await)$/.test(prevWord);
1865
+ };
1866
+ while (i < n) {
1867
+ const ch = src[i];
1868
+ const next = i + 1 < n ? src[i + 1] : "";
1869
+ const top = templates.length > 0 ? templates[templates.length - 1] : null;
1870
+ if (top === -1) {
1871
+ if (ch === "\\") {
1872
+ out += src.slice(i, i + 2);
1873
+ i += 2;
1874
+ continue;
1875
+ }
1876
+ if (ch === "`") {
1877
+ templates.pop();
1878
+ out += ch;
1879
+ i++;
1880
+ prevSig = "`";
1881
+ prevWord = "";
1882
+ wordOpen = false;
1883
+ continue;
1884
+ }
1885
+ if (ch === "$" && next === "{") {
1886
+ templates[templates.length - 1] = 0;
1887
+ out += "${";
1888
+ i += 2;
1889
+ prevSig = "{";
1890
+ prevWord = "";
1891
+ wordOpen = false;
1892
+ continue;
1893
+ }
1894
+ out += ch;
1895
+ i++;
1896
+ continue;
1897
+ }
1898
+ if (ch === "/" && next === "/") {
1899
+ let j3 = i + 2;
1900
+ while (j3 < n && src[j3] !== "\n" && src[j3] !== "\r") j3++;
1901
+ out += " ";
1902
+ i = j3;
1903
+ wordOpen = false;
1904
+ continue;
1905
+ }
1906
+ if (ch === "/" && next === "*") {
1907
+ const end = src.indexOf("*/", i + 2);
1908
+ const body = end < 0 ? src.slice(i + 2) : src.slice(i + 2, end);
1909
+ const newlines = body.match(/\r\n|\r|\n/g);
1910
+ out += newlines ? newlines.join("") : " ";
1911
+ i = end < 0 ? n : end + 2;
1912
+ wordOpen = false;
1913
+ continue;
1914
+ }
1915
+ if (ch === "'" || ch === '"') {
1916
+ let j3 = i + 1;
1917
+ while (j3 < n && src[j3] !== ch && src[j3] !== "\n") j3 += src[j3] === "\\" ? 2 : 1;
1918
+ out += src.slice(i, Math.min(j3 + 1, n));
1919
+ i = j3 + 1;
1920
+ prevSig = ch;
1921
+ prevWord = "";
1922
+ wordOpen = false;
1923
+ continue;
1924
+ }
1925
+ if (ch === "`") {
1926
+ templates.push(-1);
1927
+ out += ch;
1928
+ i++;
1929
+ wordOpen = false;
1930
+ continue;
1931
+ }
1932
+ if (ch === "/" && regexMayFollow()) {
1933
+ let j3 = i + 1, inClass = false;
1934
+ while (j3 < n && src[j3] !== "\n") {
1935
+ const c2 = src[j3];
1936
+ if (c2 === "\\") {
1937
+ j3 += 2;
1938
+ continue;
1939
+ }
1940
+ if (c2 === "[") inClass = true;
1941
+ else if (c2 === "]") inClass = false;
1942
+ else if (c2 === "/" && !inClass) break;
1943
+ j3++;
1944
+ }
1945
+ if (j3 < n && src[j3] === "/") {
1946
+ j3++;
1947
+ while (j3 < n && /[A-Za-z]/.test(src[j3])) j3++;
1948
+ out += src.slice(i, j3);
1949
+ i = j3;
1950
+ prevSig = "/";
1951
+ prevWord = "";
1952
+ wordOpen = false;
1953
+ continue;
1954
+ }
1955
+ }
1956
+ if (top !== null && top >= 0) {
1957
+ if (ch === "{") templates[templates.length - 1] = top + 1;
1958
+ else if (ch === "}") {
1959
+ if (top === 0) {
1960
+ templates[templates.length - 1] = -1;
1961
+ out += ch;
1962
+ i++;
1963
+ continue;
1964
+ }
1965
+ templates[templates.length - 1] = top - 1;
1966
+ }
1967
+ }
1968
+ out += ch;
1969
+ i++;
1970
+ if (/\s/.test(ch)) {
1971
+ wordOpen = false;
1972
+ } else {
1973
+ if (/[A-Za-z0-9_$]/.test(ch)) {
1974
+ prevWord = wordOpen ? prevWord + ch : ch;
1975
+ wordOpen = true;
1976
+ } else {
1977
+ prevWord = "";
1978
+ wordOpen = false;
1979
+ }
1980
+ prevSig = ch;
1981
+ }
1982
+ }
1983
+ return out;
1984
+ }
1985
+
1851
1986
  // src/selection.ts
1852
1987
  function createMarkResolver(env) {
1853
1988
  const { root, doc, log } = env;
@@ -1872,7 +2007,7 @@ function createMarkResolver(env) {
1872
2007
  const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
1873
2008
  return s === "transparent" || s === "none" || so <= 0.01;
1874
2009
  };
1875
- const distToPathCenterline = (el, x3, y5) => {
2010
+ const distToPathCenterline = (el, x4, y5) => {
1876
2011
  const L2 = el.getTotalLength();
1877
2012
  if (!(L2 > 0)) return Number.MAX_VALUE;
1878
2013
  const m2 = el.getScreenCTM();
@@ -1881,17 +2016,17 @@ function createMarkResolver(env) {
1881
2016
  const N2 = 64;
1882
2017
  for (let i = 0; i <= N2; i++) {
1883
2018
  const pt = el.getPointAtLength(L2 * i / N2);
1884
- const dx = m2.a * pt.x + m2.c * pt.y + m2.e - x3;
2019
+ const dx = m2.a * pt.x + m2.c * pt.y + m2.e - x4;
1885
2020
  const dy = m2.b * pt.x + m2.d * pt.y + m2.f - y5;
1886
2021
  const d2 = dx * dx + dy * dy;
1887
2022
  if (d2 < best) best = d2;
1888
2023
  }
1889
2024
  return Math.sqrt(best);
1890
2025
  };
1891
- const refineHitCorridor = (mark, x3, y5, sel) => {
2026
+ const refineHitCorridor = (mark, x4, y5, sel) => {
1892
2027
  try {
1893
2028
  if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
1894
- const stack = doc.elementsFromPoint(x3, y5);
2029
+ const stack = doc.elementsFromPoint(x4, y5);
1895
2030
  const candidates = [];
1896
2031
  for (const el of stack) {
1897
2032
  if (!root.contains(el)) continue;
@@ -1905,7 +2040,7 @@ function createMarkResolver(env) {
1905
2040
  let best = mark;
1906
2041
  let bestD = Number.MAX_VALUE;
1907
2042
  for (const el of candidates) {
1908
- const d2 = distToPathCenterline(el, x3, y5);
2043
+ const d2 = distToPathCenterline(el, x4, y5);
1909
2044
  if (d2 < bestD) {
1910
2045
  bestD = d2;
1911
2046
  best = el;
@@ -1942,9 +2077,9 @@ function createMarkResolver(env) {
1942
2077
  }
1943
2078
  return out;
1944
2079
  };
1945
- const penetrateOverlayAt = (x3, y5, sel) => {
2080
+ const penetrateOverlayAt = (x4, y5, sel) => {
1946
2081
  try {
1947
- const stack = doc.elementsFromPoint(x3, y5);
2082
+ const stack = doc.elementsFromPoint(x4, y5);
1948
2083
  for (const el of stack) {
1949
2084
  if (!root.contains(el) || !isElement(el)) continue;
1950
2085
  const cand = el.matches(sel) ? el : el.closest(sel);
@@ -1956,7 +2091,7 @@ function createMarkResolver(env) {
1956
2091
  }
1957
2092
  return null;
1958
2093
  };
1959
- const resolveByGeometry = (x3, y5, sel) => {
2094
+ const resolveByGeometry = (x4, y5, sel) => {
1960
2095
  try {
1961
2096
  const cands = root.querySelectorAll(sel);
1962
2097
  let best = null, bestArea = Number.MAX_VALUE;
@@ -1965,7 +2100,7 @@ function createMarkResolver(env) {
1965
2100
  if (!el.getAttribute("data-row-idx")) continue;
1966
2101
  const r = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
1967
2102
  if (!r || r.width <= 0 || r.height <= 0) continue;
1968
- if (x3 < r.left || x3 > r.right || y5 < r.top || y5 > r.bottom) continue;
2103
+ if (x4 < r.left || x4 > r.right || y5 < r.top || y5 > r.bottom) continue;
1969
2104
  const area = r.width * r.height;
1970
2105
  if (area < bestArea) {
1971
2106
  bestArea = area;
@@ -2201,9 +2336,9 @@ var VALUE_AXIS_MIN_FIT = 0.8;
2201
2336
  var MIN_AXIS_SPAN_PX = 40;
2202
2337
  var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
2203
2338
  function num(el, name) {
2204
- const v3 = el.getAttribute?.(name);
2205
- if (v3 === null || v3 === void 0 || String(v3).trim() === "") return NaN;
2206
- return parseFloat(String(v3));
2339
+ const v2 = el.getAttribute?.(name);
2340
+ if (v2 === null || v2 === void 0 || String(v2).trim() === "") return NaN;
2341
+ return parseFloat(String(v2));
2207
2342
  }
2208
2343
  function median(xs) {
2209
2344
  if (!xs.length) return NaN;
@@ -2211,15 +2346,15 @@ function median(xs) {
2211
2346
  const m2 = s.length >> 1;
2212
2347
  return s.length % 2 ? s[m2] : (s[m2 - 1] + s[m2]) / 2;
2213
2348
  }
2214
- function robustLine(v3, pos) {
2215
- const n = v3.length;
2349
+ function robustLine(v2, pos) {
2350
+ const n = v2.length;
2216
2351
  const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
2217
2352
  const idx = [];
2218
2353
  for (let i = 0; i < n; i += step) idx.push(i);
2219
2354
  const slopes = [];
2220
2355
  for (let p2 = 0; p2 < idx.length; p2++) {
2221
2356
  for (let q4 = p2 + 1; q4 < idx.length; q4++) {
2222
- const dv = v3[idx[q4]] - v3[idx[p2]];
2357
+ const dv = v2[idx[q4]] - v2[idx[p2]];
2223
2358
  if (Math.abs(dv) < 1e-12) continue;
2224
2359
  slopes.push((pos[idx[q4]] - pos[idx[p2]]) / dv);
2225
2360
  }
@@ -2227,7 +2362,7 @@ function robustLine(v3, pos) {
2227
2362
  if (slopes.length < 3) return null;
2228
2363
  const b4 = median(slopes);
2229
2364
  if (!Number.isFinite(b4) || Math.abs(b4) < 1e-12) return null;
2230
- const a4 = median(pos.map((y5, i) => y5 - b4 * v3[i]));
2365
+ const a4 = median(pos.map((y5, i) => y5 - b4 * v2[i]));
2231
2366
  return Number.isFinite(a4) ? { a: a4, b: b4 } : null;
2232
2367
  }
2233
2368
  function censusValuePlacement(container, data) {
@@ -2245,40 +2380,40 @@ function censusValuePlacement(container, data) {
2245
2380
  if (!/^\d+$/.test(raw)) continue;
2246
2381
  const i = +raw;
2247
2382
  const row = rows[i];
2248
- const x3 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
2249
- if (!row || !Number.isFinite(x3) || !Number.isFinite(y5) || !(r > 0)) continue;
2383
+ const x4 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
2384
+ if (!row || !Number.isFinite(x4) || !Number.isFinite(y5) || !(r > 0)) continue;
2250
2385
  seen.add(i);
2251
- dots.push({ row, x: x3, y: y5, r });
2386
+ dots.push({ row, x: x4, y: y5, r });
2252
2387
  }
2253
2388
  if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
2254
2389
  let best = null;
2255
2390
  for (let c2 = 0; c2 < columns.length; c2++) {
2256
2391
  if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
2257
2392
  const vals = dots.map((d2) => {
2258
- const v3 = d2.row[c2];
2259
- return v3 === null || v3 === void 0 || v3 === "" ? NaN : typeof v3 === "number" ? v3 : Number(v3);
2393
+ const v2 = d2.row[c2];
2394
+ return v2 === null || v2 === void 0 || v2 === "" ? NaN : typeof v2 === "number" ? v2 : Number(v2);
2260
2395
  });
2261
2396
  const finite = vals.filter(Number.isFinite);
2262
2397
  if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
2263
- const logs = finite.every((v3) => v3 > 0) ? [false, true] : [false];
2398
+ const logs = finite.every((v2) => v2 > 0) ? [false, true] : [false];
2264
2399
  for (const log of logs) {
2265
2400
  for (const axis of ["x", "y"]) {
2266
2401
  const keep = [];
2267
- const v3 = [], pos = [];
2268
- dots.forEach((d2, k2) => {
2269
- if (!Number.isFinite(vals[k2])) return;
2270
- keep.push(k2);
2271
- v3.push(log ? Math.log10(vals[k2]) : vals[k2]);
2402
+ const v2 = [], pos = [];
2403
+ dots.forEach((d2, k3) => {
2404
+ if (!Number.isFinite(vals[k3])) return;
2405
+ keep.push(k3);
2406
+ v2.push(log ? Math.log10(vals[k3]) : vals[k3]);
2272
2407
  pos.push(axis === "x" ? d2.x : d2.y);
2273
2408
  });
2274
- const line = robustLine(v3, pos);
2409
+ const line = robustLine(v2, pos);
2275
2410
  if (!line) continue;
2276
2411
  const lo = Math.min(...pos), hi = Math.max(...pos);
2277
2412
  if (hi - lo < MIN_AXIS_SPAN_PX) continue;
2278
2413
  const mean = pos.reduce((s, p2) => s + p2, 0) / pos.length;
2279
2414
  let ssRes = 0, ssTot = 0;
2280
- const res = pos.map((p2, k2) => {
2281
- const e = p2 - (line.a + line.b * v3[k2]);
2415
+ const res = pos.map((p2, k3) => {
2416
+ const e = p2 - (line.a + line.b * v2[k3]);
2282
2417
  ssRes += e * e;
2283
2418
  ssTot += (p2 - mean) ** 2;
2284
2419
  return e;
@@ -2287,8 +2422,8 @@ function censusValuePlacement(container, data) {
2287
2422
  const fit = 1 - ssRes / ssTot;
2288
2423
  if (fit >= VALUE_AXIS_MIN_FIT && (!best || fit > best.fit)) {
2289
2424
  const full = new Array(dots.length).fill(NaN);
2290
- keep.forEach((k2, j2) => {
2291
- full[k2] = res[j2];
2425
+ keep.forEach((k3, j3) => {
2426
+ full[k3] = res[j3];
2292
2427
  });
2293
2428
  best = { col: c2, axis, fit, res: full, log };
2294
2429
  }
@@ -2298,8 +2433,8 @@ function censusValuePlacement(container, data) {
2298
2433
  if (!best) return EMPTY4;
2299
2434
  let off = 0, measured = 0;
2300
2435
  const radii = [];
2301
- dots.forEach((d2, k2) => {
2302
- const e = best.res[k2];
2436
+ dots.forEach((d2, k3) => {
2437
+ const e = best.res[k3];
2303
2438
  if (!Number.isFinite(e)) return;
2304
2439
  measured++;
2305
2440
  const inRadii = Math.abs(e) / Math.max(d2.r, 1);
@@ -2339,12 +2474,12 @@ function contentExtentOf(boxes) {
2339
2474
  if (usable.length === 0) return { w: 0, h: 0, source: "none" };
2340
2475
  const inFlow = usable.filter((b4) => !b4.floating);
2341
2476
  const counted = inFlow.length > 0 ? inFlow : usable;
2342
- let w2 = 0, h4 = 0;
2477
+ let w2 = 0, h3 = 0;
2343
2478
  for (const b4 of counted) {
2344
2479
  if (b4.right > w2) w2 = b4.right;
2345
- if (b4.bottom > h4) h4 = b4.bottom;
2480
+ if (b4.bottom > h3) h3 = b4.bottom;
2346
2481
  }
2347
- return { w: w2, h: h4, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
2482
+ return { w: w2, h: h3, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
2348
2483
  }
2349
2484
  function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
2350
2485
  return {
@@ -2354,8 +2489,8 @@ function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL
2354
2489
  }
2355
2490
  var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
2356
2491
  var PHANTOM_FRACTION = 0.95;
2357
- function isPhantomBox(w2, h4, refW, refH) {
2358
- return w2 > refW * PHANTOM_FRACTION || h4 > refH * PHANTOM_FRACTION;
2492
+ function isPhantomBox(w2, h3, refW, refH) {
2493
+ return w2 > refW * PHANTOM_FRACTION || h3 > refH * PHANTOM_FRACTION;
2359
2494
  }
2360
2495
  var MAX_FRAME_GROW_FACTOR = 20;
2361
2496
  function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
@@ -2654,8 +2789,8 @@ function pinScrolledAxis(container, svg) {
2654
2789
  }
2655
2790
  const pinSvg = doc.createElementNS(SVG_NS2, "svg");
2656
2791
  for (const a4 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
2657
- const v3 = svg.getAttribute(a4);
2658
- if (v3) pinSvg.setAttribute(a4, v3);
2792
+ const v2 = svg.getAttribute(a4);
2793
+ if (v2) pinSvg.setAttribute(a4, v2);
2659
2794
  }
2660
2795
  const styles = svg.querySelectorAll("style");
2661
2796
  for (let i = 0; i < styles.length; i++) pinSvg.appendChild(styles[i].cloneNode(true));
@@ -2836,10 +2971,10 @@ function parseRGBA(c2) {
2836
2971
  const s = c2.trim();
2837
2972
  const m2 = s.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
2838
2973
  if (m2) return [parseFloat(m2[1]), parseFloat(m2[2]), parseFloat(m2[3]), m2[4] !== void 0 ? parseFloat(m2[4]) : 1];
2839
- let h4 = s.replace(/^#/, "");
2840
- if (h4.length === 3) h4 = h4.split("").map((ch) => ch + ch).join("");
2841
- if (h4.length === 6 && /^[0-9a-fA-F]{6}$/.test(h4)) {
2842
- return [parseInt(h4.slice(0, 2), 16), parseInt(h4.slice(2, 4), 16), parseInt(h4.slice(4, 6), 16), 1];
2974
+ let h3 = s.replace(/^#/, "");
2975
+ if (h3.length === 3) h3 = h3.split("").map((ch) => ch + ch).join("");
2976
+ if (h3.length === 6 && /^[0-9a-fA-F]{6}$/.test(h3)) {
2977
+ return [parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16), 1];
2843
2978
  }
2844
2979
  return null;
2845
2980
  }
@@ -2874,8 +3009,8 @@ var NAMED = {
2874
3009
  };
2875
3010
  function toRGBA(c2) {
2876
3011
  if (typeof c2 !== "string") return null;
2877
- const k2 = c2.trim().toLowerCase();
2878
- if (k2 in NAMED) return NAMED[k2];
3012
+ const k3 = c2.trim().toLowerCase();
3013
+ if (k3 in NAMED) return NAMED[k3];
2879
3014
  return parseRGBA(c2);
2880
3015
  }
2881
3016
  function compositeOver(fg, bg) {
@@ -2887,8 +3022,8 @@ function compositeOver(fg, bg) {
2887
3022
  ];
2888
3023
  }
2889
3024
  function relativeLuminance(rgb) {
2890
- const lin = rgb.map((v3) => {
2891
- const s = v3 / 255;
3025
+ const lin = rgb.map((v2) => {
3026
+ const s = v2 / 255;
2892
3027
  return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
2893
3028
  });
2894
3029
  return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
@@ -2925,20 +3060,20 @@ var GLYPH_SAMPLE_N = 3;
2925
3060
  function glyphSampleGrid(box, n = GLYPH_SAMPLE_N) {
2926
3061
  const out = [];
2927
3062
  if (!box || !(box.width > 0) || !(box.height > 0) || !(n >= 1)) return out;
2928
- const k2 = Math.floor(n);
2929
- for (let i = 0; i < k2; i++) {
2930
- for (let j2 = 0; j2 < k2; j2++) {
3063
+ const k3 = Math.floor(n);
3064
+ for (let i = 0; i < k3; i++) {
3065
+ for (let j3 = 0; j3 < k3; j3++) {
2931
3066
  out.push({
2932
- x: box.left + box.width * (i + 0.5) / k2,
2933
- y: box.top + box.height * (j2 + 0.5) / k2
3067
+ x: box.left + box.width * (i + 0.5) / k3,
3068
+ y: box.top + box.height * (j3 + 0.5) / k3
2934
3069
  });
2935
3070
  }
2936
3071
  }
2937
3072
  return out;
2938
3073
  }
2939
- function clamp01(v3) {
2940
- if (typeof v3 !== "number" || !isFinite(v3)) return 1;
2941
- return Math.max(0, Math.min(1, v3));
3074
+ function clamp01(v2) {
3075
+ if (typeof v2 !== "number" || !isFinite(v2)) return 1;
3076
+ return Math.max(0, Math.min(1, v2));
2942
3077
  }
2943
3078
  function hexToRGB(hex2) {
2944
3079
  const p2 = toRGBA(hex2);
@@ -3054,31 +3189,31 @@ function applyLabelContrast(container, opts = {}) {
3054
3189
  const glyphArea = tr.width * tr.height;
3055
3190
  const txRoot = paintRoot(tx, container);
3056
3191
  let over = 0;
3057
- const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x3) => {
3058
- if (!(x3.ov > 0)) return false;
3059
- if (drawnBeneath(x3.mk, tx, txRoot)) return true;
3060
- if (effAlpha(x3.mk) >= PILL_MIN_ALPHA) over++;
3192
+ const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x4) => {
3193
+ if (!(x4.ov > 0)) return false;
3194
+ if (drawnBeneath(x4.mk, tx, txRoot)) return true;
3195
+ if (effAlpha(x4.mk) >= PILL_MIN_ALPHA) over++;
3061
3196
  return false;
3062
3197
  });
3063
3198
  if (over > 0) report.paintedOver++;
3064
3199
  const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
3065
3200
  const painted = pts.map(() => false);
3066
3201
  let unmeasured = 0;
3067
- const under = boxed.map((x3) => {
3068
- const mask = backedSamples(x3.mk.el, pts);
3202
+ const under = boxed.map((x4) => {
3203
+ const mask = backedSamples(x4.mk.el, pts);
3069
3204
  if (mask === null) {
3070
3205
  unmeasured++;
3071
- return x3;
3206
+ return x4;
3072
3207
  }
3073
3208
  let inside = 0;
3074
- const paints = effAlpha(x3.mk) >= PILL_MIN_ALPHA;
3209
+ const paints = effAlpha(x4.mk) >= PILL_MIN_ALPHA;
3075
3210
  for (let i = 0; i < mask.length; i++) {
3076
3211
  if (!mask[i]) continue;
3077
3212
  inside++;
3078
3213
  if (paints) painted[i] = true;
3079
3214
  }
3080
- return { mk: x3.mk, ov: glyphArea * (inside / mask.length) };
3081
- }).filter((x3) => x3.ov > 0);
3215
+ return { mk: x4.mk, ov: glyphArea * (inside / mask.length) };
3216
+ }).filter((x4) => x4.ov > 0);
3082
3217
  if (under.length === 0 && boxed.length > 0) report.offFill++;
3083
3218
  if (under.length === 0) continue;
3084
3219
  if (unmeasured === 0 && pts.length > 0) {
@@ -3090,10 +3225,10 @@ function applyLabelContrast(container, opts = {}) {
3090
3225
  }
3091
3226
  }
3092
3227
  report.scanned++;
3093
- const opaqueUnder = under.filter((x3) => effAlpha(x3.mk) >= PILL_OPAQUE_ALPHA);
3228
+ const opaqueUnder = under.filter((x4) => effAlpha(x4.mk) >= PILL_OPAQUE_ALPHA);
3094
3229
  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);
3095
3230
  const cell = cellEntry.mk;
3096
- const pill = under.find((x3) => x3.mk !== cell && isPillBackdropAlpha(effAlpha(x3.mk)) && x3.mk.ord > cell.ord && pillBacksGlyph(x3.ov, glyphArea))?.mk;
3231
+ const pill = under.find((x4) => x4.mk !== cell && isPillBackdropAlpha(effAlpha(x4.mk)) && x4.mk.ord > cell.ord && pillBacksGlyph(x4.ov, glyphArea))?.mk;
3097
3232
  const cellRGBA = toRGBA(cell.fill);
3098
3233
  let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
3099
3234
  if (pill) {
@@ -3145,7 +3280,7 @@ function sessionViewStateProvider(container) {
3145
3280
  load: () => store,
3146
3281
  save: (next) => {
3147
3282
  if (!next || typeof next !== "object") return;
3148
- for (const k2 of Object.keys(store)) delete store[k2];
3283
+ for (const k3 of Object.keys(store)) delete store[k3];
3149
3284
  Object.assign(store, next);
3150
3285
  }
3151
3286
  };
@@ -3154,7 +3289,7 @@ function noopViewStateProvider() {
3154
3289
  return { load: () => ({}), save: () => {
3155
3290
  } };
3156
3291
  }
3157
- var parseRowIdxs = (s) => (s || "").split(",").map((x3) => parseInt(x3, 10)).filter((n) => Number.isFinite(n));
3292
+ var parseRowIdxs = (s) => (s || "").split(",").map((x4) => parseInt(x4, 10)).filter((n) => Number.isFinite(n));
3158
3293
  var D3_PLUGIN_PACKAGES = {
3159
3294
  sankey: "d3-sankey",
3160
3295
  sankeyLinkHorizontal: "d3-sankey",
@@ -3184,7 +3319,7 @@ var D3_PLUGIN_PACKAGES = {
3184
3319
  };
3185
3320
  function requiredD3Plugins(code) {
3186
3321
  const out = /* @__PURE__ */ new Set();
3187
- for (const m2 of String(code || "").matchAll(/\bd3\s*\.\s*(\w+)\s*[.(]/g)) {
3322
+ for (const m2 of stripJsComments(String(code || "")).matchAll(/\bd3\s*\.\s*(\w+)\s*[.(]/g)) {
3188
3323
  const pkg = D3_PLUGIN_PACKAGES[m2[1]];
3189
3324
  if (pkg) out.add(pkg);
3190
3325
  }
@@ -3239,7 +3374,7 @@ function compileRenderFn(code, win, doc, d3) {
3239
3374
  return fn;
3240
3375
  }
3241
3376
  var ASYNC_RENDER_TIMEOUT_MS = 15e3;
3242
- var isThenable = (v3) => !!v3 && (typeof v3 === "object" || typeof v3 === "function") && typeof v3.then === "function";
3377
+ var isThenable = (v2) => !!v2 && (typeof v2 === "object" || typeof v2 === "function") && typeof v2.then === "function";
3243
3378
  function createChartHost(container, config) {
3244
3379
  const doc = container.ownerDocument;
3245
3380
  const win = doc?.defaultView ?? globalThis;
@@ -3247,7 +3382,7 @@ function createChartHost(container, config) {
3247
3382
  let data = config.data;
3248
3383
  {
3249
3384
  const stamped = config.data?.meta?.hostContract;
3250
- const major = (v3) => (v3 || "").split(".")[0];
3385
+ const major = (v2) => (v2 || "").split(".")[0];
3251
3386
  if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
3252
3387
  try {
3253
3388
  (win?.console ?? console)?.warn(
@@ -3720,6 +3855,7 @@ export {
3720
3855
  Xt,
3721
3856
  qt,
3722
3857
  buildRenderPayload,
3858
+ stripJsComments,
3723
3859
  createMarkResolver,
3724
3860
  ensureCrossfilterHitTargets,
3725
3861
  censusMarks,