@bicharts/chart-host 0.5.100 → 0.5.101

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,7 +22,7 @@ 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 d, s2 = !n.document && !!n.postMessage, a4 = n.IS_PAPA_WORKER || false, o = {}, h2 = 0, v3 = {};
25
+ var d2, s = !n.document && !!n.postMessage, a2 = n.IS_PAPA_WORKER || false, o = {}, h3 = 0, v2 = {};
26
26
  function P4(e) {
27
27
  return 65279 === e.charCodeAt(0) ? e.slice(1) : e;
28
28
  }
@@ -30,32 +30,32 @@ var require_papaparse_min = __commonJS({
30
30
  this._handle = null, this._finished = false, this._completed = false, this._halted = false, this._input = null, this._baseIndex = 0, this._partialLine = "", this._rowCount = 0, this._start = 0, this._nextChunk = null, this.isFirstChunk = true, this._completeResults = { data: [], errors: [], meta: {} }, function(e2) {
31
31
  var t = b2(e2);
32
32
  t.chunkSize = parseInt(t.chunkSize), e2.step || e2.chunk || (t.chunkSize = null);
33
- this._handle = new i2(t), (this._handle.streamer = this)._config = t;
33
+ this._handle = new i(t), (this._handle.streamer = this)._config = t;
34
34
  }.call(this, e), this.parseChunk = function(t, e2) {
35
- var i4 = parseInt(this._config.skipFirstNLines) || 0;
36
- if (this.isFirstChunk && 0 < i4) {
35
+ var i2 = parseInt(this._config.skipFirstNLines) || 0;
36
+ if (this.isFirstChunk && 0 < i2) {
37
37
  let e4 = this._config.newline;
38
- e4 || (r2 = this._config.quoteChar || '"', e4 = this._handle.guessLineEndings(t, r2)), t = [...t.split(e4).slice(i4)].join(e4);
38
+ e4 || (r2 = this._config.quoteChar || '"', e4 = this._handle.guessLineEndings(t, r2)), t = [...t.split(e4).slice(i2)].join(e4);
39
39
  }
40
40
  this.isFirstChunk && q3(this._config.beforeFirstChunk) && void 0 !== (r2 = this._config.beforeFirstChunk(t)) && (t = r2), this.isFirstChunk = false, this._halted = false;
41
- var i4 = this._partialLine + t, r2 = (this._partialLine = "", this._handle.parse(i4, this._baseIndex, !this._finished));
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
- t = r2.meta.cursor, i4 = (this._finished || (this._partialLine = i4.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: i4 });
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 (a2) n.postMessage({ results: r2, workerId: v2.WORKER_ID, finished: i2 });
45
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 || !i4 || !q3(this._config.complete) || r2 && r2.meta.aborted || (this._config.complete(this._completeResults, this._input), this._completed = true), i4 || 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
- q3(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) : a2 && 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), u4.call(this, e), this._nextChunk = s2 ? function() {
58
+ (e = e || {}).chunkSize || (e.chunkSize = v2.RemoteChunkSize), u4.call(this, e), this._nextChunk = s ? function() {
59
59
  this._readChunk(), this._chunkLoaded();
60
60
  } : function() {
61
61
  this._readChunk();
@@ -64,18 +64,18 @@ var require_papaparse_min = __commonJS({
64
64
  }, this._readChunk = function() {
65
65
  if (this._finished) this._chunkLoaded();
66
66
  else {
67
- if (r2 = new XMLHttpRequest(), this._config.withCredentials && (r2.withCredentials = this._config.withCredentials), s2 || (r2.onload = y4(this._chunkLoaded, this), r2.onerror = y4(this._chunkError, this)), r2.open(this._config.downloadRequestBody ? "POST" : "GET", this._input, !s2), this._config.downloadRequestHeaders) {
67
+ if (r2 = new XMLHttpRequest(), this._config.withCredentials && (r2.withCredentials = this._config.withCredentials), s || (r2.onload = y5(this._chunkLoaded, this), r2.onerror = y5(this._chunkError, this)), r2.open(this._config.downloadRequestBody ? "POST" : "GET", this._input, !s), this._config.downloadRequestHeaders) {
68
68
  var e2, t = this._config.downloadRequestHeaders;
69
69
  for (e2 in t) r2.setRequestHeader(e2, t[e2]);
70
70
  }
71
- var i4;
72
- this._config.chunkSize && (i4 = this._start + this._config.chunkSize - 1, r2.setRequestHeader("Range", "bytes=" + this._start + "-" + i4));
71
+ var i2;
72
+ this._config.chunkSize && (i2 = this._start + this._config.chunkSize - 1, r2.setRequestHeader("Range", "bytes=" + this._start + "-" + i2));
73
73
  try {
74
74
  r2.send(this._config.downloadRequestBody);
75
75
  } catch (e4) {
76
76
  this._chunkError(e4.message);
77
77
  }
78
- s2 && 0 === r2.status && this._chunkError();
78
+ s && 0 === r2.status && this._chunkError();
79
79
  }
80
80
  }, this._chunkLoaded = function() {
81
81
  4 === r2.readyState && (r2.status < 200 || 400 <= r2.status ? this._chunkError() : (this._start += this._config.chunkSize || r2.responseText.length, this._finished = !this._config.chunkSize || this._start >= ((e2) => null !== (e2 = e2.getResponseHeader("Content-Range")) ? parseInt(e2.substring(e2.lastIndexOf("/") + 1)) : -1)(r2), this.parseChunk(r2.responseText)));
@@ -84,34 +84,34 @@ var require_papaparse_min = __commonJS({
84
84
  this._sendError(new Error(e2));
85
85
  };
86
86
  }
87
- function l2(e) {
88
- (e = e || {}).chunkSize || (e.chunkSize = v3.LocalChunkSize), u4.call(this, e);
89
- var i4, r2, n2 = "undefined" != typeof FileReader;
87
+ function l(e) {
88
+ (e = e || {}).chunkSize || (e.chunkSize = v2.LocalChunkSize), u4.call(this, e);
89
+ var i2, r2, n2 = "undefined" != typeof FileReader;
90
90
  this.stream = function(e2) {
91
- this._input = e2, r2 = e2.slice || e2.webkitSlice || e2.mozSlice, n2 ? ((i4 = new FileReader()).onload = y4(this._chunkLoaded, this), i4.onerror = y4(this._chunkError, this)) : i4 = new FileReaderSync(), this._nextChunk();
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();
92
92
  }, this._nextChunk = function() {
93
93
  this._finished || this._config.preview && !(this._rowCount < this._config.preview) || this._readChunk();
94
94
  }, this._readChunk = function() {
95
- var e2 = this._input, t = (this._config.chunkSize && (t = Math.min(this._start + this._config.chunkSize, this._input.size), e2 = r2.call(e2, this._start, t)), i4.readAsText(e2, this._config.encoding));
95
+ var e2 = this._input, t = (this._config.chunkSize && (t = Math.min(this._start + this._config.chunkSize, this._input.size), e2 = r2.call(e2, this._start, t)), i2.readAsText(e2, this._config.encoding));
96
96
  n2 || this._chunkLoaded({ target: { result: t } });
97
97
  }, this._chunkLoaded = function(e2) {
98
98
  this._start += this._config.chunkSize, this._finished = !this._config.chunkSize || this._start >= this._input.size, this.parseChunk(e2.target.result);
99
99
  }, this._chunkError = function() {
100
- this._sendError(i4.error);
100
+ this._sendError(i2.error);
101
101
  };
102
102
  }
103
103
  function c2(e) {
104
- var i4;
104
+ var i2;
105
105
  u4.call(this, e = e || {}), this.stream = function(e2) {
106
- return i4 = e2, this._nextChunk();
106
+ return i2 = e2, this._nextChunk();
107
107
  }, this._nextChunk = function() {
108
108
  var e2, t;
109
- if (!this._finished) return e2 = this._config.chunkSize, i4 = e2 ? (t = i4.substring(0, e2), i4.substring(e2)) : (t = i4, ""), this._finished = !i4, this.parseChunk(t);
109
+ if (!this._finished) return e2 = this._config.chunkSize, i2 = e2 ? (t = i2.substring(0, e2), i2.substring(e2)) : (t = i2, ""), this._finished = !i2, this.parseChunk(t);
110
110
  };
111
111
  }
112
112
  function p2(e) {
113
113
  u4.call(this, e = e || {});
114
- var t = [], i4 = true, r2 = false;
114
+ var t = [], i2 = true, r2 = false;
115
115
  this.pause = function() {
116
116
  u4.prototype.pause.apply(this, arguments), this._input.pause();
117
117
  }, this.resume = function() {
@@ -121,32 +121,32 @@ var require_papaparse_min = __commonJS({
121
121
  }, this._checkIsFinished = function() {
122
122
  r2 && 1 === t.length && (this._finished = true);
123
123
  }, this._nextChunk = function() {
124
- this._checkIsFinished(), t.length ? this.parseChunk(t.shift()) : i4 = true;
125
- }, this._streamData = y4(function(e2) {
124
+ this._checkIsFinished(), t.length ? this.parseChunk(t.shift()) : i2 = true;
125
+ }, this._streamData = y5(function(e2) {
126
126
  try {
127
- t.push("string" == typeof e2 ? e2 : e2.toString(this._config.encoding)), i4 && (i4 = false, this._checkIsFinished(), this.parseChunk(t.shift()));
127
+ t.push("string" == typeof e2 ? e2 : e2.toString(this._config.encoding)), i2 && (i2 = false, this._checkIsFinished(), this.parseChunk(t.shift()));
128
128
  } catch (e4) {
129
129
  this._streamError(e4);
130
130
  }
131
- }, this), this._streamError = y4(function(e2) {
131
+ }, this), this._streamError = y5(function(e2) {
132
132
  this._streamCleanUp(), this._sendError(e2);
133
- }, this), this._streamEnd = y4(function() {
133
+ }, this), this._streamEnd = y5(function() {
134
134
  this._streamCleanUp(), r2 = true, this._streamData("");
135
- }, this), this._streamCleanUp = y4(function() {
135
+ }, this), this._streamCleanUp = y5(function() {
136
136
  this._input.removeListener("data", this._streamData), this._input.removeListener("end", this._streamEnd), this._input.removeListener("error", this._streamError);
137
137
  }, this);
138
138
  }
139
- function i2(m2) {
140
- var n2, s4, a5, t, o2 = Math.pow(2, 53), h3 = -o2, u5 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, d2 = /^((\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)))$/, i4 = this, r2 = 0, f5 = 0, l3 = false, e = false, c4 = [], p4 = { data: [], errors: [], meta: {} };
141
- function y5(e2) {
142
- return "greedy" === m2.skipEmptyLines ? "" === e2.join("").trim() : 1 === e2.length && 0 === e2[0].length;
139
+ function i(m4) {
140
+ var n2, s2, a4, t, o2 = Math.pow(2, 53), h4 = -o2, u5 = /^\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
+ function y6(e2) {
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), m2.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
146
- return !y5(e4);
145
+ if (p4 && a4 && (k2("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + v2.DefaultDelimiter + "'"), a4 = false), m4.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
146
+ return !y6(e4);
147
147
  })), _3()) {
148
148
  let t4 = function(e4, t5) {
149
- e4 = P4(e4), q3(m2.transformHeader) && (e4 = m2.transformHeader(e4, t5)), c4.push(e4);
149
+ e4 = P4(e4), q3(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])) {
@@ -154,181 +154,181 @@ var require_papaparse_min = __commonJS({
154
154
  p4.data.splice(0, 1);
155
155
  } else p4.data.forEach(t4);
156
156
  }
157
- function i5(e4, t4) {
158
- for (var i6 = m2.header ? {} : [], r5 = 0; r5 < e4.length; r5++) {
159
- var n4 = r5, s5 = e4[r5], s5 = ((e5, t5) => ((e6) => (m2.dynamicTypingFunction && void 0 === m2.dynamicTyping[e6] && (m2.dynamicTyping[e6] = m2.dynamicTypingFunction(e6)), true === (m2.dynamicTyping[e6] || m2.dynamicTyping)))(e5) ? "true" === t5 || "TRUE" === t5 || "false" !== t5 && "FALSE" !== t5 && (((e6) => {
157
+ function i4(e4, t4) {
158
+ for (var i5 = m4.header ? {} : [], r5 = 0; r5 < e4.length; r5++) {
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 (u5.test(e6)) {
161
161
  e6 = parseFloat(e6);
162
- if (h3 < e6 && e6 < o2) return 1;
162
+ if (h4 < e6 && e6 < o2) return 1;
163
163
  }
164
- })(t5) ? parseFloat(t5) : d2.test(t5) ? new Date(t5) : "" === t5 ? null : t5) : t5)(n4 = m2.header ? r5 >= c4.length ? "__parsed_extra" : c4[r5] : n4, s5 = m2.transform ? m2.transform(s5, n4) : s5);
165
- "__parsed_extra" === n4 ? (i6[n4] = i6[n4] || [], i6[n4].push(s5)) : i6[n4] = s5;
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
+ "__parsed_extra" === n4 ? (i5[n4] = i5[n4] || [], i5[n4].push(s4)) : i5[n4] = s4;
166
166
  }
167
- return m2.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)), i6;
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;
168
168
  }
169
169
  var r4;
170
- p4 && (m2.header || m2.dynamicTyping || m2.transform) && (r4 = 1, !p4.data.length || Array.isArray(p4.data[0]) ? (p4.data = p4.data.map(i5), r4 = p4.data.length) : p4.data = i5(p4.data, 0), m2.header && p4.meta && (p4.meta.fields = c4), f5 += r4);
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
172
  function _3() {
173
- return m2.header && 0 === c4.length;
173
+ return m4.header && 0 === c4.length;
174
174
  }
175
- function k2(e2, t2, i5, r4) {
176
- e2 = { type: e2, code: t2, message: i5 };
175
+ function k2(e2, t2, i4, r4) {
176
+ e2 = { type: e2, code: t2, message: i4 };
177
177
  void 0 !== r4 && (e2.row = r4), p4.errors.push(e2);
178
178
  }
179
- q3(m2.step) && (t = m2.step, m2.step = function(e2) {
180
- p4 = e2, _3() ? g4() : (g4(), 0 !== p4.data.length && (r2 += e2.data.length, m2.preview && r2 > m2.preview ? s4.abort() : (p4.data = p4.data[0], t(p4, i4))));
181
- }), this.parse = function(e2, t2, i5) {
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, i6, r5, n4) => {
183
- var s5, a6, o4, h4;
184
- n4 = n4 || [",", " ", "|", ";", v3.RECORD_SEP, v3.UNIT_SEP];
179
+ q3(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))));
181
+ }), this.parse = function(e2, t2, i4) {
182
+ var r4 = m4.quoteChar || '"', r4 = (m4.newline || (m4.newline = this.guessLineEndings(e2, r4)), a4 = false, m4.delimiter ? q3(m4.delimiter) && (m4.delimiter = m4.delimiter(e2), p4.meta.delimiter = m4.delimiter) : ((r4 = ((e4, t4, i5, r5, n4) => {
183
+ var s4, a5, o4, h5;
184
+ n4 = n4 || [",", " ", "|", ";", v2.RECORD_SEP, v2.UNIT_SEP];
185
185
  for (var u6 = 0; u6 < n4.length; u6++) {
186
- for (var d3, f6 = n4[u6], l4 = 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++) i6 && y5(g5.data[_4]) ? p5++ : (d3 = g5.data[_4].length, c5 += d3, void 0 === o4 ? o4 = d3 : 0 < d3 && (l4 += Math.abs(d3 - o4), o4 = d3));
187
- 0 < g5.data.length && (c5 /= g5.data.length - p5), (void 0 === a6 || l4 <= a6) && (void 0 === h4 || h4 < c5) && 1.99 < c5 && (a6 = l4, s5 = f6, h4 = c5);
186
+ for (var d4, f6 = n4[u6], 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 === a5 || l3 <= a5) && (void 0 === h5 || h5 < c5) && 1.99 < c5 && (a5 = l3, s4 = f6, h5 = c5);
188
188
  }
189
- return { successful: !!(m2.delimiter = s5), bestDelimiter: s5 };
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), b2(m2));
191
- return m2.preview && m2.header && r4.preview++, n2 = e2, s4 = new E4(r4), p4 = s4.parse(n2, t2, i5), g4(), l3 ? { meta: { paused: true } } : p4 || { meta: { paused: false } };
189
+ return { successful: !!(m4.delimiter = s4), bestDelimiter: s4 };
190
+ })(e2, m4.newline, m4.skipEmptyLines, m4.comments, m4.delimitersToGuess)).successful ? m4.delimiter = r4.bestDelimiter : (a4 = true, m4.delimiter = v2.DefaultDelimiter), p4.meta.delimiter = m4.delimiter), b2(m4));
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
- return l3;
193
+ return l2;
194
194
  }, this.pause = function() {
195
- l3 = true, s4.abort(), n2 = q3(m2.chunk) ? "" : n2.substring(s4.getCharIndex());
195
+ l2 = true, s2.abort(), n2 = q3(m4.chunk) ? "" : n2.substring(s2.getCharIndex());
196
196
  }, this.resume = function() {
197
- i4.streamer._halted ? (l3 = false, i4.streamer.parseChunk(n2, true)) : setTimeout(i4.resume, 3);
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, s4.abort(), p4.meta.aborted = true, q3(m2.complete) && m2.complete(p4), n2 = "";
201
+ e = true, s2.abort(), p4.meta.aborted = true, q3(m4.complete) && m4.complete(p4), n2 = "";
202
202
  }, this.guessLineEndings = function(e2, t2) {
203
203
  e2 = e2.substring(0, 1048576);
204
- var t2 = new RegExp(U2(t2) + "([^]*?)" + U2(t2), "gm"), i5 = (e2 = e2.replace(t2, "")).split("\r"), t2 = e2.split("\n"), e2 = 1 < t2.length && t2[0].length < i5[0].length;
205
- if (1 === i5.length || e2) return "\n";
206
- for (var r4 = 0, n4 = 0; n4 < i5.length; n4++) "\n" === i5[n4][0] && r4++;
207
- return r4 >= i5.length / 2 ? "\r\n" : "\r";
204
+ var t2 = new RegExp(U2(t2) + "([^]*?)" + U2(t2), "gm"), i4 = (e2 = e2.replace(t2, "")).split("\r"), t2 = e2.split("\n"), e2 = 1 < t2.length && t2[0].length < i4[0].length;
205
+ if (1 === i4.length || e2) return "\n";
206
+ for (var r4 = 0, n4 = 0; n4 < i4.length; n4++) "\n" === i4[n4][0] && r4++;
207
+ return r4 >= i4.length / 2 ? "\r\n" : "\r";
208
208
  };
209
209
  }
210
210
  function U2(e) {
211
211
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
212
212
  }
213
213
  function E4(C2) {
214
- var S = (C2 = C2 || {}).delimiter, O2 = C2.newline, x2 = C2.comments, I2 = C2.step, A = 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 = ","), x2 === S) throw new Error("Comment character same as delimiter");
216
- true === x2 ? x2 = "#" : ("string" != typeof x2 || -1 < v3.BAD_DELIMITERS.indexOf(x2)) && (x2 = false), "\n" !== O2 && "\r" !== O2 && "\r\n" !== O2 && (O2 = "\n");
217
- var z3 = 0, M = false;
218
- this.parse = function(i4, t, r2) {
219
- if ("string" != typeof i4) throw new Error("Input must be a string");
220
- var n2 = i4.length, e = S.length, s4 = O2.length, a5 = x2.length, o2 = q3(I2), h3 = [], u5 = [], d2 = [], f5 = z3 = 0;
221
- if (!i4) return w2();
222
- if (T3 || false !== T3 && -1 === i4.indexOf(F4)) {
223
- for (var l3 = i4.split(O2), c4 = 0; c4 < l3.length; c4++) {
224
- if (d2 = l3[c4], z3 += d2.length, c4 !== l3.length - 1) z3 += O2.length;
214
+ var S = (C2 = C2 || {}).delimiter, O2 = C2.newline, x3 = C2.comments, I2 = C2.step, A = C2.preview, T3 = C2.fastMode, D4 = null, L2 = false, F4 = null == C2.quoteChar ? '"' : C2.quoteChar, j3 = F4;
215
+ if (void 0 !== C2.escapeChar && (j3 = C2.escapeChar), ("string" != typeof S || -1 < v2.BAD_DELIMITERS.indexOf(S)) && (S = ","), x3 === S) throw new Error("Comment character same as delimiter");
216
+ true === x3 ? x3 = "#" : ("string" != typeof x3 || -1 < v2.BAD_DELIMITERS.indexOf(x3)) && (x3 = false), "\n" !== O2 && "\r" !== O2 && "\r\n" !== O2 && (O2 = "\n");
217
+ var z3 = 0, M4 = false;
218
+ this.parse = function(i2, t, r2) {
219
+ if ("string" != typeof i2) throw new Error("Input must be a string");
220
+ var n2 = i2.length, e = S.length, s2 = O2.length, a4 = x3.length, o2 = q3(I2), h4 = [], u5 = [], d3 = [], f5 = z3 = 0;
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;
225
225
  else if (r2) return w2();
226
- if (!x2 || d2.substring(0, a5) !== x2) {
226
+ if (!x3 || d3.substring(0, a4) !== x3) {
227
227
  if (o2) {
228
- if (h3 = [], k2(d2.split(S)), R(), M) return w2();
229
- } else k2(d2.split(S));
230
- if (A && A <= c4) return h3 = h3.slice(0, A), w2(true);
228
+ if (h4 = [], k2(d3.split(S)), R(), M4) return w2();
229
+ } else k2(d3.split(S));
230
+ if (A && A <= c4) return h4 = h4.slice(0, A), w2(true);
231
231
  }
232
232
  }
233
233
  return w2();
234
234
  }
235
- for (var p4 = i4.indexOf(S, z3), g4 = i4.indexOf(O2, z3), _3 = new RegExp(U2(j3) + U2(F4), "g"), m2 = i4.indexOf(F4, z3); ; ) if (i4[z3] === F4) for (m2 = z3, z3++; ; ) {
236
- if (-1 === (m2 = i4.indexOf(F4, m2 + 1))) return r2 || u5.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h3.length, index: z3 }), E5();
237
- if (m2 === n2 - 1) return E5(i4.substring(z3, m2).replace(_3, F4));
238
- if (F4 === j3 && i4[m2 + 1] === j3) m2++;
239
- else if (F4 === j3 || 0 === m2 || i4[m2 - 1] !== j3) {
240
- -1 !== p4 && p4 < m2 + 1 && (p4 = i4.indexOf(S, m2 + 1));
241
- var y5 = v4(-1 === (g4 = -1 !== g4 && g4 < m2 + 1 ? i4.indexOf(O2, m2 + 1) : g4) ? p4 : Math.min(p4, g4));
242
- if (i4.substr(m2 + 1 + y5, e) === S) {
243
- d2.push(i4.substring(z3, m2).replace(_3, F4)), i4[z3 = m2 + 1 + y5 + e] !== F4 && (m2 = i4.indexOf(F4, z3)), p4 = i4.indexOf(S, z3), g4 = i4.indexOf(O2, z3);
235
+ for (var p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O2, z3), _3 = new RegExp(U2(j3) + 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 || u5.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(_3, F4));
238
+ if (F4 === j3 && i2[m4 + 1] === j3) m4++;
239
+ else if (F4 === j3 || 0 === m4 || i2[m4 - 1] !== j3) {
240
+ -1 !== p4 && p4 < m4 + 1 && (p4 = i2.indexOf(S, m4 + 1));
241
+ var y6 = v3(-1 === (g4 = -1 !== g4 && g4 < m4 + 1 ? i2.indexOf(O2, m4 + 1) : g4) ? p4 : Math.min(p4, g4));
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);
244
244
  break;
245
245
  }
246
- y5 = v4(g4);
247
- if (i4.substring(m2 + 1 + y5, m2 + 1 + y5 + s4) === O2) {
248
- if (d2.push(i4.substring(z3, m2).replace(_3, F4)), b4(m2 + 1 + y5 + s4), p4 = i4.indexOf(S, z3), m2 = i4.indexOf(F4, z3), o2 && (R(), M)) return w2();
249
- if (A && h3.length >= A) return w2(true);
246
+ y6 = v3(g4);
247
+ if (i2.substring(m4 + 1 + y6, m4 + 1 + y6 + s2) === O2) {
248
+ if (d3.push(i2.substring(z3, m4).replace(_3, F4)), b4(m4 + 1 + y6 + s2), p4 = i2.indexOf(S, z3), m4 = i2.indexOf(F4, z3), o2 && (R(), M4)) return w2();
249
+ if (A && h4.length >= A) return w2(true);
250
250
  break;
251
251
  }
252
- u5.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row: h3.length, index: z3 }), m2++;
252
+ u5.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 (x2 && 0 === d2.length && i4.substring(z3, z3 + a5) === x2) {
255
+ else if (x3 && 0 === d3.length && i2.substring(z3, z3 + a4) === x3) {
256
256
  if (-1 === g4) return w2();
257
- z3 = g4 + s4, g4 = i4.indexOf(O2, z3), p4 = i4.indexOf(S, z3);
258
- } else if (-1 !== p4 && (p4 < g4 || -1 === g4)) d2.push(i4.substring(z3, p4)), z3 = p4 + e, p4 = i4.indexOf(S, z3);
257
+ z3 = g4 + s2, g4 = i2.indexOf(O2, z3), p4 = i2.indexOf(S, z3);
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
- if (d2.push(i4.substring(z3, g4)), b4(g4 + s4), o2 && (R(), M)) return w2();
262
- if (A && h3.length >= A) return w2(true);
261
+ if (d3.push(i2.substring(z3, g4)), b4(g4 + s2), o2 && (R(), M4)) return w2();
262
+ if (A && h4.length >= A) return w2(true);
263
263
  }
264
264
  return E5();
265
265
  function k2(e2) {
266
- h3.push(e2), f5 = z3;
266
+ h4.push(e2), f5 = z3;
267
267
  }
268
- function v4(e2) {
268
+ function v3(e2) {
269
269
  var t2 = 0;
270
- return t2 = -1 !== e2 && (e2 = i4.substring(m2 + 1, e2)) && "" === e2.trim() ? e2.length : t2;
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 = i4.substring(z3)), d2.push(e2), z3 = n2, k2(d2), o2 && R()), w2();
273
+ return r2 || (void 0 === e2 && (e2 = i2.substring(z3)), d3.push(e2), z3 = n2, k2(d3), o2 && R()), w2();
274
274
  }
275
275
  function b4(e2) {
276
- z3 = e2, k2(d2), d2 = [], g4 = i4.indexOf(O2, z3);
276
+ z3 = e2, k2(d3), d3 = [], g4 = i2.indexOf(O2, z3);
277
277
  }
278
278
  function w2(e2) {
279
- if (C2.header && !t && h3.length && !L2) {
280
- var s5 = h3[0], a6 = /* @__PURE__ */ Object.create(null), o4 = new Set(s5);
279
+ if (C2.header && !t && h4.length && !L2) {
280
+ var s4 = h4[0], a5 = /* @__PURE__ */ Object.create(null), o4 = new Set(s4);
281
281
  let n4 = false;
282
- for (let r4 = 0; r4 < s5.length; r4++) {
283
- let i5 = P4(s5[r4]);
284
- if (a6[i5 = q3(C2.transformHeader) ? C2.transformHeader(i5, r4) : i5]) {
285
- let e4, t2 = a6[i5];
286
- for (; e4 = i5 + "_" + t2, t2++, o4.has(e4); ) ;
287
- o4.add(e4), s5[r4] = e4, a6[i5]++, n4 = true, (D3 = null === D3 ? {} : D3)[e4] = i5;
288
- } else a6[i5] = 1, s5[r4] = i5;
289
- o4.add(i5);
282
+ for (let r4 = 0; r4 < s4.length; r4++) {
283
+ let i4 = P4(s4[r4]);
284
+ if (a5[i4 = q3(C2.transformHeader) ? C2.transformHeader(i4, r4) : i4]) {
285
+ let e4, t2 = a5[i4];
286
+ for (; e4 = i4 + "_" + t2, t2++, o4.has(e4); ) ;
287
+ o4.add(e4), s4[r4] = e4, a5[i4]++, n4 = true, (D4 = null === D4 ? {} : D4)[e4] = i4;
288
+ } else a5[i4] = 1, s4[r4] = i4;
289
+ o4.add(i4);
290
290
  }
291
291
  n4 && console.warn("Duplicate headers found and renamed."), L2 = true;
292
292
  }
293
- return { data: h3, errors: u5, meta: { delimiter: S, linebreak: O2, aborted: M, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D3 } };
293
+ return { data: h4, errors: u5, meta: { delimiter: S, linebreak: O2, aborted: M4, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D4 } };
294
294
  }
295
295
  function R() {
296
- I2(w2()), h3 = [], u5 = [];
296
+ I2(w2()), h4 = [], u5 = [];
297
297
  }
298
298
  }, this.abort = function() {
299
- M = true;
299
+ M4 = true;
300
300
  }, this.getCharIndex = function() {
301
301
  return z3;
302
302
  };
303
303
  }
304
304
  function g3(e) {
305
- var t = e.data, i4 = o[t.workerId], r2 = false;
306
- if (t.error) i4.userError(t.error, t.file);
305
+ var t = e.data, i2 = o[t.workerId], r2 = false;
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
309
  r2 = true, _2(t.workerId, { data: [], errors: [], meta: { aborted: true } });
310
- }, pause: m, resume: m };
311
- if (q3(i4.userStep)) {
312
- for (var s4 = 0; s4 < t.results.data.length && (i4.userStep({ data: t.results.data[s4], errors: t.results.errors, meta: t.results.meta }, n2), !r2); s4++) ;
310
+ }, pause: m2, resume: m2 };
311
+ if (q3(i2.userStep)) {
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 q3(i4.userChunk) && (i4.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
- var i4 = o[e];
320
- q3(i4.userComplete) && i4.userComplete(t), i4.terminate(), delete o[e];
319
+ var i2 = o[e];
320
+ q3(i2.userComplete) && i2.userComplete(t), i2.terminate(), delete o[e];
321
321
  }
322
- function m() {
322
+ function m2() {
323
323
  throw new Error("Not implemented.");
324
324
  }
325
325
  function b2(e) {
326
326
  if ("object" != typeof e || null === e) return e;
327
- var t, i4 = Array.isArray(e) ? [] : {};
328
- for (t in e) i4[t] = b2(e[t]);
329
- return i4;
327
+ var t, i2 = Array.isArray(e) ? [] : {};
328
+ for (t in e) i2[t] = b2(e[t]);
329
+ return i2;
330
330
  }
331
- function y4(e, t) {
331
+ function y5(e, t) {
332
332
  return function() {
333
333
  e.apply(t, arguments);
334
334
  };
@@ -336,106 +336,106 @@ var require_papaparse_min = __commonJS({
336
336
  function q3(e) {
337
337
  return "function" == typeof e;
338
338
  }
339
- return v3.parse = function(e, t) {
340
- var i4 = (t = t || {}).dynamicTyping || false;
341
- q3(i4) && (t.dynamicTypingFunction = i4, i4 = {});
342
- if (t.dynamicTyping = i4, t.transform = !!q3(t.transform) && t.transform, !t.worker || !v3.WORKERS_SUPPORTED) return i4 = null, v3.NODE_STREAM_INPUT, "string" == typeof e ? (e = P4(e), i4 = new (t.download ? f4 : c2)(t)) : true === e.readable && q3(e.read) && q3(e.on) ? i4 = new p2(t) : (n.File && e instanceof File || e instanceof Object) && (i4 = new l2(t)), i4.stream(e);
343
- (i4 = (() => {
339
+ return v2.parse = function(e, t) {
340
+ var i2 = (t = t || {}).dynamicTyping || false;
341
+ q3(i2) && (t.dynamicTypingFunction = i2, i2 = {});
342
+ if (t.dynamicTyping = i2, t.transform = !!q3(t.transform) && t.transform, !t.worker || !v2.WORKERS_SUPPORTED) return i2 = null, v2.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
+ (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 = h2++, o[e2.id] = e2);
349
- })()).userStep = t.step, i4.userChunk = t.chunk, i4.userComplete = t.complete, i4.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, i4.postMessage({ input: e, config: t, workerId: i4.id });
350
- }, v3.unparse = function(e, t) {
351
- var s4 = false, _3 = true, m2 = ",", y5 = "\r\n", a5 = '"', o2 = a5 + a5, i4 = false, r2 = null, h3 = false, u5 = ((() => {
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
+ })()).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
+ }, v2.unparse = function(e, t) {
351
+ var s2 = false, _3 = true, m4 = ",", y6 = "\r\n", a4 = '"', o2 = a4 + a4, i2 = false, r2 = null, h4 = false, u5 = ((() => {
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 || (m2 = t.delimiter), "boolean" != typeof t.quotes && "function" != typeof t.quotes && !Array.isArray(t.quotes) || (s4 = t.quotes), "boolean" != typeof t.skipEmptyLines && "string" != typeof t.skipEmptyLines || (i4 = t.skipEmptyLines), "string" == typeof t.newline && (y5 = 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 && (a4 = t.quoteChar, o2 = a4 + a4), "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");
357
357
  r2 = t.columns;
358
358
  }
359
- void 0 !== t.escapeChar && (o2 = t.escapeChar + a5), t.escapeFormulae instanceof RegExp ? h3 = t.escapeFormulae : "boolean" == typeof t.escapeFormulae && t.escapeFormulae && (h3 = /^[=+\-@\t\r].*$/);
359
+ void 0 !== t.escapeChar && (o2 = t.escapeChar + a4), t.escapeFormulae instanceof RegExp ? h4 = t.escapeFormulae : "boolean" == typeof t.escapeFormulae && t.escapeFormulae && (h4 = /^[=+\-@\t\r].*$/);
360
360
  }
361
- })(), new RegExp(U2(a5), "g"));
361
+ })(), new RegExp(U2(a4), "g"));
362
362
  "string" == typeof e && (e = JSON.parse(e));
363
363
  if (Array.isArray(e)) {
364
- if (!e.length || Array.isArray(e[0])) return n2(null, e, i4);
365
- if ("object" == typeof e[0]) return n2(r2 || Object.keys(e[0]), e, i4);
366
- } else if ("object" == typeof e) return "string" == typeof e.data && (e.data = JSON.parse(e.data)), Array.isArray(e.data) && (e.fields || (e.fields = e.meta && e.meta.fields || r2), e.fields || (e.fields = Array.isArray(e.data[0]) ? e.fields : "object" == typeof e.data[0] ? Object.keys(e.data[0]) : []), Array.isArray(e.data[0]) || "object" == typeof e.data[0] || (e.data = [e.data])), n2(e.fields || [], e.data || [], i4);
364
+ if (!e.length || Array.isArray(e[0])) return n2(null, e, i2);
365
+ if ("object" == typeof e[0]) return n2(r2 || Object.keys(e[0]), e, i2);
366
+ } else if ("object" == typeof e) return "string" == typeof e.data && (e.data = JSON.parse(e.data)), Array.isArray(e.data) && (e.fields || (e.fields = e.meta && e.meta.fields || r2), e.fields || (e.fields = Array.isArray(e.data[0]) ? e.fields : "object" == typeof e.data[0] ? Object.keys(e.data[0]) : []), Array.isArray(e.data[0]) || "object" == typeof e.data[0] || (e.data = [e.data])), n2(e.fields || [], e.data || [], i2);
367
367
  throw new Error("Unable to serialize unrecognized input");
368
- function n2(e2, t2, i5) {
369
- var r4 = "", n4 = ("string" == typeof e2 && (e2 = JSON.parse(e2)), "string" == typeof t2 && (t2 = JSON.parse(t2)), Array.isArray(e2) && 0 < e2.length), s5 = !Array.isArray(t2[0]);
368
+ function n2(e2, t2, i4) {
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 += k2(e2[a6], a6);
372
- 0 < t2.length && (r4 += y5);
371
+ for (var a5 = 0; a5 < e2.length; a5++) 0 < a5 && (r4 += m4), r4 += k2(e2[a5], a5);
372
+ 0 < t2.length && (r4 += y6);
373
373
  }
374
374
  for (var o4 = 0; o4 < t2.length; o4++) {
375
- var h4 = (n4 ? e2 : t2[o4]).length, u6 = false, d2 = n4 ? 0 === Object.keys(t2[o4]).length : 0 === t2[o4].length;
376
- if (i5 && !n4 && (u6 = "greedy" === i5 ? "" === t2[o4].join("").trim() : 1 === t2[o4].length && 0 === t2[o4][0].length), "greedy" === i5 && n4) {
377
- for (var f5 = [], l3 = 0; l3 < h4; l3++) {
378
- var c4 = s5 ? e2[l3] : l3;
375
+ var h5 = (n4 ? e2 : t2[o4]).length, u6 = false, d3 = n4 ? 0 === Object.keys(t2[o4]).length : 0 === t2[o4].length;
376
+ if (i4 && !n4 && (u6 = "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 < h5; l2++) {
378
+ var c4 = s4 ? e2[l2] : l2;
379
379
  f5.push(t2[o4][c4]);
380
380
  }
381
381
  u6 = "" === f5.join("").trim();
382
382
  }
383
383
  if (!u6) {
384
- for (var p4 = 0; p4 < h4; p4++) {
385
- 0 < p4 && !d2 && (r4 += m2);
386
- var g4 = n4 && s5 ? e2[p4] : p4;
384
+ for (var p4 = 0; p4 < h5; p4++) {
385
+ 0 < p4 && !d3 && (r4 += m4);
386
+ var g4 = n4 && s4 ? e2[p4] : p4;
387
387
  r4 += k2(t2[o4][g4], p4);
388
388
  }
389
- o4 < t2.length - 1 && (!i5 || 0 < h4 && !d2) && (r4 += y5);
389
+ o4 < t2.length - 1 && (!i4 || 0 < h5 && !d3) && (r4 += y6);
390
390
  }
391
391
  }
392
392
  return r4;
393
393
  }
394
394
  function k2(e2, t2) {
395
- var i5, r4, n4;
396
- return null == e2 ? "" : e2.constructor === Date ? JSON.stringify(e2).slice(1, 25) : (n4 = false, h3 && "string" == typeof e2 && h3.test(e2) && (e2 = "'" + e2, n4 = true), r4 = (i5 = e2.toString()).replace(u5, o2), (n4 = n4 || true === s4 || "function" == typeof s4 && s4(e2, t2) || Array.isArray(s4) && s4[t2] || ((e4, t4) => {
397
- for (var i6 = 0; i6 < t4.length; i6++) if (-1 < e4.indexOf(t4[i6])) return true;
395
+ var i4, r4, n4;
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(u5, o2), (n4 = n4 || true === s2 || "function" == typeof s2 && s2(e2, t2) || Array.isArray(s2) && s2[t2] || ((e4, t4) => {
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 < i5.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(a4) || " " === r4.charAt(0) || " " === r4.charAt(r4.length - 1)) ? a4 + r4 + a4 : 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 = !s2 && !!n.Worker, v3.NODE_STREAM_INPUT = 1, v3.LocalChunkSize = 10485760, v3.RemoteChunkSize = 5242880, v3.DefaultDelimiter = ",", v3.Parser = E4, v3.ParserHandle = i2, v3.NetworkStreamer = f4, v3.FileStreamer = l2, v3.StringStreamer = c2, v3.ReadableStreamStreamer = p2, n.jQuery && ((d = n.jQuery).fn.parse = function(o2) {
402
- var i4 = o2.config || {}, h3 = [];
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
- if (!("INPUT" === d(this).prop("tagName").toUpperCase() && "file" === d(this).attr("type").toLowerCase() && n.FileReader) || !this.files || 0 === this.files.length) return true;
405
- for (var t = 0; t < this.files.length; t++) h3.push({ file: this.files[t], inputElem: this, instanceConfig: d.extend({}, i4) });
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++) h4.push({ file: this.files[t], inputElem: this, instanceConfig: d2.extend({}, i2) });
406
406
  }), e(), this;
407
407
  function e() {
408
- if (0 === h3.length) q3(o2.complete) && o2.complete();
408
+ if (0 === h4.length) q3(o2.complete) && o2.complete();
409
409
  else {
410
- var e2, t, i5, r2, n2 = h3[0];
410
+ var e2, t, i4, r2, n2 = h4[0];
411
411
  if (q3(o2.before)) {
412
- var s4 = o2.before(n2.file, n2.inputElem);
413
- if ("object" == typeof s4) {
414
- if ("abort" === s4.action) return e2 = "AbortError", t = n2.file, i5 = n2.inputElem, r2 = s4.reason, void (q3(o2.error) && o2.error({ name: e2 }, t, i5, r2));
415
- if ("skip" === s4.action) return void u5();
416
- "object" == typeof s4.config && (n2.instanceConfig = d.extend(n2.instanceConfig, s4.config));
417
- } else if ("skip" === s4) return void u5();
412
+ var s2 = o2.before(n2.file, n2.inputElem);
413
+ if ("object" == typeof s2) {
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
+ if ("skip" === s2.action) return void u5();
416
+ "object" == typeof s2.config && (n2.instanceConfig = d2.extend(n2.instanceConfig, s2.config));
417
+ } else if ("skip" === s2) return void u5();
418
418
  }
419
- var a5 = n2.instanceConfig.complete;
419
+ var a4 = n2.instanceConfig.complete;
420
420
  n2.instanceConfig.complete = function(e4) {
421
- q3(a5) && a5(e4, n2.file, n2.inputElem), u5();
422
- }, v3.parse(n2.file, n2.instanceConfig);
421
+ q3(a4) && a4(e4, n2.file, n2.inputElem), u5();
422
+ }, v2.parse(n2.file, n2.instanceConfig);
423
423
  }
424
424
  }
425
425
  function u5() {
426
- h3.splice(0, 1), e();
426
+ h4.splice(0, 1), e();
427
427
  }
428
- }), a4 && (n.onmessage = function(e) {
428
+ }), a2 && (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(u4.prototype)).constructor = f4, (l2.prototype = Object.create(u4.prototype)).constructor = l2, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p2.prototype = Object.create(u4.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(u4.prototype)).constructor = f4, (l.prototype = Object.create(u4.prototype)).constructor = l, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p2.prototype = Object.create(u4.prototype)).constructor = p2, v2;
433
433
  });
434
434
  }
435
435
  });
436
436
 
437
437
  // src/contract.ts
438
- var HOST_CONTRACT_VERSION = "1.8.0";
438
+ var HOST_CONTRACT_VERSION = "1.9.0";
439
439
  var GEO_POINT_PRECISIONS = ["latlon", "city", "zip3", "state", "country"];
440
440
  var MARK_CLASS = "d3-mark";
441
441
  var LEGEND_MARK_CLASS = "d3-legend-mark";
@@ -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;
@@ -507,10 +507,10 @@ function rgbToLab(r, g3, b2) {
507
507
  return { L: 116 * fy - 16, a: 500 * (fx - fy), b: 200 * (fy - fz) };
508
508
  }
509
509
  function hexToLab(hex2) {
510
- const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex2.trim());
511
- if (!m) return null;
512
- const h2 = m[1].length === 3 ? m[1][0] + m[1][0] + m[1][1] + m[1][1] + m[1][2] + m[1][2] : m[1];
513
- return rgbToLab(parseInt(h2.slice(0, 2), 16), parseInt(h2.slice(2, 4), 16), parseInt(h2.slice(4, 6), 16));
510
+ const m2 = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex2.trim());
511
+ if (!m2) return null;
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;
@@ -566,14 +566,14 @@ function labToHex(lab) {
566
566
  -0.969266 * X2 + 1.8760108 * Y2 + 0.041556 * Z3,
567
567
  0.0556434 * X2 - 0.2040259 * Y2 + 1.0572252 * Z3
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("");
574
574
  }
575
- function deltaEHex(a4, b2) {
576
- const la = hexToLab(a4), lb = hexToLab(b2);
575
+ function deltaEHex(a2, b2) {
576
+ const la = hexToLab(a2), lb = hexToLab(b2);
577
577
  return la && lb ? deltaE2000(la, lb) : NaN;
578
578
  }
579
579
 
@@ -595,28 +595,28 @@ function styleOf(el, doc) {
595
595
  }
596
596
  }
597
597
  function fillOf(el, cs) {
598
- const a4 = el.getAttribute?.("fill");
599
- if (a4 !== null && a4 !== void 0 && String(a4).trim() !== "") return String(a4).trim();
598
+ const a2 = el.getAttribute?.("fill");
599
+ if (a2 !== null && a2 !== void 0 && String(a2).trim() !== "") return String(a2).trim();
600
600
  const c2 = cs?.fill;
601
601
  return c2 === null || c2 === void 0 ? "" : String(c2).trim();
602
602
  }
603
603
  function toRgb(raw) {
604
- const s2 = raw.trim().toLowerCase();
605
- if (!s2 || s2 === "none" || s2 === "transparent") return null;
606
- const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(s2);
604
+ const s = raw.trim().toLowerCase();
605
+ if (!s || s === "none" || s === "transparent") return null;
606
+ const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(s);
607
607
  if (hex2) {
608
- const h2 = hex2[1];
609
- const full = h2.length === 3 ? h2[0] + h2[0] + h2[1] + h2[1] + h2[2] + h2[2] : h2;
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),
613
613
  parseInt(full.slice(4, 6), 16)
614
614
  ];
615
615
  }
616
- const m = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)\s*(?:[,/]\s*([\d.]+)\s*)?\)$/.exec(s2);
617
- if (!m) return null;
618
- if (m[4] !== void 0 && parseFloat(m[4]) === 0) return null;
619
- return [Math.round(parseFloat(m[1])), Math.round(parseFloat(m[2])), Math.round(parseFloat(m[3]))];
616
+ const m2 = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)\s*(?:[,/]\s*([\d.]+)\s*)?\)$/.exec(s);
617
+ if (!m2) return null;
618
+ if (m2[4] !== void 0 && parseFloat(m2[4]) === 0) return null;
619
+ return [Math.round(parseFloat(m2[1])), Math.round(parseFloat(m2[2])), Math.round(parseFloat(m2[3]))];
620
620
  }
