@bicharts/chart-host 0.5.99 → 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;
@@ -636,12 +636,25 @@ function censusColourSpread(container, doc) {
636
636
  );
637
637
  if (els.length === 0 || els.length > ELEMENT_CAP) return EMPTY;
638
638
  const ownerDoc = doc ?? container.ownerDocument;
639
+ const painted = [];
640
+ for (const el of els) {
641
+ const rgb = toRgb(fillOf(el, styleOf(el, ownerDoc)));
642
+ if (rgb) painted.push({ rgb, tag: String(el.tagName || "").toLowerCase() });
643
+ }
644
+ const byTag = /* @__PURE__ */ new Map();
645
+ for (const p2 of painted) {
646
+ const g3 = byTag.get(p2.tag) ?? { fills: /* @__PURE__ */ new Set(), n: 0 };
647
+ g3.fills.add(p2.rgb.join(","));
648
+ g3.n++;
649
+ byTag.set(p2.tag, g3);
650
+ }
651
+ const overlays = new Set([...byTag].filter(([, g3]) => g3.fills.size === 1 && g3.n >= MIN_MARKS).map(([t]) => t));
652
+ const restFills = new Set([...byTag].filter(([t]) => !overlays.has(t)).flatMap(([, g3]) => [...g3.fills]));
653
+ const counted = restFills.size > 1 ? painted.filter((p2) => !overlays.has(p2.tag)) : painted;
639
654
  const distinct = /* @__PURE__ */ new Set();
640
655
  const cells = /* @__PURE__ */ new Map();
641
656
  let marks = 0;
642
- for (const el of els) {
643
- const rgb = toRgb(fillOf(el, styleOf(el, ownerDoc)));
644
- if (!rgb) continue;
657
+ for (const { rgb } of counted) {
645
658
  marks++;
646
659
  distinct.add(rgb.join(","));
647
660
  const k2 = cellKey(rgb);
@@ -650,36 +663,36 @@ function censusColourSpread(container, doc) {
650
663
  else cells.set(k2, { rgb, n: 1 });
651
664
  }
652
665
  if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
653
- const top = [...cells.values()].sort((a4, b2) => b2.n - a4.n).slice(0, MAX_CELLS);
654
- 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);
655
668
  if (cs.length < MIN_RAMP_FILLS) return EMPTY;
656
- const d = cs.map(() => new Array(cs.length).fill(0));
669
+ const d2 = cs.map(() => new Array(cs.length).fill(0));
657
670
  let span = 0, lo = 0, hi = 1;
658
- for (let i2 = 0; i2 < cs.length; i2++) {
659
- for (let j3 = i2 + 1; j3 < cs.length; j3++) {
660
- const v3 = deltaE2000(cs[i2], cs[j3]);
661
- d[i2][j3] = v3;
662
- d[j3][i2] = v3;
663
- if (v3 > span) {
664
- span = v3;
665
- 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;
666
679
  hi = j3;
667
680
  }
668
681
  }
669
682
  }
670
683
  if (span <= 0) return EMPTY;
671
684
  let slack = 0, interior = 0;
672
- for (let i2 = 0; i2 < cs.length; i2++) {
673
- if (i2 === lo || i2 === hi) continue;
674
- 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;
675
688
  interior++;
676
689
  }
677
690
  if (interior < 2 || slack / interior > RAMP_SLACK_MAX) return EMPTY;
678
691
  let crowd = 0;
679
- for (let i2 = 0; i2 < cs.length; i2++) {
692
+ for (let i = 0; i < cs.length; i++) {
680
693
  let n = 0;
681
694
  for (let j3 = 0; j3 < cs.length; j3++) {
682
- 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;
683
696
  }
684
697
  if (n > crowd) crowd = n;
685
698
  }
@@ -707,18 +720,18 @@ var MIN_ACCENT_VS_CANVAS = 20;
707
720
  var HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
708
721
  function normHex(raw) {
709
722
  if (typeof raw !== "string") return null;
710
- const m = HEX.exec(raw.trim());
711
- if (!m) return null;
712
- const h2 = m[1].length === 3 ? m[1].split("").map((c2) => c2 + c2).join("") : m[1];
713
- 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();
714
727
  }
715
- function mixLab(a4, b2, t) {
716
- 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 };
717
730
  }
718
731
  function paintedOver(fg, canvas, alpha) {
719
- const f4 = [1, 3, 5].map((i2) => parseInt(fg.slice(i2, i2 + 2), 16));
720
- const c2 = [1, 3, 5].map((i2) => parseInt(canvas.slice(i2, i2 + 2), 16));
721
- 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"));
722
735
  return hexToLab("#" + mixed.join(""));
723
736
  }
724
737
  function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity = AUTO_RAMP_DRAWN_OPACITY) {
@@ -795,6 +808,8 @@ function resolveOptions(p2) {
795
808
  // tests/defaults.test.ts now compares the two lists, because four instances of one
796
809
  // omission is a missing check, not four mistakes.
797
810
  geoPointDest: p2.geoPointDest,
811
+ // A host FACT about the data it serialised (contract 1.9.0), passed through untouched.
812
+ dateCellsAreUtcDays: p2.dateCellsAreUtcDays,
798
813
  // NO LONGER A PASS-THROUGH. A host without a Max Map Points setting used to leave this
799
814
  // undefined, and every map chart then fell back to whatever number its own code carried -
800
815
  // 1000 in every archetype written so far - while the offer gate used the server's. One
@@ -845,20 +860,20 @@ function resolveOptions(p2) {
845
860
  // never reach a chart as a live mode. Both of these are read on EVERY render, so a
846
861
  // reader can change their mind about a cached chart without regenerating it.
847
862
  approximatePositions: (() => {
848
- const v3 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
849
- 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;
850
865
  })(),
851
866
  valueAxisBaseline: (() => {
852
- const v3 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
853
- 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;
854
869
  })(),
855
870
  // Same shape, and the same reason for it: an unrecognised string must never reach a chart
856
871
  // as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
857
872
  // the setting that makes the chart PROVE the grid before it names a period, so a garbled
858
873
  // value withdraws the claim rather than asserting one.
859
874
  seasonalMarkers: (() => {
860
- const v3 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
861
- 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;
862
877
  })(),
863
878
  // ---- animation: booleans, default+clamp numerics, "" default enum ----
864
879
  animAutoPlay: !!p2.animAutoPlay,
@@ -901,8 +916,8 @@ function resolveOptions(p2) {
901
916
  // because a newer client shipped, and "both" would have done exactly that to every deck
902
917
  // already in a report.
903
918
  flipMode: (() => {
904
- const m = (p2.flipMode == null ? "" : String(p2.flipMode)).toLowerCase();
905
- 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;
906
921
  if (p2.flipSync === false) return "single";
907
922
  if (p2.flipSync === true) return "all";
908
923
  return FLIP_MODE_DEFAULT;
@@ -1038,21 +1053,21 @@ function j() {
1038
1053
  } catch {
1039
1054
  continue;
1040
1055
  }
1041
- for (let [i2, r] of N) {
1042
- let a4;
1056
+ for (let [i, r] of N) {
1057
+ let a2;
1043
1058
  try {
1044
- a4 = o.of(i2);
1059
+ a2 = o.of(i);
1045
1060
  } catch {
1046
- a4 = void 0;
1061
+ a2 = void 0;
1047
1062
  }
1048
- if (!a4 || a4 === i2) continue;
1049
- let s2 = u(a4);
1050
- 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);
1051
1066
  }
1052
1067
  }
1053
1068
  for (let [t, o] of Object.entries(Q)) {
1054
- let i2 = u(t);
1055
- i2 && n.set(i2, o);
1069
+ let i = u(t);
1070
+ i && n.set(i, o);
1056
1071
  }
1057
1072
  return b = n, n;
1058
1073
  }
@@ -1087,20 +1102,20 @@ var t3 = { US: "washington", CA: "ottawa", MX: "mexico city", GB: "london", FR:
1087
1102
  var U = null;
1088
1103
  function y() {
1089
1104
  if (U) return U;
1090
- let n = /* @__PURE__ */ new Map(), e = P, t = (o, i2, r) => {
1105
+ let n = /* @__PURE__ */ new Map(), e = P, t = (o, i, r) => {
1091
1106
  if (!o) return;
1092
- let a4 = n.get(o);
1093
- 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 }]);
1094
1109
  };
1095
1110
  for (let o of e.split(",")) {
1096
- let i2 = o.split("|");
1097
- if (i2.length < 7) continue;
1098
- let r = { a1: i2[1], cc: i2[2], lon: +i2[3], lat: +i2[4], pop: +i2[5], kinds: i2[6] || "N" };
1099
- i2.length > 8 && i2[8] && (r.tags = i2[8].split(";").filter(Boolean));
1100
- let a4 = t3[r.cc];
1101
- 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);
1102
- }
1103
- 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);
1104
1119
  return U = n, n;
1105
1120
  }
1106
1121
  var e3 = 200;
@@ -1111,17 +1126,17 @@ function i3() {
1111
1126
  for (let [e, t] of y()) {
1112
1127
  if (!e.endsWith(" city")) continue;
1113
1128
  let o = e.slice(0, -5);
1114
- !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);
1115
1130
  }
1116
1131
  return L = n, n;
1117
1132
  }
