@bicharts/chart-host 0.5.118 → 0.5.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-2UU3N4AG.mjs → chunk-CNFVXCOY.mjs} +472 -320
- package/dist/index.mjs +44 -4
- package/dist/react.mjs +1 -1
- package/dist/types/chartPick.d.ts +28 -0
- package/dist/types/codeComments.d.ts +27 -0
- package/dist/types/contract.d.ts +5 -1
- package/dist/types/index.d.ts +4 -2
- package/dist/types/pendingGenerate.d.ts +28 -0
- package/dist/types/selectionCard.d.ts +7 -0
- package/package.json +1 -1
|
@@ -22,8 +22,8 @@ var require_papaparse_min = __commonJS({
|
|
|
22
22
|
"function" == typeof define && define.amd ? define([], t) : "object" == typeof module && "undefined" != typeof exports ? module.exports = t() : e.Papa = t();
|
|
23
23
|
})(exports, function r() {
|
|
24
24
|
var n = "undefined" != typeof self ? self : "undefined" != typeof window ? window : void 0 !== n ? n : {};
|
|
25
|
-
var d2, s = !n.document && !!n.postMessage, a4 = n.IS_PAPA_WORKER || false, o = {},
|
|
26
|
-
function
|
|
25
|
+
var d2, s = !n.document && !!n.postMessage, a4 = n.IS_PAPA_WORKER || false, o = {}, h3 = 0, v2 = {};
|
|
26
|
+
function P2(e) {
|
|
27
27
|
return 65279 === e.charCodeAt(0) ? e.slice(1) : e;
|
|
28
28
|
}
|
|
29
29
|
function u2(e) {
|
|
@@ -41,7 +41,7 @@ var require_papaparse_min = __commonJS({
|
|
|
41
41
|
var i2 = this._partialLine + t, r2 = (this._partialLine = "", this._handle.parse(i2, this._baseIndex, !this._finished));
|
|
42
42
|
if (!this._handle.paused() && !this._handle.aborted()) {
|
|
43
43
|
t = r2.meta.cursor, i2 = (this._finished || (this._partialLine = i2.substring(t - this._baseIndex), this._baseIndex = t), r2 && r2.data && (this._rowCount += r2.data.length), this._finished || this._config.preview && this._rowCount >= this._config.preview);
|
|
44
|
-
if (a4) n.postMessage({ results: r2, workerId:
|
|
44
|
+
if (a4) n.postMessage({ results: r2, workerId: v2.WORKER_ID, finished: i2 });
|
|
45
45
|
else if (q4(this._config.chunk) && !e2) {
|
|
46
46
|
if (this._config.chunk(r2, this._handle), this._handle.paused() || this._handle.aborted()) return void (this._halted = true);
|
|
47
47
|
this._completeResults = r2 = void 0;
|
|
@@ -50,12 +50,12 @@ var require_papaparse_min = __commonJS({
|
|
|
50
50
|
}
|
|
51
51
|
this._halted = true;
|
|
52
52
|
}, this._sendError = function(e2) {
|
|
53
|
-
q4(this._config.error) ? this._config.error(e2) : a4 && this._config.error && n.postMessage({ workerId:
|
|
53
|
+
q4(this._config.error) ? this._config.error(e2) : a4 && this._config.error && n.postMessage({ workerId: v2.WORKER_ID, error: e2, finished: false });
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
function f4(e) {
|
|
57
57
|
var r2;
|
|
58
|
-
(e = e || {}).chunkSize || (e.chunkSize =
|
|
58
|
+
(e = e || {}).chunkSize || (e.chunkSize = v2.RemoteChunkSize), u2.call(this, e), this._nextChunk = s ? function() {
|
|
59
59
|
this._readChunk(), this._chunkLoaded();
|
|
60
60
|
} : function() {
|
|
61
61
|
this._readChunk();
|
|
@@ -85,7 +85,7 @@ var require_papaparse_min = __commonJS({
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
function l(e) {
|
|
88
|
-
(e = e || {}).chunkSize || (e.chunkSize =
|
|
88
|
+
(e = e || {}).chunkSize || (e.chunkSize = v2.LocalChunkSize), u2.call(this, e);
|
|
89
89
|
var i2, r2, n2 = "undefined" != typeof FileReader;
|
|
90
90
|
this.stream = function(e2) {
|
|
91
91
|
this._input = e2, r2 = e2.slice || e2.webkitSlice || e2.mozSlice, n2 ? ((i2 = new FileReader()).onload = y5(this._chunkLoaded, this), i2.onerror = y5(this._chunkError, this)) : i2 = new FileReaderSync(), this._nextChunk();
|
|
@@ -137,20 +137,20 @@ var require_papaparse_min = __commonJS({
|
|
|
137
137
|
}, this);
|
|
138
138
|
}
|
|
139
139
|
function i(m4) {
|
|
140
|
-
var n2, s2, a5, t, o2 = Math.pow(2, 53),
|
|
140
|
+
var n2, s2, a5, t, o2 = Math.pow(2, 53), h4 = -o2, u4 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, d3 = /^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/, i2 = this, r2 = 0, f5 = 0, l2 = false, e = false, c4 = [], p4 = { data: [], errors: [], meta: {} };
|
|
141
141
|
function y6(e2) {
|
|
142
142
|
return "greedy" === m4.skipEmptyLines ? "" === e2.join("").trim() : 1 === e2.length && 0 === e2[0].length;
|
|
143
143
|
}
|
|
144
144
|
function g4() {
|
|
145
|
-
if (p4 && a5 && (
|
|
145
|
+
if (p4 && a5 && (k3("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + v2.DefaultDelimiter + "'"), a5 = false), m4.skipEmptyLines && (p4.data = p4.data.filter(function(e4) {
|
|
146
146
|
return !y6(e4);
|
|
147
|
-
})),
|
|
147
|
+
})), _4()) {
|
|
148
148
|
let t4 = function(e4, t5) {
|
|
149
|
-
e4 =
|
|
149
|
+
e4 = P2(e4), q4(m4.transformHeader) && (e4 = m4.transformHeader(e4, t5)), c4.push(e4);
|
|
150
150
|
};
|
|
151
151
|
var t2 = t4;
|
|
152
152
|
if (p4) if (Array.isArray(p4.data[0])) {
|
|
153
|
-
for (var e2 = 0;
|
|
153
|
+
for (var e2 = 0; _4() && e2 < p4.data.length; e2++) p4.data[e2].forEach(t4);
|
|
154
154
|
p4.data.splice(0, 1);
|
|
155
155
|
} else p4.data.forEach(t4);
|
|
156
156
|
}
|
|
@@ -159,35 +159,35 @@ var require_papaparse_min = __commonJS({
|
|
|
159
159
|
var n4 = r5, s4 = e4[r5], s4 = ((e5, t5) => ((e6) => (m4.dynamicTypingFunction && void 0 === m4.dynamicTyping[e6] && (m4.dynamicTyping[e6] = m4.dynamicTypingFunction(e6)), true === (m4.dynamicTyping[e6] || m4.dynamicTyping)))(e5) ? "true" === t5 || "TRUE" === t5 || "false" !== t5 && "FALSE" !== t5 && (((e6) => {
|
|
160
160
|
if (u4.test(e6)) {
|
|
161
161
|
e6 = parseFloat(e6);
|
|
162
|
-
if (
|
|
162
|
+
if (h4 < e6 && e6 < o2) return 1;
|
|
163
163
|
}
|
|
164
164
|
})(t5) ? parseFloat(t5) : d3.test(t5) ? new Date(t5) : "" === t5 ? null : t5) : t5)(n4 = m4.header ? r5 >= c4.length ? "__parsed_extra" : c4[r5] : n4, s4 = m4.transform ? m4.transform(s4, n4) : s4);
|
|
165
165
|
"__parsed_extra" === n4 ? (i5[n4] = i5[n4] || [], i5[n4].push(s4)) : i5[n4] = s4;
|
|
166
166
|
}
|
|
167
|
-
return m4.header && (r5 > c4.length ?
|
|
167
|
+
return m4.header && (r5 > c4.length ? k3("FieldMismatch", "TooManyFields", "Too many fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4) : r5 < c4.length && k3("FieldMismatch", "TooFewFields", "Too few fields: expected " + c4.length + " fields but parsed " + r5, f5 + t4)), i5;
|
|
168
168
|
}
|
|
169
169
|
var r4;
|
|
170
170
|
p4 && (m4.header || m4.dynamicTyping || m4.transform) && (r4 = 1, !p4.data.length || Array.isArray(p4.data[0]) ? (p4.data = p4.data.map(i4), r4 = p4.data.length) : p4.data = i4(p4.data, 0), m4.header && p4.meta && (p4.meta.fields = c4), f5 += r4);
|
|
171
171
|
}
|
|
172
|
-
function
|
|
172
|
+
function _4() {
|
|
173
173
|
return m4.header && 0 === c4.length;
|
|
174
174
|
}
|
|
175
|
-
function
|
|
175
|
+
function k3(e2, t2, i4, r4) {
|
|
176
176
|
e2 = { type: e2, code: t2, message: i4 };
|
|
177
177
|
void 0 !== r4 && (e2.row = r4), p4.errors.push(e2);
|
|
178
178
|
}
|
|
179
179
|
q4(m4.step) && (t = m4.step, m4.step = function(e2) {
|
|
180
|
-
p4 = e2,
|
|
180
|
+
p4 = e2, _4() ? g4() : (g4(), 0 !== p4.data.length && (r2 += e2.data.length, m4.preview && r2 > m4.preview ? s2.abort() : (p4.data = p4.data[0], t(p4, i2))));
|
|
181
181
|
}), this.parse = function(e2, t2, i4) {
|
|
182
182
|
var r4 = m4.quoteChar || '"', r4 = (m4.newline || (m4.newline = this.guessLineEndings(e2, r4)), a5 = false, m4.delimiter ? q4(m4.delimiter) && (m4.delimiter = m4.delimiter(e2), p4.meta.delimiter = m4.delimiter) : ((r4 = ((e4, t4, i5, r5, n4) => {
|
|
183
|
-
var s4, a6, o4,
|
|
184
|
-
n4 = n4 || [",", " ", "|", ";",
|
|
183
|
+
var s4, a6, o4, h5;
|
|
184
|
+
n4 = n4 || [",", " ", "|", ";", v2.RECORD_SEP, v2.UNIT_SEP];
|
|
185
185
|
for (var u5 = 0; u5 < n4.length; u5++) {
|
|
186
|
-
for (var d4, f6 = n4[u5], l3 = 0, c5 = 0, p5 = 0, g5 = (o4 = void 0, new E4({ comments: r5, delimiter: f6, newline: t4, preview: 10 }).parse(e4)),
|
|
187
|
-
0 < g5.data.length && (c5 /= g5.data.length - p5), (void 0 === a6 || l3 <= a6) && (void 0 ===
|
|
186
|
+
for (var d4, f6 = n4[u5], l3 = 0, c5 = 0, p5 = 0, g5 = (o4 = void 0, new E4({ comments: r5, delimiter: f6, newline: t4, preview: 10 }).parse(e4)), _5 = 0; _5 < g5.data.length; _5++) i5 && y6(g5.data[_5]) ? p5++ : (d4 = g5.data[_5].length, c5 += d4, void 0 === o4 ? o4 = d4 : 0 < d4 && (l3 += Math.abs(d4 - o4), o4 = d4));
|
|
187
|
+
0 < g5.data.length && (c5 /= g5.data.length - p5), (void 0 === a6 || l3 <= a6) && (void 0 === h5 || h5 < c5) && 1.99 < c5 && (a6 = l3, s4 = f6, h5 = c5);
|
|
188
188
|
}
|
|
189
189
|
return { successful: !!(m4.delimiter = s4), bestDelimiter: s4 };
|
|
190
|
-
})(e2, m4.newline, m4.skipEmptyLines, m4.comments, m4.delimitersToGuess)).successful ? m4.delimiter = r4.bestDelimiter : (a5 = true, m4.delimiter =
|
|
190
|
+
})(e2, m4.newline, m4.skipEmptyLines, m4.comments, m4.delimitersToGuess)).successful ? m4.delimiter = r4.bestDelimiter : (a5 = true, m4.delimiter = v2.DefaultDelimiter), p4.meta.delimiter = m4.delimiter), b4(m4));
|
|
191
191
|
return m4.preview && m4.header && r4.preview++, n2 = e2, s2 = new E4(r4), p4 = s2.parse(n2, t2, i4), g4(), l2 ? { meta: { paused: true } } : p4 || { meta: { paused: false } };
|
|
192
192
|
}, this.paused = function() {
|
|
193
193
|
return l2;
|
|
@@ -211,89 +211,89 @@ var require_papaparse_min = __commonJS({
|
|
|
211
211
|
return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
212
212
|
}
|
|
213
213
|
function E4(C) {
|
|
214
|
-
var S = (C = C || {}).delimiter,
|
|
215
|
-
if (void 0 !== C.escapeChar && (
|
|
216
|
-
true ===
|
|
214
|
+
var S = (C = C || {}).delimiter, O3 = C.newline, x4 = C.comments, I2 = C.step, A2 = C.preview, T3 = C.fastMode, D3 = null, L2 = false, F3 = null == C.quoteChar ? '"' : C.quoteChar, j3 = F3;
|
|
215
|
+
if (void 0 !== C.escapeChar && (j3 = C.escapeChar), ("string" != typeof S || -1 < v2.BAD_DELIMITERS.indexOf(S)) && (S = ","), x4 === S) throw new Error("Comment character same as delimiter");
|
|
216
|
+
true === x4 ? x4 = "#" : ("string" != typeof x4 || -1 < v2.BAD_DELIMITERS.indexOf(x4)) && (x4 = false), "\n" !== O3 && "\r" !== O3 && "\r\n" !== O3 && (O3 = "\n");
|
|
217
217
|
var z3 = 0, M2 = false;
|
|
218
218
|
this.parse = function(i2, t, r2) {
|
|
219
219
|
if ("string" != typeof i2) throw new Error("Input must be a string");
|
|
220
|
-
var n2 = i2.length, e = S.length, s2 =
|
|
220
|
+
var n2 = i2.length, e = S.length, s2 = O3.length, a5 = x4.length, o2 = q4(I2), h4 = [], u4 = [], d3 = [], f5 = z3 = 0;
|
|
221
221
|
if (!i2) return w2();
|
|
222
|
-
if (T3 || false !== T3 && -1 === i2.indexOf(
|
|
223
|
-
for (var l2 = i2.split(
|
|
224
|
-
if (d3 = l2[c4], z3 += d3.length, c4 !== l2.length - 1) z3 +=
|
|
222
|
+
if (T3 || false !== T3 && -1 === i2.indexOf(F3)) {
|
|
223
|
+
for (var l2 = i2.split(O3), c4 = 0; c4 < l2.length; c4++) {
|
|
224
|
+
if (d3 = l2[c4], z3 += d3.length, c4 !== l2.length - 1) z3 += O3.length;
|
|
225
225
|
else if (r2) return w2();
|
|
226
|
-
if (!
|
|
226
|
+
if (!x4 || d3.substring(0, a5) !== x4) {
|
|
227
227
|
if (o2) {
|
|
228
|
-
if (
|
|
229
|
-
} else
|
|
230
|
-
if (
|
|
228
|
+
if (h4 = [], k3(d3.split(S)), R2(), M2) return w2();
|
|
229
|
+
} else k3(d3.split(S));
|
|
230
|
+
if (A2 && A2 <= c4) return h4 = h4.slice(0, A2), w2(true);
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
return w2();
|
|
234
234
|
}
|
|
235
|
-
for (var p4 = i2.indexOf(S, z3), g4 = i2.indexOf(
|
|
236
|
-
if (-1 === (m4 = i2.indexOf(
|
|
237
|
-
if (m4 === n2 - 1) return E5(i2.substring(z3, m4).replace(
|
|
238
|
-
if (
|
|
239
|
-
else if (
|
|
235
|
+
for (var p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O3, z3), _4 = new RegExp(U2(j3) + U2(F3), "g"), m4 = i2.indexOf(F3, z3); ; ) if (i2[z3] === F3) for (m4 = z3, z3++; ; ) {
|
|
236
|
+
if (-1 === (m4 = i2.indexOf(F3, m4 + 1))) return r2 || u4.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h4.length, index: z3 }), E5();
|
|
237
|
+
if (m4 === n2 - 1) return E5(i2.substring(z3, m4).replace(_4, F3));
|
|
238
|
+
if (F3 === j3 && i2[m4 + 1] === j3) m4++;
|
|
239
|
+
else if (F3 === j3 || 0 === m4 || i2[m4 - 1] !== j3) {
|
|
240
240
|
-1 !== p4 && p4 < m4 + 1 && (p4 = i2.indexOf(S, m4 + 1));
|
|
241
|
-
var y6 =
|
|
241
|
+
var y6 = v3(-1 === (g4 = -1 !== g4 && g4 < m4 + 1 ? i2.indexOf(O3, m4 + 1) : g4) ? p4 : Math.min(p4, g4));
|
|
242
242
|
if (i2.substr(m4 + 1 + y6, e) === S) {
|
|
243
|
-
d3.push(i2.substring(z3, m4).replace(
|
|
243
|
+
d3.push(i2.substring(z3, m4).replace(_4, F3)), i2[z3 = m4 + 1 + y6 + e] !== F3 && (m4 = i2.indexOf(F3, z3)), p4 = i2.indexOf(S, z3), g4 = i2.indexOf(O3, z3);
|
|
244
244
|
break;
|
|
245
245
|
}
|
|
246
|
-
y6 =
|
|
247
|
-
if (i2.substring(m4 + 1 + y6, m4 + 1 + y6 + s2) ===
|
|
248
|
-
if (d3.push(i2.substring(z3, m4).replace(
|
|
249
|
-
if (
|
|
246
|
+
y6 = v3(g4);
|
|
247
|
+
if (i2.substring(m4 + 1 + y6, m4 + 1 + y6 + s2) === O3) {
|
|
248
|
+
if (d3.push(i2.substring(z3, m4).replace(_4, F3)), b5(m4 + 1 + y6 + s2), p4 = i2.indexOf(S, z3), m4 = i2.indexOf(F3, z3), o2 && (R2(), M2)) return w2();
|
|
249
|
+
if (A2 && h4.length >= A2) return w2(true);
|
|
250
250
|
break;
|
|
251
251
|
}
|
|
252
|
-
u4.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row:
|
|
252
|
+
u4.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row: h4.length, index: z3 }), m4++;
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
|
-
else if (
|
|
255
|
+
else if (x4 && 0 === d3.length && i2.substring(z3, z3 + a5) === x4) {
|
|
256
256
|
if (-1 === g4) return w2();
|
|
257
|
-
z3 = g4 + s2, g4 = i2.indexOf(
|
|
257
|
+
z3 = g4 + s2, g4 = i2.indexOf(O3, z3), p4 = i2.indexOf(S, z3);
|
|
258
258
|
} else if (-1 !== p4 && (p4 < g4 || -1 === g4)) d3.push(i2.substring(z3, p4)), z3 = p4 + e, p4 = i2.indexOf(S, z3);
|
|
259
259
|
else {
|
|
260
260
|
if (-1 === g4) break;
|
|
261
261
|
if (d3.push(i2.substring(z3, g4)), b5(g4 + s2), o2 && (R2(), M2)) return w2();
|
|
262
|
-
if (
|
|
262
|
+
if (A2 && h4.length >= A2) return w2(true);
|
|
263
263
|
}
|
|
264
264
|
return E5();
|
|
265
|
-
function
|
|
266
|
-
|
|
265
|
+
function k3(e2) {
|
|
266
|
+
h4.push(e2), f5 = z3;
|
|
267
267
|
}
|
|
268
|
-
function
|
|
268
|
+
function v3(e2) {
|
|
269
269
|
var t2 = 0;
|
|
270
270
|
return t2 = -1 !== e2 && (e2 = i2.substring(m4 + 1, e2)) && "" === e2.trim() ? e2.length : t2;
|
|
271
271
|
}
|
|
272
272
|
function E5(e2) {
|
|
273
|
-
return r2 || (void 0 === e2 && (e2 = i2.substring(z3)), d3.push(e2), z3 = n2,
|
|
273
|
+
return r2 || (void 0 === e2 && (e2 = i2.substring(z3)), d3.push(e2), z3 = n2, k3(d3), o2 && R2()), w2();
|
|
274
274
|
}
|
|
275
275
|
function b5(e2) {
|
|
276
|
-
z3 = e2,
|
|
276
|
+
z3 = e2, k3(d3), d3 = [], g4 = i2.indexOf(O3, z3);
|
|
277
277
|
}
|
|
278
278
|
function w2(e2) {
|
|
279
|
-
if (C.header && !t &&
|
|
280
|
-
var s4 =
|
|
279
|
+
if (C.header && !t && h4.length && !L2) {
|
|
280
|
+
var s4 = h4[0], a6 = /* @__PURE__ */ Object.create(null), o4 = new Set(s4);
|
|
281
281
|
let n4 = false;
|
|
282
282
|
for (let r4 = 0; r4 < s4.length; r4++) {
|
|
283
|
-
let i4 =
|
|
283
|
+
let i4 = P2(s4[r4]);
|
|
284
284
|
if (a6[i4 = q4(C.transformHeader) ? C.transformHeader(i4, r4) : i4]) {
|
|
285
285
|
let e4, t2 = a6[i4];
|
|
286
286
|
for (; e4 = i4 + "_" + t2, t2++, o4.has(e4); ) ;
|
|
287
|
-
o4.add(e4), s4[r4] = e4, a6[i4]++, n4 = true, (
|
|
287
|
+
o4.add(e4), s4[r4] = e4, a6[i4]++, n4 = true, (D3 = null === D3 ? {} : D3)[e4] = i4;
|
|
288
288
|
} else a6[i4] = 1, s4[r4] = i4;
|
|
289
289
|
o4.add(i4);
|
|
290
290
|
}
|
|
291
291
|
n4 && console.warn("Duplicate headers found and renamed."), L2 = true;
|
|
292
292
|
}
|
|
293
|
-
return { data:
|
|
293
|
+
return { data: h4, errors: u4, meta: { delimiter: S, linebreak: O3, aborted: M2, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D3 } };
|
|
294
294
|
}
|
|
295
295
|
function R2() {
|
|
296
|
-
I2(w2()),
|
|
296
|
+
I2(w2()), h4 = [], u4 = [];
|
|
297
297
|
}
|
|
298
298
|
}, this.abort = function() {
|
|
299
299
|
M2 = true;
|
|
@@ -306,16 +306,16 @@ var require_papaparse_min = __commonJS({
|
|
|
306
306
|
if (t.error) i2.userError(t.error, t.file);
|
|
307
307
|
else if (t.results && t.results.data) {
|
|
308
308
|
var n2 = { abort: function() {
|
|
309
|
-
r2 = true,
|
|
309
|
+
r2 = true, _3(t.workerId, { data: [], errors: [], meta: { aborted: true } });
|
|
310
310
|
}, pause: m2, resume: m2 };
|
|
311
311
|
if (q4(i2.userStep)) {
|
|
312
312
|
for (var s2 = 0; s2 < t.results.data.length && (i2.userStep({ data: t.results.data[s2], errors: t.results.errors, meta: t.results.meta }, n2), !r2); s2++) ;
|
|
313
313
|
delete t.results;
|
|
314
314
|
} else q4(i2.userChunk) && (i2.userChunk(t.results, n2, t.file), delete t.results);
|
|
315
315
|
}
|
|
316
|
-
t.finished && !r2 &&
|
|
316
|
+
t.finished && !r2 && _3(t.workerId, t.results);
|
|
317
317
|
}
|
|
318
|
-
function
|
|
318
|
+
function _3(e, t) {
|
|
319
319
|
var i2 = o[e];
|
|
320
320
|
q4(i2.userComplete) && i2.userComplete(t), i2.terminate(), delete o[e];
|
|
321
321
|
}
|
|
@@ -336,27 +336,27 @@ var require_papaparse_min = __commonJS({
|
|
|
336
336
|
function q4(e) {
|
|
337
337
|
return "function" == typeof e;
|
|
338
338
|
}
|
|
339
|
-
return
|
|
339
|
+
return v2.parse = function(e, t) {
|
|
340
340
|
var i2 = (t = t || {}).dynamicTyping || false;
|
|
341
341
|
q4(i2) && (t.dynamicTypingFunction = i2, i2 = {});
|
|
342
|
-
if (t.dynamicTyping = i2, t.transform = !!q4(t.transform) && t.transform, !t.worker || !
|
|
342
|
+
if (t.dynamicTyping = i2, t.transform = !!q4(t.transform) && t.transform, !t.worker || !v2.WORKERS_SUPPORTED) return i2 = null, v2.NODE_STREAM_INPUT, "string" == typeof e ? (e = P2(e), i2 = new (t.download ? f4 : c2)(t)) : true === e.readable && q4(e.read) && q4(e.on) ? i2 = new p2(t) : (n.File && e instanceof File || e instanceof Object) && (i2 = new l(t)), i2.stream(e);
|
|
343
343
|
(i2 = (() => {
|
|
344
344
|
var e2;
|
|
345
|
-
return !!
|
|
345
|
+
return !!v2.WORKERS_SUPPORTED && (e2 = (() => {
|
|
346
346
|
var e4 = n.URL || n.webkitURL || null, t2 = r.toString();
|
|
347
|
-
return
|
|
348
|
-
})(), (e2 = new n.Worker(e2)).onmessage = g3, e2.id =
|
|
347
|
+
return v2.BLOB_URL || (v2.BLOB_URL = e4.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ", "(", t2, ")();"], { type: "text/javascript" })));
|
|
348
|
+
})(), (e2 = new n.Worker(e2)).onmessage = g3, e2.id = h3++, o[e2.id] = e2);
|
|
349
349
|
})()).userStep = t.step, i2.userChunk = t.chunk, i2.userComplete = t.complete, i2.userError = t.error, t.step = q4(t.step), t.chunk = q4(t.chunk), t.complete = q4(t.complete), t.error = q4(t.error), delete t.worker, i2.postMessage({ input: e, config: t, workerId: i2.id });
|
|
350
|
-
},
|
|
351
|
-
var s2 = false,
|
|
350
|
+
}, v2.unparse = function(e, t) {
|
|
351
|
+
var s2 = false, _4 = true, m4 = ",", y6 = "\r\n", a5 = '"', o2 = a5 + a5, i2 = false, r2 = null, h4 = false, u4 = ((() => {
|
|
352
352
|
if ("object" == typeof t) {
|
|
353
|
-
if ("string" != typeof t.delimiter ||
|
|
353
|
+
if ("string" != typeof t.delimiter || v2.BAD_DELIMITERS.filter(function(e2) {
|
|
354
354
|
return -1 !== t.delimiter.indexOf(e2);
|
|
355
|
-
}).length || (m4 = t.delimiter), "boolean" != typeof t.quotes && "function" != typeof t.quotes && !Array.isArray(t.quotes) || (s2 = t.quotes), "boolean" != typeof t.skipEmptyLines && "string" != typeof t.skipEmptyLines || (i2 = t.skipEmptyLines), "string" == typeof t.newline && (y6 = t.newline), "string" == typeof t.quoteChar && (a5 = t.quoteChar, o2 = a5 + a5), "boolean" == typeof t.header && (
|
|
355
|
+
}).length || (m4 = t.delimiter), "boolean" != typeof t.quotes && "function" != typeof t.quotes && !Array.isArray(t.quotes) || (s2 = t.quotes), "boolean" != typeof t.skipEmptyLines && "string" != typeof t.skipEmptyLines || (i2 = t.skipEmptyLines), "string" == typeof t.newline && (y6 = t.newline), "string" == typeof t.quoteChar && (a5 = t.quoteChar, o2 = a5 + a5), "boolean" == typeof t.header && (_4 = t.header), Array.isArray(t.columns)) {
|
|
356
356
|
if (0 === t.columns.length) throw new Error("Option columns is empty");
|
|
357
357
|
r2 = t.columns;
|
|
358
358
|
}
|
|
359
|
-
void 0 !== t.escapeChar && (o2 = t.escapeChar + a5), t.escapeFormulae instanceof RegExp ?
|
|
359
|
+
void 0 !== t.escapeChar && (o2 = t.escapeChar + a5), t.escapeFormulae instanceof RegExp ? h4 = t.escapeFormulae : "boolean" == typeof t.escapeFormulae && t.escapeFormulae && (h4 = /^[=+\-@\t\r].*$/);
|
|
360
360
|
}
|
|
361
361
|
})(), new RegExp(U2(a5), "g"));
|
|
362
362
|
"string" == typeof e && (e = JSON.parse(e));
|
|
@@ -367,47 +367,47 @@ var require_papaparse_min = __commonJS({
|
|
|
367
367
|
throw new Error("Unable to serialize unrecognized input");
|
|
368
368
|
function n2(e2, t2, i4) {
|
|
369
369
|
var r4 = "", n4 = ("string" == typeof e2 && (e2 = JSON.parse(e2)), "string" == typeof t2 && (t2 = JSON.parse(t2)), Array.isArray(e2) && 0 < e2.length), s4 = !Array.isArray(t2[0]);
|
|
370
|
-
if (n4 &&
|
|
371
|
-
for (var a6 = 0; a6 < e2.length; a6++) 0 < a6 && (r4 += m4), r4 +=
|
|
370
|
+
if (n4 && _4) {
|
|
371
|
+
for (var a6 = 0; a6 < e2.length; a6++) 0 < a6 && (r4 += m4), r4 += k3(e2[a6], a6);
|
|
372
372
|
0 < t2.length && (r4 += y6);
|
|
373
373
|
}
|
|
374
374
|
for (var o4 = 0; o4 < t2.length; o4++) {
|
|
375
|
-
var
|
|
375
|
+
var h5 = (n4 ? e2 : t2[o4]).length, u5 = false, d3 = n4 ? 0 === Object.keys(t2[o4]).length : 0 === t2[o4].length;
|
|
376
376
|
if (i4 && !n4 && (u5 = "greedy" === i4 ? "" === t2[o4].join("").trim() : 1 === t2[o4].length && 0 === t2[o4][0].length), "greedy" === i4 && n4) {
|
|
377
|
-
for (var f5 = [], l2 = 0; l2 <
|
|
377
|
+
for (var f5 = [], l2 = 0; l2 < h5; l2++) {
|
|
378
378
|
var c4 = s4 ? e2[l2] : l2;
|
|
379
379
|
f5.push(t2[o4][c4]);
|
|
380
380
|
}
|
|
381
381
|
u5 = "" === f5.join("").trim();
|
|
382
382
|
}
|
|
383
383
|
if (!u5) {
|
|
384
|
-
for (var p4 = 0; p4 <
|
|
384
|
+
for (var p4 = 0; p4 < h5; p4++) {
|
|
385
385
|
0 < p4 && !d3 && (r4 += m4);
|
|
386
386
|
var g4 = n4 && s4 ? e2[p4] : p4;
|
|
387
|
-
r4 +=
|
|
387
|
+
r4 += k3(t2[o4][g4], p4);
|
|
388
388
|
}
|
|
389
|
-
o4 < t2.length - 1 && (!i4 || 0 <
|
|
389
|
+
o4 < t2.length - 1 && (!i4 || 0 < h5 && !d3) && (r4 += y6);
|
|
390
390
|
}
|
|
391
391
|
}
|
|
392
392
|
return r4;
|
|
393
393
|
}
|
|
394
|
-
function
|
|
394
|
+
function k3(e2, t2) {
|
|
395
395
|
var i4, r4, n4;
|
|
396
|
-
return null == e2 ? "" : e2.constructor === Date ? JSON.stringify(e2).slice(1, 25) : (n4 = false,
|
|
396
|
+
return null == e2 ? "" : e2.constructor === Date ? JSON.stringify(e2).slice(1, 25) : (n4 = false, h4 && "string" == typeof e2 && h4.test(e2) && (e2 = "'" + e2, n4 = true), r4 = (i4 = e2.toString()).replace(u4, o2), (n4 = n4 || true === s2 || "function" == typeof s2 && s2(e2, t2) || Array.isArray(s2) && s2[t2] || ((e4, t4) => {
|
|
397
397
|
for (var i5 = 0; i5 < t4.length; i5++) if (-1 < e4.indexOf(t4[i5])) return true;
|
|
398
398
|
return false;
|
|
399
|
-
})(r4,
|
|
399
|
+
})(r4, v2.BAD_DELIMITERS) || -1 < r4.indexOf(m4) || -1 < i4.indexOf(a5) || " " === r4.charAt(0) || " " === r4.charAt(r4.length - 1)) ? a5 + r4 + a5 : r4);
|
|
400
400
|
}
|
|
401
|
-
},
|
|
402
|
-
var i2 = o2.config || {},
|
|
401
|
+
}, v2.RECORD_SEP = String.fromCharCode(30), v2.UNIT_SEP = String.fromCharCode(31), v2.BYTE_ORDER_MARK = "\uFEFF", v2.BAD_DELIMITERS = ["\r", "\n", '"', v2.BYTE_ORDER_MARK], v2.WORKERS_SUPPORTED = !s && !!n.Worker, v2.NODE_STREAM_INPUT = 1, v2.LocalChunkSize = 10485760, v2.RemoteChunkSize = 5242880, v2.DefaultDelimiter = ",", v2.Parser = E4, v2.ParserHandle = i, v2.NetworkStreamer = f4, v2.FileStreamer = l, v2.StringStreamer = c2, v2.ReadableStreamStreamer = p2, n.jQuery && ((d2 = n.jQuery).fn.parse = function(o2) {
|
|
402
|
+
var i2 = o2.config || {}, h4 = [];
|
|
403
403
|
return this.each(function(e2) {
|
|
404
404
|
if (!("INPUT" === d2(this).prop("tagName").toUpperCase() && "file" === d2(this).attr("type").toLowerCase() && n.FileReader) || !this.files || 0 === this.files.length) return true;
|
|
405
|
-
for (var t = 0; t < this.files.length; t++)
|
|
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 ===
|
|
408
|
+
if (0 === h4.length) q4(o2.complete) && o2.complete();
|
|
409
409
|
else {
|
|
410
|
-
var e2, t, i4, r2, n2 =
|
|
410
|
+
var e2, t, i4, r2, n2 = h4[0];
|
|
411
411
|
if (q4(o2.before)) {
|
|
412
412
|
var s2 = o2.before(n2.file, n2.inputElem);
|
|
413
413
|
if ("object" == typeof s2) {
|
|
@@ -419,23 +419,23 @@ var require_papaparse_min = __commonJS({
|
|
|
419
419
|
var a5 = n2.instanceConfig.complete;
|
|
420
420
|
n2.instanceConfig.complete = function(e4) {
|
|
421
421
|
q4(a5) && a5(e4, n2.file, n2.inputElem), u4();
|
|
422
|
-
},
|
|
422
|
+
}, v2.parse(n2.file, n2.instanceConfig);
|
|
423
423
|
}
|
|
424
424
|
}
|
|
425
425
|
function u4() {
|
|
426
|
-
|
|
426
|
+
h4.splice(0, 1), e();
|
|
427
427
|
}
|
|
428
428
|
}), a4 && (n.onmessage = function(e) {
|
|
429
429
|
e = e.data;
|
|
430
|
-
void 0 ===
|
|
431
|
-
"string" == typeof e.input ? n.postMessage({ workerId:
|
|
432
|
-
}), (f4.prototype = Object.create(u2.prototype)).constructor = f4, (l.prototype = Object.create(u2.prototype)).constructor = l, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p2.prototype = Object.create(u2.prototype)).constructor = p2,
|
|
430
|
+
void 0 === v2.WORKER_ID && e && (v2.WORKER_ID = e.workerId);
|
|
431
|
+
"string" == typeof e.input ? n.postMessage({ workerId: v2.WORKER_ID, results: v2.parse(e.input, e.config), finished: true }) : (n.File && e.input instanceof File || e.input instanceof Object) && (e = v2.parse(e.input, e.config)) && n.postMessage({ workerId: v2.WORKER_ID, results: e, finished: true });
|
|
432
|
+
}), (f4.prototype = Object.create(u2.prototype)).constructor = f4, (l.prototype = Object.create(u2.prototype)).constructor = l, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p2.prototype = Object.create(u2.prototype)).constructor = p2, v2;
|
|
433
433
|
});
|
|
434
434
|
}
|
|
435
435
|
});
|
|
436
436
|
|
|
437
437
|
// src/contract.ts
|
|
438
|
-
var HOST_CONTRACT_VERSION = "1.
|
|
438
|
+
var HOST_CONTRACT_VERSION = "1.11.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";
|
|
@@ -447,6 +447,14 @@ var CONTAINER_SLOT_ANIM_STOP = "__llmAnimStop";
|
|
|
447
447
|
var CONTAINER_SLOT_XF_CLEAR = "__llmXfClear";
|
|
448
448
|
var CONTAINER_SLOT_INITIAL_XF_MARK = "__llmInitialXfMark";
|
|
449
449
|
var CONTAINER_SLOT_UI_STATE = "__lchUiState";
|
|
450
|
+
var VIEW_ONLY_UI_STATE_KEYS = Object.freeze(["camera", "llmZoom"]);
|
|
451
|
+
function withoutViewOnlyKeys(bag) {
|
|
452
|
+
if (!bag || typeof bag !== "object") return bag;
|
|
453
|
+
if (!VIEW_ONLY_UI_STATE_KEYS.some((k3) => Object.prototype.hasOwnProperty.call(bag, k3))) return bag;
|
|
454
|
+
const out = { ...bag };
|
|
455
|
+
for (const k3 of VIEW_ONLY_UI_STATE_KEYS) delete out[k3];
|
|
456
|
+
return out;
|
|
457
|
+
}
|
|
450
458
|
var HOST_CONTAINER_CLASS = "bic-chart-host";
|
|
451
459
|
var SELECTION_ACTIVE_CLASS = "lch-has-selection";
|
|
452
460
|
var MARK_SELECTED_CLASS = "lch-mark-selected";
|
|
@@ -487,8 +495,8 @@ var MAX_MAP_POINTS_DEFAULT = 2e3;
|
|
|
487
495
|
|
|
488
496
|
// src/deltaE.ts
|
|
489
497
|
function linearise(c2) {
|
|
490
|
-
const
|
|
491
|
-
return
|
|
498
|
+
const v2 = c2 / 255;
|
|
499
|
+
return v2 <= 0.04045 ? v2 / 12.92 : Math.pow((v2 + 0.055) / 1.055, 2.4);
|
|
492
500
|
}
|
|
493
501
|
var Xn = 0.95047;
|
|
494
502
|
var Yn = 1;
|
|
@@ -502,15 +510,15 @@ function rgbToLab(r, g3, b4) {
|
|
|
502
510
|
const R2 = linearise(r), G3 = linearise(g3), B2 = linearise(b4);
|
|
503
511
|
const X2 = 0.4124564 * R2 + 0.3575761 * G3 + 0.1804375 * B2;
|
|
504
512
|
const Y2 = 0.2126729 * R2 + 0.7151522 * G3 + 0.072175 * B2;
|
|
505
|
-
const
|
|
506
|
-
const fx = f(X2 / Xn), fy = f(Y2 / Yn), fz = f(
|
|
513
|
+
const Z2 = 0.0193339 * R2 + 0.119192 * G3 + 0.9503041 * B2;
|
|
514
|
+
const fx = f(X2 / Xn), fy = f(Y2 / Yn), fz = f(Z2 / Zn);
|
|
507
515
|
return { L: 116 * fy - 16, a: 500 * (fx - fy), b: 200 * (fy - fz) };
|
|
508
516
|
}
|
|
509
517
|
function hexToLab(hex2) {
|
|
510
518
|
const m2 = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex2.trim());
|
|
511
519
|
if (!m2) return null;
|
|
512
|
-
const
|
|
513
|
-
return rgbToLab(parseInt(
|
|
520
|
+
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];
|
|
521
|
+
return rgbToLab(parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16));
|
|
514
522
|
}
|
|
515
523
|
var RAD = Math.PI / 180;
|
|
516
524
|
var DEG = 180 / Math.PI;
|
|
@@ -560,14 +568,14 @@ function labToHex(lab) {
|
|
|
560
568
|
const fy = (lab.L + 16) / 116, fx = fy + lab.a / 500, fz = fy - lab.b / 200;
|
|
561
569
|
const X2 = Xn * finv(fx);
|
|
562
570
|
const Y2 = Yn * (lab.L > KAPPA * EPS ? fy * fy * fy : lab.L / KAPPA);
|
|
563
|
-
const
|
|
571
|
+
const Z2 = Zn * finv(fz);
|
|
564
572
|
const lin = [
|
|
565
|
-
3.2404542 * X2 - 1.5371385 * Y2 - 0.4985314 *
|
|
566
|
-
-0.969266 * X2 + 1.8760108 * Y2 + 0.041556 *
|
|
567
|
-
0.0556434 * X2 - 0.2040259 * Y2 + 1.0572252 *
|
|
573
|
+
3.2404542 * X2 - 1.5371385 * Y2 - 0.4985314 * Z2,
|
|
574
|
+
-0.969266 * X2 + 1.8760108 * Y2 + 0.041556 * Z2,
|
|
575
|
+
0.0556434 * X2 - 0.2040259 * Y2 + 1.0572252 * Z2
|
|
568
576
|
];
|
|
569
|
-
return "#" + lin.map((
|
|
570
|
-
const c2 = Math.max(0, Math.min(1,
|
|
577
|
+
return "#" + lin.map((v2) => {
|
|
578
|
+
const c2 = Math.max(0, Math.min(1, v2));
|
|
571
579
|
const g3 = c2 <= 31308e-7 ? 12.92 * c2 : 1.055 * Math.pow(c2, 1 / 2.4) - 0.055;
|
|
572
580
|
return Math.round(g3 * 255).toString(16).padStart(2, "0");
|
|
573
581
|
}).join("");
|
|
@@ -605,8 +613,8 @@ function toRgb(raw) {
|
|
|
605
613
|
if (!s || s === "none" || s === "transparent") return null;
|
|
606
614
|
const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(s);
|
|
607
615
|
if (hex2) {
|
|
608
|
-
const
|
|
609
|
-
const full =
|
|
616
|
+
const h3 = hex2[1];
|
|
617
|
+
const full = h3.length === 3 ? h3[0] + h3[0] + h3[1] + h3[1] + h3[2] + h3[2] : h3;
|
|
610
618
|
return [
|
|
611
619
|
parseInt(full.slice(0, 2), 16),
|
|
612
620
|
parseInt(full.slice(2, 4), 16),
|
|
@@ -626,7 +634,7 @@ function cellKey(rgb) {
|
|
|
626
634
|
].join(",");
|
|
627
635
|
}
|
|
628
636
|
function hex(rgb) {
|
|
629
|
-
return "#" + rgb.map((
|
|
637
|
+
return "#" + rgb.map((v2) => Math.max(0, Math.min(255, v2)).toString(16).padStart(2, "0")).join("");
|
|
630
638
|
}
|
|
631
639
|
function censusColourSpread(container, doc) {
|
|
632
640
|
if (!container || typeof container.querySelectorAll !== "function") return EMPTY;
|
|
@@ -657,10 +665,10 @@ function censusColourSpread(container, doc) {
|
|
|
657
665
|
for (const { rgb } of counted) {
|
|
658
666
|
marks++;
|
|
659
667
|
distinct.add(rgb.join(","));
|
|
660
|
-
const
|
|
661
|
-
const cur = cells.get(
|
|
668
|
+
const k3 = cellKey(rgb);
|
|
669
|
+
const cur = cells.get(k3);
|
|
662
670
|
if (cur) cur.n++;
|
|
663
|
-
else cells.set(
|
|
671
|
+
else cells.set(k3, { rgb, n: 1 });
|
|
664
672
|
}
|
|
665
673
|
if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
|
|
666
674
|
const top = [...cells.values()].sort((a4, b4) => b4.n - a4.n).slice(0, MAX_CELLS);
|
|
@@ -669,14 +677,14 @@ function censusColourSpread(container, doc) {
|
|
|
669
677
|
const d2 = cs.map(() => new Array(cs.length).fill(0));
|
|
670
678
|
let span = 0, lo = 0, hi = 1;
|
|
671
679
|
for (let i = 0; i < cs.length; i++) {
|
|
672
|
-
for (let
|
|
673
|
-
const
|
|
674
|
-
d2[i][
|
|
675
|
-
d2[
|
|
676
|
-
if (
|
|
677
|
-
span =
|
|
680
|
+
for (let j3 = i + 1; j3 < cs.length; j3++) {
|
|
681
|
+
const v2 = deltaE2000(cs[i], cs[j3]);
|
|
682
|
+
d2[i][j3] = v2;
|
|
683
|
+
d2[j3][i] = v2;
|
|
684
|
+
if (v2 > span) {
|
|
685
|
+
span = v2;
|
|
678
686
|
lo = i;
|
|
679
|
-
hi =
|
|
687
|
+
hi = j3;
|
|
680
688
|
}
|
|
681
689
|
}
|
|
682
690
|
}
|
|
@@ -691,8 +699,8 @@ function censusColourSpread(container, doc) {
|
|
|
691
699
|
let crowd = 0;
|
|
692
700
|
for (let i = 0; i < cs.length; i++) {
|
|
693
701
|
let n = 0;
|
|
694
|
-
for (let
|
|
695
|
-
if (i ===
|
|
702
|
+
for (let j3 = 0; j3 < cs.length; j3++) {
|
|
703
|
+
if (i === j3 || d2[i][j3] <= SAME_SHADE_DELTA_E) n += top[j3].n;
|
|
696
704
|
}
|
|
697
705
|
if (n > crowd) crowd = n;
|
|
698
706
|
}
|
|
@@ -722,8 +730,8 @@ function normHex(raw) {
|
|
|
722
730
|
if (typeof raw !== "string") return null;
|
|
723
731
|
const m2 = HEX.exec(raw.trim());
|
|
724
732
|
if (!m2) return null;
|
|
725
|
-
const
|
|
726
|
-
return "#" +
|
|
733
|
+
const h3 = m2[1].length === 3 ? m2[1].split("").map((c2) => c2 + c2).join("") : m2[1];
|
|
734
|
+
return "#" + h3.toLowerCase();
|
|
727
735
|
}
|
|
728
736
|
function mixLab(a4, b4, t) {
|
|
729
737
|
return { L: a4.L + (b4.L - a4.L) * t, a: a4.a + (b4.a - a4.a) * t, b: a4.b + (b4.b - a4.b) * t };
|
|
@@ -731,7 +739,7 @@ function mixLab(a4, b4, t) {
|
|
|
731
739
|
function paintedOver(fg, canvas, alpha) {
|
|
732
740
|
const f4 = [1, 3, 5].map((i) => parseInt(fg.slice(i, i + 2), 16));
|
|
733
741
|
const c2 = [1, 3, 5].map((i) => parseInt(canvas.slice(i, i + 2), 16));
|
|
734
|
-
const mixed = f4.map((
|
|
742
|
+
const mixed = f4.map((v2, i) => Math.round(v2 * alpha + c2[i] * (1 - alpha))).map((v2) => v2.toString(16).padStart(2, "0"));
|
|
735
743
|
return hexToLab("#" + mixed.join(""));
|
|
736
744
|
}
|
|
737
745
|
function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity = AUTO_RAMP_DRAWN_OPACITY) {
|
|
@@ -739,8 +747,8 @@ function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity
|
|
|
739
747
|
const bg = normHex(canvas);
|
|
740
748
|
if (!lo || !hi || !bg || classes < 2) return NaN;
|
|
741
749
|
let prev = null, min = Infinity;
|
|
742
|
-
for (let
|
|
743
|
-
const painted = paintedOver(labToHex(mixLab(lo, hi,
|
|
750
|
+
for (let k3 = 0; k3 < classes; k3++) {
|
|
751
|
+
const painted = paintedOver(labToHex(mixLab(lo, hi, k3 / (classes - 1))), bg, opacity);
|
|
744
752
|
if (prev) min = Math.min(min, deltaE2000(prev, painted));
|
|
745
753
|
prev = painted;
|
|
746
754
|
}
|
|
@@ -764,15 +772,15 @@ function resolveAutoColorScale(p2) {
|
|
|
764
772
|
};
|
|
765
773
|
const candidates = p2.isHighContrast ? [normHex(p2.themeAccent), normHex(p2.themeFg)] : [...palette.map(normHex), normHex(p2.themeAccent), normHex(p2.themeFg)];
|
|
766
774
|
const accent = candidates.find(usable) ?? FALLBACK_ACCENT;
|
|
767
|
-
const
|
|
775
|
+
const A2 = hexToLab(accent);
|
|
768
776
|
let t = 0.1;
|
|
769
|
-
let low = mixLab(bg,
|
|
777
|
+
let low = mixLab(bg, A2, t);
|
|
770
778
|
while (t < 0.6 && deltaE2000(paintedOver(labToHex(low), canvas, AUTO_RAMP_DRAWN_OPACITY), bg) < SAME_SHADE_DELTA_E) {
|
|
771
779
|
t += 0.02;
|
|
772
|
-
low = mixLab(bg,
|
|
780
|
+
low = mixLab(bg, A2, t);
|
|
773
781
|
}
|
|
774
782
|
const lowHex = labToHex(low);
|
|
775
|
-
let high = { ...
|
|
783
|
+
let high = { ...A2 };
|
|
776
784
|
let highHex = labToHex(high);
|
|
777
785
|
for (let step = 0; step < 80 && autoRampMinStep(lowHex, highHex, canvas) < AUTO_RAMP_MIN_STEP_DELTA_E; step++) {
|
|
778
786
|
const L2 = Math.max(4, Math.min(98, high.L + (darkCanvas ? 1 : -1)));
|
|
@@ -863,20 +871,20 @@ function resolveOptions(p2) {
|
|
|
863
871
|
// never reach a chart as a live mode. Both of these are read on EVERY render, so a
|
|
864
872
|
// reader can change their mind about a cached chart without regenerating it.
|
|
865
873
|
approximatePositions: (() => {
|
|
866
|
-
const
|
|
867
|
-
return
|
|
874
|
+
const v2 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
|
|
875
|
+
return v2 === "mark" || v2 === "aggregate" || v2 === "skip" ? v2 : APPROXIMATE_POSITIONS_DEFAULT;
|
|
868
876
|
})(),
|
|
869
877
|
valueAxisBaseline: (() => {
|
|
870
|
-
const
|
|
871
|
-
return
|
|
878
|
+
const v2 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
|
|
879
|
+
return v2 === "zero" || v2 === "fit" || v2 === "auto" ? v2 : VALUE_AXIS_BASELINE_DEFAULT;
|
|
872
880
|
})(),
|
|
873
881
|
// Same shape, and the same reason for it: an unrecognised string must never reach a chart
|
|
874
882
|
// as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
|
|
875
883
|
// the setting that makes the chart PROVE the grid before it names a period, so a garbled
|
|
876
884
|
// value withdraws the claim rather than asserting one.
|
|
877
885
|
seasonalMarkers: (() => {
|
|
878
|
-
const
|
|
879
|
-
return
|
|
886
|
+
const v2 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
|
|
887
|
+
return v2 === "auto" || v2 === "always" || v2 === "never" ? v2 : SEASONAL_MARKERS_DEFAULT;
|
|
880
888
|
})(),
|
|
881
889
|
// ---- animation: booleans, default+clamp numerics, "" default enum ----
|
|
882
890
|
animAutoPlay: !!p2.animAutoPlay,
|
|
@@ -944,12 +952,12 @@ var byAsset = /* @__PURE__ */ new Map();
|
|
|
944
952
|
var _na;
|
|
945
953
|
function geoAssetFor(geoKind) {
|
|
946
954
|
if (!geoKind) return null;
|
|
947
|
-
const
|
|
948
|
-
if (/^country/.test(
|
|
949
|
-
if (
|
|
950
|
-
if (
|
|
951
|
-
if (
|
|
952
|
-
if (
|
|
955
|
+
const k3 = geoKind.toLowerCase();
|
|
956
|
+
if (/^country/.test(k3)) return "world";
|
|
957
|
+
if (k3 === "north-america") return "world";
|
|
958
|
+
if (k3 === "world") return "world";
|
|
959
|
+
if (k3 === "us-state-code" || k3 === "us-state-name") return "us-states";
|
|
960
|
+
if (k3 === "us-zip5") return "us-zip3";
|
|
953
961
|
return null;
|
|
954
962
|
}
|
|
955
963
|
var _worldBase;
|
|
@@ -1231,12 +1239,12 @@ function A3(n) {
|
|
|
1231
1239
|
if (f4 && f4.length) {
|
|
1232
1240
|
let d2 = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), R2 = d2 ? u(d2) : "", g3 = d2 ? Y(d2) : null, S = [], m2 = -1;
|
|
1233
1241
|
for (let c2 of f4) {
|
|
1234
|
-
let l = c2.row,
|
|
1235
|
-
if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R2)
|
|
1242
|
+
let l = c2.row, A2 = 0;
|
|
1243
|
+
if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R2) A2++;
|
|
1236
1244
|
else continue;
|
|
1237
|
-
if (i) if (T(l.cc) === i)
|
|
1245
|
+
if (i) if (T(l.cc) === i) A2++;
|
|
1238
1246
|
else continue;
|
|
1239
|
-
|
|
1247
|
+
A2 > m2 ? (m2 = A2, S = [c2]) : A2 === m2 && S.push(c2);
|
|
1240
1248
|
}
|
|
1241
1249
|
S.some((c2) => c2.primary) && (S = S.filter((c2) => c2.primary));
|
|
1242
1250
|
let p2 = /* @__PURE__ */ new Map();
|
|
@@ -1267,19 +1275,19 @@ var x = 8;
|
|
|
1267
1275
|
function y3(n, e) {
|
|
1268
1276
|
let t = new Array(n.length), o = new Array(n.length), i = new Array(n.length), r = /* @__PURE__ */ new Set(), a4 = [], s = /* @__PURE__ */ new Set(), f4 = [], d2 = /* @__PURE__ */ new Set(), R2 = [], g3 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, S = 0, m2 = 0, p2 = null;
|
|
1269
1277
|
for (let l = 0; l < n.length; ++l) {
|
|
1270
|
-
let
|
|
1278
|
+
let A2 = n[l], C = A3({ ...A2, mapKind: e });
|
|
1271
1279
|
if (S3(C)) {
|
|
1272
1280
|
t[l] = null, o[l] = null, i[l] = null, m2++;
|
|
1273
|
-
let M2 = K(
|
|
1281
|
+
let M2 = K(A2);
|
|
1274
1282
|
M2 && !d2.has(M2.toLowerCase()) && (d2.add(M2.toLowerCase()), R2.length < x && R2.push(M2));
|
|
1275
1283
|
} else if (C) {
|
|
1276
1284
|
if (t[l] = C.lat, o[l] = C.lon, i[l] = C.precision, S++, g3[C.precision]++, (p2 === null || G[C.precision] > G[p2]) && (p2 = C.precision), G[C.precision] > G.city) {
|
|
1277
|
-
let M2 = K(
|
|
1285
|
+
let M2 = K(A2);
|
|
1278
1286
|
M2 && !s.has(M2.toLowerCase()) && (s.add(M2.toLowerCase()), f4.length < x && f4.push(M2));
|
|
1279
1287
|
}
|
|
1280
1288
|
} else {
|
|
1281
1289
|
t[l] = null, o[l] = null, i[l] = null;
|
|
1282
|
-
let M2 = K(
|
|
1290
|
+
let M2 = K(A2);
|
|
1283
1291
|
M2 && !r.has(M2.toLowerCase()) && (r.add(M2.toLowerCase()), a4.push(M2));
|
|
1284
1292
|
}
|
|
1285
1293
|
}
|
|
@@ -1425,10 +1433,10 @@ function It(n, s) {
|
|
|
1425
1433
|
return s === "us-zip5" ? w.has(n.slice(0, 3)) : true;
|
|
1426
1434
|
}
|
|
1427
1435
|
function Wt(n, s) {
|
|
1428
|
-
let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M2 = [],
|
|
1436
|
+
let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M2 = [], h3 = 0;
|
|
1429
1437
|
for (let N2 = 0; N2 < n.length; ++N2) {
|
|
1430
|
-
let I2 = Mt(n[N2], s),
|
|
1431
|
-
if (i[N2] =
|
|
1438
|
+
let I2 = Mt(n[N2], s), O3 = I2 !== null && It(I2, s) ? I2 : null;
|
|
1439
|
+
if (i[N2] = O3, O3 !== null) h3++;
|
|
1432
1440
|
else {
|
|
1433
1441
|
let d2 = n[N2];
|
|
1434
1442
|
if (d2 != null) {
|
|
@@ -1440,10 +1448,10 @@ function Wt(n, s) {
|
|
|
1440
1448
|
}
|
|
1441
1449
|
}
|
|
1442
1450
|
}
|
|
1443
|
-
return { iso: i, unmatched: M2, matchedRows:
|
|
1451
|
+
return { iso: i, unmatched: M2, matchedRows: h3, totalRows: n.length };
|
|
1444
1452
|
}
|
|
1445
1453
|
|
|
1446
|
-
// ../shape-core/dist/chunk-
|
|
1454
|
+
// ../shape-core/dist/chunk-NY26PXWD.mjs
|
|
1447
1455
|
var import_papaparse = __toESM(require_papaparse_min(), 1);
|
|
1448
1456
|
/*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
|
|
1449
1457
|
var Se = { "north-america": "AG AI AW BB BL BM BQ BS BZ CA CR CU CW DM DO GD GL GP GT HN HT JM KN KY LC MF MQ MS MX NI PA PM PR SV SX TC TT US VC VG VI", "south-america": "AR BO BR CL CO EC FK GF GY PE PY SR UY VE", europe: "AD AL AT AX BA BE BG BY CH CY CZ DE DK EE ES FI FO FR GB GG GI GR HR HU IE IM IS IT JE LI LT LU LV MC MD ME MK MT NL NO PL PT RO RS RU SE SI SJ SK SM UA VA", africa: "AO BF BI BJ BW CD CF CG CI CM CV DJ DZ EG EH ER ET GA GH GM GN GQ GW KE KM LR LS LY MA MG ML MR MU MW MZ NA NE NG RE RW SC SD SH SL SN SO SS ST SZ TD TG TN TZ UG YT ZA ZM ZW", asia: "AE AF AM AZ BD BH BN BT CC CN CX GE HK ID IL IN IO IQ IR JO JP KG KH KP KR KW KZ LA LB LK MM MN MO MV MY NP OM PH PK PS QA SA SG SY TH TJ TL TM TR TW UZ VN YE", oceania: "AS AU CK FJ FM GU KI MH MP NC NF NR NU NZ PF PG PN PW SB TK TO TV UM VU WF WS", antarctica: "AQ BV GS HM TF" };
|
|
@@ -1550,51 +1558,51 @@ var ct2 = new RegExp([String.raw`\bisMeasure\b`, String.raw`\bdataType\b`, Strin
|
|
|
1550
1558
|
|
|
1551
1559
|
// ../shape-core/dist/index.mjs
|
|
1552
1560
|
/*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
|
|
1553
|
-
var
|
|
1554
|
-
var
|
|
1555
|
-
function
|
|
1561
|
+
var G2 = 2;
|
|
1562
|
+
var q3 = 400;
|
|
1563
|
+
function O2(i) {
|
|
1556
1564
|
return !!E(i);
|
|
1557
1565
|
}
|
|
1558
|
-
function
|
|
1566
|
+
function A(i) {
|
|
1559
1567
|
let n = /* @__PURE__ */ new Set();
|
|
1560
1568
|
for (let t of i) {
|
|
1561
1569
|
if (t == null) continue;
|
|
1562
|
-
let
|
|
1563
|
-
if (!V(
|
|
1570
|
+
let r = u(String(t));
|
|
1571
|
+
if (!V(r) && !n.has(r) && (n.add(r), n.size >= q3)) break;
|
|
1564
1572
|
}
|
|
1565
1573
|
return Array.from(n);
|
|
1566
1574
|
}
|
|
1567
|
-
function
|
|
1568
|
-
let n =
|
|
1569
|
-
if (n.length === 0 ||
|
|
1570
|
-
let t = n.filter((
|
|
1571
|
-
return t >= 1 && t >=
|
|
1575
|
+
function x3(i) {
|
|
1576
|
+
let n = A(i);
|
|
1577
|
+
if (n.length === 0 || E2(i) < 95) return false;
|
|
1578
|
+
let t = n.filter((c2) => O2(c2) && !Y(c2)).length, r = n.filter((c2) => !O2(c2) && !!Y(c2)).length;
|
|
1579
|
+
return t >= 1 && t >= r;
|
|
1572
1580
|
}
|
|
1573
1581
|
function W2(i, n) {
|
|
1574
1582
|
if (!Y(i)) return false;
|
|
1575
1583
|
let t = E(i);
|
|
1576
1584
|
return t ? n === "world" ? true : s3.has(t) : false;
|
|
1577
1585
|
}
|
|
1578
|
-
function
|
|
1579
|
-
let n =
|
|
1586
|
+
function E2(i) {
|
|
1587
|
+
let n = A(i);
|
|
1580
1588
|
if (n.length === 0) return 0;
|
|
1581
1589
|
let t = 0;
|
|
1582
|
-
for (let
|
|
1590
|
+
for (let r of n) O2(r) && t++;
|
|
1583
1591
|
return Math.round(t / n.length * 1e3) / 10;
|
|
1584
1592
|
}
|
|
1585
|
-
function
|
|
1586
|
-
let n =
|
|
1593
|
+
function _2(i) {
|
|
1594
|
+
let n = A(i);
|
|
1587
1595
|
if (n.length === 0) return 0;
|
|
1588
1596
|
let t = 0;
|
|
1589
|
-
for (let
|
|
1597
|
+
for (let r of n) Y(r) && t++;
|
|
1590
1598
|
return Math.round(t / n.length * 1e3) / 10;
|
|
1591
1599
|
}
|
|
1592
1600
|
function $2(i) {
|
|
1593
1601
|
let n = /* @__PURE__ */ new Set();
|
|
1594
1602
|
for (let t of i) {
|
|
1595
1603
|
if (t == null) continue;
|
|
1596
|
-
let
|
|
1597
|
-
if (!V(u(
|
|
1604
|
+
let r = String(t).trim();
|
|
1605
|
+
if (!V(u(r)) && !n.has(r) && (n.add(r), n.size >= q3)) break;
|
|
1598
1606
|
}
|
|
1599
1607
|
return Array.from(n);
|
|
1600
1608
|
}
|
|
@@ -1602,95 +1610,95 @@ function z2(i) {
|
|
|
1602
1610
|
let n = $2(i);
|
|
1603
1611
|
if (n.length === 0) return 0;
|
|
1604
1612
|
let t = 0;
|
|
1605
|
-
for (let
|
|
1613
|
+
for (let r of n) Z(r).length > 0 && t++;
|
|
1606
1614
|
return Math.round(t / n.length * 1e3) / 10;
|
|
1607
1615
|
}
|
|
1608
|
-
function
|
|
1616
|
+
function j2(i, n) {
|
|
1609
1617
|
return y2(n, rt) ? true : $2(i).some((t) => /^\d{5}(-\d{4})?$/.test(t.replace(/\.0+$/, "")));
|
|
1610
1618
|
}
|
|
1611
|
-
function
|
|
1612
|
-
let t =
|
|
1619
|
+
function yt2(i, n) {
|
|
1620
|
+
let t = A(i);
|
|
1613
1621
|
if (t.length === 0) return 0;
|
|
1614
|
-
let
|
|
1615
|
-
for (let
|
|
1616
|
-
return Math.round(
|
|
1622
|
+
let r = 0;
|
|
1623
|
+
for (let c2 of t) p3(c2, n) && r++;
|
|
1624
|
+
return Math.round(r / t.length * 1e3) / 10;
|
|
1617
1625
|
}
|
|
1618
|
-
function
|
|
1626
|
+
function k2(i, n) {
|
|
1619
1627
|
let t = 0;
|
|
1620
|
-
for (let
|
|
1628
|
+
for (let r of A(i)) n(r) && t++;
|
|
1621
1629
|
return t;
|
|
1622
1630
|
}
|
|
1623
|
-
function
|
|
1631
|
+
function Ct(i, n) {
|
|
1624
1632
|
let t = 0;
|
|
1625
|
-
for (let
|
|
1633
|
+
for (let r of $2(i)) n(r) && t++;
|
|
1626
1634
|
return t;
|
|
1627
1635
|
}
|
|
1628
|
-
function
|
|
1629
|
-
let
|
|
1636
|
+
function ht(i, n, t, r, c2) {
|
|
1637
|
+
let l = [], a4 = [], o = {}, R2 = {}, h3 = new Set(i), f4 = (e) => n.map((s) => s[e]);
|
|
1630
1638
|
for (let e of ["city", "country"]) {
|
|
1631
|
-
let
|
|
1632
|
-
|
|
1639
|
+
let s = t?.[e];
|
|
1640
|
+
s && h3.has(s) && (o[e] = s);
|
|
1633
1641
|
}
|
|
1634
|
-
let
|
|
1642
|
+
let Y2 = new Set(c2 ?? i);
|
|
1635
1643
|
for (let e of ["lat", "lon"]) {
|
|
1636
|
-
let
|
|
1637
|
-
|
|
1644
|
+
let s = t?.[e];
|
|
1645
|
+
s && Y2.has(s) && (o[e] = s);
|
|
1638
1646
|
}
|
|
1639
|
-
let
|
|
1640
|
-
if (
|
|
1641
|
-
let e =
|
|
1642
|
-
|
|
1647
|
+
let g3 = t?.zip;
|
|
1648
|
+
if (g3 && h3.has(g3)) {
|
|
1649
|
+
let e = f4(g3), s = z2(e);
|
|
1650
|
+
s < 95 ? a4.push(`zip=${g3} (only ${s}% of values read as ZIPs)`) : j2(e, g3) ? o.zip = g3 : a4.push(`zip=${g3} (all values are 3-4 digits with nothing to say they are postal)`);
|
|
1643
1651
|
}
|
|
1644
|
-
let
|
|
1645
|
-
if (
|
|
1646
|
-
let e =
|
|
1647
|
-
|
|
1652
|
+
let p2 = t?.state;
|
|
1653
|
+
if (p2 && h3.has(p2)) {
|
|
1654
|
+
let e = f4(p2), s = A(e);
|
|
1655
|
+
s.length > 0 && s.every((u2) => W2(u2, r)) ? a4.push(`state=${p2} (every value is "CA", which is both Canada and California)`) : x3(e) ? (a4.push(`state=${p2} (every value is a country, not a state)`), o.country || (o.country = p2)) : _2(e) < 95 ? a4.push(`state=${p2} (only ${_2(e)}% of values are states/provinces)`) : o.state = p2;
|
|
1648
1656
|
}
|
|
1649
|
-
let
|
|
1657
|
+
let y5 = new Set(Object.values(o).filter(Boolean)), S = i.filter((e) => !y5.has(e) && !e.startsWith("__"));
|
|
1650
1658
|
if (!o.state) {
|
|
1651
1659
|
let e = null;
|
|
1652
|
-
for (let
|
|
1653
|
-
let
|
|
1654
|
-
if (
|
|
1655
|
-
let
|
|
1656
|
-
if (
|
|
1657
|
-
let
|
|
1658
|
-
|
|
1659
|
-
}
|
|
1660
|
-
e && (o.state = e.name,
|
|
1661
|
-
}
|
|
1662
|
-
if (!o.zip) for (let e of
|
|
1663
|
-
if (
|
|
1664
|
-
let
|
|
1665
|
-
if (!(
|
|
1666
|
-
o.zip = e,
|
|
1660
|
+
for (let s of S) {
|
|
1661
|
+
let u2 = f4(s);
|
|
1662
|
+
if (x3(u2)) continue;
|
|
1663
|
+
let m2 = _2(u2);
|
|
1664
|
+
if (m2 < 95) continue;
|
|
1665
|
+
let w2 = k2(u2, (T3) => !!Y(T3)), Q3 = k2(u2, (T3) => !!Y(T3) && !W2(T3, r));
|
|
1666
|
+
w2 < G2 && Q3 < 1 || (!e || m2 > e.pct) && (e = { name: s, pct: m2 });
|
|
1667
|
+
}
|
|
1668
|
+
e && (o.state = e.name, y5.add(e.name), l.push(`state=${e.name} (${e.pct}% states/provinces)`));
|
|
1669
|
+
}
|
|
1670
|
+
if (!o.zip) for (let e of S) {
|
|
1671
|
+
if (y5.has(e)) continue;
|
|
1672
|
+
let s = f4(e), u2 = z2(s);
|
|
1673
|
+
if (!(u2 < 95) && j2(s, e) && !(Ct(s, (m2) => Z(m2).length > 0) < G2)) {
|
|
1674
|
+
o.zip = e, y5.add(e), l.push(`zip=${e} (${u2}% ZIP codes)`);
|
|
1667
1675
|
break;
|
|
1668
1676
|
}
|
|
1669
1677
|
}
|
|
1670
|
-
let
|
|
1671
|
-
if (!
|
|
1678
|
+
let P2 = o.country;
|
|
1679
|
+
if (!P2 || !x3(f4(P2))) {
|
|
1672
1680
|
let e = null;
|
|
1673
|
-
for (let
|
|
1674
|
-
if (
|
|
1675
|
-
let
|
|
1676
|
-
(!e ||
|
|
1681
|
+
for (let s of S) {
|
|
1682
|
+
if (y5.has(s) || !x3(f4(s))) continue;
|
|
1683
|
+
let u2 = E2(f4(s));
|
|
1684
|
+
(!e || u2 > e.pct) && (e = { name: s, pct: u2 });
|
|
1677
1685
|
}
|
|
1678
|
-
e && (
|
|
1686
|
+
e && (P2 && (a4.push(`country=${P2} (only ${E2(f4(P2))}% of values are country identifiers; using ${e.name} instead)`), R2.country = P2), o.country = e.name, y5.add(e.name), l.push(`country=${e.name}`));
|
|
1679
1687
|
}
|
|
1680
1688
|
if (!o.city) {
|
|
1681
1689
|
let e = null;
|
|
1682
|
-
for (let
|
|
1683
|
-
if (
|
|
1684
|
-
let
|
|
1685
|
-
|
|
1690
|
+
for (let s of S) {
|
|
1691
|
+
if (y5.has(s)) continue;
|
|
1692
|
+
let u2 = f4(s), m2 = yt2(u2, r);
|
|
1693
|
+
m2 < m3 || k2(u2, (w2) => p3(w2, r)) < G2 || (!e || m2 > e.pct) && (e = { name: s, pct: m2 });
|
|
1686
1694
|
}
|
|
1687
|
-
e && (o.city = e.name,
|
|
1695
|
+
e && (o.city = e.name, l.push(`city=${e.name} (${e.pct}% known cities)`));
|
|
1688
1696
|
}
|
|
1689
|
-
let B2 = o.country ?
|
|
1690
|
-
let
|
|
1691
|
-
return isFinite(
|
|
1697
|
+
let B2 = o.country ? f4(o.country) : [], D3 = !!o.country && x3(B2), J2 = D3 ? new Set(B2.map((e) => E(e == null ? null : String(e))).filter(Boolean)).size : 0, H2 = D3 && J2 >= 2, L2 = !!(o.lat && o.lon) && n.some((e) => {
|
|
1698
|
+
let s = +String(e[o.lat] ?? "").trim(), u2 = +String(e[o.lon] ?? "").trim();
|
|
1699
|
+
return isFinite(s) && isFinite(u2) && s >= -90 && s <= 90 && u2 >= -180 && u2 <= 180 && String(e[o.lat] ?? "").trim() !== "" && String(e[o.lon] ?? "").trim() !== "";
|
|
1692
1700
|
});
|
|
1693
|
-
return o.lat && o.lon && !
|
|
1701
|
+
return o.lat && o.lon && !L2 && a4.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !H2 && !(o.city || o.state || o.zip || L2) && a4.push(D3 ? `country=${o.country} (every row resolves to the same country - nothing to place apart)` : `country=${o.country} (values are not country identifiers)`), { bind: !!(o.city || o.state || o.zip || H2 || L2) ? o : null, backfilled: l, refused: a4, ...Object.keys(R2).length ? { labelFallback: R2 } : {} };
|
|
1694
1702
|
}
|
|
1695
1703
|
|
|
1696
1704
|
// src/payload.ts
|
|
@@ -1705,7 +1713,7 @@ function resolvePointChannel(cols, rowObjs, point) {
|
|
|
1705
1713
|
let labelCol;
|
|
1706
1714
|
if (bind) {
|
|
1707
1715
|
const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
|
|
1708
|
-
const res =
|
|
1716
|
+
const res = ht(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
|
|
1709
1717
|
bind = res.bind;
|
|
1710
1718
|
rolesBackfilled = res.backfilled;
|
|
1711
1719
|
rolesRefused = res.refused;
|
|
@@ -1793,27 +1801,27 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
|
|
|
1793
1801
|
const row = rowObjs[r];
|
|
1794
1802
|
const a4 = new Array(cols.length + extra);
|
|
1795
1803
|
for (let c2 = 0; c2 < cols.length; c2++) {
|
|
1796
|
-
const
|
|
1797
|
-
if (
|
|
1798
|
-
a4[c2] =
|
|
1804
|
+
const v2 = row[colNames[c2]];
|
|
1805
|
+
if (v2 instanceof Date) {
|
|
1806
|
+
a4[c2] = v2.toISOString();
|
|
1799
1807
|
} else {
|
|
1800
|
-
a4[c2] =
|
|
1808
|
+
a4[c2] = v2 ?? null;
|
|
1801
1809
|
}
|
|
1802
1810
|
}
|
|
1803
|
-
let
|
|
1804
|
-
a4[
|
|
1805
|
-
if (geoIso) a4[
|
|
1811
|
+
let k3 = cols.length;
|
|
1812
|
+
a4[k3++] = r;
|
|
1813
|
+
if (geoIso) a4[k3++] = geoIso[r];
|
|
1806
1814
|
if (pLat && pLon) {
|
|
1807
|
-
a4[
|
|
1808
|
-
a4[
|
|
1809
|
-
a4[
|
|
1815
|
+
a4[k3++] = pLat[r];
|
|
1816
|
+
a4[k3++] = pLon[r];
|
|
1817
|
+
a4[k3++] = pPrec ? pPrec[r] : null;
|
|
1810
1818
|
}
|
|
1811
1819
|
if (dLat && dLon) {
|
|
1812
|
-
a4[
|
|
1813
|
-
a4[
|
|
1814
|
-
a4[
|
|
1820
|
+
a4[k3++] = dLat[r];
|
|
1821
|
+
a4[k3++] = dLon[r];
|
|
1822
|
+
a4[k3++] = dPrec ? dPrec[r] : null;
|
|
1815
1823
|
}
|
|
1816
|
-
for (const ac of aliasCols) a4[
|
|
1824
|
+
for (const ac of aliasCols) a4[k3++] = a4[ac.from];
|
|
1817
1825
|
out[r] = a4;
|
|
1818
1826
|
}
|
|
1819
1827
|
const colsOut = [...cols, { name: "__rowIdx__", dataType: "Integer", isMeasure: false, modelDesc: "" }];
|
|
@@ -1848,6 +1856,141 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
|
|
|
1848
1856
|
};
|
|
1849
1857
|
}
|
|
1850
1858
|
|
|
1859
|
+
// src/codeComments.ts
|
|
1860
|
+
function stripJsComments(code) {
|
|
1861
|
+
const src = String(code ?? "");
|
|
1862
|
+
const n = src.length;
|
|
1863
|
+
let out = "";
|
|
1864
|
+
let i = 0;
|
|
1865
|
+
const templates = [];
|
|
1866
|
+
let prevSig = "";
|
|
1867
|
+
let prevWord = "";
|
|
1868
|
+
let wordOpen = false;
|
|
1869
|
+
const regexMayFollow = () => {
|
|
1870
|
+
if (prevSig === "") return true;
|
|
1871
|
+
if ("(,=:[!&|?{};+-*%<>~^".includes(prevSig)) return true;
|
|
1872
|
+
return /^(return|typeof|instanceof|in|of|new|delete|void|throw|case|do|else|yield|await)$/.test(prevWord);
|
|
1873
|
+
};
|
|
1874
|
+
while (i < n) {
|
|
1875
|
+
const ch = src[i];
|
|
1876
|
+
const next = i + 1 < n ? src[i + 1] : "";
|
|
1877
|
+
const top = templates.length > 0 ? templates[templates.length - 1] : null;
|
|
1878
|
+
if (top === -1) {
|
|
1879
|
+
if (ch === "\\") {
|
|
1880
|
+
out += src.slice(i, i + 2);
|
|
1881
|
+
i += 2;
|
|
1882
|
+
continue;
|
|
1883
|
+
}
|
|
1884
|
+
if (ch === "`") {
|
|
1885
|
+
templates.pop();
|
|
1886
|
+
out += ch;
|
|
1887
|
+
i++;
|
|
1888
|
+
prevSig = "`";
|
|
1889
|
+
prevWord = "";
|
|
1890
|
+
wordOpen = false;
|
|
1891
|
+
continue;
|
|
1892
|
+
}
|
|
1893
|
+
if (ch === "$" && next === "{") {
|
|
1894
|
+
templates[templates.length - 1] = 0;
|
|
1895
|
+
out += "${";
|
|
1896
|
+
i += 2;
|
|
1897
|
+
prevSig = "{";
|
|
1898
|
+
prevWord = "";
|
|
1899
|
+
wordOpen = false;
|
|
1900
|
+
continue;
|
|
1901
|
+
}
|
|
1902
|
+
out += ch;
|
|
1903
|
+
i++;
|
|
1904
|
+
continue;
|
|
1905
|
+
}
|
|
1906
|
+
if (ch === "/" && next === "/") {
|
|
1907
|
+
let j3 = i + 2;
|
|
1908
|
+
while (j3 < n && src[j3] !== "\n" && src[j3] !== "\r") j3++;
|
|
1909
|
+
out += " ";
|
|
1910
|
+
i = j3;
|
|
1911
|
+
wordOpen = false;
|
|
1912
|
+
continue;
|
|
1913
|
+
}
|
|
1914
|
+
if (ch === "/" && next === "*") {
|
|
1915
|
+
const end = src.indexOf("*/", i + 2);
|
|
1916
|
+
const body = end < 0 ? src.slice(i + 2) : src.slice(i + 2, end);
|
|
1917
|
+
const newlines = body.match(/\r\n|\r|\n/g);
|
|
1918
|
+
out += newlines ? newlines.join("") : " ";
|
|
1919
|
+
i = end < 0 ? n : end + 2;
|
|
1920
|
+
wordOpen = false;
|
|
1921
|
+
continue;
|
|
1922
|
+
}
|
|
1923
|
+
if (ch === "'" || ch === '"') {
|
|
1924
|
+
let j3 = i + 1;
|
|
1925
|
+
while (j3 < n && src[j3] !== ch && src[j3] !== "\n") j3 += src[j3] === "\\" ? 2 : 1;
|
|
1926
|
+
out += src.slice(i, Math.min(j3 + 1, n));
|
|
1927
|
+
i = j3 + 1;
|
|
1928
|
+
prevSig = ch;
|
|
1929
|
+
prevWord = "";
|
|
1930
|
+
wordOpen = false;
|
|
1931
|
+
continue;
|
|
1932
|
+
}
|
|
1933
|
+
if (ch === "`") {
|
|
1934
|
+
templates.push(-1);
|
|
1935
|
+
out += ch;
|
|
1936
|
+
i++;
|
|
1937
|
+
wordOpen = false;
|
|
1938
|
+
continue;
|
|
1939
|
+
}
|
|
1940
|
+
if (ch === "/" && regexMayFollow()) {
|
|
1941
|
+
let j3 = i + 1, inClass = false;
|
|
1942
|
+
while (j3 < n && src[j3] !== "\n") {
|
|
1943
|
+
const c2 = src[j3];
|
|
1944
|
+
if (c2 === "\\") {
|
|
1945
|
+
j3 += 2;
|
|
1946
|
+
continue;
|
|
1947
|
+
}
|
|
1948
|
+
if (c2 === "[") inClass = true;
|
|
1949
|
+
else if (c2 === "]") inClass = false;
|
|
1950
|
+
else if (c2 === "/" && !inClass) break;
|
|
1951
|
+
j3++;
|
|
1952
|
+
}
|
|
1953
|
+
if (j3 < n && src[j3] === "/") {
|
|
1954
|
+
j3++;
|
|
1955
|
+
while (j3 < n && /[A-Za-z]/.test(src[j3])) j3++;
|
|
1956
|
+
out += src.slice(i, j3);
|
|
1957
|
+
i = j3;
|
|
1958
|
+
prevSig = "/";
|
|
1959
|
+
prevWord = "";
|
|
1960
|
+
wordOpen = false;
|
|
1961
|
+
continue;
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
if (top !== null && top >= 0) {
|
|
1965
|
+
if (ch === "{") templates[templates.length - 1] = top + 1;
|
|
1966
|
+
else if (ch === "}") {
|
|
1967
|
+
if (top === 0) {
|
|
1968
|
+
templates[templates.length - 1] = -1;
|
|
1969
|
+
out += ch;
|
|
1970
|
+
i++;
|
|
1971
|
+
continue;
|
|
1972
|
+
}
|
|
1973
|
+
templates[templates.length - 1] = top - 1;
|
|
1974
|
+
}
|
|
1975
|
+
}
|
|
1976
|
+
out += ch;
|
|
1977
|
+
i++;
|
|
1978
|
+
if (/\s/.test(ch)) {
|
|
1979
|
+
wordOpen = false;
|
|
1980
|
+
} else {
|
|
1981
|
+
if (/[A-Za-z0-9_$]/.test(ch)) {
|
|
1982
|
+
prevWord = wordOpen ? prevWord + ch : ch;
|
|
1983
|
+
wordOpen = true;
|
|
1984
|
+
} else {
|
|
1985
|
+
prevWord = "";
|
|
1986
|
+
wordOpen = false;
|
|
1987
|
+
}
|
|
1988
|
+
prevSig = ch;
|
|
1989
|
+
}
|
|
1990
|
+
}
|
|
1991
|
+
return out;
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1851
1994
|
// src/selection.ts
|
|
1852
1995
|
function createMarkResolver(env) {
|
|
1853
1996
|
const { root, doc, log } = env;
|
|
@@ -1872,7 +2015,7 @@ function createMarkResolver(env) {
|
|
|
1872
2015
|
const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
|
|
1873
2016
|
return s === "transparent" || s === "none" || so <= 0.01;
|
|
1874
2017
|
};
|
|
1875
|
-
const distToPathCenterline = (el,
|
|
2018
|
+
const distToPathCenterline = (el, x4, y5) => {
|
|
1876
2019
|
const L2 = el.getTotalLength();
|
|
1877
2020
|
if (!(L2 > 0)) return Number.MAX_VALUE;
|
|
1878
2021
|
const m2 = el.getScreenCTM();
|
|
@@ -1881,17 +2024,17 @@ function createMarkResolver(env) {
|
|
|
1881
2024
|
const N2 = 64;
|
|
1882
2025
|
for (let i = 0; i <= N2; i++) {
|
|
1883
2026
|
const pt = el.getPointAtLength(L2 * i / N2);
|
|
1884
|
-
const dx = m2.a * pt.x + m2.c * pt.y + m2.e -
|
|
2027
|
+
const dx = m2.a * pt.x + m2.c * pt.y + m2.e - x4;
|
|
1885
2028
|
const dy = m2.b * pt.x + m2.d * pt.y + m2.f - y5;
|
|
1886
2029
|
const d2 = dx * dx + dy * dy;
|
|
1887
2030
|
if (d2 < best) best = d2;
|
|
1888
2031
|
}
|
|
1889
2032
|
return Math.sqrt(best);
|
|
1890
2033
|
};
|
|
1891
|
-
const refineHitCorridor = (mark,
|
|
2034
|
+
const refineHitCorridor = (mark, x4, y5, sel) => {
|
|
1892
2035
|
try {
|
|
1893
2036
|
if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
|
|
1894
|
-
const stack = doc.elementsFromPoint(
|
|
2037
|
+
const stack = doc.elementsFromPoint(x4, y5);
|
|
1895
2038
|
const candidates = [];
|
|
1896
2039
|
for (const el of stack) {
|
|
1897
2040
|
if (!root.contains(el)) continue;
|
|
@@ -1905,7 +2048,7 @@ function createMarkResolver(env) {
|
|
|
1905
2048
|
let best = mark;
|
|
1906
2049
|
let bestD = Number.MAX_VALUE;
|
|
1907
2050
|
for (const el of candidates) {
|
|
1908
|
-
const d2 = distToPathCenterline(el,
|
|
2051
|
+
const d2 = distToPathCenterline(el, x4, y5);
|
|
1909
2052
|
if (d2 < bestD) {
|
|
1910
2053
|
bestD = d2;
|
|
1911
2054
|
best = el;
|
|
@@ -1942,9 +2085,9 @@ function createMarkResolver(env) {
|
|
|
1942
2085
|
}
|
|
1943
2086
|
return out;
|
|
1944
2087
|
};
|
|
1945
|
-
const penetrateOverlayAt = (
|
|
2088
|
+
const penetrateOverlayAt = (x4, y5, sel) => {
|
|
1946
2089
|
try {
|
|
1947
|
-
const stack = doc.elementsFromPoint(
|
|
2090
|
+
const stack = doc.elementsFromPoint(x4, y5);
|
|
1948
2091
|
for (const el of stack) {
|
|
1949
2092
|
if (!root.contains(el) || !isElement(el)) continue;
|
|
1950
2093
|
const cand = el.matches(sel) ? el : el.closest(sel);
|
|
@@ -1956,7 +2099,7 @@ function createMarkResolver(env) {
|
|
|
1956
2099
|
}
|
|
1957
2100
|
return null;
|
|
1958
2101
|
};
|
|
1959
|
-
const resolveByGeometry = (
|
|
2102
|
+
const resolveByGeometry = (x4, y5, sel) => {
|
|
1960
2103
|
try {
|
|
1961
2104
|
const cands = root.querySelectorAll(sel);
|
|
1962
2105
|
let best = null, bestArea = Number.MAX_VALUE;
|
|
@@ -1965,7 +2108,7 @@ function createMarkResolver(env) {
|
|
|
1965
2108
|
if (!el.getAttribute("data-row-idx")) continue;
|
|
1966
2109
|
const r = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
|
|
1967
2110
|
if (!r || r.width <= 0 || r.height <= 0) continue;
|
|
1968
|
-
if (
|
|
2111
|
+
if (x4 < r.left || x4 > r.right || y5 < r.top || y5 > r.bottom) continue;
|
|
1969
2112
|
const area = r.width * r.height;
|
|
1970
2113
|
if (area < bestArea) {
|
|
1971
2114
|
bestArea = area;
|
|
@@ -2201,9 +2344,9 @@ var VALUE_AXIS_MIN_FIT = 0.8;
|
|
|
2201
2344
|
var MIN_AXIS_SPAN_PX = 40;
|
|
2202
2345
|
var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
|
|
2203
2346
|
function num(el, name) {
|
|
2204
|
-
const
|
|
2205
|
-
if (
|
|
2206
|
-
return parseFloat(String(
|
|
2347
|
+
const v2 = el.getAttribute?.(name);
|
|
2348
|
+
if (v2 === null || v2 === void 0 || String(v2).trim() === "") return NaN;
|
|
2349
|
+
return parseFloat(String(v2));
|
|
2207
2350
|
}
|
|
2208
2351
|
function median(xs) {
|
|
2209
2352
|
if (!xs.length) return NaN;
|
|
@@ -2211,15 +2354,15 @@ function median(xs) {
|
|
|
2211
2354
|
const m2 = s.length >> 1;
|
|
2212
2355
|
return s.length % 2 ? s[m2] : (s[m2 - 1] + s[m2]) / 2;
|
|
2213
2356
|
}
|
|
2214
|
-
function robustLine(
|
|
2215
|
-
const n =
|
|
2357
|
+
function robustLine(v2, pos) {
|
|
2358
|
+
const n = v2.length;
|
|
2216
2359
|
const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
|
|
2217
2360
|
const idx = [];
|
|
2218
2361
|
for (let i = 0; i < n; i += step) idx.push(i);
|
|
2219
2362
|
const slopes = [];
|
|
2220
2363
|
for (let p2 = 0; p2 < idx.length; p2++) {
|
|
2221
2364
|
for (let q4 = p2 + 1; q4 < idx.length; q4++) {
|
|
2222
|
-
const dv =
|
|
2365
|
+
const dv = v2[idx[q4]] - v2[idx[p2]];
|
|
2223
2366
|
if (Math.abs(dv) < 1e-12) continue;
|
|
2224
2367
|
slopes.push((pos[idx[q4]] - pos[idx[p2]]) / dv);
|
|
2225
2368
|
}
|
|
@@ -2227,7 +2370,7 @@ function robustLine(v3, pos) {
|
|
|
2227
2370
|
if (slopes.length < 3) return null;
|
|
2228
2371
|
const b4 = median(slopes);
|
|
2229
2372
|
if (!Number.isFinite(b4) || Math.abs(b4) < 1e-12) return null;
|
|
2230
|
-
const a4 = median(pos.map((y5, i) => y5 - b4 *
|
|
2373
|
+
const a4 = median(pos.map((y5, i) => y5 - b4 * v2[i]));
|
|
2231
2374
|
return Number.isFinite(a4) ? { a: a4, b: b4 } : null;
|
|
2232
2375
|
}
|
|
2233
2376
|
function censusValuePlacement(container, data) {
|
|
@@ -2245,40 +2388,40 @@ function censusValuePlacement(container, data) {
|
|
|
2245
2388
|
if (!/^\d+$/.test(raw)) continue;
|
|
2246
2389
|
const i = +raw;
|
|
2247
2390
|
const row = rows[i];
|
|
2248
|
-
const
|
|
2249
|
-
if (!row || !Number.isFinite(
|
|
2391
|
+
const x4 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
|
|
2392
|
+
if (!row || !Number.isFinite(x4) || !Number.isFinite(y5) || !(r > 0)) continue;
|
|
2250
2393
|
seen.add(i);
|
|
2251
|
-
dots.push({ row, x:
|
|
2394
|
+
dots.push({ row, x: x4, y: y5, r });
|
|
2252
2395
|
}
|
|
2253
2396
|
if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
|
|
2254
2397
|
let best = null;
|
|
2255
2398
|
for (let c2 = 0; c2 < columns.length; c2++) {
|
|
2256
2399
|
if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
|
|
2257
2400
|
const vals = dots.map((d2) => {
|
|
2258
|
-
const
|
|
2259
|
-
return
|
|
2401
|
+
const v2 = d2.row[c2];
|
|
2402
|
+
return v2 === null || v2 === void 0 || v2 === "" ? NaN : typeof v2 === "number" ? v2 : Number(v2);
|
|
2260
2403
|
});
|
|
2261
2404
|
const finite = vals.filter(Number.isFinite);
|
|
2262
2405
|
if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
|
|
2263
|
-
const logs = finite.every((
|
|
2406
|
+
const logs = finite.every((v2) => v2 > 0) ? [false, true] : [false];
|
|
2264
2407
|
for (const log of logs) {
|
|
2265
2408
|
for (const axis of ["x", "y"]) {
|
|
2266
2409
|
const keep = [];
|
|
2267
|
-
const
|
|
2268
|
-
dots.forEach((d2,
|
|
2269
|
-
if (!Number.isFinite(vals[
|
|
2270
|
-
keep.push(
|
|
2271
|
-
|
|
2410
|
+
const v2 = [], pos = [];
|
|
2411
|
+
dots.forEach((d2, k3) => {
|
|
2412
|
+
if (!Number.isFinite(vals[k3])) return;
|
|
2413
|
+
keep.push(k3);
|
|
2414
|
+
v2.push(log ? Math.log10(vals[k3]) : vals[k3]);
|
|
2272
2415
|
pos.push(axis === "x" ? d2.x : d2.y);
|
|
2273
2416
|
});
|
|
2274
|
-
const line = robustLine(
|
|
2417
|
+
const line = robustLine(v2, pos);
|
|
2275
2418
|
if (!line) continue;
|
|
2276
2419
|
const lo = Math.min(...pos), hi = Math.max(...pos);
|
|
2277
2420
|
if (hi - lo < MIN_AXIS_SPAN_PX) continue;
|
|
2278
2421
|
const mean = pos.reduce((s, p2) => s + p2, 0) / pos.length;
|
|
2279
2422
|
let ssRes = 0, ssTot = 0;
|
|
2280
|
-
const res = pos.map((p2,
|
|
2281
|
-
const e = p2 - (line.a + line.b *
|
|
2423
|
+
const res = pos.map((p2, k3) => {
|
|
2424
|
+
const e = p2 - (line.a + line.b * v2[k3]);
|
|
2282
2425
|
ssRes += e * e;
|
|
2283
2426
|
ssTot += (p2 - mean) ** 2;
|
|
2284
2427
|
return e;
|
|
@@ -2287,8 +2430,8 @@ function censusValuePlacement(container, data) {
|
|
|
2287
2430
|
const fit = 1 - ssRes / ssTot;
|
|
2288
2431
|
if (fit >= VALUE_AXIS_MIN_FIT && (!best || fit > best.fit)) {
|
|
2289
2432
|
const full = new Array(dots.length).fill(NaN);
|
|
2290
|
-
keep.forEach((
|
|
2291
|
-
full[
|
|
2433
|
+
keep.forEach((k3, j3) => {
|
|
2434
|
+
full[k3] = res[j3];
|
|
2292
2435
|
});
|
|
2293
2436
|
best = { col: c2, axis, fit, res: full, log };
|
|
2294
2437
|
}
|
|
@@ -2298,8 +2441,8 @@ function censusValuePlacement(container, data) {
|
|
|
2298
2441
|
if (!best) return EMPTY4;
|
|
2299
2442
|
let off = 0, measured = 0;
|
|
2300
2443
|
const radii = [];
|
|
2301
|
-
dots.forEach((d2,
|
|
2302
|
-
const e = best.res[
|
|
2444
|
+
dots.forEach((d2, k3) => {
|
|
2445
|
+
const e = best.res[k3];
|
|
2303
2446
|
if (!Number.isFinite(e)) return;
|
|
2304
2447
|
measured++;
|
|
2305
2448
|
const inRadii = Math.abs(e) / Math.max(d2.r, 1);
|
|
@@ -2339,12 +2482,12 @@ function contentExtentOf(boxes) {
|
|
|
2339
2482
|
if (usable.length === 0) return { w: 0, h: 0, source: "none" };
|
|
2340
2483
|
const inFlow = usable.filter((b4) => !b4.floating);
|
|
2341
2484
|
const counted = inFlow.length > 0 ? inFlow : usable;
|
|
2342
|
-
let w2 = 0,
|
|
2485
|
+
let w2 = 0, h3 = 0;
|
|
2343
2486
|
for (const b4 of counted) {
|
|
2344
2487
|
if (b4.right > w2) w2 = b4.right;
|
|
2345
|
-
if (b4.bottom >
|
|
2488
|
+
if (b4.bottom > h3) h3 = b4.bottom;
|
|
2346
2489
|
}
|
|
2347
|
-
return { w: w2, h:
|
|
2490
|
+
return { w: w2, h: h3, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
|
|
2348
2491
|
}
|
|
2349
2492
|
function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
|
|
2350
2493
|
return {
|
|
@@ -2354,8 +2497,8 @@ function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL
|
|
|
2354
2497
|
}
|
|
2355
2498
|
var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
|
|
2356
2499
|
var PHANTOM_FRACTION = 0.95;
|
|
2357
|
-
function isPhantomBox(w2,
|
|
2358
|
-
return w2 > refW * PHANTOM_FRACTION ||
|
|
2500
|
+
function isPhantomBox(w2, h3, refW, refH) {
|
|
2501
|
+
return w2 > refW * PHANTOM_FRACTION || h3 > refH * PHANTOM_FRACTION;
|
|
2359
2502
|
}
|
|
2360
2503
|
var MAX_FRAME_GROW_FACTOR = 20;
|
|
2361
2504
|
function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
|
|
@@ -2654,8 +2797,8 @@ function pinScrolledAxis(container, svg) {
|
|
|
2654
2797
|
}
|
|
2655
2798
|
const pinSvg = doc.createElementNS(SVG_NS2, "svg");
|
|
2656
2799
|
for (const a4 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
|
|
2657
|
-
const
|
|
2658
|
-
if (
|
|
2800
|
+
const v2 = svg.getAttribute(a4);
|
|
2801
|
+
if (v2) pinSvg.setAttribute(a4, v2);
|
|
2659
2802
|
}
|
|
2660
2803
|
const styles = svg.querySelectorAll("style");
|
|
2661
2804
|
for (let i = 0; i < styles.length; i++) pinSvg.appendChild(styles[i].cloneNode(true));
|
|
@@ -2836,10 +2979,10 @@ function parseRGBA(c2) {
|
|
|
2836
2979
|
const s = c2.trim();
|
|
2837
2980
|
const m2 = s.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
|
|
2838
2981
|
if (m2) return [parseFloat(m2[1]), parseFloat(m2[2]), parseFloat(m2[3]), m2[4] !== void 0 ? parseFloat(m2[4]) : 1];
|
|
2839
|
-
let
|
|
2840
|
-
if (
|
|
2841
|
-
if (
|
|
2842
|
-
return [parseInt(
|
|
2982
|
+
let h3 = s.replace(/^#/, "");
|
|
2983
|
+
if (h3.length === 3) h3 = h3.split("").map((ch) => ch + ch).join("");
|
|
2984
|
+
if (h3.length === 6 && /^[0-9a-fA-F]{6}$/.test(h3)) {
|
|
2985
|
+
return [parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16), 1];
|
|
2843
2986
|
}
|
|
2844
2987
|
return null;
|
|
2845
2988
|
}
|
|
@@ -2874,8 +3017,8 @@ var NAMED = {
|
|
|
2874
3017
|
};
|
|
2875
3018
|
function toRGBA(c2) {
|
|
2876
3019
|
if (typeof c2 !== "string") return null;
|
|
2877
|
-
const
|
|
2878
|
-
if (
|
|
3020
|
+
const k3 = c2.trim().toLowerCase();
|
|
3021
|
+
if (k3 in NAMED) return NAMED[k3];
|
|
2879
3022
|
return parseRGBA(c2);
|
|
2880
3023
|
}
|
|
2881
3024
|
function compositeOver(fg, bg) {
|
|
@@ -2887,8 +3030,8 @@ function compositeOver(fg, bg) {
|
|
|
2887
3030
|
];
|
|
2888
3031
|
}
|
|
2889
3032
|
function relativeLuminance(rgb) {
|
|
2890
|
-
const lin = rgb.map((
|
|
2891
|
-
const s =
|
|
3033
|
+
const lin = rgb.map((v2) => {
|
|
3034
|
+
const s = v2 / 255;
|
|
2892
3035
|
return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
|
|
2893
3036
|
});
|
|
2894
3037
|
return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
|
|
@@ -2925,20 +3068,20 @@ var GLYPH_SAMPLE_N = 3;
|
|
|
2925
3068
|
function glyphSampleGrid(box, n = GLYPH_SAMPLE_N) {
|
|
2926
3069
|
const out = [];
|
|
2927
3070
|
if (!box || !(box.width > 0) || !(box.height > 0) || !(n >= 1)) return out;
|
|
2928
|
-
const
|
|
2929
|
-
for (let i = 0; i <
|
|
2930
|
-
for (let
|
|
3071
|
+
const k3 = Math.floor(n);
|
|
3072
|
+
for (let i = 0; i < k3; i++) {
|
|
3073
|
+
for (let j3 = 0; j3 < k3; j3++) {
|
|
2931
3074
|
out.push({
|
|
2932
|
-
x: box.left + box.width * (i + 0.5) /
|
|
2933
|
-
y: box.top + box.height * (
|
|
3075
|
+
x: box.left + box.width * (i + 0.5) / k3,
|
|
3076
|
+
y: box.top + box.height * (j3 + 0.5) / k3
|
|
2934
3077
|
});
|
|
2935
3078
|
}
|
|
2936
3079
|
}
|
|
2937
3080
|
return out;
|
|
2938
3081
|
}
|
|
2939
|
-
function clamp01(
|
|
2940
|
-
if (typeof
|
|
2941
|
-
return Math.max(0, Math.min(1,
|
|
3082
|
+
function clamp01(v2) {
|
|
3083
|
+
if (typeof v2 !== "number" || !isFinite(v2)) return 1;
|
|
3084
|
+
return Math.max(0, Math.min(1, v2));
|
|
2942
3085
|
}
|
|
2943
3086
|
function hexToRGB(hex2) {
|
|
2944
3087
|
const p2 = toRGBA(hex2);
|
|
@@ -3054,31 +3197,31 @@ function applyLabelContrast(container, opts = {}) {
|
|
|
3054
3197
|
const glyphArea = tr.width * tr.height;
|
|
3055
3198
|
const txRoot = paintRoot(tx, container);
|
|
3056
3199
|
let over = 0;
|
|
3057
|
-
const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((
|
|
3058
|
-
if (!(
|
|
3059
|
-
if (drawnBeneath(
|
|
3060
|
-
if (effAlpha(
|
|
3200
|
+
const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x4) => {
|
|
3201
|
+
if (!(x4.ov > 0)) return false;
|
|
3202
|
+
if (drawnBeneath(x4.mk, tx, txRoot)) return true;
|
|
3203
|
+
if (effAlpha(x4.mk) >= PILL_MIN_ALPHA) over++;
|
|
3061
3204
|
return false;
|
|
3062
3205
|
});
|
|
3063
3206
|
if (over > 0) report.paintedOver++;
|
|
3064
3207
|
const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
|
|
3065
3208
|
const painted = pts.map(() => false);
|
|
3066
3209
|
let unmeasured = 0;
|
|
3067
|
-
const under = boxed.map((
|
|
3068
|
-
const mask = backedSamples(
|
|
3210
|
+
const under = boxed.map((x4) => {
|
|
3211
|
+
const mask = backedSamples(x4.mk.el, pts);
|
|
3069
3212
|
if (mask === null) {
|
|
3070
3213
|
unmeasured++;
|
|
3071
|
-
return
|
|
3214
|
+
return x4;
|
|
3072
3215
|
}
|
|
3073
3216
|
let inside = 0;
|
|
3074
|
-
const paints = effAlpha(
|
|
3217
|
+
const paints = effAlpha(x4.mk) >= PILL_MIN_ALPHA;
|
|
3075
3218
|
for (let i = 0; i < mask.length; i++) {
|
|
3076
3219
|
if (!mask[i]) continue;
|
|
3077
3220
|
inside++;
|
|
3078
3221
|
if (paints) painted[i] = true;
|
|
3079
3222
|
}
|
|
3080
|
-
return { mk:
|
|
3081
|
-
}).filter((
|
|
3223
|
+
return { mk: x4.mk, ov: glyphArea * (inside / mask.length) };
|
|
3224
|
+
}).filter((x4) => x4.ov > 0);
|
|
3082
3225
|
if (under.length === 0 && boxed.length > 0) report.offFill++;
|
|
3083
3226
|
if (under.length === 0) continue;
|
|
3084
3227
|
if (unmeasured === 0 && pts.length > 0) {
|
|
@@ -3090,10 +3233,10 @@ function applyLabelContrast(container, opts = {}) {
|
|
|
3090
3233
|
}
|
|
3091
3234
|
}
|
|
3092
3235
|
report.scanned++;
|
|
3093
|
-
const opaqueUnder = under.filter((
|
|
3236
|
+
const opaqueUnder = under.filter((x4) => effAlpha(x4.mk) >= PILL_OPAQUE_ALPHA);
|
|
3094
3237
|
const cellEntry = (opaqueUnder.length ? opaqueUnder : under).reduce((a4, b4) => b4.ov > a4.ov || b4.ov === a4.ov && b4.mk.ord > a4.mk.ord ? b4 : a4);
|
|
3095
3238
|
const cell = cellEntry.mk;
|
|
3096
|
-
const pill = under.find((
|
|
3239
|
+
const pill = under.find((x4) => x4.mk !== cell && isPillBackdropAlpha(effAlpha(x4.mk)) && x4.mk.ord > cell.ord && pillBacksGlyph(x4.ov, glyphArea))?.mk;
|
|
3097
3240
|
const cellRGBA = toRGBA(cell.fill);
|
|
3098
3241
|
let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
|
|
3099
3242
|
if (pill) {
|
|
@@ -3145,7 +3288,7 @@ function sessionViewStateProvider(container) {
|
|
|
3145
3288
|
load: () => store,
|
|
3146
3289
|
save: (next) => {
|
|
3147
3290
|
if (!next || typeof next !== "object") return;
|
|
3148
|
-
for (const
|
|
3291
|
+
for (const k3 of Object.keys(store)) delete store[k3];
|
|
3149
3292
|
Object.assign(store, next);
|
|
3150
3293
|
}
|
|
3151
3294
|
};
|
|
@@ -3154,7 +3297,7 @@ function noopViewStateProvider() {
|
|
|
3154
3297
|
return { load: () => ({}), save: () => {
|
|
3155
3298
|
} };
|
|
3156
3299
|
}
|
|
3157
|
-
var parseRowIdxs = (s) => (s || "").split(",").map((
|
|
3300
|
+
var parseRowIdxs = (s) => (s || "").split(",").map((x4) => parseInt(x4, 10)).filter((n) => Number.isFinite(n));
|
|
3158
3301
|
var D3_PLUGIN_PACKAGES = {
|
|
3159
3302
|
sankey: "d3-sankey",
|
|
3160
3303
|
sankeyLinkHorizontal: "d3-sankey",
|
|
@@ -3184,9 +3327,15 @@ var D3_PLUGIN_PACKAGES = {
|
|
|
3184
3327
|
};
|
|
3185
3328
|
function requiredD3Plugins(code) {
|
|
3186
3329
|
const out = /* @__PURE__ */ new Set();
|
|
3187
|
-
|
|
3188
|
-
|
|
3330
|
+
const body = stripJsComments(String(code || ""));
|
|
3331
|
+
const add = (name) => {
|
|
3332
|
+
const pkg = D3_PLUGIN_PACKAGES[name];
|
|
3189
3333
|
if (pkg) out.add(pkg);
|
|
3334
|
+
};
|
|
3335
|
+
for (const m2 of body.matchAll(/\bd3\s*\.\s*(\w+)/g)) add(m2[1]);
|
|
3336
|
+
for (const m2 of body.matchAll(/\bd3\s*\[\s*['"](\w+)['"]\s*\]/g)) add(m2[1]);
|
|
3337
|
+
for (const m2 of body.matchAll(/\{([^{}]*)\}\s*=\s*d3\b/g)) {
|
|
3338
|
+
for (const part of m2[1].split(",")) add(part.split(":")[0].trim());
|
|
3190
3339
|
}
|
|
3191
3340
|
return [...out].sort();
|
|
3192
3341
|
}
|
|
@@ -3239,7 +3388,7 @@ function compileRenderFn(code, win, doc, d3) {
|
|
|
3239
3388
|
return fn;
|
|
3240
3389
|
}
|
|
3241
3390
|
var ASYNC_RENDER_TIMEOUT_MS = 15e3;
|
|
3242
|
-
var isThenable = (
|
|
3391
|
+
var isThenable = (v2) => !!v2 && (typeof v2 === "object" || typeof v2 === "function") && typeof v2.then === "function";
|
|
3243
3392
|
function createChartHost(container, config) {
|
|
3244
3393
|
const doc = container.ownerDocument;
|
|
3245
3394
|
const win = doc?.defaultView ?? globalThis;
|
|
@@ -3247,7 +3396,7 @@ function createChartHost(container, config) {
|
|
|
3247
3396
|
let data = config.data;
|
|
3248
3397
|
{
|
|
3249
3398
|
const stamped = config.data?.meta?.hostContract;
|
|
3250
|
-
const major = (
|
|
3399
|
+
const major = (v2) => (v2 || "").split(".")[0];
|
|
3251
3400
|
if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
|
|
3252
3401
|
try {
|
|
3253
3402
|
(win?.console ?? console)?.warn(
|
|
@@ -3669,6 +3818,8 @@ export {
|
|
|
3669
3818
|
CONTAINER_SLOT_XF_CLEAR,
|
|
3670
3819
|
CONTAINER_SLOT_INITIAL_XF_MARK,
|
|
3671
3820
|
CONTAINER_SLOT_UI_STATE,
|
|
3821
|
+
VIEW_ONLY_UI_STATE_KEYS,
|
|
3822
|
+
withoutViewOnlyKeys,
|
|
3672
3823
|
HOST_CONTAINER_CLASS,
|
|
3673
3824
|
SELECTION_ACTIVE_CLASS,
|
|
3674
3825
|
MARK_SELECTED_CLASS,
|
|
@@ -3720,6 +3871,7 @@ export {
|
|
|
3720
3871
|
Xt,
|
|
3721
3872
|
qt,
|
|
3722
3873
|
buildRenderPayload,
|
|
3874
|
+
stripJsComments,
|
|
3723
3875
|
createMarkResolver,
|
|
3724
3876
|
ensureCrossfilterHitTargets,
|
|
3725
3877
|
censusMarks,
|