621
621
  function cellKey(rgb) {
622
622
  return [
@@ -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;
@@ -663,36 +663,36 @@ function censusColourSpread(container, doc) {
663
663
  else cells.set(k2, { rgb, n: 1 });
664
664
  }
665
665
  if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
666
- const top = [...cells.values()].sort((a4, b2) => b2.n - a4.n).slice(0, MAX_CELLS);
667
- const cs = top.map((c2) => hexToLab(hex(c2.rgb))).filter((l2) => l2 !== null);
666
+ const top = [...cells.values()].sort((a2, b2) => b2.n - a2.n).slice(0, MAX_CELLS);
667
+ const cs = top.map((c2) => hexToLab(hex(c2.rgb))).filter((l) => l !== null);
668
668
  if (cs.length < MIN_RAMP_FILLS) return EMPTY;
669
- const d = cs.map(() => new Array(cs.length).fill(0));
669
+ const d2 = cs.map(() => new Array(cs.length).fill(0));
670
670
  let span = 0, lo = 0, hi = 1;
671
- for (let i2 = 0; i2 < cs.length; i2++) {
672
- for (let j3 = i2 + 1; j3 < cs.length; j3++) {
673
- const v3 = deltaE2000(cs[i2], cs[j3]);
674
- d[i2][j3] = v3;
675
- d[j3][i2] = v3;
676
- if (v3 > span) {
677
- span = v3;
678
- lo = i2;
671
+ for (let i = 0; i < cs.length; i++) {
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
+ lo = i;
679
679
  hi = j3;
680
680
  }
681
681
  }
682
682
  }
683
683
  if (span <= 0) return EMPTY;
684
684
  let slack = 0, interior = 0;
685
- for (let i2 = 0; i2 < cs.length; i2++) {
686
- if (i2 === lo || i2 === hi) continue;
687
- slack += (d[lo][i2] + d[i2][hi]) / span - 1;
685
+ for (let i = 0; i < cs.length; i++) {
686
+ if (i === lo || i === hi) continue;
687
+ slack += (d2[lo][i] + d2[i][hi]) / span - 1;
688
688
  interior++;
689
689
  }
690
690
  if (interior < 2 || slack / interior > RAMP_SLACK_MAX) return EMPTY;
691
691
  let crowd = 0;
692
- for (let i2 = 0; i2 < cs.length; i2++) {
692
+ for (let i = 0; i < cs.length; i++) {
693
693
  let n = 0;
694
694
  for (let j3 = 0; j3 < cs.length; j3++) {
695
- if (i2 === j3 || d[i2][j3] <= SAME_SHADE_DELTA_E) n += top[j3].n;
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
  }
@@ -720,18 +720,18 @@ var MIN_ACCENT_VS_CANVAS = 20;
720
720
  var HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
721
721
  function normHex(raw) {
722
722
  if (typeof raw !== "string") return null;
723
- const m = HEX.exec(raw.trim());
724
- if (!m) return null;
725
- const h2 = m[1].length === 3 ? m[1].split("").map((c2) => c2 + c2).join("") : m[1];
726
- return "#" + h2.toLowerCase();
723
+ const m2 = HEX.exec(raw.trim());
724
+ if (!m2) return null;
725
+ const h3 = m2[1].length === 3 ? m2[1].split("").map((c2) => c2 + c2).join("") : m2[1];
726
+ return "#" + h3.toLowerCase();
727
727
  }
728
- function mixLab(a4, b2, t) {
729
- return { L: a4.L + (b2.L - a4.L) * t, a: a4.a + (b2.a - a4.a) * t, b: a4.b + (b2.b - a4.b) * t };
728
+ function mixLab(a2, b2, t) {
729
+ return { L: a2.L + (b2.L - a2.L) * t, a: a2.a + (b2.a - a2.a) * t, b: a2.b + (b2.b - a2.b) * t };
730
730
  }
731
731
  function paintedOver(fg, canvas, alpha) {
732
- const f4 = [1, 3, 5].map((i2) => parseInt(fg.slice(i2, i2 + 2), 16));
733
- const c2 = [1, 3, 5].map((i2) => parseInt(canvas.slice(i2, i2 + 2), 16));
734
- const mixed = f4.map((v3, i2) => Math.round(v3 * alpha + c2[i2] * (1 - alpha))).map((v3) => v3.toString(16).padStart(2, "0"));
732
+ const f4 = [1, 3, 5].map((i) => parseInt(fg.slice(i, i + 2), 16));
733
+ const c2 = [1, 3, 5].map((i) => parseInt(canvas.slice(i, i + 2), 16));
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) {
@@ -808,6 +808,8 @@ function resolveOptions(p2) {
808
808
  // tests/defaults.test.ts now compares the two lists, because four instances of one
809
809
  // omission is a missing check, not four mistakes.
810
810
  geoPointDest: p2.geoPointDest,
811
+ // A host FACT about the data it serialised (contract 1.9.0), passed through untouched.
812
+ dateCellsAreUtcDays: p2.dateCellsAreUtcDays,
811
813
  // NO LONGER A PASS-THROUGH. A host without a Max Map Points setting used to leave this
812
814
  // undefined, and every map chart then fell back to whatever number its own code carried -
813
815
  // 1000 in every archetype written so far - while the offer gate used the server's. One
@@ -858,20 +860,20 @@ function resolveOptions(p2) {
858
860
  // never reach a chart as a live mode. Both of these are read on EVERY render, so a
859
861
  // reader can change their mind about a cached chart without regenerating it.
860
862
  approximatePositions: (() => {
861
- const v3 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
862
- return v3 === "mark" || v3 === "aggregate" || v3 === "skip" ? v3 : APPROXIMATE_POSITIONS_DEFAULT;
863
+ const v2 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
864
+ return v2 === "mark" || v2 === "aggregate" || v2 === "skip" ? v2 : APPROXIMATE_POSITIONS_DEFAULT;
863
865
  })(),
864
866
  valueAxisBaseline: (() => {
865
- const v3 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
866
- return v3 === "zero" || v3 === "fit" || v3 === "auto" ? v3 : VALUE_AXIS_BASELINE_DEFAULT;
867
+ const v2 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
868
+ return v2 === "zero" || v2 === "fit" || v2 === "auto" ? v2 : VALUE_AXIS_BASELINE_DEFAULT;
867
869
  })(),
868
870
  // Same shape, and the same reason for it: an unrecognised string must never reach a chart
869
871
  // as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
870
872
  // the setting that makes the chart PROVE the grid before it names a period, so a garbled
871
873
  // value withdraws the claim rather than asserting one.
872
874
  seasonalMarkers: (() => {
873
- const v3 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
874
- return v3 === "auto" || v3 === "always" || v3 === "never" ? v3 : SEASONAL_MARKERS_DEFAULT;
875
+ const v2 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
876
+ return v2 === "auto" || v2 === "always" || v2 === "never" ? v2 : SEASONAL_MARKERS_DEFAULT;
875
877
  })(),
876
878
  // ---- animation: booleans, default+clamp numerics, "" default enum ----
877
879
  animAutoPlay: !!p2.animAutoPlay,
@@ -914,8 +916,8 @@ function resolveOptions(p2) {
914
916
  // because a newer client shipped, and "both" would have done exactly that to every deck
915
917
  // already in a report.
916
918
  flipMode: (() => {
917
- const m = (p2.flipMode == null ? "" : String(p2.flipMode)).toLowerCase();
918
- if (m === "single" || m === "all" || m === "both") return m;
919
+ const m2 = (p2.flipMode == null ? "" : String(p2.flipMode)).toLowerCase();
920
+ if (m2 === "single" || m2 === "all" || m2 === "both") return m2;
919
921
  if (p2.flipSync === false) return "single";
920
922
  if (p2.flipSync === true) return "all";
921
923
  return FLIP_MODE_DEFAULT;
@@ -1051,21 +1053,21 @@ function j() {
1051
1053
  } catch {
1052
1054
  continue;
1053
1055
  }
1054
- for (let [i2, r] of N) {
1055
- let a4;
1056
+ for (let [i, r] of N) {
1057
+ let a2;
1056
1058
  try {
1057
- a4 = o.of(i2);
1059
+ a2 = o.of(i);
1058
1060
  } catch {
1059
- a4 = void 0;
1061
+ a2 = void 0;
1060
1062
  }
1061
- if (!a4 || a4 === i2) continue;
1062
- let s2 = u(a4);
1063
- s2 && !n.has(s2) && n.set(s2, r);
1063
+ if (!a2 || a2 === i) continue;
1064
+ let s = u(a2);
1065
+ s && !n.has(s) && n.set(s, r);
1064
1066
  }
1065
1067
  }
1066
1068
  for (let [t, o] of Object.entries(Q)) {
1067
- let i2 = u(t);
1068
- i2 && n.set(i2, o);
1069
+ let i = u(t);
1070
+ i && n.set(i, o);
1069
1071
  }
1070
1072
  return b = n, n;
1071
1073
  }
@@ -1100,20 +1102,20 @@ var t3 = { US: "washington", CA: "ottawa", MX: "mexico city", GB: "london", FR:
1100
1102
  var U = null;
1101
1103
  function y() {
1102
1104
  if (U) return U;
1103
- let n = /* @__PURE__ */ new Map(), e = P, t = (o, i2, r) => {
1105
+ let n = /* @__PURE__ */ new Map(), e = P, t = (o, i, r) => {
1104
1106
  if (!o) return;
1105
- let a4 = n.get(o);
1106
- a4 ? a4.some((s2) => s2.row === i2) || a4.push({ row: i2, primary: r }) : n.set(o, [{ row: i2, primary: r }]);
1107
+ let a2 = n.get(o);
1108
+ a2 ? a2.some((s) => s.row === i) || a2.push({ row: i, primary: r }) : n.set(o, [{ row: i, primary: r }]);
1107
1109
  };
1108
1110
  for (let o of e.split(",")) {
1109
- let i2 = o.split("|");
1110
- if (i2.length < 7) continue;
1111
- let r = { a1: i2[1], cc: i2[2], lon: +i2[3], lat: +i2[4], pop: +i2[5], kinds: i2[6] || "N" };
1112
- i2.length > 8 && i2[8] && (r.tags = i2[8].split(";").filter(Boolean));
1113
- let a4 = t3[r.cc];
1114
- if (a4 && u(i2[0]) === a4 && (r.tags || (r.tags = []), r.tags.includes("capital") || r.tags.push("capital")), t(u(i2[0]), r, true), i2.length > 7 && i2[7]) for (let s2 of i2[7].split(";")) t(u(s2), r, false);
1115
- }
1116
- for (let o of n.values()) o.sort((i2, r) => r.row.pop - i2.row.pop);
1111
+ let i = o.split("|");
1112
+ if (i.length < 7) continue;
1113
+ let r = { a1: i[1], cc: i[2], lon: +i[3], lat: +i[4], pop: +i[5], kinds: i[6] || "N" };
1114
+ i.length > 8 && i[8] && (r.tags = i[8].split(";").filter(Boolean));
1115
+ let a2 = t3[r.cc];
1116
+ if (a2 && u(i[0]) === a2 && (r.tags || (r.tags = []), r.tags.includes("capital") || r.tags.push("capital")), t(u(i[0]), r, true), i.length > 7 && i[7]) for (let s of i[7].split(";")) t(u(s), r, false);
1117
+ }
1118
+ for (let o of n.values()) o.sort((i, r) => r.row.pop - i.row.pop);
1117
1119
  return U = n, n;
1118
1120
  }
1119
1121
  var e3 = 200;
@@ -1124,17 +1126,17 @@ function i3() {
1124
1126
  for (let [e, t] of y()) {
1125
1127
  if (!e.endsWith(" city")) continue;
1126
1128
  let o = e.slice(0, -5);
1127
- !o || y().get(o)?.some((i2) => i2.primary) || t[0].row.pop < e3 || n.set(o, t);
1129
+ !o || y().get(o)?.some((i) => i.primary) || t[0].row.pop < e3 || n.set(o, t);
1128
1130
  }
1129
1131
  return L = n, n;
1130
1132
  }
1131
1133
  function O(n) {
1132
1134
  if (!n) return;
1133
1135
  let e = y().get(n);
1134
- if (e?.some((i2) => i2.primary)) return e;
1136
+ if (e?.some((i) => i.primary)) return e;
1135
1137
  let t = i3().get(n);
1136
1138
  if (!t) return e;
1137
- let o = t.map((i2) => ({ row: i2.row, primary: true }));
1139
+ let o = t.map((i) => ({ row: i.row, primary: true }));
1138
1140
  return e ? [...o, ...e] : o;
1139
1141
  }
1140
1142
  var I = null;
@@ -1147,10 +1149,10 @@ function o3() {
1147
1149
  }
1148
1150
  let e = /* @__PURE__ */ new Map();
1149
1151
  for (let t of y().values()) for (let o of t) {
1150
- let i2 = T(o.row.cc);
1151
- if (!i2) continue;
1152
- let r = e.get(i2);
1153
- (r === void 0 || o.row.pop > r) && (e.set(i2, o.row.pop), n.set(i2, { lon: o.row.lon, lat: o.row.lat }));
1152
+ let i = T(o.row.cc);
1153
+ if (!i) continue;
1154
+ let r = e.get(i);
1155
+ (r === void 0 || o.row.pop > r) && (e.set(i, o.row.pop), n.set(i, { lon: o.row.lon, lat: o.row.lat }));
1154
1156
  }
1155
1157
  return I = n, n;
1156
1158
  }
@@ -1163,8 +1165,8 @@ function D() {
1163
1165
  if (t.length < 5) continue;
1164
1166
  let o = { key: t[0], cc: t[1], name: t[2], lon: +t[3], lat: +t[4] };
1165
1167
  n.set(u(o.key), o);
1166
- let i2 = u(o.name);
1167
- i2 === "mexico" && o.cc === "MX" ? (n.set("estado de mexico", o), n.set("edomex", o)) : n.set(i2, o);
1168
+ let i = u(o.name);
1169
+ i === "mexico" && o.cc === "MX" ? (n.set("estado de mexico", o), n.set("edomex", o)) : n.set(i, o);
1168
1170
  }
1169
1171
  return B = n, n;
1170
1172
  }
@@ -1216,22 +1218,22 @@ function S3(n) {
1216
1218
  function A3(n) {
1217
1219
  let e = null, t = typeof n.lat == "string" ? n.lat.trim() : n.lat, o = typeof n.lon == "string" ? n.lon.trim() : n.lon;
1218
1220
  if (t != null && t !== "" && o !== void 0 && o !== null && o !== "") {
1219
- let a4 = +t, s2 = +o;
1220
- if (isFinite(a4) && isFinite(s2) && a4 >= -90 && a4 <= 90 && s2 >= -180 && s2 <= 180) if (a4 === 0 && s2 === 0) e = { lat: 0, lon: 0, precision: "latlon" };
1221
- else return { lat: a4, lon: s2, precision: "latlon" };
1221
+ let a2 = +t, s = +o;
1222
+ if (isFinite(a2) && isFinite(s) && a2 >= -90 && a2 <= 90 && s >= -180 && s <= 180) if (a2 === 0 && s === 0) e = { lat: 0, lon: 0, precision: "latlon" };
1223
+ else return { lat: a2, lon: s, precision: "latlon" };
1222
1224
  }
1223
- let i2 = E(n.country), r = Y(n.state);
1224
- if (r && i2 && c3(r) !== i2 && (r = null), n.city !== void 0 && n.city !== null) {
1225
- let a4 = u(String(n.city)), s2 = O(a4), f4 = s2 ? F(s2, n.mapKind) : null;
1225
+ let i = E(n.country), r = Y(n.state);
1226
+ if (r && i && c3(r) !== i && (r = null), n.city !== void 0 && n.city !== null) {
1227
+ let a2 = u(String(n.city)), s = O(a2), f4 = s ? F(s, n.mapKind) : null;
1226
1228
  if (f4 && f4.length) {
1227
- let d = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), R = d ? u(d) : "", g3 = d ? Y(d) : null, S = [], m = -1;
1229
+ let d2 = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), R = d2 ? u(d2) : "", g3 = d2 ? Y(d2) : null, S = [], m2 = -1;
1228
1230
  for (let c2 of f4) {
1229
- let l2 = c2.row, A = 0;
1230
- if (d && l2.a1 !== "") if (g3 && l2.a1 === g3 || u(l2.a1) === R) A++;
1231
+ let l = c2.row, A = 0;
1232
+ if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R) A++;
1231
1233
  else continue;
1232
- if (i2) if (T(l2.cc) === i2) A++;
1234
+ if (i) if (T(l.cc) === i) A++;
1233
1235
  else continue;
1234
- A > m ? (m = A, S = [c2]) : A === m && S.push(c2);
1236
+ A > m2 ? (m2 = A, S = [c2]) : A === m2 && S.push(c2);
1235
1237
  }
1236
1238
  S.some((c2) => c2.primary) && (S = S.filter((c2) => c2.primary));
1237
1239
  let p2 = /* @__PURE__ */ new Map();
@@ -1243,43 +1245,43 @@ function A3(n) {
1243
1245
  if (p2.size > 1) return { ambiguous: true, matches: p2.size };
1244
1246
  }
1245
1247
  }
1246
- if (!i2 || r3.has(i2)) for (let a4 of Z(n.zip)) {
1247
- let s2 = a3().get(a4);
1248
- if (s2) return { lat: s2.lat, lon: s2.lon, precision: "zip3" };
1248
+ if (!i || r3.has(i)) for (let a2 of Z(n.zip)) {
1249
+ let s = a3().get(a2);
1250
+ if (s) return { lat: s.lat, lon: s.lon, precision: "zip3" };
1249
1251
  }
1250
1252
  if (r) {
1251
- let a4 = D().get(u(r));
1252
- if (a4) return { lat: a4.lat, lon: a4.lon, precision: "state" };
1253
+ let a2 = D().get(u(r));
1254
+ if (a2) return { lat: a2.lat, lon: a2.lon, precision: "state" };
1253
1255
  }
1254
- if (i2 && (n.mapKind !== "north-america" || s3.has(i2))) {
1255
- let a4 = o3().get(i2);
1256
- if (a4) return { lat: a4.lat, lon: a4.lon, precision: "country" };
1256
+ if (i && (n.mapKind !== "north-america" || s3.has(i))) {
1257
+ let a2 = o3().get(i);
1258
+ if (a2) return { lat: a2.lat, lon: a2.lon, precision: "country" };
1257
1259
  }
1258
1260
  return e;
1259
1261
  }
1260
1262
  var G = { latlon: 0, city: 1, zip3: 2, state: 3, country: 4 };
1261
1263
  var x = 8;
1262
1264
  function y3(n, e) {
1263
- let t = new Array(n.length), o = new Array(n.length), i2 = new Array(n.length), r = /* @__PURE__ */ new Set(), a4 = [], s2 = /* @__PURE__ */ new Set(), f4 = [], d = /* @__PURE__ */ new Set(), R = [], g3 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, S = 0, m = 0, p2 = null;
1264
- for (let l2 = 0; l2 < n.length; ++l2) {
1265
- let A = n[l2], C2 = A3({ ...A, mapKind: e });
1265
+ let t = new Array(n.length), o = new Array(n.length), i = new Array(n.length), r = /* @__PURE__ */ new Set(), a2 = [], s = /* @__PURE__ */ new Set(), f4 = [], d2 = /* @__PURE__ */ new Set(), R = [], g3 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, S = 0, m2 = 0, p2 = null;
1266
+ for (let l = 0; l < n.length; ++l) {
1267
+ let A = n[l], C2 = A3({ ...A, mapKind: e });
1266
1268
  if (S3(C2)) {
1267
- t[l2] = null, o[l2] = null, i2[l2] = null, m++;
1268
- let M = K(A);
1269
- M && !d.has(M.toLowerCase()) && (d.add(M.toLowerCase()), R.length < x && R.push(M));
1269
+ t[l] = null, o[l] = null, i[l] = null, m2++;
1270
+ let M4 = K(A);
1271
+ M4 && !d2.has(M4.toLowerCase()) && (d2.add(M4.toLowerCase()), R.length < x && R.push(M4));
1270
1272
  } else if (C2) {
1271
- if (t[l2] = C2.lat, o[l2] = C2.lon, i2[l2] = C2.precision, S++, g3[C2.precision]++, (p2 === null || G[C2.precision] > G[p2]) && (p2 = C2.precision), G[C2.precision] > G.city) {
1272
- let M = K(A);
1273
- M && !s2.has(M.toLowerCase()) && (s2.add(M.toLowerCase()), f4.length < x && f4.push(M));
1273
+ if (t[l] = C2.lat, o[l] = C2.lon, i[l] = C2.precision, S++, g3[C2.precision]++, (p2 === null || G[C2.precision] > G[p2]) && (p2 = C2.precision), G[C2.precision] > G.city) {
1274
+ let M4 = K(A);
1275
+ M4 && !s.has(M4.toLowerCase()) && (s.add(M4.toLowerCase()), f4.length < x && f4.push(M4));
1274
1276
  }
1275
1277
  } else {
1276
- t[l2] = null, o[l2] = null, i2[l2] = null;
1277
- let M = K(A);
1278
- M && !r.has(M.toLowerCase()) && (r.add(M.toLowerCase()), a4.push(M));
1278
+ t[l] = null, o[l] = null, i[l] = null;
1279
+ let M4 = K(A);
1280
+ M4 && !r.has(M4.toLowerCase()) && (r.add(M4.toLowerCase()), a2.push(M4));
1279
1281
  }
1280
1282
  }
1281
- let c2 = !n3() && n.some((l2) => l2.city !== null && l2.city !== void 0 && String(l2.city).trim() !== "");
1282
- return { lat: t, lon: o, precisions: i2, precision: p2, precisionCounts: g3, coarseExamples: f4, unmatched: a4, ambiguousRows: m, ambiguousExamples: R, matchedRows: S, totalRows: n.length, ...c2 ? { cityTableMissing: true } : {} };
1283
+ let c2 = !n3() && n.some((l) => l.city !== null && l.city !== void 0 && String(l.city).trim() !== "");
1284
+ return { lat: t, lon: o, precisions: i, precision: p2, precisionCounts: g3, coarseExamples: f4, unmatched: a2, ambiguousRows: m2, ambiguousExamples: R, matchedRows: S, totalRows: n.length, ...c2 ? { cityTableMissing: true } : {} };
1283
1285
  }
1284
1286
  function K(n) {
1285
1287
  let e = [n.city, n.state, n.zip, n.country].filter((t) => t != null && String(t).trim() !== "").map((t) => String(t).trim()).join(", ");
@@ -1291,27 +1293,66 @@ function p3(n, e) {
1291
1293
  return t ? F(t, e).length > 0 : false;
1292
1294
  }
1293
1295
 
1294
- // ../shape-core/dist/chunk-6NQENOVB.mjs
1296
+ // ../shape-core/dist/chunk-QXPVZQYV.mjs
1295
1297
  /*! @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. */
1296
- function s(t) {
1297
- return t ? t.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_\-./]+/g, " ").toLowerCase().split(/\s+/).filter((n) => n.length > 0) : [];
1298
+ function y2(t) {
1299
+ return t ? t.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_\-./]+/g, " ").toLowerCase().split(/\s+/).filter((e) => e.length > 0) : [];
1298
1300
  }
1299
- function p(t) {
1300
- let n = Date.parse(t);
1301
- if (isNaN(n)) return null;
1302
- let e = new Date(n);
1303
- if (F2.test(t) || i.test(t.trim()) || l.test(t)) return e;
1304
- let r = new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds())), o = e.getFullYear();
1305
- return o >= 0 && o < 100 && r.setUTCFullYear(o), r;
1301
+ function x2(t) {
1302
+ let e = Date.parse(t);
1303
+ if (isNaN(e)) return null;
1304
+ let n = new Date(e);
1305
+ if (f2.test(t) || g.test(t.trim()) || d.test(t)) return n;
1306
+ let o = new Date(Date.UTC(n.getFullYear(), n.getMonth(), n.getDate(), n.getHours(), n.getMinutes(), n.getSeconds(), n.getMilliseconds())), r = n.getFullYear();
1307
+ return r >= 0 && r < 100 && o.setUTCFullYear(r), o;
1306
1308
  }
1307
1309
  function u2(t) {
1308
1310
  return !(t instanceof Date) || isNaN(t.getTime()) ? null : t.getUTCHours() === 0 && t.getUTCMinutes() === 0 && t.getUTCSeconds() === 0 && t.getUTCMilliseconds() === 0 ? "utc" : t.getHours() === 0 && t.getMinutes() === 0 && t.getSeconds() === 0 && t.getMilliseconds() === 0 ? "local" : null;
1309
1311
  }
1310
- var F2 = /^\s*\d{4}(-\d{2}(-\d{2})?)?\s*$/;
1311
- var i = /(?:Z|[+-]\d{2}:?\d{2})$/i;
1312
- var l = /\b(?:GMT|UTC)\b/i;
1312
+ function c(t) {
1313
+ let e = new Date(Date.UTC(t.getFullYear(), t.getMonth(), t.getDate())), n = t.getFullYear();
1314
+ return n >= 0 && n < 100 && e.setUTCFullYear(n), e;
1315
+ }
1316
+ function F2(t, e) {
1317
+ let n = [];
1318
+ for (let o of t) {
1319
+ if (!o || !/date|time/i.test(String(o.dataType ?? ""))) continue;
1320
+ let r = 0, l = true;
1321
+ for (let s of e) {
1322
+ let i = s ? s[o.name] : void 0;
1323
+ if (i == null || i === "") continue;
1324
+ if (!(i instanceof Date)) {
1325
+ l = false;
1326
+ break;
1327
+ }
1328
+ let a2 = u2(i);
1329
+ if (a2 === null) {
1330
+ l = false;
1331
+ break;
1332
+ }
1333
+ a2 === "local" && r++;
1334
+ }
1335
+ l && r > 0 && n.push(o.name);
1336
+ }
1337
+ return n;
1338
+ }
1339
+ function M(t, e) {
1340
+ let n = F2(t, e);
1341
+ return n.length === 0 ? { rows: e, columns: n } : { rows: e.map((r) => {
1342
+ if (!r) return r;
1343
+ let l = { ...r };
1344
+ for (let s of n) {
1345
+ let i = l[s];
1346
+ i instanceof Date && u2(i) === "local" && (l[s] = c(i));
1347
+ }
1348
+ return l;
1349
+ }), columns: n };
1350
+ }
1351
+ var f2 = /^\s*\d{4}(-\d{2}(-\d{2})?)?\s*$/;
1352
+ var g = /(?:Z|[+-]\d{2}:?\d{2})$/i;
1353
+ var d = /\b(?:GMT|UTC)\b/i;
1313
1354
 
1314
- // ../shape-core/dist/chunk-RC567DAC.mjs
1355
+ // ../shape-core/dist/chunk-3SGVWCVV.mjs
1315
1356
  /*! @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. */
1316
1357
  var St = "006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191193194195196197198199200201202203204205206207208209210211212214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310312313314315316317318319320321322323324325326327328329330331333334335336337338339341342344346347349350351352354355356357358359360361362363364365366367368369370371372373374376377378379380381382383384385386387388389390391392393394395396397398400401402403404405406407408409410411412413414415416417418420421422423424425426427430431432433434435436437438439440441442443444445446447448449450451452453454455456457458460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508510511512513514515516520521522523524525526527528530531532534535537538539540541542543544545546547548549550551553554556557558559560561562563564565566567570571572573574575576577580581582583584585586587588590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620622623624625626627628629630631633634635636637638639640641644645646647648650651652653654655656657658660661662664665666667668669670671672673674675676677678679680681683684685686687688689690691692693700701703704705706707708710711712713714716717718719720721722723724725726727728729730731734735736737738739740741743744745746747748749750751752753754755756757758759760761762763764765766767768769770772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816820821822823824825826827828829830831832833834835836837838840841843844845846847850851852853855856857859860863864865870871873874875877878879880881882883884890891893894895897898900902903904905906907908910911912913914915916917918919920921922923924925926927928930931932933934935936937939940941943944945946947948949950951952953954955956957958959960961967968969970971972973974975976977978979980981982983984985986988989990991992993994995996997998999";
1317
1358
  var w = new Set(St.match(/.{3}/g) ?? []);
@@ -1320,11 +1361,11 @@ var ct = new Set(at.map((n) => n[0]));
1320
1361
  var yt = { "Ala.": "AL", "Alab.": "AL", "Ariz.": "AZ", "Ark.": "AR", "Calif.": "CA", "Cal.": "CA", "Colo.": "CO", "Col.": "CO", "Conn.": "CT", "Del.": "DE", "Fla.": "FL", "Flor.": "FL", "Ga.": "GA", "Ill.": "IL", "Ind.": "IN", "Kan.": "KS", "Kans.": "KS", "Ky.": "KY", "La.": "LA", "Md.": "MD", "Mass.": "MA", "Mich.": "MI", "Minn.": "MN", "Miss.": "MS", "Mo.": "MO", "Mont.": "MT", "Neb.": "NE", "Nebr.": "NE", "Nev.": "NV", "N.H.": "NH", "N.J.": "NJ", "N.M.": "NM", "N.Mex.": "NM", "N. Mex.": "NM", "N.Y.": "NY", "N.C.": "NC", "N.D.": "ND", "N.Dak.": "ND", "N. Dak.": "ND", "Okla.": "OK", "Ore.": "OR", "Oreg.": "OR", "Pa.": "PA", "Penn.": "PA", "Penna.": "PA", "R.I.": "RI", "S.C.": "SC", "S.D.": "SD", "S.Dak.": "SD", "S. Dak.": "SD", "Tenn.": "TN", "Tex.": "TX", "Vt.": "VT", "Va.": "VA", "Wash.": "WA", "W.Va.": "WV", "W. Va.": "WV", "Wis.": "WI", "Wisc.": "WI", "Wyo.": "WY", "D.C.": "DC", "Wash. D.C.": "DC", "Wash., D.C.": "DC", "P.R.": "PR", "V.I.": "VI" };
1321
1362
  var ut = (() => {
1322
1363
  let n = /* @__PURE__ */ new Map();
1323
- for (let [s2, i2] of at) n.set(g(i2), s2);
1324
- n.set(g("Washington DC"), "DC"), n.set(g("Washington D.C."), "DC"), n.set(g("US Virgin Islands"), "VI");
1325
- for (let [s2, i2] of Object.entries(yt)) {
1326
- let r = g(s2);
1327
- r && !n.has(r) && n.set(r, i2);
1364
+ for (let [s, i] of at) n.set(g2(i), s);
1365
+ n.set(g2("Washington DC"), "DC"), n.set(g2("Washington D.C."), "DC"), n.set(g2("US Virgin Islands"), "VI");
1366
+ for (let [s, i] of Object.entries(yt)) {
1367
+ let r = g2(s);
1368
+ r && !n.has(r) && n.set(r, i);
1328
1369
  }
1329
1370
  return n;
1330
1371
  })();
@@ -1332,33 +1373,33 @@ var lt = /* @__PURE__ */ new Set(["01", "02", "04", "05", "06", "08", "09", "10"
1332
1373
  function ft(n) {
1333
1374
  return n.trim().toUpperCase();
1334
1375
  }
1335
- function g(n) {
1376
+ function g2(n) {
1336
1377
  return u(n);
1337
1378
  }
1338
1379
  var rt = /* @__PURE__ */ new Set(["zip", "zipcode", "postal", "postcode", "plz"]);
1339
- function y2(n, s2) {
1380
+ function y4(n, s) {
1340
1381
  if (!n) return false;
1341
- for (let i2 of s(n)) if (s2.has(i2)) return true;
1382
+ for (let i of y2(n)) if (s.has(i)) return true;
1342
1383
  return false;
1343
1384
  }
1344
- function Mt(n, s2) {
1385
+ function Mt(n, s) {
1345
1386
  if (n == null) return null;
1346
- let i2 = String(n).trim();
1347
- if (i2.length === 0) return null;
1348
- switch (s2) {
1387
+ let i = String(n).trim();
1388
+ if (i.length === 0) return null;
1389
+ switch (s) {
1349
1390
  case "country-iso3":
1350
1391
  case "country-iso2":
1351
1392
  case "country-name":
1352
- return E(i2);
1393
+ return E(i);
1353
1394
  case "us-state-code":
1354
1395
  case "us-state-name": {
1355
- let r = ft(i2);
1356
- return ct.has(r) ? r : ut.get(g(i2)) ?? null;
1396
+ let r = ft(i);
1397
+ return ct.has(r) ? r : ut.get(g2(i)) ?? null;
1357
1398
  }
1358
1399
  case "us-zip5":
1359
- return M3(i2);
1400
+ return M3(i);
1360
1401
  case "us-county-fips":
1361
- return /^\d{5}$/.test(i2) && lt.has(i2.slice(0, 2)) ? i2 : null;
1402
+ return /^\d{5}$/.test(i) && lt.has(i.slice(0, 2)) ? i : null;
1362
1403
  default:
1363
1404
  return null;
1364
1405
  }
@@ -1377,29 +1418,29 @@ function Gt(n) {
1377
1418
  return false;
1378
1419
  }
1379
1420
  }
1380
- function It(n, s2) {
1381
- return s2 === "us-zip5" ? w.has(n.slice(0, 3)) : true;
1421
+ function It(n, s) {
1422
+ return s === "us-zip5" ? w.has(n.slice(0, 3)) : true;
1382
1423
  }
1383
- function Wt(n, s2) {
1384
- let i2 = new Array(n.length), r = /* @__PURE__ */ new Set(), M = [], h2 = 0;
1424
+ function Wt(n, s) {
1425
+ let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M4 = [], h3 = 0;
1385
1426
  for (let N2 = 0; N2 < n.length; ++N2) {
1386
- let I2 = Mt(n[N2], s2), O2 = I2 !== null && It(I2, s2) ? I2 : null;
1387
- if (i2[N2] = O2, O2 !== null) h2++;
1427
+ let I2 = Mt(n[N2], s), O2 = I2 !== null && It(I2, s) ? I2 : null;
1428
+ if (i[N2] = O2, O2 !== null) h3++;
1388
1429
  else {
1389
- let d = n[N2];
1390
- if (d != null) {
1391
- let p2 = String(d).trim();
1430
+ let d2 = n[N2];
1431
+ if (d2 != null) {
1432
+ let p2 = String(d2).trim();
1392
1433
  if (p2.length > 0) {
1393
- let m = p2.toLowerCase();
1394
- r.has(m) || (r.add(m), M.push(p2));
1434
+ let m2 = p2.toLowerCase();
1435
+ r.has(m2) || (r.add(m2), M4.push(p2));
1395
1436
  }
1396
1437
  }
1397
1438
  }
1398
1439
  }
1399
- return { iso: i2, unmatched: M, matchedRows: h2, totalRows: n.length };
1440
+ return { iso: i, unmatched: M4, matchedRows: h3, totalRows: n.length };
1400
1441
  }
1401
1442
 
1402
- // ../shape-core/dist/chunk-U7SGOTKH.mjs
1443
+ // ../shape-core/dist/chunk-EZ56V64J.mjs
1403
1444
  var import_papaparse = __toESM(require_papaparse_min(), 1);
1404
1445
  /*! @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. */
1405
1446
  var Ae = { "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" };
@@ -1410,8 +1451,8 @@ var ee = (() => {
1410
1451
  })();
1411
1452
  function He(n) {
1412
1453
  for (let [e, t] of n) {
1413
- let i2 = ee.get(e);
1414
- i2 && !ee.has(t) && ee.set(t, i2);
1454
+ let i = ee.get(e);
1455
+ i && !ee.has(t) && ee.set(t, i);
1415
1456
  }
1416
1457
  }
1417
1458
  He(N);
@@ -1450,7 +1491,7 @@ function nt(n) {
1450
1491
  function we(n, e) {
1451
1492
  if (!e) return false;
1452
1493
  let t = xe(e);
1453
- return n.test(j2(nt(e))) || n.test(j2(t)) || n.test(j2(s(t).join(" ")));
1494
+ return n.test(j2(nt(e))) || n.test(j2(t)) || n.test(j2(y2(t).join(" ")));
1454
1495
  }
1455
1496
  function Ee(n) {
1456
1497
  return we(Je, n);
@@ -1470,11 +1511,11 @@ function Oe(n) {
1470
1511
  let e = n ?? {}, t = rt2(e);
1471
1512
  if (t !== "Continuous") return { nature: t, additivity: "unknown", basis: "role", suppressed: false };
1472
1513
  if (Ee(e.name)) return { nature: t, additivity: "positional", basis: "name", suppressed: true };
1473
- let i2 = String(e.additivity ?? "").trim().toLowerCase();
1474
- if (!(i2 === "additive" && et(e.name))) {
1475
- if (i2 === "additive") return { nature: t, additivity: "additive", basis: "measured", suppressed: false };
1476
- if (i2 === "part_of_whole") return { nature: t, additivity: "part_of_whole", basis: "measured", suppressed: false };
1477
- if (i2 === "intensive_rate") return { nature: t, additivity: "intensive_rate", basis: "measured", suppressed: false };
1514
+ let i = String(e.additivity ?? "").trim().toLowerCase();
1515
+ if (!(i === "additive" && et(e.name))) {
1516
+ if (i === "additive") return { nature: t, additivity: "additive", basis: "measured", suppressed: false };
1517
+ if (i === "part_of_whole") return { nature: t, additivity: "part_of_whole", basis: "measured", suppressed: false };
1518
+ if (i === "intensive_rate") return { nature: t, additivity: "intensive_rate", basis: "measured", suppressed: false };
1478
1519
  }
1479
1520
  return e.discourageAggregationAcrossGroups === true ? { nature: t, additivity: "intensive_rate", basis: "host-flag", suppressed: false } : it(e.name) ? { nature: t, additivity: "intensive_rate", basis: "name", suppressed: false } : { nature: t, additivity: "additive", basis: "default", suppressed: false };
1480
1521
  }
@@ -1505,49 +1546,49 @@ function Kt(n, e) {
1505
1546
  /*! @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. */
1506
1547
  var E2 = 2;
1507
1548
  var Z2 = 400;
1508
- function G2(r) {
1549
+ function D3(r) {
1509
1550
  return !!E(r);
1510
1551
  }
1511
- function C(r) {
1552
+ function P2(r) {
1512
1553
  let n = /* @__PURE__ */ new Set();
1513
1554
  for (let e of r) {
1514
1555
  if (e == null) continue;
1515
- let s2 = u(String(e));
1516
- if (!V(s2) && !n.has(s2) && (n.add(s2), n.size >= Z2)) break;
1556
+ let s = u(String(e));
1557
+ if (!V(s) && !n.has(s) && (n.add(s), n.size >= Z2)) break;
1517
1558
  }
1518
1559
  return Array.from(n);
1519
1560
  }
1520
- function P2(r) {
1521
- let n = C(r);
1522
- if (n.length === 0 || D2(r) < 95) return false;
1523
- let e = n.filter((c2) => G2(c2) && !Y(c2)).length, s2 = n.filter((c2) => !G2(c2) && !!Y(c2)).length;
1524
- return e >= 1 && e >= s2;
1561
+ function C(r) {
1562
+ let n = P2(r);
1563
+ if (n.length === 0 || G2(r) < 95) return false;
1564
+ let e = n.filter((c2) => D3(c2) && !Y(c2)).length, s = n.filter((c2) => !D3(c2) && !!Y(c2)).length;
1565
+ return e >= 1 && e >= s;
1525
1566
  }
1526
1567
  function W2(r, n) {
1527
1568
  if (!Y(r)) return false;
1528
1569
  let e = E(r);
1529
1570
  return e ? n === "world" ? true : s3.has(e) : false;
1530
1571
  }
1531
- function D2(r) {
1532
- let n = C(r);
1572
+ function G2(r) {
1573
+ let n = P2(r);
1533
1574
  if (n.length === 0) return 0;
1534
1575
  let e = 0;
1535
- for (let s2 of n) G2(s2) && e++;
1576
+ for (let s of n) D3(s) && e++;
1536
1577
  return Math.round(e / n.length * 1e3) / 10;
1537
1578
  }
1538
- function v2(r) {
1539
- let n = C(r);
1579
+ function M2(r) {
1580
+ let n = P2(r);
1540
1581
  if (n.length === 0) return 0;
1541
1582
  let e = 0;
1542
- for (let s2 of n) Y(s2) && e++;
1583
+ for (let s of n) Y(s) && e++;
1543
1584
  return Math.round(e / n.length * 1e3) / 10;
1544
1585
  }
1545
1586
  function F3(r) {
1546
1587
  let n = /* @__PURE__ */ new Set();
1547
1588
  for (let e of r) {
1548
1589
  if (e == null) continue;
1549
- let s2 = String(e).trim();
1550
- if (!V(u(s2)) && !n.has(s2) && (n.add(s2), n.size >= Z2)) break;
1590
+ let s = String(e).trim();
1591
+ if (!V(u(s)) && !n.has(s) && (n.add(s), n.size >= Z2)) break;
1551
1592
  }
1552
1593
  return Array.from(n);
1553
1594
  }
@@ -1555,95 +1596,95 @@ function $2(r) {
1555
1596
  let n = F3(r);
1556
1597
  if (n.length === 0) return 0;
1557
1598
  let e = 0;
1558
- for (let s2 of n) Z(s2).length > 0 && e++;
1599
+ for (let s of n) Z(s).length > 0 && e++;
1559
1600
  return Math.round(e / n.length * 1e3) / 10;
1560
1601
  }
1561
1602
  function q2(r, n) {
1562
- return y2(n, rt) ? true : F3(r).some((e) => /^\d{5}(-\d{4})?$/.test(e.replace(/\.0+$/, "")));
1603
+ return y4(n, rt) ? true : F3(r).some((e) => /^\d{5}(-\d{4})?$/.test(e.replace(/\.0+$/, "")));
1563
1604
  }
1564
- function se(r, n) {
1565
- let e = C(r);
1605
+ function ce(r, n) {
1606
+ let e = P2(r);
1566
1607
  if (e.length === 0) return 0;
1567
- let s2 = 0;
1568
- for (let c2 of e) p3(c2, n) && s2++;
1569
- return Math.round(s2 / e.length * 1e3) / 10;
1608
+ let s = 0;
1609
+ for (let c2 of e) p3(c2, n) && s++;
1610
+ return Math.round(s / e.length * 1e3) / 10;
1570
1611
  }
1571
1612
  function z2(r, n) {
1572
1613
  let e = 0;
1573
- for (let s2 of C(r)) n(s2) && e++;
1614
+ for (let s of P2(r)) n(s) && e++;
1574
1615
  return e;
1575
1616
  }
1576
- function ae(r, n) {
1617
+ function ue(r, n) {
1577
1618
  let e = 0;
1578
- for (let s2 of F3(r)) n(s2) && e++;
1619
+ for (let s of F3(r)) n(s) && e++;
1579
1620
  return e;
1580
1621
  }
1581
- function le(r, n, e, s2, c2) {
1582
- let A = [], u4 = [], o = {}, M = {}, _2 = new Set(r), l2 = (t) => n.map((i2) => i2[t]);
1622
+ function fe(r, n, e, s, c2) {
1623
+ let A = [], u4 = [], o = {}, v2 = {}, _2 = new Set(r), l = (t) => n.map((i) => i[t]);
1583
1624
  for (let t of ["city", "country"]) {
1584
- let i2 = e?.[t];
1585
- i2 && _2.has(i2) && (o[t] = i2);
1625
+ let i = e?.[t];
1626
+ i && _2.has(i) && (o[t] = i);
1586
1627
  }
1587
1628
  let X2 = new Set(c2 ?? r);
1588
1629
  for (let t of ["lat", "lon"]) {
1589
- let i2 = e?.[t];
1590
- i2 && X2.has(i2) && (o[t] = i2);
1630
+ let i = e?.[t];
1631
+ i && X2.has(i) && (o[t] = i);
1591
1632
  }
1592
- let d = e?.zip;
1593
- if (d && _2.has(d)) {
1594
- let t = l2(d), i2 = $2(t);
1595
- i2 < 95 ? u4.push(`zip=${d} (only ${i2}% of values read as ZIPs)`) : q2(t, d) ? o.zip = d : u4.push(`zip=${d} (all values are 3-4 digits with nothing to say they are postal)`);
1633
+ let d2 = e?.zip;
1634
+ if (d2 && _2.has(d2)) {
1635
+ let t = l(d2), i = $2(t);
1636
+ i < 95 ? u4.push(`zip=${d2} (only ${i}% of values read as ZIPs)`) : q2(t, d2) ? o.zip = d2 : u4.push(`zip=${d2} (all values are 3-4 digits with nothing to say they are postal)`);
1596
1637
  }
1597
1638
  let p2 = e?.state;
1598
1639
  if (p2 && _2.has(p2)) {
1599
- let t = l2(p2), i2 = C(t);
1600
- i2.length > 0 && i2.every((a4) => W2(a4, s2)) ? u4.push(`state=${p2} (every value is "CA", which is both Canada and California)`) : P2(t) ? (u4.push(`state=${p2} (every value is a country, not a state)`), o.country || (o.country = p2)) : v2(t) < 95 ? u4.push(`state=${p2} (only ${v2(t)}% of values are states/provinces)`) : o.state = p2;
1640
+ let t = l(p2), i = P2(t);
1641
+ i.length > 0 && i.every((a2) => W2(a2, s)) ? u4.push(`state=${p2} (every value is "CA", which is both Canada and California)`) : C(t) ? (u4.push(`state=${p2} (every value is a country, not a state)`), o.country || (o.country = p2)) : M2(t) < 95 ? u4.push(`state=${p2} (only ${M2(t)}% of values are states/provinces)`) : o.state = p2;
1601
1642
  }
1602
- let g3 = new Set(Object.values(o).filter(Boolean)), x2 = r.filter((t) => !g3.has(t) && !t.startsWith("__"));
1643
+ let g3 = new Set(Object.values(o).filter(Boolean)), x3 = r.filter((t) => !g3.has(t) && !t.startsWith("__"));
1603
1644
  if (!o.state) {
1604
1645
  let t = null;
1605
- for (let i2 of x2) {
1606
- let a4 = l2(i2);
1607
- if (P2(a4)) continue;
1608
- let f4 = v2(a4);
1646
+ for (let i of x3) {
1647
+ let a2 = l(i);
1648
+ if (C(a2)) continue;
1649
+ let f4 = M2(a2);
1609
1650
  if (f4 < 95) continue;
1610
- let k2 = z2(a4, (T3) => !!Y(T3)), Y2 = z2(a4, (T3) => !!Y(T3) && !W2(T3, s2));
1611
- k2 < E2 && Y2 < 1 || (!t || f4 > t.pct) && (t = { name: i2, pct: f4 });
1651
+ let k2 = z2(a2, (T3) => !!Y(T3)), Y2 = z2(a2, (T3) => !!Y(T3) && !W2(T3, s));
1652
+ k2 < E2 && Y2 < 1 || (!t || f4 > t.pct) && (t = { name: i, pct: f4 });
1612
1653
  }
1613
1654
  t && (o.state = t.name, g3.add(t.name), A.push(`state=${t.name} (${t.pct}% states/provinces)`));
1614
1655
  }
1615
- if (!o.zip) for (let t of x2) {
1656
+ if (!o.zip) for (let t of x3) {
1616
1657
  if (g3.has(t)) continue;
1617
- let i2 = l2(t), a4 = $2(i2);
1618
- if (!(a4 < 95) && q2(i2, t) && !(ae(i2, (f4) => Z(f4).length > 0) < E2)) {
1619
- o.zip = t, g3.add(t), A.push(`zip=${t} (${a4}% ZIP codes)`);
1658
+ let i = l(t), a2 = $2(i);
1659
+ if (!(a2 < 95) && q2(i, t) && !(ue(i, (f4) => Z(f4).length > 0) < E2)) {
1660
+ o.zip = t, g3.add(t), A.push(`zip=${t} (${a2}% ZIP codes)`);
1620
1661
  break;
1621
1662
  }
1622
1663
  }
1623
- let h2 = o.country;
1624
- if (!h2 || !P2(l2(h2))) {
1664
+ let h3 = o.country;
1665
+ if (!h3 || !C(l(h3))) {
1625
1666
  let t = null;
1626
- for (let i2 of x2) {
1627
- if (g3.has(i2) || !P2(l2(i2))) continue;
1628
- let a4 = D2(l2(i2));
1629
- (!t || a4 > t.pct) && (t = { name: i2, pct: a4 });
1667
+ for (let i of x3) {
1668
+ if (g3.has(i) || !C(l(i))) continue;
1669
+ let a2 = G2(l(i));
1670
+ (!t || a2 > t.pct) && (t = { name: i, pct: a2 });
1630
1671
  }
1631
- t && (h2 && (u4.push(`country=${h2} (only ${D2(l2(h2))}% of values are country identifiers; using ${t.name} instead)`), M.country = h2), o.country = t.name, g3.add(t.name), A.push(`country=${t.name}`));
1672
+ t && (h3 && (u4.push(`country=${h3} (only ${G2(l(h3))}% of values are country identifiers; using ${t.name} instead)`), v2.country = h3), o.country = t.name, g3.add(t.name), A.push(`country=${t.name}`));
1632
1673
  }
1633
1674
  if (!o.city) {
1634
1675
  let t = null;
1635
- for (let i2 of x2) {
1636
- if (g3.has(i2)) continue;
1637
- let a4 = l2(i2), f4 = se(a4, s2);
1638
- f4 < m3 || z2(a4, (k2) => p3(k2, s2)) < E2 || (!t || f4 > t.pct) && (t = { name: i2, pct: f4 });
1676
+ for (let i of x3) {
1677
+ if (g3.has(i)) continue;
1678
+ let a2 = l(i), f4 = ce(a2, s);
1679
+ f4 < m3 || z2(a2, (k2) => p3(k2, s)) < E2 || (!t || f4 > t.pct) && (t = { name: i, pct: f4 });
1639
1680
  }
1640
1681
  t && (o.city = t.name, A.push(`city=${t.name} (${t.pct}% known cities)`));
1641
1682
  }
1642
- let B2 = o.country ? l2(o.country) : [], L2 = !!o.country && P2(B2), j3 = L2 ? new Set(B2.map((t) => E(t == null ? null : String(t))).filter(Boolean)).size : 0, K2 = L2 && j3 >= 2, N2 = !!(o.lat && o.lon) && n.some((t) => {
1643
- let i2 = +String(t[o.lat] ?? "").trim(), a4 = +String(t[o.lon] ?? "").trim();
1644
- return isFinite(i2) && isFinite(a4) && i2 >= -90 && i2 <= 90 && a4 >= -180 && a4 <= 180 && String(t[o.lat] ?? "").trim() !== "" && String(t[o.lon] ?? "").trim() !== "";
1683
+ let B2 = o.country ? l(o.country) : [], L2 = !!o.country && C(B2), j3 = L2 ? new Set(B2.map((t) => E(t == null ? null : String(t))).filter(Boolean)).size : 0, K2 = L2 && j3 >= 2, N2 = !!(o.lat && o.lon) && n.some((t) => {
1684
+ let i = +String(t[o.lat] ?? "").trim(), a2 = +String(t[o.lon] ?? "").trim();
1685
+ return isFinite(i) && isFinite(a2) && i >= -90 && i <= 90 && a2 >= -180 && a2 <= 180 && String(t[o.lat] ?? "").trim() !== "" && String(t[o.lon] ?? "").trim() !== "";
1645
1686
  });
1646
- return o.lat && o.lon && !N2 && u4.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !K2 && !(o.city || o.state || o.zip || N2) && u4.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 || K2 || N2) ? o : null, backfilled: A, refused: u4, ...Object.keys(M).length ? { labelFallback: M } : {} };
1687
+ return o.lat && o.lon && !N2 && u4.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !K2 && !(o.city || o.state || o.zip || N2) && u4.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 || K2 || N2) ? o : null, backfilled: A, refused: u4, ...Object.keys(v2).length ? { labelFallback: v2 } : {} };
1647
1688
  }
1648
1689
 
1649
1690
  // src/payload.ts
@@ -1658,7 +1699,7 @@ function resolvePointChannel(cols, rowObjs, point) {
1658
1699
  let labelCol;
1659
1700
  if (bind) {
1660
1701
  const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
1661
- const res = le(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
1702
+ const res = fe(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
1662
1703
  bind = res.bind;
1663
1704
  rolesBackfilled = res.backfilled;
1664
1705
  rolesRefused = res.refused;
@@ -1702,15 +1743,21 @@ function resolvePointChannel(cols, rowObjs, point) {
1702
1743
  }
1703
1744
  return { lat: pLat, lon: pLon, prec: pPrec, geoPoint, rolesRefused };
1704
1745
  }
1705
- function buildRenderPayload(cols, rowObjs, geo, point, destination) {
1746
+ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
1706
1747
  const colNames = cols.map((c2) => c2.name);
1748
+ let utcDayColumns = null;
1749
+ if (opts?.utcDays) {
1750
+ const norm = M(cols, rowObjs);
1751
+ rowObjs = norm.rows;
1752
+ utcDayColumns = norm.columns;
1753
+ }
1707
1754
  const o = resolvePointChannel(cols, rowObjs, point);
1708
- const d = resolvePointChannel(cols, rowObjs, destination);
1755
+ const d2 = resolvePointChannel(cols, rowObjs, destination);
1709
1756
  const pLat = o.lat, pLon = o.lon, pPrec = o.prec;
1710
- const dLat = d.lat, dLon = d.lon, dPrec = d.prec;
1757
+ const dLat = d2.lat, dLon = d2.lon, dPrec = d2.prec;
1711
1758
  const geoPoint = o.geoPoint;
1712
- const geoPointDest = d.geoPoint;
1713
- const rolesRefused = [...o.rolesRefused, ...d.rolesRefused.map((s2) => `destination: ${s2}`)];
1759
+ const geoPointDest = d2.geoPoint;
1760
+ const rolesRefused = [...o.rolesRefused, ...d2.rolesRefused.map((s) => `destination: ${s}`)];
1714
1761
  let geoIso = null;
1715
1762
  let geoUnmatched;
1716
1763
  let geoUnmatchedDistinct;
@@ -1724,29 +1771,29 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination) {
1724
1771
  const out = new Array(rowObjs.length);
1725
1772
  for (let r = 0; r < rowObjs.length; r++) {
1726
1773
  const row = rowObjs[r];
1727
- const a4 = new Array(cols.length + extra);
1774
+ const a2 = new Array(cols.length + extra);
1728
1775
  for (let c2 = 0; c2 < cols.length; c2++) {
1729
- const v3 = row[colNames[c2]];
1730
- if (v3 instanceof Date) {
1731
- a4[c2] = v3.toISOString();
1776
+ const v2 = row[colNames[c2]];
1777
+ if (v2 instanceof Date) {
1778
+ a2[c2] = v2.toISOString();
1732
1779
  } else {
1733
- a4[c2] = v3 ?? null;
1780
+ a2[c2] = v2 ?? null;
1734
1781
  }
1735
1782
  }
1736
1783
  let k2 = cols.length;
1737
- a4[k2++] = r;
1738
- if (geoIso) a4[k2++] = geoIso[r];
1784
+ a2[k2++] = r;
1785
+ if (geoIso) a2[k2++] = geoIso[r];
1739
1786
  if (pLat && pLon) {
1740
- a4[k2++] = pLat[r];
1741
- a4[k2++] = pLon[r];
1742
- a4[k2++] = pPrec ? pPrec[r] : null;
1787
+ a2[k2++] = pLat[r];
1788
+ a2[k2++] = pLon[r];
1789
+ a2[k2++] = pPrec ? pPrec[r] : null;
1743
1790
  }
1744
1791
  if (dLat && dLon) {
1745
- a4[k2++] = dLat[r];
1746
- a4[k2++] = dLon[r];
1747
- a4[k2++] = dPrec ? dPrec[r] : null;
1792
+ a2[k2++] = dLat[r];
1793
+ a2[k2++] = dLon[r];
1794
+ a2[k2++] = dPrec ? dPrec[r] : null;
1748
1795
  }
1749
- out[r] = a4;
1796
+ out[r] = a2;
1750
1797
  }
1751
1798
  const colsOut = [...cols, { name: "__rowIdx__", dataType: "Integer", isMeasure: false, modelDesc: "" }];
1752
1799
  if (geoIso) colsOut.push({ name: "__geoIso__", dataType: "String", isMeasure: false, modelDesc: "" });
@@ -1774,7 +1821,8 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination) {
1774
1821
  ...geoPointDest ? { geoPointDest } : {},
1775
1822
  // Survives a refusal that placed nothing — see geoPointRefused. Omitted when empty so
1776
1823
  // the ordinary case adds no bytes.
1777
- ...rolesRefused.length ? { geoPointRefused: rolesRefused } : {}
1824
+ ...rolesRefused.length ? { geoPointRefused: rolesRefused } : {},
1825
+ ...utcDayColumns ? { dateCellsAreUtcDays: true, utcDayColumns } : {}
1778
1826
  };
1779
1827
  }
1780
1828
 
@@ -1798,30 +1846,30 @@ function createMarkResolver(env) {
1798
1846
  if (el.tagName.toLowerCase() !== "path") return false;
1799
1847
  const f4 = el.getAttribute("fill");
1800
1848
  if (f4 !== null && f4 !== "" && f4 !== "none" && f4 !== "transparent") return false;
1801
- const s2 = (el.getAttribute("stroke") || "").trim().toLowerCase();
1849
+ const s = (el.getAttribute("stroke") || "").trim().toLowerCase();
1802
1850
  const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
1803
- return s2 === "transparent" || s2 === "none" || so <= 0.01;
1851
+ return s === "transparent" || s === "none" || so <= 0.01;
1804
1852
  };
1805
- const distToPathCenterline = (el, x2, y4) => {
1853
+ const distToPathCenterline = (el, x3, y5) => {
1806
1854
  const L2 = el.getTotalLength();
1807
1855
  if (!(L2 > 0)) return Number.MAX_VALUE;
1808
- const m = el.getScreenCTM();
1809
- if (!m) return Number.MAX_VALUE;
1856
+ const m2 = el.getScreenCTM();
1857
+ if (!m2) return Number.MAX_VALUE;
1810
1858
  let best = Number.MAX_VALUE;
1811
1859
  const N2 = 64;
1812
- for (let i2 = 0; i2 <= N2; i2++) {
1813
- const pt = el.getPointAtLength(L2 * i2 / N2);
1814
- const dx = m.a * pt.x + m.c * pt.y + m.e - x2;
1815
- const dy = m.b * pt.x + m.d * pt.y + m.f - y4;
1816
- const d = dx * dx + dy * dy;
1817
- if (d < best) best = d;
1860
+ for (let i = 0; i <= N2; i++) {
1861
+ const pt = el.getPointAtLength(L2 * i / N2);
1862
+ const dx = m2.a * pt.x + m2.c * pt.y + m2.e - x3;
1863
+ const dy = m2.b * pt.x + m2.d * pt.y + m2.f - y5;
1864
+ const d2 = dx * dx + dy * dy;
1865
+ if (d2 < best) best = d2;
1818
1866
  }
1819
1867
  return Math.sqrt(best);
1820
1868
  };
1821
- const refineHitCorridor = (mark, x2, y4, sel) => {
1869
+ const refineHitCorridor = (mark, x3, y5, sel) => {
1822
1870
  try {
1823
1871
  if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
1824
- const stack = doc.elementsFromPoint(x2, y4);
1872
+ const stack = doc.elementsFromPoint(x3, y5);
1825
1873
  const candidates = [];
1826
1874
  for (const el of stack) {
1827
1875
  if (!root.contains(el)) continue;
@@ -1835,9 +1883,9 @@ function createMarkResolver(env) {
1835
1883
  let best = mark;
1836
1884
  let bestD = Number.MAX_VALUE;
1837
1885
  for (const el of candidates) {
1838
- const d = distToPathCenterline(el, x2, y4);
1839
- if (d < bestD) {
1840
- bestD = d;
1886
+ const d2 = distToPathCenterline(el, x3, y5);
1887
+ if (d2 < bestD) {
1888
+ bestD = d2;
1841
1889
  best = el;
1842
1890
  }
1843
1891
  }
@@ -1857,9 +1905,9 @@ function createMarkResolver(env) {
1857
1905
  const findMark = (target, sel = ".d3-mark", ev) => {
1858
1906
  if (!isElement(target)) return null;
1859
1907
  const el = target;
1860
- const m = el.closest(sel);
1861
- if (m && ev) return refineHitCorridor(m, ev.clientX, ev.clientY, sel);
1862
- return m;
1908
+ const m2 = el.closest(sel);
1909
+ if (m2 && ev) return refineHitCorridor(m2, ev.clientX, ev.clientY, sel);
1910
+ return m2;
1863
1911
  };
1864
1912
  const rowIdxsFromMark = (el) => {
1865
1913
  if (!el) return [];
@@ -1872,9 +1920,9 @@ function createMarkResolver(env) {
1872
1920
  }
1873
1921
  return out;
1874
1922
  };
1875
- const penetrateOverlayAt = (x2, y4, sel) => {
1923
+ const penetrateOverlayAt = (x3, y5, sel) => {
1876
1924
  try {
1877
- const stack = doc.elementsFromPoint(x2, y4);
1925
+ const stack = doc.elementsFromPoint(x3, y5);
1878
1926
  for (const el of stack) {
1879
1927
  if (!root.contains(el) || !isElement(el)) continue;
1880
1928
  const cand = el.matches(sel) ? el : el.closest(sel);
@@ -1886,7 +1934,7 @@ function createMarkResolver(env) {
1886
1934
  }
1887
1935
  return null;
1888
1936
  };
1889
- const resolveByGeometry = (x2, y4, sel) => {
1937
+ const resolveByGeometry = (x3, y5, sel) => {
1890
1938
  try {
1891
1939
  const cands = root.querySelectorAll(sel);
1892
1940
  let best = null, bestArea = Number.MAX_VALUE;
@@ -1895,7 +1943,7 @@ function createMarkResolver(env) {
1895
1943
  if (!el.getAttribute("data-row-idx")) continue;
1896
1944
  const r = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
1897
1945
  if (!r || r.width <= 0 || r.height <= 0) continue;
1898
- if (x2 < r.left || x2 > r.right || y4 < r.top || y4 > r.bottom) continue;
1946
+ if (x3 < r.left || x3 > r.right || y5 < r.top || y5 > r.bottom) continue;
1899
1947
  const area = r.width * r.height;
1900
1948
  if (area < bestArea) {
1901
1949
  bestArea = area;
@@ -2030,15 +2078,15 @@ function censusMarks(container) {
2030
2078
  return EMPTY2;
2031
2079
  }
2032
2080
  }
2033
- function isBlankRender(i2) {
2034
- if (i2.contractUntagged) return false;
2035
- if (i2.animated) return false;
2036
- if (i2.authoredNoDataText) return false;
2037
- if (!(i2.rows > 0)) return false;
2038
- return i2.markCount === 0;
2081
+ function isBlankRender(i) {
2082
+ if (i.contractUntagged) return false;
2083
+ if (i.animated) return false;
2084
+ if (i.authoredNoDataText) return false;
2085
+ if (!(i.rows > 0)) return false;
2086
+ return i.markCount === 0;
2039
2087
  }
2040
2088
  function blankRenderFlag(lang, cause) {
2041
- const clean = (s2) => String(s2 || "unknown").toLowerCase().replace(/[^a-z0-9-]+/g, "-");
2089
+ const clean = (s) => String(s || "unknown").toLowerCase().replace(/[^a-z0-9-]+/g, "-");
2042
2090
  return `blankrender:${clean(lang)}:${clean(cause)}`;
2043
2091
  }
2044
2092
 
@@ -2062,8 +2110,8 @@ function styleOf2(el, doc) {
2062
2110
  }
2063
2111
  }
2064
2112
  function attrOrComputed(el, name, cs) {
2065
- const a4 = el.getAttribute?.(name);
2066
- if (a4 !== null && a4 !== void 0 && String(a4).trim() !== "") return String(a4).trim();
2113
+ const a2 = el.getAttribute?.(name);
2114
+ if (a2 !== null && a2 !== void 0 && String(a2).trim() !== "") return String(a2).trim();
2067
2115
  const c2 = cs?.[name === "stroke-width" ? "strokeWidth" : name];
2068
2116
  return c2 === null || c2 === void 0 ? "" : String(c2).trim();
2069
2117
  }
@@ -2072,9 +2120,9 @@ function isUnfilled(fill) {
2072
2120
  return f4 === "none" || f4 === "transparent" || f4 === "rgba(0, 0, 0, 0)" || f4 === "rgba(0,0,0,0)";
2073
2121
  }
2074
2122
  function widthPx(raw) {
2075
- const m = /^(-?\d+(?:\.\d+)?)\s*(px)?$/i.exec(raw);
2076
- if (!m) return NaN;
2077
- const n = parseFloat(m[1]);
2123
+ const m2 = /^(-?\d+(?:\.\d+)?)\s*(px)?$/i.exec(raw);
2124
+ if (!m2) return NaN;
2125
+ const n = parseFloat(m2[1]);
2078
2126
  return isFinite(n) ? n : NaN;
2079
2127
  }
2080
2128
  function censusHitBands(container, doc) {
@@ -2131,25 +2179,25 @@ var VALUE_AXIS_MIN_FIT = 0.8;
2131
2179
  var MIN_AXIS_SPAN_PX = 40;
2132
2180
  var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
2133
2181
  function num(el, name) {
2134
- const v3 = el.getAttribute?.(name);
2135
- if (v3 === null || v3 === void 0 || String(v3).trim() === "") return NaN;
2136
- return parseFloat(String(v3));
2182
+ const v2 = el.getAttribute?.(name);
2183
+ if (v2 === null || v2 === void 0 || String(v2).trim() === "") return NaN;
2184
+ return parseFloat(String(v2));
2137
2185
  }
2138
2186
  function median(xs) {
2139
2187
  if (!xs.length) return NaN;
2140
- const s2 = [...xs].sort((a4, b2) => a4 - b2);
2141
- const m = s2.length >> 1;
2142
- return s2.length % 2 ? s2[m] : (s2[m - 1] + s2[m]) / 2;
2188
+ const s = [...xs].sort((a2, b2) => a2 - b2);
2189
+ const m2 = s.length >> 1;
2190
+ return s.length % 2 ? s[m2] : (s[m2 - 1] + s[m2]) / 2;
2143
2191
  }
2144
- function robustLine(v3, pos) {
2145
- const n = v3.length;
2192
+ function robustLine(v2, pos) {
2193
+ const n = v2.length;
2146
2194
  const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
2147
2195
  const idx = [];
2148
- for (let i2 = 0; i2 < n; i2 += step) idx.push(i2);
2196
+ for (let i = 0; i < n; i += step) idx.push(i);
2149
2197
  const slopes = [];
2150
2198
  for (let p2 = 0; p2 < idx.length; p2++) {
2151
2199
  for (let q3 = p2 + 1; q3 < idx.length; q3++) {
2152
- const dv = v3[idx[q3]] - v3[idx[p2]];
2200
+ const dv = v2[idx[q3]] - v2[idx[p2]];
2153
2201
  if (Math.abs(dv) < 1e-12) continue;
2154
2202
  slopes.push((pos[idx[q3]] - pos[idx[p2]]) / dv);
2155
2203
  }
@@ -2157,8 +2205,8 @@ function robustLine(v3, pos) {
2157
2205
  if (slopes.length < 3) return null;
2158
2206
  const b2 = median(slopes);
2159
2207
  if (!Number.isFinite(b2) || Math.abs(b2) < 1e-12) return null;
2160
- const a4 = median(pos.map((y4, i2) => y4 - b2 * v3[i2]));
2161
- return Number.isFinite(a4) ? { a: a4, b: b2 } : null;
2208
+ const a2 = median(pos.map((y5, i) => y5 - b2 * v2[i]));
2209
+ return Number.isFinite(a2) ? { a: a2, b: b2 } : null;
2162
2210
  }
2163
2211
  function censusValuePlacement(container, data) {
2164
2212
  try {
@@ -2173,42 +2221,42 @@ function censusValuePlacement(container, data) {
2173
2221
  for (const el of els) {
2174
2222
  const raw = String(el.getAttribute(ROW_IDX_ATTR) ?? "").trim();
2175
2223
  if (!/^\d+$/.test(raw)) continue;
2176
- const i2 = +raw;
2177
- const row = rows[i2];
2178
- const x2 = num(el, "cx"), y4 = num(el, "cy"), r = num(el, "r");
2179
- if (!row || !Number.isFinite(x2) || !Number.isFinite(y4) || !(r > 0)) continue;
2180
- seen.add(i2);
2181
- dots.push({ row, x: x2, y: y4, r });
2224
+ const i = +raw;
2225
+ const row = rows[i];
2226
+ const x3 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
2227
+ if (!row || !Number.isFinite(x3) || !Number.isFinite(y5) || !(r > 0)) continue;
2228
+ seen.add(i);
2229
+ dots.push({ row, x: x3, y: y5, r });
2182
2230
  }
2183
2231
  if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
2184
2232
  let best = null;
2185
2233
  for (let c2 = 0; c2 < columns.length; c2++) {
2186
2234
  if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
2187
- const vals = dots.map((d) => {
2188
- const v3 = d.row[c2];
2189
- return v3 === null || v3 === void 0 || v3 === "" ? NaN : typeof v3 === "number" ? v3 : Number(v3);
2235
+ const vals = dots.map((d2) => {
2236
+ const v2 = d2.row[c2];
2237
+ return v2 === null || v2 === void 0 || v2 === "" ? NaN : typeof v2 === "number" ? v2 : Number(v2);
2190
2238
  });
2191
2239
  const finite = vals.filter(Number.isFinite);
2192
2240
  if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
2193
- const logs = finite.every((v3) => v3 > 0) ? [false, true] : [false];
2241
+ const logs = finite.every((v2) => v2 > 0) ? [false, true] : [false];
2194
2242
  for (const log of logs) {
2195
2243
  for (const axis of ["x", "y"]) {
2196
2244
  const keep = [];
2197
- const v3 = [], pos = [];
2198
- dots.forEach((d, k2) => {
2245
+ const v2 = [], pos = [];
2246
+ dots.forEach((d2, k2) => {
2199
2247
  if (!Number.isFinite(vals[k2])) return;
2200
2248
  keep.push(k2);
2201
- v3.push(log ? Math.log10(vals[k2]) : vals[k2]);
2202
- pos.push(axis === "x" ? d.x : d.y);
2249
+ v2.push(log ? Math.log10(vals[k2]) : vals[k2]);
2250
+ pos.push(axis === "x" ? d2.x : d2.y);
2203
2251
  });
2204
- const line = robustLine(v3, pos);
2252
+ const line = robustLine(v2, pos);
2205
2253
  if (!line) continue;
2206
2254
  const lo = Math.min(...pos), hi = Math.max(...pos);
2207
2255
  if (hi - lo < MIN_AXIS_SPAN_PX) continue;
2208
- const mean = pos.reduce((s2, p2) => s2 + p2, 0) / pos.length;
2256
+ const mean = pos.reduce((s, p2) => s + p2, 0) / pos.length;
2209
2257
  let ssRes = 0, ssTot = 0;
2210
2258
  const res = pos.map((p2, k2) => {
2211
- const e = p2 - (line.a + line.b * v3[k2]);
2259
+ const e = p2 - (line.a + line.b * v2[k2]);
2212
2260
  ssRes += e * e;
2213
2261
  ssTot += (p2 - mean) ** 2;
2214
2262
  return e;
@@ -2228,11 +2276,11 @@ function censusValuePlacement(container, data) {
2228
2276
  if (!best) return EMPTY4;
2229
2277
  let off = 0, measured = 0;
2230
2278
  const radii = [];
2231
- dots.forEach((d, k2) => {
2279
+ dots.forEach((d2, k2) => {
2232
2280
  const e = best.res[k2];
2233
2281
  if (!Number.isFinite(e)) return;
2234
2282
  measured++;
2235
- const inRadii = Math.abs(e) / Math.max(d.r, 1);
2283
+ const inRadii = Math.abs(e) / Math.max(d2.r, 1);
2236
2284
  radii.push(inRadii);
2237
2285
  if (inRadii > 1) off++;
2238
2286
  });
@@ -2251,8 +2299,8 @@ function censusValuePlacement(container, data) {
2251
2299
  }
2252
2300
  function valuePlacementFlag(c2) {
2253
2301
  if (c2.marks === 0) return "";
2254
- const s2 = c2.offShare;
2255
- const bucket = s2 <= 0 ? 0 : s2 < 5 ? 1 : s2 < 20 ? 5 : s2 < 50 ? 20 : 50;
2302
+ const s = c2.offShare;
2303
+ const bucket = s <= 0 ? 0 : s < 5 ? 1 : s < 20 ? 5 : s < 50 ? 20 : 50;
2256
2304
  return "place:d3:off" + bucket;
2257
2305
  }
2258
2306
 
@@ -2269,12 +2317,12 @@ function contentExtentOf(boxes) {
2269
2317
  if (usable.length === 0) return { w: 0, h: 0, source: "none" };
2270
2318
  const inFlow = usable.filter((b2) => !b2.floating);
2271
2319
  const counted = inFlow.length > 0 ? inFlow : usable;
2272
- let w2 = 0, h2 = 0;
2320
+ let w2 = 0, h3 = 0;
2273
2321
  for (const b2 of counted) {
2274
2322
  if (b2.right > w2) w2 = b2.right;
2275
- if (b2.bottom > h2) h2 = b2.bottom;
2323
+ if (b2.bottom > h3) h3 = b2.bottom;
2276
2324
  }
2277
- return { w: w2, h: h2, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
2325
+ return { w: w2, h: h3, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
2278
2326
  }
2279
2327
  function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
2280
2328
  return {
@@ -2284,8 +2332,8 @@ function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL
2284
2332
  }
2285
2333
  var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
2286
2334
  var PHANTOM_FRACTION = 0.95;
2287
- function isPhantomBox(w2, h2, refW, refH) {
2288
- return w2 > refW * PHANTOM_FRACTION || h2 > refH * PHANTOM_FRACTION;
2335
+ function isPhantomBox(w2, h3, refW, refH) {
2336
+ return w2 > refW * PHANTOM_FRACTION || h3 > refH * PHANTOM_FRACTION;
2289
2337
  }
2290
2338
  var MAX_FRAME_GROW_FACTOR = 20;
2291
2339
  function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
@@ -2360,10 +2408,10 @@ function axisPinPlacement(band, scrollTop, viewportH) {
2360
2408
 
2361
2409
  // src/fitDom.ts
2362
2410
  var FIT_WALK_CAP = 8e3;
2363
- function ctmScaleOf(m) {
2364
- if (!m) return 0;
2365
- const s2 = Math.hypot(m.a, m.b);
2366
- return isFinite(s2) && s2 > 0 ? s2 : 0;
2411
+ function ctmScaleOf(m2) {
2412
+ if (!m2) return 0;
2413
+ const s = Math.hypot(m2.a, m2.b);
2414
+ return isFinite(s) && s > 0 ? s : 0;
2367
2415
  }
2368
2416
  function svgInkReach(svg) {
2369
2417
  try {
@@ -2371,8 +2419,8 @@ function svgInkReach(svg) {
2371
2419
  if (!(box.width > 0) || !(box.height > 0)) return null;
2372
2420
  const els = svg.querySelectorAll(FIT_CONTENT_SELECTOR);
2373
2421
  let right = -Infinity, bottom = -Infinity, seen = 0;
2374
- for (let i2 = 0; i2 < els.length && seen < FIT_WALK_CAP; i2++) {
2375
- const r = els[i2].getBoundingClientRect();
2422
+ for (let i = 0; i < els.length && seen < FIT_WALK_CAP; i++) {
2423
+ const r = els[i].getBoundingClientRect();
2376
2424
  if (r.width <= 0 && r.height <= 0) continue;
2377
2425
  if (isPhantomBox(r.width, r.height, box.width, box.height)) continue;
2378
2426
  seen++;
@@ -2390,8 +2438,8 @@ function measureContainerBoxes(c2, inkOf) {
2390
2438
  if (!c2 || !c2.children) return boxes;
2391
2439
  const view = c2.ownerDocument && c2.ownerDocument.defaultView || globalThis;
2392
2440
  const cRect = c2.getBoundingClientRect();
2393
- for (let i2 = 0; i2 < c2.children.length; i2++) {
2394
- const el = c2.children[i2];
2441
+ for (let i = 0; i < c2.children.length; i++) {
2442
+ const el = c2.children[i];
2395
2443
  let floating = false;
2396
2444
  try {
2397
2445
  const cs = view.getComputedStyle(el);
@@ -2475,8 +2523,8 @@ function textHidden(t, view) {
2475
2523
  function backdropFill(svg, container, view, svgBox) {
2476
2524
  try {
2477
2525
  const rects = svg.querySelectorAll("rect");
2478
- for (let i2 = 0; i2 < rects.length && i2 < 6; i2++) {
2479
- const r = rects[i2];
2526
+ for (let i = 0; i < rects.length && i < 6; i++) {
2527
+ const r = rects[i];
2480
2528
  if (r.closest(".d3-mark")) continue;
2481
2529
  const b2 = r.getBoundingClientRect();
2482
2530
  if (b2.width >= svgBox.width * 0.9 && b2.height >= svgBox.height * 0.9) {
@@ -2517,7 +2565,7 @@ function cloneWithChain(el, svg, root) {
2517
2565
  }
2518
2566
  parent.appendChild(el.cloneNode(true));
2519
2567
  const ids = root.querySelectorAll("[id]");
2520
- for (let i2 = 0; i2 < ids.length; i2++) ids[i2].removeAttribute("id");
2568
+ for (let i = 0; i < ids.length; i++) ids[i].removeAttribute("id");
2521
2569
  }
2522
2570
  function pinScrolledAxis(container, svg) {
2523
2571
  unpinScrolledAxis(container);
@@ -2528,15 +2576,15 @@ function pinScrolledAxis(container, svg) {
2528
2576
  const view = doc && doc.defaultView || globalThis;
2529
2577
  const svgBox = svg.getBoundingClientRect();
2530
2578
  if (!(svgBox.width > 0) || !(svgBox.height > 0)) return noPin("unmeasurable");
2531
- const m = typeof svg.getScreenCTM === "function" ? svg.getScreenCTM() : null;
2532
- if (!m || !(m.a > 0) || !(m.d > 0) || !isFinite(m.e) || !isFinite(m.f)) return noPin("no-ctm");
2579
+ const m2 = typeof svg.getScreenCTM === "function" ? svg.getScreenCTM() : null;
2580
+ if (!m2 || !(m2.a > 0) || !(m2.d > 0) || !isFinite(m2.e) || !isFinite(m2.f)) return noPin("no-ctm");
2533
2581
  const viewportH = container.clientHeight;
2534
2582
  if (!(viewportH > 0)) return noPin("unmeasurable");
2535
2583
  const rel = (r) => ({ left: r.left - svgBox.left, top: r.top - svgBox.top, right: r.right - svgBox.left, bottom: r.bottom - svgBox.top });
2536
2584
  const ticks = svg.querySelectorAll(".tick");
2537
2585
  const byAxis = /* @__PURE__ */ new Map();
2538
- for (let i2 = 0; i2 < ticks.length; i2++) {
2539
- const t = ticks[i2];
2586
+ for (let i = 0; i < ticks.length; i++) {
2587
+ const t = ticks[i];
2540
2588
  if (t.closest("svg") !== svg) continue;
2541
2589
  const p2 = t.parentElement;
2542
2590
  if (!p2) continue;
@@ -2556,8 +2604,8 @@ function pinScrolledAxis(container, svg) {
2556
2604
  labels.push(rel(r));
2557
2605
  }
2558
2606
  const tracks = [];
2559
- for (let i2 = 0; i2 < axis2.children.length; i2++) {
2560
- const ch = axis2.children[i2];
2607
+ for (let i = 0; i < axis2.children.length; i++) {
2608
+ const ch = axis2.children[i];
2561
2609
  if (ch.tagName.toLowerCase() !== "path" || !(ch.getAttribute("class") || "").split(/\s+/).includes("domain")) continue;
2562
2610
  const r = ch.getBoundingClientRect();
2563
2611
  if (r.width > 0 && r.height <= 4) tracks.push(rel(r));
@@ -2573,8 +2621,8 @@ function pinScrolledAxis(container, svg) {
2573
2621
  if (!(bandPx > 0)) return noPin("unmeasurable");
2574
2622
  const carried = [];
2575
2623
  const texts = svg.querySelectorAll("text");
2576
- for (let i2 = 0; i2 < texts.length && carried.length < AXIS_PIN_MAX_CARRIED; i2++) {
2577
- const t = texts[i2];
2624
+ for (let i = 0; i < texts.length && carried.length < AXIS_PIN_MAX_CARRIED; i++) {
2625
+ const t = texts[i];
2578
2626
  if (t.closest("svg") !== svg) continue;
2579
2627
  if (t.closest(".tick") || t.closest(".d3-mark") || t.closest(".d3-legend-mark")) continue;
2580
2628
  if (axis.contains(t) || textHidden(t, view)) continue;
@@ -2583,14 +2631,14 @@ function pinScrolledAxis(container, svg) {
2583
2631
  if (r.top >= band.top && r.bottom <= band.bottom) carried.push(t);
2584
2632
  }
2585
2633
  const pinSvg = doc.createElementNS(SVG_NS2, "svg");
2586
- for (const a4 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
2587
- const v3 = svg.getAttribute(a4);
2588
- if (v3) pinSvg.setAttribute(a4, v3);
2634
+ for (const a2 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
2635
+ const v2 = svg.getAttribute(a2);
2636
+ if (v2) pinSvg.setAttribute(a2, v2);
2589
2637
  }
2590
2638
  const styles = svg.querySelectorAll("style");
2591
- for (let i2 = 0; i2 < styles.length; i2++) pinSvg.appendChild(styles[i2].cloneNode(true));
2592
- const vbX = (svgBox.left - m.e) / m.a, vbY = (svgBox.top + band.top - m.f) / m.d;
2593
- const vbW = svgBox.width / m.a, vbH = bandPx / m.d;
2639
+ for (let i = 0; i < styles.length; i++) pinSvg.appendChild(styles[i].cloneNode(true));
2640
+ const vbX = (svgBox.left - m2.e) / m2.a, vbY = (svgBox.top + band.top - m2.f) / m2.d;
2641
+ const vbW = svgBox.width / m2.a, vbH = bandPx / m2.d;
2594
2642
  pinSvg.setAttribute("viewBox", `${vbX} ${vbY} ${vbW} ${vbH}`);
2595
2643
  pinSvg.setAttribute("preserveAspectRatio", "none");
2596
2644
  pinSvg.setAttribute("width", String(svgBox.width));
@@ -2688,8 +2736,8 @@ function fitRenderedChart(container, opts = {}) {
2688
2736
  if (!container) return result;
2689
2737
  try {
2690
2738
  let svg = null;
2691
- for (let i2 = 0; i2 < container.children.length && !svg; i2++) {
2692
- const el = container.children[i2];
2739
+ for (let i = 0; i < container.children.length && !svg; i++) {
2740
+ const el = container.children[i];
2693
2741
  if (el.tagName && el.tagName.toLowerCase() === "svg") svg = el;
2694
2742
  }
2695
2743
  if (!svg) svg = container.querySelector("svg");
@@ -2763,13 +2811,13 @@ function fitRenderedChart(container, opts = {}) {
2763
2811
  // src/labelContrast.ts
2764
2812
  function parseRGBA(c2) {
2765
2813
  if (typeof c2 !== "string") return null;
2766
- const s2 = c2.trim();
2767
- const m = s2.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
2768
- if (m) return [parseFloat(m[1]), parseFloat(m[2]), parseFloat(m[3]), m[4] !== void 0 ? parseFloat(m[4]) : 1];
2769
- let h2 = s2.replace(/^#/, "");
2770
- if (h2.length === 3) h2 = h2.split("").map((ch) => ch + ch).join("");
2771
- if (h2.length === 6 && /^[0-9a-fA-F]{6}$/.test(h2)) {
2772
- return [parseInt(h2.slice(0, 2), 16), parseInt(h2.slice(2, 4), 16), parseInt(h2.slice(4, 6), 16), 1];
2814
+ const s = c2.trim();
2815
+ const m2 = s.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
2816
+ if (m2) return [parseFloat(m2[1]), parseFloat(m2[2]), parseFloat(m2[3]), m2[4] !== void 0 ? parseFloat(m2[4]) : 1];
2817
+ let h3 = s.replace(/^#/, "");
2818
+ if (h3.length === 3) h3 = h3.split("").map((ch) => ch + ch).join("");
2819
+ if (h3.length === 6 && /^[0-9a-fA-F]{6}$/.test(h3)) {
2820
+ return [parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16), 1];
2773
2821
  }
2774
2822
  return null;
2775
2823
  }
@@ -2780,8 +2828,8 @@ var WHITE_TEXT_BG_LUM = 0.5;
2780
2828
  var PILL_MIN_ALPHA = 0.05;
2781
2829
  var PILL_OPAQUE_ALPHA = 0.85;
2782
2830
  var PAGE_MATCH_TOLERANCE = 2;
2783
- function isPillBackdropAlpha(a4) {
2784
- return a4 >= PILL_MIN_ALPHA && a4 < PILL_OPAQUE_ALPHA;
2831
+ function isPillBackdropAlpha(a2) {
2832
+ return a2 >= PILL_MIN_ALPHA && a2 < PILL_OPAQUE_ALPHA;
2785
2833
  }
2786
2834
  var PILL_MIN_COVERAGE = 0.6;
2787
2835
  function pillBacksGlyph(overlapArea, glyphArea) {
@@ -2809,17 +2857,17 @@ function toRGBA(c2) {
2809
2857
  return parseRGBA(c2);
2810
2858
  }
2811
2859
  function compositeOver(fg, bg) {
2812
- const a4 = Math.max(0, Math.min(1, fg[3]));
2860
+ const a2 = Math.max(0, Math.min(1, fg[3]));
2813
2861
  return [
2814
- Math.round(fg[0] * a4 + bg[0] * (1 - a4)),
2815
- Math.round(fg[1] * a4 + bg[1] * (1 - a4)),
2816
- Math.round(fg[2] * a4 + bg[2] * (1 - a4))
2862
+ Math.round(fg[0] * a2 + bg[0] * (1 - a2)),
2863
+ Math.round(fg[1] * a2 + bg[1] * (1 - a2)),
2864
+ Math.round(fg[2] * a2 + bg[2] * (1 - a2))
2817
2865
  ];
2818
2866
  }
2819
2867
  function relativeLuminance(rgb) {
2820
- const lin = rgb.map((v3) => {
2821
- const s2 = v3 / 255;
2822
- return s2 <= 0.03928 ? s2 / 12.92 : Math.pow((s2 + 0.055) / 1.055, 2.4);
2868
+ const lin = rgb.map((v2) => {
2869
+ const s = v2 / 255;
2870
+ return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
2823
2871
  });
2824
2872
  return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
2825
2873
  }
@@ -2856,19 +2904,19 @@ function glyphSampleGrid(box, n = GLYPH_SAMPLE_N) {
2856
2904
  const out = [];
2857
2905
  if (!box || !(box.width > 0) || !(box.height > 0) || !(n >= 1)) return out;
2858
2906
  const k2 = Math.floor(n);
2859
- for (let i2 = 0; i2 < k2; i2++) {
2907
+ for (let i = 0; i < k2; i++) {
2860
2908
  for (let j3 = 0; j3 < k2; j3++) {
2861
2909
  out.push({
2862
- x: box.left + box.width * (i2 + 0.5) / k2,
2910
+ x: box.left + box.width * (i + 0.5) / k2,
2863
2911
  y: box.top + box.height * (j3 + 0.5) / k2
2864
2912
  });
2865
2913
  }
2866
2914
  }
2867
2915
  return out;
2868
2916
  }
2869
- function clamp01(v3) {
2870
- if (typeof v3 !== "number" || !isFinite(v3)) return 1;
2871
- return Math.max(0, Math.min(1, v3));
2917
+ function clamp01(v2) {
2918
+ if (typeof v2 !== "number" || !isFinite(v2)) return 1;
2919
+ return Math.max(0, Math.min(1, v2));
2872
2920
  }
2873
2921
  function hexToRGB(hex2) {
2874
2922
  const p2 = toRGBA(hex2);
@@ -2883,16 +2931,16 @@ function backedSamples(el, pts) {
2883
2931
  try {
2884
2932
  const ge = el;
2885
2933
  if (typeof ge.isPointInFill !== "function" || typeof ge.getScreenCTM !== "function") return null;
2886
- const m = ge.getScreenCTM();
2934
+ const m2 = ge.getScreenCTM();
2887
2935
  const svg = ge.ownerSVGElement;
2888
- if (!m || !svg || typeof svg.createSVGPoint !== "function") return null;
2936
+ if (!m2 || !svg || typeof svg.createSVGPoint !== "function") return null;
2889
2937
  if (pts.length === 0) return null;
2890
- const inv = m.inverse();
2938
+ const inv = m2.inverse();
2891
2939
  const hit = [];
2892
- for (let i2 = 0; i2 < pts.length; i2++) {
2940
+ for (let i = 0; i < pts.length; i++) {
2893
2941
  const p2 = svg.createSVGPoint();
2894
- p2.x = pts[i2].x;
2895
- p2.y = pts[i2].y;
2942
+ p2.x = pts[i].x;
2943
+ p2.y = pts[i].y;
2896
2944
  hit.push(ge.isPointInFill(p2.matrixTransform(inv)));
2897
2945
  }
2898
2946
  return hit;
@@ -2935,7 +2983,7 @@ function applyLabelContrast(container, opts = {}) {
2935
2983
  report.skipped = "too-many-shapes";
2936
2984
  return report;
2937
2985
  }
2938
- for (let i2 = 0; i2 < shapeEls.length; i2++) pushShape(shapeEls[i2]);
2986
+ for (let i = 0; i < shapeEls.length; i++) pushShape(shapeEls[i]);
2939
2987
  if (rects.length === 0) {
2940
2988
  report.skipped = "no-shapes";
2941
2989
  return report;
@@ -2960,40 +3008,40 @@ function applyLabelContrast(container, opts = {}) {
2960
3008
  if (tr.width <= 0 || tr.height <= 0) continue;
2961
3009
  const ovArea = (r) => Math.max(0, Math.min(r.right, tr.right) - Math.max(r.left, tr.left)) * Math.max(0, Math.min(r.bottom, tr.bottom) - Math.max(r.top, tr.top));
2962
3010
  const glyphArea = tr.width * tr.height;
2963
- const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x2) => x2.ov > 0);
3011
+ const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x3) => x3.ov > 0);
2964
3012
  const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
2965
3013
  const painted = pts.map(() => false);
2966
3014
  let unmeasured = 0;
2967
- const under = boxed.map((x2) => {
2968
- const mask = backedSamples(x2.mk.el, pts);
3015
+ const under = boxed.map((x3) => {
3016
+ const mask = backedSamples(x3.mk.el, pts);
2969
3017
  if (mask === null) {
2970
3018
  unmeasured++;
2971
- return x2;
3019
+ return x3;
2972
3020
  }
2973
3021
  let inside = 0;
2974
- const paints = effAlpha(x2.mk) >= PILL_MIN_ALPHA;
2975
- for (let i2 = 0; i2 < mask.length; i2++) {
2976
- if (!mask[i2]) continue;
3022
+ const paints = effAlpha(x3.mk) >= PILL_MIN_ALPHA;
3023
+ for (let i = 0; i < mask.length; i++) {
3024
+ if (!mask[i]) continue;
2977
3025
  inside++;
2978
- if (paints) painted[i2] = true;
3026
+ if (paints) painted[i] = true;
2979
3027
  }
2980
- return { mk: x2.mk, ov: glyphArea * (inside / mask.length) };
2981
- }).filter((x2) => x2.ov > 0);
3028
+ return { mk: x3.mk, ov: glyphArea * (inside / mask.length) };
3029
+ }).filter((x3) => x3.ov > 0);
2982
3030
  if (under.length === 0 && boxed.length > 0) report.offFill++;
2983
3031
  if (under.length === 0) continue;
2984
3032
  if (unmeasured === 0 && pts.length > 0) {
2985
3033
  let held = 0;
2986
- for (let i2 = 0; i2 < painted.length; i2++) if (painted[i2]) held++;
3034
+ for (let i = 0; i < painted.length; i++) if (painted[i]) held++;
2987
3035
  if (!backingHoldsGlyph(glyphArea * (held / pts.length), glyphArea)) {
2988
3036
  report.pageMajority++;
2989
3037
  continue;
2990
3038
  }
2991
3039
  }
2992
3040
  report.scanned++;
2993
- const opaqueUnder = under.filter((x2) => effAlpha(x2.mk) >= PILL_OPAQUE_ALPHA);
2994
- const cellEntry = (opaqueUnder.length ? opaqueUnder : under).reduce((a4, b2) => b2.ov > a4.ov || b2.ov === a4.ov && b2.mk.ord > a4.mk.ord ? b2 : a4);
3041
+ const opaqueUnder = under.filter((x3) => effAlpha(x3.mk) >= PILL_OPAQUE_ALPHA);
3042
+ const cellEntry = (opaqueUnder.length ? opaqueUnder : under).reduce((a2, b2) => b2.ov > a2.ov || b2.ov === a2.ov && b2.mk.ord > a2.mk.ord ? b2 : a2);
2995
3043
  const cell = cellEntry.mk;
2996
- const pill = under.find((x2) => x2.mk !== cell && isPillBackdropAlpha(effAlpha(x2.mk)) && x2.mk.ord > cell.ord && pillBacksGlyph(x2.ov, glyphArea))?.mk;
3044
+ const pill = under.find((x3) => x3.mk !== cell && isPillBackdropAlpha(effAlpha(x3.mk)) && x3.mk.ord > cell.ord && pillBacksGlyph(x3.ov, glyphArea))?.mk;
2997
3045
  const cellRGBA = toRGBA(cell.fill);
2998
3046
  let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
2999
3047
  if (pill) {
@@ -3007,12 +3055,12 @@ function applyLabelContrast(container, opts = {}) {
3007
3055
  }
3008
3056
  const cur = tx.getAttribute("fill") || (win && typeof win.getComputedStyle === "function" ? win.getComputedStyle(tx).fill : "");
3009
3057
  const normalize = !cellSuppressesNormalize(cell.el.getAttribute("class"));
3010
- const d = decideLabelColor(cur, `rgb(${bgRGB[0]}, ${bgRGB[1]}, ${bgRGB[2]})`, 1, pageBg, MIN_CONTRAST, normalize);
3011
- if (d.fix) {
3012
- tx.setAttribute("fill", d.color);
3058
+ const d2 = decideLabelColor(cur, `rgb(${bgRGB[0]}, ${bgRGB[1]}, ${bgRGB[2]})`, 1, pageBg, MIN_CONTRAST, normalize);
3059
+ if (d2.fix) {
3060
+ tx.setAttribute("fill", d2.color);
3013
3061
  report.fixed++;
3014
3062
  }
3015
- if (pill || d.fix) tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3063
+ if (pill || d2.fix) tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3016
3064
  }
3017
3065
  return report;
3018
3066
  } catch {
@@ -3039,7 +3087,7 @@ function noopViewStateProvider() {
3039
3087
  return { load: () => ({}), save: () => {
3040
3088
  } };
3041
3089
  }
3042
- var parseRowIdxs = (s2) => (s2 || "").split(",").map((x2) => parseInt(x2, 10)).filter((n) => Number.isFinite(n));
3090
+ var parseRowIdxs = (s) => (s || "").split(",").map((x3) => parseInt(x3, 10)).filter((n) => Number.isFinite(n));
3043
3091
  var D3_PLUGIN_PACKAGES = {
3044
3092
  sankey: "d3-sankey",
3045
3093
  sankeyLinkHorizontal: "d3-sankey",
@@ -3054,8 +3102,8 @@ var D3_PLUGIN_PACKAGES = {
3054
3102
  };
3055
3103
  function requiredD3Plugins(code) {
3056
3104
  const out = /* @__PURE__ */ new Set();
3057
- for (const m of String(code || "").matchAll(/\bd3\s*\.\s*(\w+)\s*\(/g)) {
3058
- const pkg = D3_PLUGIN_PACKAGES[m[1]];
3105
+ for (const m2 of String(code || "").matchAll(/\bd3\s*\.\s*(\w+)\s*\(/g)) {
3106
+ const pkg = D3_PLUGIN_PACKAGES[m2[1]];
3059
3107
  if (pkg) out.add(pkg);
3060
3108
  }
3061
3109
  return [...out].sort();
@@ -3067,8 +3115,8 @@ function explainRenderFailure(err, d3) {
3067
3115
  "[@bicharts/chart-host] no d3 was provided, so the generated chart could not run. Pass it explicitly \u2014 createChartHost(el, { d3 }) / <BicChart d3={d3} /> \u2014 or set window.d3. The chart needs D3 v7 (npm install d3@7). Original error: " + msg
3068
3116
  );
3069
3117
  }
3070
- const m = /d3\.(\w+) is not a function|(\w+) is not a function/.exec(msg);
3071
- const name = m?.[1] ?? m?.[2] ?? "";
3118
+ const m2 = /d3\.(\w+) is not a function|(\w+) is not a function/.exec(msg);
3119
+ const name = m2?.[1] ?? m2?.[2] ?? "";
3072
3120
  const pkg = D3_PLUGIN_PACKAGES[name];
3073
3121
  if (pkg) {
3074
3122
  return new Error(
@@ -3110,7 +3158,7 @@ function createChartHost(container, config) {
3110
3158
  let data = config.data;
3111
3159
  {
3112
3160
  const stamped = config.data?.meta?.hostContract;
3113
- const major = (v3) => (v3 || "").split(".")[0];
3161
+ const major = (v2) => (v2 || "").split(".")[0];
3114
3162
  if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
3115
3163
  try {
3116
3164
  (win?.console ?? console)?.warn(
@@ -3132,10 +3180,10 @@ function createChartHost(container, config) {
3132
3180
  if (raw.uiState && typeof raw.uiState === "object" && Object.keys(bag).length === 0)
3133
3181
  Object.assign(bag, raw.uiState);
3134
3182
  raw.uiState = bag;
3135
- raw.setUiState = (s2) => {
3136
- if (!s2 || typeof s2 !== "object") return;
3183
+ raw.setUiState = (s) => {
3184
+ if (!s || typeof s !== "object") return;
3137
3185
  try {
3138
- provider.save(s2);
3186
+ provider.save(s);
3139
3187
  } catch {
3140
3188
  }
3141
3189
  };
@@ -3219,10 +3267,10 @@ function createChartHost(container, config) {
3219
3267
  if (active && tickStillDrawn) activeTickEl.classList?.add(ACTIVE_TICK_CLASS);
3220
3268
  const wanted = new Set(sel ?? []);
3221
3269
  const marks = container.querySelectorAll(`.${MARK_CLASS}[${ROW_IDX_ATTR}], .${LEGEND_MARK_CLASS}[${ROW_IDX_ATTR}]`);
3222
- for (const m of Array.from(marks)) {
3223
- const rows = parseRowIdxs(m.getAttribute(ROW_IDX_ATTR));
3270
+ for (const m2 of Array.from(marks)) {
3271
+ const rows = parseRowIdxs(m2.getAttribute(ROW_IDX_ATTR));
3224
3272
  const on = active && rows.some((r) => wanted.has(r));
3225
- m.classList?.[on ? "add" : "remove"](MARK_SELECTED_CLASS);
3273
+ m2.classList?.[on ? "add" : "remove"](MARK_SELECTED_CLASS);
3226
3274
  }
3227
3275
  } catch {
3228
3276
  }
@@ -3242,10 +3290,10 @@ function createChartHost(container, config) {
3242
3290
  let xfAt = 0;
3243
3291
  const XF_ECHO_MS = 150;
3244
3292
  const onXf = (e) => {
3245
- const d = e?.detail || {};
3293
+ const d2 = e?.detail || {};
3246
3294
  xfAt = Date.now();
3247
- if (d.clear) notify([], d.source || "chart");
3248
- else if (d.mark) notify(parseRowIdxs(d.mark.getAttribute?.(ROW_IDX_ATTR)), d.source || "chart", d.mark);
3295
+ if (d2.clear) notify([], d2.source || "chart");
3296
+ else if (d2.mark) notify(parseRowIdxs(d2.mark.getAttribute?.(ROW_IDX_ATTR)), d2.source || "chart", d2.mark);
3249
3297
  };
3250
3298
  const resolver = createMarkResolver({
3251
3299
  root: container,
@@ -3285,10 +3333,10 @@ function createChartHost(container, config) {
3285
3333
  const fitOpts = config.fit ?? true;
3286
3334
  const labelContrastOpts = config.labelContrast ?? true;
3287
3335
  const stopAnim = () => {
3288
- const s2 = container[CONTAINER_SLOT_ANIM_STOP];
3289
- if (typeof s2 === "function") {
3336
+ const s = container[CONTAINER_SLOT_ANIM_STOP];
3337
+ if (typeof s === "function") {
3290
3338
  try {
3291
- s2();
3339
+ s();
3292
3340
  } catch {
3293
3341
  }
3294
3342
  }
@@ -3318,6 +3366,7 @@ function createChartHost(container, config) {
3318
3366
  if (resolved.geoUnmatched === void 0 && data.geoUnmatched) resolved = { ...resolved, geoUnmatched: data.geoUnmatched };
3319
3367
  if (resolved.geoPoint === void 0 && data.geoPoint) resolved = { ...resolved, geoPoint: data.geoPoint };
3320
3368
  if (resolved.geoPointDest === void 0 && data.geoPointDest) resolved = { ...resolved, geoPointDest: data.geoPointDest };
3369
+ if (resolved.dateCellsAreUtcDays === void 0 && data.dateCellsAreUtcDays) resolved = { ...resolved, dateCellsAreUtcDays: true };
3321
3370
  try {
3322
3371
  renderFn(container, { columns: data.columns, rows: data.rows }, resolved);
3323
3372
  } catch (err) {
@@ -3402,10 +3451,10 @@ function createChartHost(container, config) {
3402
3451
  return () => subs.delete(cb);
3403
3452
  },
3404
3453
  clear() {
3405
- const s2 = container[CONTAINER_SLOT_XF_CLEAR];
3406
- if (typeof s2 === "function") {
3454
+ const s = container[CONTAINER_SLOT_XF_CLEAR];
3455
+ if (typeof s === "function") {
3407
3456
  try {
3408
- s2();
3457
+ s();
3409
3458
  } catch {
3410
3459
  }
3411
3460
  }
@@ -3493,7 +3542,7 @@ export {
3493
3542
  registerGeoAsset,
3494
3543
  clearGeoCache,
3495
3544
  L3,
3496
- p,
3545
+ x2 as x,
3497
3546
  u2 as u,
3498
3547
  Oe,
3499
3548
  Le,