1118
1133
  function O(n) {
1119
1134
  if (!n) return;
1120
1135
  let e = y().get(n);
1121
- if (e?.some((i2) => i2.primary)) return e;
1136
+ if (e?.some((i) => i.primary)) return e;
1122
1137
  let t = i3().get(n);
1123
1138
  if (!t) return e;
1124
- let o = t.map((i2) => ({ row: i2.row, primary: true }));
1139
+ let o = t.map((i) => ({ row: i.row, primary: true }));
1125
1140
  return e ? [...o, ...e] : o;
1126
1141
  }
1127
1142
  var I = null;
@@ -1134,10 +1149,10 @@ function o3() {
1134
1149
  }
1135
1150
  let e = /* @__PURE__ */ new Map();
1136
1151
  for (let t of y().values()) for (let o of t) {
1137
- let i2 = T(o.row.cc);
1138
- if (!i2) continue;
1139
- let r = e.get(i2);
1140
- (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 }));
1141
1156
  }
1142
1157
  return I = n, n;
1143
1158
  }
@@ -1150,8 +1165,8 @@ function D() {
1150
1165
  if (t.length < 5) continue;
1151
1166
  let o = { key: t[0], cc: t[1], name: t[2], lon: +t[3], lat: +t[4] };
1152
1167
  n.set(u(o.key), o);
1153
- let i2 = u(o.name);
1154
- 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);
1155
1170
  }
1156
1171
  return B = n, n;
1157
1172
  }
@@ -1203,22 +1218,22 @@ function S3(n) {
1203
1218
  function A3(n) {
1204
1219
  let e = null, t = typeof n.lat == "string" ? n.lat.trim() : n.lat, o = typeof n.lon == "string" ? n.lon.trim() : n.lon;
1205
1220
  if (t != null && t !== "" && o !== void 0 && o !== null && o !== "") {
1206
- let a4 = +t, s2 = +o;
1207
- 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" };
1208
- 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" };
1209
1224
  }
1210
- let i2 = E(n.country), r = Y(n.state);
1211
- if (r && i2 && c3(r) !== i2 && (r = null), n.city !== void 0 && n.city !== null) {
1212
- 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;
1213
1228
  if (f4 && f4.length) {
1214
- 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;
1215
1230
  for (let c2 of f4) {
1216
- let l2 = c2.row, A = 0;
1217
- 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++;
1218
1233
  else continue;
1219
- if (i2) if (T(l2.cc) === i2) A++;
1234
+ if (i) if (T(l.cc) === i) A++;
1220
1235
  else continue;
1221
- A > m ? (m = A, S = [c2]) : A === m && S.push(c2);
1236
+ A > m2 ? (m2 = A, S = [c2]) : A === m2 && S.push(c2);
1222
1237
  }
1223
1238
  S.some((c2) => c2.primary) && (S = S.filter((c2) => c2.primary));
1224
1239
  let p2 = /* @__PURE__ */ new Map();
@@ -1230,43 +1245,43 @@ function A3(n) {
1230
1245
  if (p2.size > 1) return { ambiguous: true, matches: p2.size };
1231
1246
  }
1232
1247
  }
1233
- if (!i2 || r3.has(i2)) for (let a4 of Z(n.zip)) {
1234
- let s2 = a3().get(a4);
1235
- 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" };
1236
1251
  }
1237
1252
  if (r) {
1238
- let a4 = D().get(u(r));
1239
- 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" };
1240
1255
  }
1241
- if (i2 && (n.mapKind !== "north-america" || s3.has(i2))) {
1242
- let a4 = o3().get(i2);
1243
- 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" };
1244
1259
  }
1245
1260
  return e;
1246
1261
  }
1247
1262
  var G = { latlon: 0, city: 1, zip3: 2, state: 3, country: 4 };
1248
1263
  var x = 8;
1249
1264
  function y3(n, e) {
1250
- 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;
1251
- for (let l2 = 0; l2 < n.length; ++l2) {
1252
- 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 });
1253
1268
  if (S3(C2)) {
1254
- t[l2] = null, o[l2] = null, i2[l2] = null, m++;
1255
- let M = K(A);
1256
- 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));
1257
1272
  } else if (C2) {
1258
- 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) {
1259
- let M = K(A);
1260
- 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));
1261
1276
  }
1262
1277
  } else {
1263
- t[l2] = null, o[l2] = null, i2[l2] = null;
1264
- let M = K(A);
1265
- 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));
1266
1281
  }
1267
1282
  }
1268
- let c2 = !n3() && n.some((l2) => l2.city !== null && l2.city !== void 0 && String(l2.city).trim() !== "");
1269
- 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 } : {} };
1270
1285
  }
1271
1286
  function K(n) {
1272
1287
  let e = [n.city, n.state, n.zip, n.country].filter((t) => t != null && String(t).trim() !== "").map((t) => String(t).trim()).join(", ");
@@ -1278,27 +1293,66 @@ function p3(n, e) {
1278
1293
  return t ? F(t, e).length > 0 : false;
1279
1294
  }
1280
1295
 
1281
- // ../shape-core/dist/chunk-6NQENOVB.mjs
1296
+ // ../shape-core/dist/chunk-QXPVZQYV.mjs
1282
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. */
1283
- function s(t) {
1284
- 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) : [];
1285
1300
  }
1286
- function p(t) {
1287
- let n = Date.parse(t);
1288
- if (isNaN(n)) return null;
1289
- let e = new Date(n);
1290
- if (F2.test(t) || i.test(t.trim()) || l.test(t)) return e;
1291
- let r = new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds())), o = e.getFullYear();
1292
- 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;
1293
1308
  }
1294
1309
  function u2(t) {
1295
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;
1296
1311
  }
1297
- var F2 = /^\s*\d{4}(-\d{2}(-\d{2})?)?\s*$/;
1298
- var i = /(?:Z|[+-]\d{2}:?\d{2})$/i;
1299
- 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;
1300
1354
 
1301
- // ../shape-core/dist/chunk-RC567DAC.mjs
1355
+ // ../shape-core/dist/chunk-3SGVWCVV.mjs
1302
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. */
1303
1357
  var St = "006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191193194195196197198199200201202203204205206207208209210211212214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310312313314315316317318319320321322323324325326327328329330331333334335336337338339341342344346347349350351352354355356357358359360361362363364365366367368369370371372373374376377378379380381382383384385386387388389390391392393394395396397398400401402403404405406407408409410411412413414415416417418420421422423424425426427430431432433434435436437438439440441442443444445446447448449450451452453454455456457458460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508510511512513514515516520521522523524525526527528530531532534535537538539540541542543544545546547548549550551553554556557558559560561562563564565566567570571572573574575576577580581582583584585586587588590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620622623624625626627628629630631633634635636637638639640641644645646647648650651652653654655656657658660661662664665666667668669670671672673674675676677678679680681683684685686687688689690691692693700701703704705706707708710711712713714716717718719720721722723724725726727728729730731734735736737738739740741743744745746747748749750751752753754755756757758759760761762763764765766767768769770772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816820821822823824825826827828829830831832833834835836837838840841843844845846847850851852853855856857859860863864865870871873874875877878879880881882883884890891893894895897898900902903904905906907908910911912913914915916917918919920921922923924925926927928930931932933934935936937939940941943944945946947948949950951952953954955956957958959960961967968969970971972973974975976977978979980981982983984985986988989990991992993994995996997998999";
1304
1358
  var w = new Set(St.match(/.{3}/g) ?? []);
@@ -1307,11 +1361,11 @@ var ct = new Set(at.map((n) => n[0]));
1307
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" };
1308
1362
  var ut = (() => {
1309
1363
  let n = /* @__PURE__ */ new Map();
1310
- for (let [s2, i2] of at) n.set(g(i2), s2);
1311
- n.set(g("Washington DC"), "DC"), n.set(g("Washington D.C."), "DC"), n.set(g("US Virgin Islands"), "VI");
1312
- for (let [s2, i2] of Object.entries(yt)) {
1313
- let r = g(s2);
1314
- 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);
1315
1369
  }
1316
1370
  return n;
1317
1371
  })();
