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