@@ -1319,33 +1373,33 @@ var lt = /* @__PURE__ */ new Set(["01", "02", "04", "05", "06", "08", "09", "10"
1319
1373
  function ft(n) {
1320
1374
  return n.trim().toUpperCase();
1321
1375
  }
1322
- function g(n) {
1376
+ function g2(n) {
1323
1377
  return u(n);
1324
1378
  }
1325
1379
  var rt = /* @__PURE__ */ new Set(["zip", "zipcode", "postal", "postcode", "plz"]);
1326
- function y2(n, s2) {
1380
+ function y4(n, s) {
1327
1381
  if (!n) return false;
1328
- 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;
1329
1383
  return false;
1330
1384
  }
1331
- function Mt(n, s2) {
1385
+ function Mt(n, s) {
1332
1386
  if (n == null) return null;
1333
- let i2 = String(n).trim();
1334
- if (i2.length === 0) return null;
1335
- switch (s2) {
1387
+ let i = String(n).trim();
1388
+ if (i.length === 0) return null;
1389
+ switch (s) {
1336
1390
  case "country-iso3":
1337
1391
  case "country-iso2":
1338
1392
  case "country-name":
1339
- return E(i2);
1393
+ return E(i);
1340
1394
  case "us-state-code":
1341
1395
  case "us-state-name": {
1342
- let r = ft(i2);
1343
- 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;
1344
1398
  }
1345
1399
  case "us-zip5":
1346
- return M3(i2);
1400
+ return M3(i);
1347
1401
  case "us-county-fips":
1348
- 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;
1349
1403
  default:
1350
1404
  return null;
1351
1405
  }
@@ -1364,29 +1418,29 @@ function Gt(n) {
1364
1418
  return false;
1365
1419
  }
1366
1420
  }
1367
- function It(n, s2) {
1368
- 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;
1369
1423
  }
1370
- function Wt(n, s2) {
1371
- 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;
1372
1426
  for (let N2 = 0; N2 < n.length; ++N2) {
1373
- let I2 = Mt(n[N2], s2), O2 = I2 !== null && It(I2, s2) ? I2 : null;
1374
- 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++;
1375
1429
  else {
1376
- let d = n[N2];
1377
- if (d != null) {
1378
- let p2 = String(d).trim();
1430
+ let d2 = n[N2];
1431
+ if (d2 != null) {
1432
+ let p2 = String(d2).trim();
1379
1433
  if (p2.length > 0) {
1380
- let m = p2.toLowerCase();
1381
- r.has(m) || (r.add(m), M.push(p2));
1434
+ let m2 = p2.toLowerCase();
1435
+ r.has(m2) || (r.add(m2), M4.push(p2));
1382
1436
  }
1383
1437
  }
1384
1438
  }
1385
1439
  }
1386
- return { iso: i2, unmatched: M, matchedRows: h2, totalRows: n.length };
1440
+ return { iso: i, unmatched: M4, matchedRows: h3, totalRows: n.length };
1387
1441
  }
1388
1442
 
1389
- // ../shape-core/dist/chunk-U7SGOTKH.mjs
1443
+ // ../shape-core/dist/chunk-EZ56V64J.mjs
1390
1444
  var import_papaparse = __toESM(require_papaparse_min(), 1);
1391
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. */
1392
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" };
@@ -1397,8 +1451,8 @@ var ee = (() => {
1397
1451
  })();
1398
1452
  function He(n) {
1399
1453
  for (let [e, t] of n) {
1400
- let i2 = ee.get(e);
1401
- i2 && !ee.has(t) && ee.set(t, i2);
1454
+ let i = ee.get(e);
1455
+ i && !ee.has(t) && ee.set(t, i);
1402
1456
  }
1403
1457
  }
1404
1458
  He(N);
@@ -1437,7 +1491,7 @@ function nt(n) {
1437
1491
  function we(n, e) {
1438
1492
  if (!e) return false;
1439
1493
  let t = xe(e);
1440
- 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(" ")));
1441
1495
  }
1442
1496
  function Ee(n) {
1443
1497
  return we(Je, n);
@@ -1457,11 +1511,11 @@ function Oe(n) {
1457
1511
  let e = n ?? {}, t = rt2(e);
1458
1512
  if (t !== "Continuous") return { nature: t, additivity: "unknown", basis: "role", suppressed: false };
1459
1513
  if (Ee(e.name)) return { nature: t, additivity: "positional", basis: "name", suppressed: true };
1460
- let i2 = String(e.additivity ?? "").trim().toLowerCase();
1461
- if (!(i2 === "additive" && et(e.name))) {
1462
- if (i2 === "additive") return { nature: t, additivity: "additive", basis: "measured", suppressed: false };
1463
- if (i2 === "part_of_whole") return { nature: t, additivity: "part_of_whole", basis: "measured", suppressed: false };
1464
- 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 };
1465
1519
  }
1466
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 };
1467
1521
  }
@@ -1492,49 +1546,49 @@ function Kt(n, e) {
1492
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. */
1493
1547
  var E2 = 2;
1494
1548
  var Z2 = 400;
1495
- function G2(r) {
1549
+ function D3(r) {
1496
1550
  return !!E(r);
1497
1551
  }
1498
- function C(r) {
1552
+ function P2(r) {
1499
1553
  let n = /* @__PURE__ */ new Set();
1500
1554
  for (let e of r) {
1501
1555
  if (e == null) continue;
1502
- let s2 = u(String(e));
1503
- 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;
1504
1558
  }
1505
1559
  return Array.from(n);
1506
1560
  }
1507
- function P2(r) {
1508
- let n = C(r);
1509
- if (n.length === 0 || D2(r) < 95) return false;
1510
- let e = n.filter((c2) => G2(c2) && !Y(c2)).length, s2 = n.filter((c2) => !G2(c2) && !!Y(c2)).length;
1511
- 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;
1512
1566
  }
1513
1567
  function W2(r, n) {
1514
1568
  if (!Y(r)) return false;
1515
1569
  let e = E(r);
1516
1570
  return e ? n === "world" ? true : s3.has(e) : false;
1517
1571
  }
1518
- function D2(r) {
1519
- let n = C(r);
1572
+ function G2(r) {
1573
+ let n = P2(r);
1520
1574
  if (n.length === 0) return 0;
1521
1575
  let e = 0;
1522
- for (let s2 of n) G2(s2) && e++;
1576
+ for (let s of n) D3(s) && e++;
1523
1577
  return Math.round(e / n.length * 1e3) / 10;
1524
1578
  }
1525
- function v2(r) {
1526
- let n = C(r);
1579
+ function M2(r) {
1580
+ let n = P2(r);
1527
1581
  if (n.length === 0) return 0;
1528
1582
  let e = 0;
1529
- for (let s2 of n) Y(s2) && e++;
1583
+ for (let s of n) Y(s) && e++;
1530
1584
  return Math.round(e / n.length * 1e3) / 10;
1531
1585
  }
1532
1586
  function F3(r) {
1533
1587
  let n = /* @__PURE__ */ new Set();
1534
1588
  for (let e of r) {
1535
1589
  if (e == null) continue;
1536
- let s2 = String(e).trim();
1537
- 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;
1538
1592
  }
1539
1593
  return Array.from(n);
1540
1594
  }
@@ -1542,95 +1596,95 @@ function $2(r) {
1542
1596
  let n = F3(r);
1543
1597
  if (n.length === 0) return 0;
1544
1598
  let e = 0;
1545
- for (let s2 of n) Z(s2).length > 0 && e++;
1599
+ for (let s of n) Z(s).length > 0 && e++;
1546
1600
  return Math.round(e / n.length * 1e3) / 10;
1547
1601
  }
1548
1602
  function q2(r, n) {
1549
- 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+$/, "")));
1550
1604
  }
1551
- function se(r, n) {
1552
- let e = C(r);
1605
+ function ce(r, n) {
1606
+ let e = P2(r);
1553
1607
  if (e.length === 0) return 0;
1554
- let s2 = 0;
1555
- for (let c2 of e) p3(c2, n) && s2++;
1556
- 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;
1557
1611
  }
1558
1612
  function z2(r, n) {
1559
1613
  let e = 0;
1560
- for (let s2 of C(r)) n(s2) && e++;
1614
+ for (let s of P2(r)) n(s) && e++;
1561
1615
  return e;
1562
1616
  }
1563
- function ae(r, n) {
1617
+ function ue(r, n) {
1564
1618
  let e = 0;
1565
- for (let s2 of F3(r)) n(s2) && e++;
1619
+ for (let s of F3(r)) n(s) && e++;
1566
1620
  return e;
1567
1621
  }
1568
- function le(r, n, e, s2, c2) {
1569
- 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]);
1570
1624
  for (let t of ["city", "country"]) {
1571
- let i2 = e?.[t];
1572
- i2 && _2.has(i2) && (o[t] = i2);
1625
+ let i = e?.[t];
1626
+ i && _2.has(i) && (o[t] = i);
1573
1627
  }
1574
1628
  let X2 = new Set(c2 ?? r);
1575
1629
  for (let t of ["lat", "lon"]) {
1576
- let i2 = e?.[t];
1577
- i2 && X2.has(i2) && (o[t] = i2);
1630
+ let i = e?.[t];
1631
+ i && X2.has(i) && (o[t] = i);
1578
1632
  }
1579
- let d = e?.zip;
1580
- if (d && _2.has(d)) {
1581
- let t = l2(d), i2 = $2(t);
1582
- 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)`);
1583
1637
  }
1584
1638
  let p2 = e?.state;
1585
1639
  if (p2 && _2.has(p2)) {
1586
- let t = l2(p2), i2 = C(t);
1587
- 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;
1588
1642
  }
1589
- 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("__"));
1590
1644
  if (!o.state) {
1591
1645
  let t = null;
1592
- for (let i2 of x2) {
1593
- let a4 = l2(i2);
1594
- if (P2(a4)) continue;
1595
- 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);
1596
1650
  if (f4 < 95) continue;
1597
- let k2 = z2(a4, (T3) => !!Y(T3)), Y2 = z2(a4, (T3) => !!Y(T3) && !W2(T3, s2));
1598
- 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 });
1599
1653
  }
1600
1654
  t && (o.state = t.name, g3.add(t.name), A.push(`state=${t.name} (${t.pct}% states/provinces)`));
1601
1655
  }
1602
- if (!o.zip) for (let t of x2) {
1656
+ if (!o.zip) for (let t of x3) {
1603
1657
  if (g3.has(t)) continue;
1604
- let i2 = l2(t), a4 = $2(i2);
1605
- if (!(a4 < 95) && q2(i2, t) && !(ae(i2, (f4) => Z(f4).length > 0) < E2)) {
1606
- 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)`);
1607
1661
  break;
1608
1662
  }
1609
1663
  }
1610
- let h2 = o.country;
1611
- if (!h2 || !P2(l2(h2))) {
1664
+ let h3 = o.country;
1665
+ if (!h3 || !C(l(h3))) {
1612
1666
  let t = null;
1613
- for (let i2 of x2) {
1614
- if (g3.has(i2) || !P2(l2(i2))) continue;
1615
- let a4 = D2(l2(i2));
1616
- (!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 });
1617
1671
  }
1618
- 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}`));
1619
1673
  }
1620
1674
  if (!o.city) {
1621
1675
  let t = null;
1622
- for (let i2 of x2) {
1623
- if (g3.has(i2)) continue;
1624
- let a4 = l2(i2), f4 = se(a4, s2);
1625
- 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 });
1626
1680
  }
1627
1681
  t && (o.city = t.name, A.push(`city=${t.name} (${t.pct}% known cities)`));
1628
1682
  }
1629
- 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) => {
1630
- let i2 = +String(t[o.lat] ?? "").trim(), a4 = +String(t[o.lon] ?? "").trim();
1631
- 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() !== "";
1632
1686
  });
1633
- 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 } : {} };
1634
1688
  }
1635
1689
 
1636
1690
  // src/payload.ts
@@ -1645,7 +1699,7 @@ function resolvePointChannel(cols, rowObjs, point) {
1645
1699
  let labelCol;
1646
1700
  if (bind) {
1647
1701
  const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
1648
- 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));
1649
1703
  bind = res.bind;
1650
1704
  rolesBackfilled = res.backfilled;
1651
1705
  rolesRefused = res.refused;
@@ -1689,15 +1743,21 @@ function resolvePointChannel(cols, rowObjs, point) {
1689
1743
  }
1690
1744
  return { lat: pLat, lon: pLon, prec: pPrec, geoPoint, rolesRefused };
1691
1745
  }
1692
- function buildRenderPayload(cols, rowObjs, geo, point, destination) {
1746
+ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
1693
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
+ }
1694
1754
  const o = resolvePointChannel(cols, rowObjs, point);
1695
- const d = resolvePointChannel(cols, rowObjs, destination);
1755
+ const d2 = resolvePointChannel(cols, rowObjs, destination);
1696
1756
  const pLat = o.lat, pLon = o.lon, pPrec = o.prec;
1697
- const dLat = d.lat, dLon = d.lon, dPrec = d.prec;
1757
+ const dLat = d2.lat, dLon = d2.lon, dPrec = d2.prec;
1698
1758
  const geoPoint = o.geoPoint;
1699
- const geoPointDest = d.geoPoint;
1700
- 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}`)];
1701
1761
  let geoIso = null;
1702
1762
  let geoUnmatched;
1703
1763
  let geoUnmatchedDistinct;
@@ -1711,29 +1771,29 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination) {
1711
1771
  const out = new Array(rowObjs.length);
1712
1772
  for (let r = 0; r < rowObjs.length; r++) {
1713
1773
  const row = rowObjs[r];
1714
- const a4 = new Array(cols.length + extra);
1774
+ const a2 = new Array(cols.length + extra);
1715
1775
  for (let c2 = 0; c2 < cols.length; c2++) {
1716
- const v3 = row[colNames[c2]];
1717
- if (v3 instanceof Date) {
1718
- a4[c2] = v3.toISOString();
1776
+ const v2 = row[colNames[c2]];
1777
+ if (v2 instanceof Date) {
1778
+ a2[c2] = v2.toISOString();
1719
1779
  } else {
1720
- a4[c2] = v3 ?? null;
1780
+ a2[c2] = v2 ?? null;
1721
1781
  }
1722
1782
  }
1723
1783
  let k2 = cols.length;
1724
- a4[k2++] = r;
1725
- if (geoIso) a4[k2++] = geoIso[r];
1784
+ a2[k2++] = r;
1785
+ if (geoIso) a2[k2++] = geoIso[r];
1726
1786
  if (pLat && pLon) {
1727
- a4[k2++] = pLat[r];
1728
- a4[k2++] = pLon[r];
1729
- a4[k2++] = pPrec ? pPrec[r] : null;
1787
+ a2[k2++] = pLat[r];
1788
+ a2[k2++] = pLon[r];
1789
+ a2[k2++] = pPrec ? pPrec[r] : null;
1730
1790
  }
1731
1791
  if (dLat && dLon) {
1732
- a4[k2++] = dLat[r];
1733
- a4[k2++] = dLon[r];
1734
- a4[k2++] = dPrec ? dPrec[r] : null;
1792
+ a2[k2++] = dLat[r];
1793
+ a2[k2++] = dLon[r];
1794
+ a2[k2++] = dPrec ? dPrec[r] : null;
1735
1795
  }
1736
- out[r] = a4;
1796
+ out[r] = a2;
1737
1797
  }
1738
1798
  const colsOut = [...cols, { name: "__rowIdx__", dataType: "Integer", isMeasure: false, modelDesc: "" }];
1739
1799
  if (geoIso) colsOut.push({ name: "__geoIso__", dataType: "String", isMeasure: false, modelDesc: "" });
@@ -1761,7 +1821,8 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination) {
1761
1821
  ...geoPointDest ? { geoPointDest } : {},
1762
1822
  // Survives a refusal that placed nothing — see geoPointRefused. Omitted when empty so
1763
1823
  // the ordinary case adds no bytes.
1764
- ...rolesRefused.length ? { geoPointRefused: rolesRefused } : {}
1824
+ ...rolesRefused.length ? { geoPointRefused: rolesRefused } : {},
1825
+ ...utcDayColumns ? { dateCellsAreUtcDays: true, utcDayColumns } : {}
1765
1826
  };
1766
1827
  }
1767
1828
 
@@ -1785,30 +1846,30 @@ function createMarkResolver(env) {
1785
1846
  if (el.tagName.toLowerCase() !== "path") return false;
1786
1847
  const f4 = el.getAttribute("fill");
1787
1848
  if (f4 !== null && f4 !== "" && f4 !== "none" && f4 !== "transparent") return false;
1788
- const s2 = (el.getAttribute("stroke") || "").trim().toLowerCase();
1849
+ const s = (el.getAttribute("stroke") || "").trim().toLowerCase();
1789
1850
  const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
1790
- return s2 === "transparent" || s2 === "none" || so <= 0.01;
1851
+ return s === "transparent" || s === "none" || so <= 0.01;
1791
1852
  };
1792
- const distToPathCenterline = (el, x2, y4) => {
1853
+ const distToPathCenterline = (el, x3, y5) => {
1793
1854
  const L2 = el.getTotalLength();
1794
1855
  if (!(L2 > 0)) return Number.MAX_VALUE;
1795
- const m = el.getScreenCTM();
1796
- if (!m) return Number.MAX_VALUE;
1856
+ const m2 = el.getScreenCTM();
1857
+ if (!m2) return Number.MAX_VALUE;
1797
1858
  let best = Number.MAX_VALUE;
1798
1859
  const N2 = 64;
1799
- for (let i2 = 0; i2 <= N2; i2++) {
1800
- const pt = el.getPointAtLength(L2 * i2 / N2);
1801
- const dx = m.a * pt.x + m.c * pt.y + m.e - x2;
1802
- const dy = m.b * pt.x + m.d * pt.y + m.f - y4;
1803
- const d = dx * dx + dy * dy;
1804
- 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;
1805
1866
  }
1806
1867
  return Math.sqrt(best);
1807
1868
  };
1808
- const refineHitCorridor = (mark, x2, y4, sel) => {
1869
+ const refineHitCorridor = (mark, x3, y5, sel) => {
1809
1870
  try {
1810
1871
  if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
1811
- const stack = doc.elementsFromPoint(x2, y4);
1872
+ const stack = doc.elementsFromPoint(x3, y5);
1812
1873
  const candidates = [];
1813
1874
  for (const el of stack) {
1814
1875
  if (!root.contains(el)) continue;
@@ -1822,9 +1883,9 @@ function createMarkResolver(env) {
1822
1883
  let best = mark;
1823
1884
  let bestD = Number.MAX_VALUE;
1824
1885
  for (const el of candidates) {
1825
- const d = distToPathCenterline(el, x2, y4);
1826
- if (d < bestD) {
1827
- bestD = d;
1886
+ const d2 = distToPathCenterline(el, x3, y5);
1887
+ if (d2 < bestD) {
1888
+ bestD = d2;
1828
1889
  best = el;
1829
1890
  }
1830
1891
  }
@@ -1844,9 +1905,9 @@ function createMarkResolver(env) {
1844
1905
  const findMark = (target, sel = ".d3-mark", ev) => {
1845
1906
  if (!isElement(target)) return null;
1846
1907
  const el = target;
1847
- const m = el.closest(sel);
1848
- if (m && ev) return refineHitCorridor(m, ev.clientX, ev.clientY, sel);
1849
- return m;
1908
+ const m2 = el.closest(sel);
1909
+ if (m2 && ev) return refineHitCorridor(m2, ev.clientX, ev.clientY, sel);
1910
+ return m2;
1850
1911
  };
1851
1912
  const rowIdxsFromMark = (el) => {
1852
1913
  if (!el) return [];
@@ -1859,9 +1920,9 @@ function createMarkResolver(env) {
1859
1920
  }
1860
1921
  return out;
1861
1922
  };
1862
- const penetrateOverlayAt = (x2, y4, sel) => {
1923
+ const penetrateOverlayAt = (x3, y5, sel) => {
1863
1924
  try {
1864
- const stack = doc.elementsFromPoint(x2, y4);
1925
+ const stack = doc.elementsFromPoint(x3, y5);
1865
1926
  for (const el of stack) {
1866
1927
  if (!root.contains(el) || !isElement(el)) continue;
1867
1928
  const cand = el.matches(sel) ? el : el.closest(sel);
@@ -1873,7 +1934,7 @@ function createMarkResolver(env) {
1873
1934
  }
1874
1935
  return null;
1875
1936
  };
1876
- const resolveByGeometry = (x2, y4, sel) => {
1937
+ const resolveByGeometry = (x3, y5, sel) => {
1877
1938
  try {
1878
1939
  const cands = root.querySelectorAll(sel);
1879
1940
  let best = null, bestArea = Number.MAX_VALUE;
@@ -1882,7 +1943,7 @@ function createMarkResolver(env) {
1882
1943
  if (!el.getAttribute("data-row-idx")) continue;
1883
1944
  const r = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
1884
1945
  if (!r || r.width <= 0 || r.height <= 0) continue;
1885
- 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;
1886
1947
  const area = r.width * r.height;
1887
1948
  if (area < bestArea) {
1888
1949
  bestArea = area;
@@ -2017,15 +2078,15 @@ function censusMarks(container) {
2017
2078
  return EMPTY2;
2018
2079
  }
2019
2080
  }
2020
- function isBlankRender(i2) {
2021
- if (i2.contractUntagged) return false;
2022
- if (i2.animated) return false;
2023
- if (i2.authoredNoDataText) return false;
2024
- if (!(i2.rows > 0)) return false;
2025
- 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;
2026
2087
  }
2027
2088
  function blankRenderFlag(lang, cause) {
2028
- 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, "-");
2029
2090
  return `blankrender:${clean(lang)}:${clean(cause)}`;
2030
2091
  }
2031
2092
 
@@ -2049,8 +2110,8 @@ function styleOf2(el, doc) {
2049
2110
  }
2050
2111
  }
2051
2112
  function attrOrComputed(el, name, cs) {
2052
- const a4 = el.getAttribute?.(name);
2053
- 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();
2054
2115
  const c2 = cs?.[name === "stroke-width" ? "strokeWidth" : name];
2055
2116
  return c2 === null || c2 === void 0 ? "" : String(c2).trim();
2056
2117
  }
@@ -2059,9 +2120,9 @@ function isUnfilled(fill) {
2059
2120
  return f4 === "none" || f4 === "transparent" || f4 === "rgba(0, 0, 0, 0)" || f4 === "rgba(0,0,0,0)";
2060
2121
  }
2061
2122
  function widthPx(raw) {
2062
- const m = /^(-?\d+(?:\.\d+)?)\s*(px)?$/i.exec(raw);
2063
- if (!m) return NaN;
2064
- 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]);
2065
2126
  return isFinite(n) ? n : NaN;
2066
2127
  }
2067
2128
  function censusHitBands(container, doc) {
@@ -2118,25 +2179,25 @@ var VALUE_AXIS_MIN_FIT = 0.8;
2118
2179
  var MIN_AXIS_SPAN_PX = 40;
2119
2180
  var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
2120
2181
  function num(el, name) {
2121
- const v3 = el.getAttribute?.(name);
2122
- if (v3 === null || v3 === void 0 || String(v3).trim() === "") return NaN;
2123
- 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));
2124
2185
  }
2125
2186
  function median(xs) {
2126
2187
  if (!xs.length) return NaN;
2127
- const s2 = [...xs].sort((a4, b2) => a4 - b2);
2128
- const m = s2.length >> 1;
2129
- 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;
2130
2191
  }
2131
- function robustLine(v3, pos) {
2132
- const n = v3.length;
2192
+ function robustLine(v2, pos) {
2193
+ const n = v2.length;
2133
2194
  const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
2134
2195
  const idx = [];
2135
- for (let i2 = 0; i2 < n; i2 += step) idx.push(i2);
2196
+ for (let i = 0; i < n; i += step) idx.push(i);
2136
2197
  const slopes = [];
2137
2198
  for (let p2 = 0; p2 < idx.length; p2++) {
2138
2199
  for (let q3 = p2 + 1; q3 < idx.length; q3++) {
2139
- const dv = v3[idx[q3]] - v3[idx[p2]];
2200
+ const dv = v2[idx[q3]] - v2[idx[p2]];
2140
2201
  if (Math.abs(dv) < 1e-12) continue;
2141
2202
  slopes.push((pos[idx[q3]] - pos[idx[p2]]) / dv);
2142
2203
  }
@@ -2144,8 +2205,8 @@ function robustLine(v3, pos) {
2144
2205
  if (slopes.length < 3) return null;
2145
2206
  const b2 = median(slopes);
2146
2207
  if (!Number.isFinite(b2) || Math.abs(b2) < 1e-12) return null;
2147
- const a4 = median(pos.map((y4, i2) => y4 - b2 * v3[i2]));
2148
- 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;
2149
2210
  }
2150
2211
  function censusValuePlacement(container, data) {
2151
2212
  try {
@@ -2160,42 +2221,42 @@ function censusValuePlacement(container, data) {
2160
2221
  for (const el of els) {
2161
2222
  const raw = String(el.getAttribute(ROW_IDX_ATTR) ?? "").trim();
2162
2223
  if (!/^\d+$/.test(raw)) continue;
2163
- const i2 = +raw;
2164
- const row = rows[i2];
2165
- const x2 = num(el, "cx"), y4 = num(el, "cy"), r = num(el, "r");
2166
- if (!row || !Number.isFinite(x2) || !Number.isFinite(y4) || !(r > 0)) continue;
2167
- seen.add(i2);
2168
- 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 });
2169
2230
  }
2170
2231
  if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
2171
2232
  let best = null;
2172
2233
  for (let c2 = 0; c2 < columns.length; c2++) {
2173
2234
  if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
2174
- const vals = dots.map((d) => {
2175
- const v3 = d.row[c2];
2176
- 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);
2177
2238
  });
2178
2239
  const finite = vals.filter(Number.isFinite);
2179
2240
  if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
2180
- const logs = finite.every((v3) => v3 > 0) ? [false, true] : [false];
2241
+ const logs = finite.every((v2) => v2 > 0) ? [false, true] : [false];
2181
2242
  for (const log of logs) {
2182
2243
  for (const axis of ["x", "y"]) {
2183
2244
  const keep = [];
2184
- const v3 = [], pos = [];
2185
- dots.forEach((d, k2) => {
2245
+ const v2 = [], pos = [];
2246
+ dots.forEach((d2, k2) => {
2186
2247
  if (!Number.isFinite(vals[k2])) return;
2187
2248
  keep.push(k2);
2188
- v3.push(log ? Math.log10(vals[k2]) : vals[k2]);
2189
- 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);
2190
2251
  });
2191
- const line = robustLine(v3, pos);
2252
+ const line = robustLine(v2, pos);
2192
2253
  if (!line) continue;
2193
2254
  const lo = Math.min(...pos), hi = Math.max(...pos);
2194
2255
  if (hi - lo < MIN_AXIS_SPAN_PX) continue;
2195
- const mean = pos.reduce((s2, p2) => s2 + p2, 0) / pos.length;
2256
+ const mean = pos.reduce((s, p2) => s + p2, 0) / pos.length;
2196
2257
  let ssRes = 0, ssTot = 0;
2197
2258
  const res = pos.map((p2, k2) => {
2198
- const e = p2 - (line.a + line.b * v3[k2]);
2259
+ const e = p2 - (line.a + line.b * v2[k2]);
2199
2260
  ssRes += e * e;
2200
2261
  ssTot += (p2 - mean) ** 2;
2201
2262
  return e;
@@ -2215,11 +2276,11 @@ function censusValuePlacement(container, data) {
2215
2276
  if (!best) return EMPTY4;
2216
2277
  let off = 0, measured = 0;
2217
2278
  const radii = [];
2218
- dots.forEach((d, k2) => {
2279
+ dots.forEach((d2, k2) => {
2219
2280
  const e = best.res[k2];
2220
2281
  if (!Number.isFinite(e)) return;
2221
2282
  measured++;
2222
- const inRadii = Math.abs(e) / Math.max(d.r, 1);
2283
+ const inRadii = Math.abs(e) / Math.max(d2.r, 1);
2223
2284
  radii.push(inRadii);
2224
2285
  if (inRadii > 1) off++;
2225
2286
  });
@@ -2238,8 +2299,8 @@ function censusValuePlacement(container, data) {
2238
2299
  }
2239
2300
  function valuePlacementFlag(c2) {
2240
2301
  if (c2.marks === 0) return "";
2241
- const s2 = c2.offShare;
2242
- 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;
2243
2304
  return "place:d3:off" + bucket;
2244
2305
  }
2245
2306
 
@@ -2256,12 +2317,12 @@ function contentExtentOf(boxes) {
2256
2317
  if (usable.length === 0) return { w: 0, h: 0, source: "none" };
2257
2318
  const inFlow = usable.filter((b2) => !b2.floating);
2258
2319
  const counted = inFlow.length > 0 ? inFlow : usable;
2259
- let w2 = 0, h2 = 0;
2320
+ let w2 = 0, h3 = 0;
2260
2321
  for (const b2 of counted) {
2261
2322
  if (b2.right > w2) w2 = b2.right;
2262
- if (b2.bottom > h2) h2 = b2.bottom;
2323
+ if (b2.bottom > h3) h3 = b2.bottom;
2263
2324
  }
2264
- 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" };
2265
2326
  }
2266
2327
  function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
2267
2328
  return {
@@ -2271,8 +2332,8 @@ function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL
2271
2332
  }
2272
2333
  var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
2273
2334
  var PHANTOM_FRACTION = 0.95;
2274
- function isPhantomBox(w2, h2, refW, refH) {
2275
- 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;
2276
2337
  }
2277
2338
  var MAX_FRAME_GROW_FACTOR = 20;
2278
2339
  function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
@@ -2347,10 +2408,10 @@ function axisPinPlacement(band, scrollTop, viewportH) {
2347
2408
 
2348
2409
  // src/fitDom.ts
2349
2410
  var FIT_WALK_CAP = 8e3;
2350
- function ctmScaleOf(m) {
2351
- if (!m) return 0;
2352
- const s2 = Math.hypot(m.a, m.b);
2353
- 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;
2354
2415
  }
2355
2416
  function svgInkReach(svg) {
2356
2417
  try {
@@ -2358,8 +2419,8 @@ function svgInkReach(svg) {
2358
2419
  if (!(box.width > 0) || !(box.height > 0)) return null;
2359
2420
  const els = svg.querySelectorAll(FIT_CONTENT_SELECTOR);
2360
2421
  let right = -Infinity, bottom = -Infinity, seen = 0;
2361
- for (let i2 = 0; i2 < els.length && seen < FIT_WALK_CAP; i2++) {
2362
- const r = els[i2].getBoundingClientRect();
2422
+ for (let i = 0; i < els.length && seen < FIT_WALK_CAP; i++) {
2423
+ const r = els[i].getBoundingClientRect();
2363
2424
  if (r.width <= 0 && r.height <= 0) continue;
2364
2425
  if (isPhantomBox(r.width, r.height, box.width, box.height)) continue;
2365
2426
  seen++;
@@ -2377,8 +2438,8 @@ function measureContainerBoxes(c2, inkOf) {
2377
2438
  if (!c2 || !c2.children) return boxes;
2378
2439
  const view = c2.ownerDocument && c2.ownerDocument.defaultView || globalThis;
2379
2440
  const cRect = c2.getBoundingClientRect();
2380
- for (let i2 = 0; i2 < c2.children.length; i2++) {
2381
- const el = c2.children[i2];
2441
+ for (let i = 0; i < c2.children.length; i++) {
2442
+ const el = c2.children[i];
2382
2443
  let floating = false;
2383
2444
  try {
2384
2445
  const cs = view.getComputedStyle(el);
@@ -2462,8 +2523,8 @@ function textHidden(t, view) {
2462
2523
  function backdropFill(svg, container, view, svgBox) {
2463
2524
  try {
2464
2525
  const rects = svg.querySelectorAll("rect");
2465
- for (let i2 = 0; i2 < rects.length && i2 < 6; i2++) {
2466
- const r = rects[i2];
2526
+ for (let i = 0; i < rects.length && i < 6; i++) {
2527
+ const r = rects[i];
2467
2528
  if (r.closest(".d3-mark")) continue;
2468
2529
  const b2 = r.getBoundingClientRect();
2469
2530
  if (b2.width >= svgBox.width * 0.9 && b2.height >= svgBox.height * 0.9) {
@@ -2504,7 +2565,7 @@ function cloneWithChain(el, svg, root) {
2504
2565
  }
2505
2566
  parent.appendChild(el.cloneNode(true));
2506
2567
  const ids = root.querySelectorAll("[id]");
2507
- 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");
2508
2569
  }
2509
2570
  function pinScrolledAxis(container, svg) {
2510
2571
  unpinScrolledAxis(container);
@@ -2515,15 +2576,15 @@ function pinScrolledAxis(container, svg) {
2515
2576
  const view = doc && doc.defaultView || globalThis;
2516
2577
  const svgBox = svg.getBoundingClientRect();
2517
2578
  if (!(svgBox.width > 0) || !(svgBox.height > 0)) return noPin("unmeasurable");
2518
- const m = typeof svg.getScreenCTM === "function" ? svg.getScreenCTM() : null;
2519
- 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");
2520
2581
  const viewportH = container.clientHeight;
2521
2582
  if (!(viewportH > 0)) return noPin("unmeasurable");
2522
2583
  const rel = (r) => ({ left: r.left - svgBox.left, top: r.top - svgBox.top, right: r.right - svgBox.left, bottom: r.bottom - svgBox.top });
2523
2584
  const ticks = svg.querySelectorAll(".tick");
2524
2585
  const byAxis = /* @__PURE__ */ new Map();
2525
- for (let i2 = 0; i2 < ticks.length; i2++) {
2526
- const t = ticks[i2];
2586
+ for (let i = 0; i < ticks.length; i++) {
2587
+ const t = ticks[i];
2527
2588
  if (t.closest("svg") !== svg) continue;
2528
2589
  const p2 = t.parentElement;
2529
2590
  if (!p2) continue;
@@ -2543,8 +2604,8 @@ function pinScrolledAxis(container, svg) {
2543
2604
  labels.push(rel(r));
2544
2605
  }
2545
2606
  const tracks = [];
2546
- for (let i2 = 0; i2 < axis2.children.length; i2++) {
2547
- const ch = axis2.children[i2];
2607
+ for (let i = 0; i < axis2.children.length; i++) {
2608
+ const ch = axis2.children[i];
2548
2609
  if (ch.tagName.toLowerCase() !== "path" || !(ch.getAttribute("class") || "").split(/\s+/).includes("domain")) continue;
2549
2610
  const r = ch.getBoundingClientRect();
2550
2611
  if (r.width > 0 && r.height <= 4) tracks.push(rel(r));
@@ -2560,8 +2621,8 @@ function pinScrolledAxis(container, svg) {
2560
2621
  if (!(bandPx > 0)) return noPin("unmeasurable");
2561
2622
  const carried = [];
2562
2623
  const texts = svg.querySelectorAll("text");
2563
- for (let i2 = 0; i2 < texts.length && carried.length < AXIS_PIN_MAX_CARRIED; i2++) {
2564
- const t = texts[i2];
2624
+ for (let i = 0; i < texts.length && carried.length < AXIS_PIN_MAX_CARRIED; i++) {
2625
+ const t = texts[i];
2565
2626
  if (t.closest("svg") !== svg) continue;
2566
2627
  if (t.closest(".tick") || t.closest(".d3-mark") || t.closest(".d3-legend-mark")) continue;
2567
2628
  if (axis.contains(t) || textHidden(t, view)) continue;
@@ -2570,14 +2631,14 @@ function pinScrolledAxis(container, svg) {
2570
2631
  if (r.top >= band.top && r.bottom <= band.bottom) carried.push(t);
2571
2632
  }
2572
2633
  const pinSvg = doc.createElementNS(SVG_NS2, "svg");
2573
- for (const a4 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
2574
- const v3 = svg.getAttribute(a4);
2575
- 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);
2576
2637
  }
2577
2638
  const styles = svg.querySelectorAll("style");
2578
- for (let i2 = 0; i2 < styles.length; i2++) pinSvg.appendChild(styles[i2].cloneNode(true));
2579
- const vbX = (svgBox.left - m.e) / m.a, vbY = (svgBox.top + band.top - m.f) / m.d;
2580
- 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;
2581
2642
  pinSvg.setAttribute("viewBox", `${vbX} ${vbY} ${vbW} ${vbH}`);
2582
2643
  pinSvg.setAttribute("preserveAspectRatio", "none");
2583
2644
  pinSvg.setAttribute("width", String(svgBox.width));
@@ -2675,8 +2736,8 @@ function fitRenderedChart(container, opts = {}) {
2675
2736
  if (!container) return result;
2676
2737
  try {
2677
2738
  let svg = null;
2678
- for (let i2 = 0; i2 < container.children.length && !svg; i2++) {
2679
- const el = container.children[i2];
2739
+ for (let i = 0; i < container.children.length && !svg; i++) {
2740
+ const el = container.children[i];
2680
2741
  if (el.tagName && el.tagName.toLowerCase() === "svg") svg = el;
2681
2742
  }
2682
2743
  if (!svg) svg = container.querySelector("svg");
@@ -2750,13 +2811,13 @@ function fitRenderedChart(container, opts = {}) {
2750
2811
  // src/labelContrast.ts
2751
2812
  function parseRGBA(c2) {
2752
2813
  if (typeof c2 !== "string") return null;
2753
- const s2 = c2.trim();
2754
- const m = s2.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
2755
- if (m) return [parseFloat(m[1]), parseFloat(m[2]), parseFloat(m[3]), m[4] !== void 0 ? parseFloat(m[4]) : 1];
2756
- let h2 = s2.replace(/^#/, "");
2757
- if (h2.length === 3) h2 = h2.split("").map((ch) => ch + ch).join("");
2758
- if (h2.length === 6 && /^[0-9a-fA-F]{6}$/.test(h2)) {
2759
- 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];
2760
2821
  }
2761
2822
  return null;
2762
2823
  }
@@ -2767,8 +2828,8 @@ var WHITE_TEXT_BG_LUM = 0.5;
2767
2828
  var PILL_MIN_ALPHA = 0.05;
2768
2829
  var PILL_OPAQUE_ALPHA = 0.85;
2769
2830
  var PAGE_MATCH_TOLERANCE = 2;
2770
- function isPillBackdropAlpha(a4) {
2771
- return a4 >= PILL_MIN_ALPHA && a4 < PILL_OPAQUE_ALPHA;
2831
+ function isPillBackdropAlpha(a2) {
2832
+ return a2 >= PILL_MIN_ALPHA && a2 < PILL_OPAQUE_ALPHA;
2772
2833
  }
2773
2834
  var PILL_MIN_COVERAGE = 0.6;
2774
2835
  function pillBacksGlyph(overlapArea, glyphArea) {
@@ -2796,17 +2857,17 @@ function toRGBA(c2) {
2796
2857
  return parseRGBA(c2);
2797
2858
  }
2798
2859
  function compositeOver(fg, bg) {
2799
- const a4 = Math.max(0, Math.min(1, fg[3]));
2860
+ const a2 = Math.max(0, Math.min(1, fg[3]));
2800
2861
  return [
2801
- Math.round(fg[0] * a4 + bg[0] * (1 - a4)),
2802
- Math.round(fg[1] * a4 + bg[1] * (1 - a4)),
2803
- 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))
2804
2865
  ];
2805
2866
  }
2806
2867
  function relativeLuminance(rgb) {
2807
- const lin = rgb.map((v3) => {
2808
- const s2 = v3 / 255;
2809
- 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);
2810
2871
  });
2811
2872
  return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
2812
2873
  }
@@ -2843,19 +2904,19 @@ function glyphSampleGrid(box, n = GLYPH_SAMPLE_N) {
2843
2904
  const out = [];
2844
2905
  if (!box || !(box.width > 0) || !(box.height > 0) || !(n >= 1)) return out;
2845
2906
  const k2 = Math.floor(n);
2846
- for (let i2 = 0; i2 < k2; i2++) {
2907
+ for (let i = 0; i < k2; i++) {
2847
2908
  for (let j3 = 0; j3 < k2; j3++) {
2848
2909
  out.push({
2849
- x: box.left + box.width * (i2 + 0.5) / k2,
2910
+ x: box.left + box.width * (i + 0.5) / k2,
2850
2911
  y: box.top + box.height * (j3 + 0.5) / k2
2851
2912
  });
2852
2913
  }
2853
2914
  }
2854
2915
  return out;
2855
2916
  }
2856
- function clamp01(v3) {
2857
- if (typeof v3 !== "number" || !isFinite(v3)) return 1;
2858
- 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));
2859
2920
  }
2860
2921
  function hexToRGB(hex2) {
2861
2922
  const p2 = toRGBA(hex2);
@@ -2870,16 +2931,16 @@ function backedSamples(el, pts) {
2870
2931
  try {
2871
2932
  const ge = el;
2872
2933
  if (typeof ge.isPointInFill !== "function" || typeof ge.getScreenCTM !== "function") return null;
2873
- const m = ge.getScreenCTM();
2934
+ const m2 = ge.getScreenCTM();
2874
2935
  const svg = ge.ownerSVGElement;
2875
- if (!m || !svg || typeof svg.createSVGPoint !== "function") return null;
2936
+ if (!m2 || !svg || typeof svg.createSVGPoint !== "function") return null;
2876
2937
  if (pts.length === 0) return null;
2877
- const inv = m.inverse();
2938
+ const inv = m2.inverse();
2878
2939
  const hit = [];
2879
- for (let i2 = 0; i2 < pts.length; i2++) {
2940
+ for (let i = 0; i < pts.length; i++) {
2880
2941
  const p2 = svg.createSVGPoint();
2881
- p2.x = pts[i2].x;
2882
- p2.y = pts[i2].y;
2942
+ p2.x = pts[i].x;
2943
+ p2.y = pts[i].y;
2883
2944
  hit.push(ge.isPointInFill(p2.matrixTransform(inv)));
2884
2945
  }
2885
2946
  return hit;
@@ -2922,7 +2983,7 @@ function applyLabelContrast(container, opts = {}) {
2922
2983
  report.skipped = "too-many-shapes";
2923
2984
  return report;
2924
2985
  }
2925
- for (let i2 = 0; i2 < shapeEls.length; i2++) pushShape(shapeEls[i2]);
2986
+ for (let i = 0; i < shapeEls.length; i++) pushShape(shapeEls[i]);
2926
2987
  if (rects.length === 0) {
2927
2988
  report.skipped = "no-shapes";
2928
2989
  return report;
@@ -2947,40 +3008,40 @@ function applyLabelContrast(container, opts = {}) {
2947
3008
  if (tr.width <= 0 || tr.height <= 0) continue;
2948
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));
2949
3010
  const glyphArea = tr.width * tr.height;
2950
- 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);
2951
3012
  const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
2952
3013
  const painted = pts.map(() => false);
2953
3014
  let unmeasured = 0;
2954
- const under = boxed.map((x2) => {
2955
- const mask = backedSamples(x2.mk.el, pts);
3015
+ const under = boxed.map((x3) => {
3016
+ const mask = backedSamples(x3.mk.el, pts);
2956
3017
  if (mask === null) {
2957
3018
  unmeasured++;
2958
- return x2;
3019
+ return x3;
2959
3020
  }
2960
3021
  let inside = 0;
2961
- const paints = effAlpha(x2.mk) >= PILL_MIN_ALPHA;
2962
- for (let i2 = 0; i2 < mask.length; i2++) {
2963
- 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;
2964
3025
  inside++;
2965
- if (paints) painted[i2] = true;
3026
+ if (paints) painted[i] = true;
2966
3027
  }
2967
- return { mk: x2.mk, ov: glyphArea * (inside / mask.length) };
2968
- }).filter((x2) => x2.ov > 0);
3028
+ return { mk: x3.mk, ov: glyphArea * (inside / mask.length) };
3029
+ }).filter((x3) => x3.ov > 0);
2969
3030
  if (under.length === 0 && boxed.length > 0) report.offFill++;
2970
3031
  if (under.length === 0) continue;
2971
3032
  if (unmeasured === 0 && pts.length > 0) {
2972
3033
  let held = 0;
2973
- 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++;
2974
3035
  if (!backingHoldsGlyph(glyphArea * (held / pts.length), glyphArea)) {
2975
3036
  report.pageMajority++;
2976
3037
  continue;
2977
3038
  }
2978
3039
  }
2979
3040
  report.scanned++;
2980
- const opaqueUnder = under.filter((x2) => effAlpha(x2.mk) >= PILL_OPAQUE_ALPHA);
2981
- 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);
2982
3043
  const cell = cellEntry.mk;
2983
- 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;
2984
3045
  const cellRGBA = toRGBA(cell.fill);
2985
3046
  let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
2986
3047
  if (pill) {
@@ -2994,12 +3055,12 @@ function applyLabelContrast(container, opts = {}) {
2994
3055
  }
2995
3056
  const cur = tx.getAttribute("fill") || (win && typeof win.getComputedStyle === "function" ? win.getComputedStyle(tx).fill : "");
2996
3057
  const normalize = !cellSuppressesNormalize(cell.el.getAttribute("class"));
2997
- const d = decideLabelColor(cur, `rgb(${bgRGB[0]}, ${bgRGB[1]}, ${bgRGB[2]})`, 1, pageBg, MIN_CONTRAST, normalize);
2998
- if (d.fix) {
2999
- 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);
3000
3061
  report.fixed++;
3001
3062
  }
3002
- if (pill || d.fix) tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3063
+ if (pill || d2.fix) tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3003
3064
  }
3004
3065
  return report;
3005
3066
  } catch {
@@ -3026,7 +3087,7 @@ function noopViewStateProvider() {
3026
3087
  return { load: () => ({}), save: () => {
3027
3088
  } };
3028
3089
  }
3029
- 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));
3030
3091
  var D3_PLUGIN_PACKAGES = {
3031
3092
  sankey: "d3-sankey",
3032
3093
  sankeyLinkHorizontal: "d3-sankey",
@@ -3041,8 +3102,8 @@ var D3_PLUGIN_PACKAGES = {
3041
3102
  };
3042
3103
  function requiredD3Plugins(code) {
3043
3104
  const out = /* @__PURE__ */ new Set();
3044
- for (const m of String(code || "").matchAll(/\bd3\s*\.\s*(\w+)\s*\(/g)) {
3045
- 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]];
3046
3107
  if (pkg) out.add(pkg);
3047
3108
  }
3048
3109
  return [...out].sort();
@@ -3054,8 +3115,8 @@ function explainRenderFailure(err, d3) {
3054
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
3055
3116
  );
3056
3117
  }
3057
- const m = /d3\.(\w+) is not a function|(\w+) is not a function/.exec(msg);
3058
- 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] ?? "";
3059
3120
  const pkg = D3_PLUGIN_PACKAGES[name];
3060
3121
  if (pkg) {
3061
3122
  return new Error(
@@ -3097,7 +3158,7 @@ function createChartHost(container, config) {
3097
3158
  let data = config.data;
3098
3159
  {
3099
3160
  const stamped = config.data?.meta?.hostContract;
3100
- const major = (v3) => (v3 || "").split(".")[0];
3161
+ const major = (v2) => (v2 || "").split(".")[0];
3101
3162
  if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
3102
3163
  try {
3103
3164
  (win?.console ?? console)?.warn(
@@ -3119,10 +3180,10 @@ function createChartHost(container, config) {
3119
3180
  if (raw.uiState && typeof raw.uiState === "object" && Object.keys(bag).length === 0)
3120
3181
  Object.assign(bag, raw.uiState);
3121
3182
  raw.uiState = bag;
3122
- raw.setUiState = (s2) => {
3123
- if (!s2 || typeof s2 !== "object") return;
3183
+ raw.setUiState = (s) => {
3184
+ if (!s || typeof s !== "object") return;
3124
3185
  try {
3125
- provider.save(s2);
3186
+ provider.save(s);
3126
3187
  } catch {
3127
3188
  }
3128
3189
  };
@@ -3206,10 +3267,10 @@ function createChartHost(container, config) {
3206
3267
  if (active && tickStillDrawn) activeTickEl.classList?.add(ACTIVE_TICK_CLASS);
3207
3268
  const wanted = new Set(sel ?? []);
3208
3269
  const marks = container.querySelectorAll(`.${MARK_CLASS}[${ROW_IDX_ATTR}], .${LEGEND_MARK_CLASS}[${ROW_IDX_ATTR}]`);
3209
- for (const m of Array.from(marks)) {
3210
- 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));
3211
3272
  const on = active && rows.some((r) => wanted.has(r));
3212
- m.classList?.[on ? "add" : "remove"](MARK_SELECTED_CLASS);
3273
+ m2.classList?.[on ? "add" : "remove"](MARK_SELECTED_CLASS);
3213
3274
  }
3214
3275
  } catch {
3215
3276
  }
@@ -3229,10 +3290,10 @@ function createChartHost(container, config) {
3229
3290
  let xfAt = 0;
3230
3291
  const XF_ECHO_MS = 150;
3231
3292
  const onXf = (e) => {
3232
- const d = e?.detail || {};
3293
+ const d2 = e?.detail || {};
3233
3294
  xfAt = Date.now();
3234
- if (d.clear) notify([], d.source || "chart");
3235
- 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);
3236
3297
  };
3237
3298
  const resolver = createMarkResolver({
3238
3299
  root: container,
@@ -3272,10 +3333,10 @@ function createChartHost(container, config) {
3272
3333
  const fitOpts = config.fit ?? true;
3273
3334
  const labelContrastOpts = config.labelContrast ?? true;
3274
3335
  const stopAnim = () => {
3275
- const s2 = container[CONTAINER_SLOT_ANIM_STOP];
3276
- if (typeof s2 === "function") {
3336
+ const s = container[CONTAINER_SLOT_ANIM_STOP];
3337
+ if (typeof s === "function") {
3277
3338
  try {
3278
- s2();
3339
+ s();
3279
3340
  } catch {
3280
3341
  }
3281
3342
  }
@@ -3305,6 +3366,7 @@ function createChartHost(container, config) {
3305
3366
  if (resolved.geoUnmatched === void 0 && data.geoUnmatched) resolved = { ...resolved, geoUnmatched: data.geoUnmatched };
3306
3367
  if (resolved.geoPoint === void 0 && data.geoPoint) resolved = { ...resolved, geoPoint: data.geoPoint };
3307
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 };
3308
3370
  try {
3309
3371
  renderFn(container, { columns: data.columns, rows: data.rows }, resolved);
3310
3372
  } catch (err) {
@@ -3389,10 +3451,10 @@ function createChartHost(container, config) {
3389
3451
  return () => subs.delete(cb);
3390
3452
  },
3391
3453
  clear() {
3392
- const s2 = container[CONTAINER_SLOT_XF_CLEAR];
3393
- if (typeof s2 === "function") {
3454
+ const s = container[CONTAINER_SLOT_XF_CLEAR];
3455
+ if (typeof s === "function") {
3394
3456
  try {
3395
- s2();
3457
+ s();
3396
3458
  } catch {
3397
3459
  }
3398
3460
  }
@@ -3480,7 +3542,7 @@ export {
3480
3542
  registerGeoAsset,
3481
3543
  clearGeoCache,
3482
3544
  L3,
3483
- p,
3545
+ x2 as x,
3484
3546
  u2 as u,
3485
3547
  Oe,
3486
3548
  Le,