@bicharts/chart-host 0.5.117 → 0.5.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-VRFOZUAT.mjs → chunk-7ELYQSF5.mjs} +467 -319
- package/dist/index.mjs +32 -1
- 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/index.d.ts +3 -1
- package/dist/types/pendingGenerate.d.ts +28 -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,17 +419,17 @@ var require_papaparse_min = __commonJS({
|
|
|
419
419
|
var a5 = n2.instanceConfig.complete;
|
|
420
420
|
n2.instanceConfig.complete = function(e4) {
|
|
421
421
|
q4(a5) && a5(e4, n2.file, n2.inputElem), u4();
|
|
422
|
-
},
|
|
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
|
});
|
|
@@ -487,8 +487,8 @@ var MAX_MAP_POINTS_DEFAULT = 2e3;
|
|
|
487
487
|
|
|
488
488
|
// src/deltaE.ts
|
|
489
489
|
function linearise(c2) {
|
|
490
|
-
const
|
|
491
|
-
return
|
|
490
|
+
const v2 = c2 / 255;
|
|
491
|
+
return v2 <= 0.04045 ? v2 / 12.92 : Math.pow((v2 + 0.055) / 1.055, 2.4);
|
|
492
492
|
}
|
|
493
493
|
var Xn = 0.95047;
|
|
494
494
|
var Yn = 1;
|
|
@@ -502,15 +502,15 @@ function rgbToLab(r, g3, b4) {
|
|
|
502
502
|
const R2 = linearise(r), G3 = linearise(g3), B2 = linearise(b4);
|
|
503
503
|
const X2 = 0.4124564 * R2 + 0.3575761 * G3 + 0.1804375 * B2;
|
|
504
504
|
const Y2 = 0.2126729 * R2 + 0.7151522 * G3 + 0.072175 * B2;
|
|
505
|
-
const
|
|
506
|
-
const fx = f(X2 / Xn), fy = f(Y2 / Yn), fz = f(
|
|
505
|
+
const Z2 = 0.0193339 * R2 + 0.119192 * G3 + 0.9503041 * B2;
|
|
506
|
+
const fx = f(X2 / Xn), fy = f(Y2 / Yn), fz = f(Z2 / Zn);
|
|
507
507
|
return { L: 116 * fy - 16, a: 500 * (fx - fy), b: 200 * (fy - fz) };
|
|
508
508
|
}
|
|
509
509
|
function hexToLab(hex2) {
|
|
510
510
|
const m2 = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex2.trim());
|
|
511
511
|
if (!m2) return null;
|
|
512
|
-
const
|
|
513
|
-
return rgbToLab(parseInt(
|
|
512
|
+
const h3 = m2[1].length === 3 ? m2[1][0] + m2[1][0] + m2[1][1] + m2[1][1] + m2[1][2] + m2[1][2] : m2[1];
|
|
513
|
+
return rgbToLab(parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16));
|
|
514
514
|
}
|
|
515
515
|
var RAD = Math.PI / 180;
|
|
516
516
|
var DEG = 180 / Math.PI;
|
|
@@ -560,14 +560,14 @@ function labToHex(lab) {
|
|
|
560
560
|
const fy = (lab.L + 16) / 116, fx = fy + lab.a / 500, fz = fy - lab.b / 200;
|
|
561
561
|
const X2 = Xn * finv(fx);
|
|
562
562
|
const Y2 = Yn * (lab.L > KAPPA * EPS ? fy * fy * fy : lab.L / KAPPA);
|
|
563
|
-
const
|
|
563
|
+
const Z2 = Zn * finv(fz);
|
|
564
564
|
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 *
|
|
565
|
+
3.2404542 * X2 - 1.5371385 * Y2 - 0.4985314 * Z2,
|
|
566
|
+
-0.969266 * X2 + 1.8760108 * Y2 + 0.041556 * Z2,
|
|
567
|
+
0.0556434 * X2 - 0.2040259 * Y2 + 1.0572252 * Z2
|
|
568
568
|
];
|
|
569
|
-
return "#" + lin.map((
|
|
570
|
-
const c2 = Math.max(0, Math.min(1,
|
|
569
|
+
return "#" + lin.map((v2) => {
|
|
570
|
+
const c2 = Math.max(0, Math.min(1, v2));
|
|
571
571
|
const g3 = c2 <= 31308e-7 ? 12.92 * c2 : 1.055 * Math.pow(c2, 1 / 2.4) - 0.055;
|
|
572
572
|
return Math.round(g3 * 255).toString(16).padStart(2, "0");
|
|
573
573
|
}).join("");
|
|
@@ -605,8 +605,8 @@ function toRgb(raw) {
|
|
|
605
605
|
if (!s || s === "none" || s === "transparent") return null;
|
|
606
606
|
const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(s);
|
|
607
607
|
if (hex2) {
|
|
608
|
-
const
|
|
609
|
-
const full =
|
|
608
|
+
const h3 = hex2[1];
|
|
609
|
+
const full = h3.length === 3 ? h3[0] + h3[0] + h3[1] + h3[1] + h3[2] + h3[2] : h3;
|
|
610
610
|
return [
|
|
611
611
|
parseInt(full.slice(0, 2), 16),
|
|
612
612
|
parseInt(full.slice(2, 4), 16),
|
|
@@ -626,7 +626,7 @@ function cellKey(rgb) {
|
|
|
626
626
|
].join(",");
|
|
627
627
|
}
|
|
628
628
|
function hex(rgb) {
|
|
629
|
-
return "#" + rgb.map((
|
|
629
|
+
return "#" + rgb.map((v2) => Math.max(0, Math.min(255, v2)).toString(16).padStart(2, "0")).join("");
|
|
630
630
|
}
|
|
631
631
|
function censusColourSpread(container, doc) {
|
|
632
632
|
if (!container || typeof container.querySelectorAll !== "function") return EMPTY;
|
|
@@ -657,10 +657,10 @@ function censusColourSpread(container, doc) {
|
|
|
657
657
|
for (const { rgb } of counted) {
|
|
658
658
|
marks++;
|
|
659
659
|
distinct.add(rgb.join(","));
|
|
660
|
-
const
|
|
661
|
-
const cur = cells.get(
|
|
660
|
+
const k3 = cellKey(rgb);
|
|
661
|
+
const cur = cells.get(k3);
|
|
662
662
|
if (cur) cur.n++;
|
|
663
|
-
else cells.set(
|
|
663
|
+
else cells.set(k3, { rgb, n: 1 });
|
|
664
664
|
}
|
|
665
665
|
if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
|
|
666
666
|
const top = [...cells.values()].sort((a4, b4) => b4.n - a4.n).slice(0, MAX_CELLS);
|
|
@@ -669,14 +669,14 @@ function censusColourSpread(container, doc) {
|
|
|
669
669
|
const d2 = cs.map(() => new Array(cs.length).fill(0));
|
|
670
670
|
let span = 0, lo = 0, hi = 1;
|
|
671
671
|
for (let i = 0; i < cs.length; i++) {
|
|
672
|
-
for (let
|
|
673
|
-
const
|
|
674
|
-
d2[i][
|
|
675
|
-
d2[
|
|
676
|
-
if (
|
|
677
|
-
span =
|
|
672
|
+
for (let j3 = i + 1; j3 < cs.length; j3++) {
|
|
673
|
+
const v2 = deltaE2000(cs[i], cs[j3]);
|
|
674
|
+
d2[i][j3] = v2;
|
|
675
|
+
d2[j3][i] = v2;
|
|
676
|
+
if (v2 > span) {
|
|
677
|
+
span = v2;
|
|
678
678
|
lo = i;
|
|
679
|
-
hi =
|
|
679
|
+
hi = j3;
|
|
680
680
|
}
|
|
681
681
|
}
|
|
682
682
|
}
|
|
@@ -691,8 +691,8 @@ function censusColourSpread(container, doc) {
|
|
|
691
691
|
let crowd = 0;
|
|
692
692
|
for (let i = 0; i < cs.length; i++) {
|
|
693
693
|
let n = 0;
|
|
694
|
-
for (let
|
|
695
|
-
if (i ===
|
|
694
|
+
for (let j3 = 0; j3 < cs.length; j3++) {
|
|
695
|
+
if (i === j3 || d2[i][j3] <= SAME_SHADE_DELTA_E) n += top[j3].n;
|
|
696
696
|
}
|
|
697
697
|
if (n > crowd) crowd = n;
|
|
698
698
|
}
|
|
@@ -722,8 +722,8 @@ function normHex(raw) {
|
|
|
722
722
|
if (typeof raw !== "string") return null;
|
|
723
723
|
const m2 = HEX.exec(raw.trim());
|
|
724
724
|
if (!m2) return null;
|
|
725
|
-
const
|
|
726
|
-
return "#" +
|
|
725
|
+
const h3 = m2[1].length === 3 ? m2[1].split("").map((c2) => c2 + c2).join("") : m2[1];
|
|
726
|
+
return "#" + h3.toLowerCase();
|
|
727
727
|
}
|
|
728
728
|
function mixLab(a4, b4, t) {
|
|
729
729
|
return { L: a4.L + (b4.L - a4.L) * t, a: a4.a + (b4.a - a4.a) * t, b: a4.b + (b4.b - a4.b) * t };
|
|
@@ -731,7 +731,7 @@ function mixLab(a4, b4, t) {
|
|
|
731
731
|
function paintedOver(fg, canvas, alpha) {
|
|
732
732
|
const f4 = [1, 3, 5].map((i) => parseInt(fg.slice(i, i + 2), 16));
|
|
733
733
|
const c2 = [1, 3, 5].map((i) => parseInt(canvas.slice(i, i + 2), 16));
|
|
734
|
-
const mixed = f4.map((
|
|
734
|
+
const mixed = f4.map((v2, i) => Math.round(v2 * alpha + c2[i] * (1 - alpha))).map((v2) => v2.toString(16).padStart(2, "0"));
|
|
735
735
|
return hexToLab("#" + mixed.join(""));
|
|
736
736
|
}
|
|
737
737
|
function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity = AUTO_RAMP_DRAWN_OPACITY) {
|
|
@@ -739,8 +739,8 @@ function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity
|
|
|
739
739
|
const bg = normHex(canvas);
|
|
740
740
|
if (!lo || !hi || !bg || classes < 2) return NaN;
|
|
741
741
|
let prev = null, min = Infinity;
|
|
742
|
-
for (let
|
|
743
|
-
const painted = paintedOver(labToHex(mixLab(lo, hi,
|
|
742
|
+
for (let k3 = 0; k3 < classes; k3++) {
|
|
743
|
+
const painted = paintedOver(labToHex(mixLab(lo, hi, k3 / (classes - 1))), bg, opacity);
|
|
744
744
|
if (prev) min = Math.min(min, deltaE2000(prev, painted));
|
|
745
745
|
prev = painted;
|
|
746
746
|
}
|
|
@@ -764,15 +764,15 @@ function resolveAutoColorScale(p2) {
|
|
|
764
764
|
};
|
|
765
765
|
const candidates = p2.isHighContrast ? [normHex(p2.themeAccent), normHex(p2.themeFg)] : [...palette.map(normHex), normHex(p2.themeAccent), normHex(p2.themeFg)];
|
|
766
766
|
const accent = candidates.find(usable) ?? FALLBACK_ACCENT;
|
|
767
|
-
const
|
|
767
|
+
const A2 = hexToLab(accent);
|
|
768
768
|
let t = 0.1;
|
|
769
|
-
let low = mixLab(bg,
|
|
769
|
+
let low = mixLab(bg, A2, t);
|
|
770
770
|
while (t < 0.6 && deltaE2000(paintedOver(labToHex(low), canvas, AUTO_RAMP_DRAWN_OPACITY), bg) < SAME_SHADE_DELTA_E) {
|
|
771
771
|
t += 0.02;
|
|
772
|
-
low = mixLab(bg,
|
|
772
|
+
low = mixLab(bg, A2, t);
|
|
773
773
|
}
|
|
774
774
|
const lowHex = labToHex(low);
|
|
775
|
-
let high = { ...
|
|
775
|
+
let high = { ...A2 };
|
|
776
776
|
let highHex = labToHex(high);
|
|
777
777
|
for (let step = 0; step < 80 && autoRampMinStep(lowHex, highHex, canvas) < AUTO_RAMP_MIN_STEP_DELTA_E; step++) {
|
|
778
778
|
const L2 = Math.max(4, Math.min(98, high.L + (darkCanvas ? 1 : -1)));
|
|
@@ -863,20 +863,20 @@ function resolveOptions(p2) {
|
|
|
863
863
|
// never reach a chart as a live mode. Both of these are read on EVERY render, so a
|
|
864
864
|
// reader can change their mind about a cached chart without regenerating it.
|
|
865
865
|
approximatePositions: (() => {
|
|
866
|
-
const
|
|
867
|
-
return
|
|
866
|
+
const v2 = (p2.approximatePositions == null ? "" : String(p2.approximatePositions)).toLowerCase();
|
|
867
|
+
return v2 === "mark" || v2 === "aggregate" || v2 === "skip" ? v2 : APPROXIMATE_POSITIONS_DEFAULT;
|
|
868
868
|
})(),
|
|
869
869
|
valueAxisBaseline: (() => {
|
|
870
|
-
const
|
|
871
|
-
return
|
|
870
|
+
const v2 = (p2.valueAxisBaseline == null ? "" : String(p2.valueAxisBaseline)).toLowerCase();
|
|
871
|
+
return v2 === "zero" || v2 === "fit" || v2 === "auto" ? v2 : VALUE_AXIS_BASELINE_DEFAULT;
|
|
872
872
|
})(),
|
|
873
873
|
// Same shape, and the same reason for it: an unrecognised string must never reach a chart
|
|
874
874
|
// as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
|
|
875
875
|
// the setting that makes the chart PROVE the grid before it names a period, so a garbled
|
|
876
876
|
// value withdraws the claim rather than asserting one.
|
|
877
877
|
seasonalMarkers: (() => {
|
|
878
|
-
const
|
|
879
|
-
return
|
|
878
|
+
const v2 = (p2.seasonalMarkers == null ? "" : String(p2.seasonalMarkers)).toLowerCase();
|
|
879
|
+
return v2 === "auto" || v2 === "always" || v2 === "never" ? v2 : SEASONAL_MARKERS_DEFAULT;
|
|
880
880
|
})(),
|
|
881
881
|
// ---- animation: booleans, default+clamp numerics, "" default enum ----
|
|
882
882
|
animAutoPlay: !!p2.animAutoPlay,
|
|
@@ -944,12 +944,12 @@ var byAsset = /* @__PURE__ */ new Map();
|
|
|
944
944
|
var _na;
|
|
945
945
|
function geoAssetFor(geoKind) {
|
|
946
946
|
if (!geoKind) return null;
|
|
947
|
-
const
|
|
948
|
-
if (/^country/.test(
|
|
949
|
-
if (
|
|
950
|
-
if (
|
|
951
|
-
if (
|
|
952
|
-
if (
|
|
947
|
+
const k3 = geoKind.toLowerCase();
|
|
948
|
+
if (/^country/.test(k3)) return "world";
|
|
949
|
+
if (k3 === "north-america") return "world";
|
|
950
|
+
if (k3 === "world") return "world";
|
|
951
|
+
if (k3 === "us-state-code" || k3 === "us-state-name") return "us-states";
|
|
952
|
+
if (k3 === "us-zip5") return "us-zip3";
|
|
953
953
|
return null;
|
|
954
954
|
}
|
|
955
955
|
var _worldBase;
|
|
@@ -1231,12 +1231,12 @@ function A3(n) {
|
|
|
1231
1231
|
if (f4 && f4.length) {
|
|
1232
1232
|
let d2 = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), R2 = d2 ? u(d2) : "", g3 = d2 ? Y(d2) : null, S = [], m2 = -1;
|
|
1233
1233
|
for (let c2 of f4) {
|
|
1234
|
-
let l = c2.row,
|
|
1235
|
-
if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R2)
|
|
1234
|
+
let l = c2.row, A2 = 0;
|
|
1235
|
+
if (d2 && l.a1 !== "") if (g3 && l.a1 === g3 || u(l.a1) === R2) A2++;
|
|
1236
1236
|
else continue;
|
|
1237
|
-
if (i) if (T(l.cc) === i)
|
|
1237
|
+
if (i) if (T(l.cc) === i) A2++;
|
|
1238
1238
|
else continue;
|
|
1239
|
-
|
|
1239
|
+
A2 > m2 ? (m2 = A2, S = [c2]) : A2 === m2 && S.push(c2);
|
|
1240
1240
|
}
|
|
1241
1241
|
S.some((c2) => c2.primary) && (S = S.filter((c2) => c2.primary));
|
|
1242
1242
|
let p2 = /* @__PURE__ */ new Map();
|
|
@@ -1267,19 +1267,19 @@ var x = 8;
|
|
|
1267
1267
|
function y3(n, e) {
|
|
1268
1268
|
let t = new Array(n.length), o = new Array(n.length), i = new Array(n.length), r = /* @__PURE__ */ new Set(), a4 = [], s = /* @__PURE__ */ new Set(), f4 = [], d2 = /* @__PURE__ */ new Set(), R2 = [], g3 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, S = 0, m2 = 0, p2 = null;
|
|
1269
1269
|
for (let l = 0; l < n.length; ++l) {
|
|
1270
|
-
let
|
|
1270
|
+
let A2 = n[l], C = A3({ ...A2, mapKind: e });
|
|
1271
1271
|
if (S3(C)) {
|
|
1272
1272
|
t[l] = null, o[l] = null, i[l] = null, m2++;
|
|
1273
|
-
let M2 = K(
|
|
1273
|
+
let M2 = K(A2);
|
|
1274
1274
|
M2 && !d2.has(M2.toLowerCase()) && (d2.add(M2.toLowerCase()), R2.length < x && R2.push(M2));
|
|
1275
1275
|
} else if (C) {
|
|
1276
1276
|
if (t[l] = C.lat, o[l] = C.lon, i[l] = C.precision, S++, g3[C.precision]++, (p2 === null || G[C.precision] > G[p2]) && (p2 = C.precision), G[C.precision] > G.city) {
|
|
1277
|
-
let M2 = K(
|
|
1277
|
+
let M2 = K(A2);
|
|
1278
1278
|
M2 && !s.has(M2.toLowerCase()) && (s.add(M2.toLowerCase()), f4.length < x && f4.push(M2));
|
|
1279
1279
|
}
|
|
1280
1280
|
} else {
|
|
1281
1281
|
t[l] = null, o[l] = null, i[l] = null;
|
|
1282
|
-
let M2 = K(
|
|
1282
|
+
let M2 = K(A2);
|
|
1283
1283
|
M2 && !r.has(M2.toLowerCase()) && (r.add(M2.toLowerCase()), a4.push(M2));
|
|
1284
1284
|
}
|
|
1285
1285
|
}
|
|
@@ -1425,10 +1425,10 @@ function It(n, s) {
|
|
|
1425
1425
|
return s === "us-zip5" ? w.has(n.slice(0, 3)) : true;
|
|
1426
1426
|
}
|
|
1427
1427
|
function Wt(n, s) {
|
|
1428
|
-
let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M2 = [],
|
|
1428
|
+
let i = new Array(n.length), r = /* @__PURE__ */ new Set(), M2 = [], h3 = 0;
|
|
1429
1429
|
for (let N2 = 0; N2 < n.length; ++N2) {
|
|
1430
|
-
let I2 = Mt(n[N2], s),
|
|
1431
|
-
if (i[N2] =
|
|
1430
|
+
let I2 = Mt(n[N2], s), O3 = I2 !== null && It(I2, s) ? I2 : null;
|
|
1431
|
+
if (i[N2] = O3, O3 !== null) h3++;
|
|
1432
1432
|
else {
|
|
1433
1433
|
let d2 = n[N2];
|
|
1434
1434
|
if (d2 != null) {
|
|
@@ -1440,10 +1440,10 @@ function Wt(n, s) {
|
|
|
1440
1440
|
}
|
|
1441
1441
|
}
|
|
1442
1442
|
}
|
|
1443
|
-
return { iso: i, unmatched: M2, matchedRows:
|
|
1443
|
+
return { iso: i, unmatched: M2, matchedRows: h3, totalRows: n.length };
|
|
1444
1444
|
}
|
|
1445
1445
|
|
|
1446
|
-
// ../shape-core/dist/chunk-
|
|
1446
|
+
// ../shape-core/dist/chunk-NY26PXWD.mjs
|
|
1447
1447
|
var import_papaparse = __toESM(require_papaparse_min(), 1);
|
|
1448
1448
|
/*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
|
|
1449
1449
|
var Se = { "north-america": "AG AI AW BB BL BM BQ BS BZ CA CR CU CW DM DO GD GL GP GT HN HT JM KN KY LC MF MQ MS MX NI PA PM PR SV SX TC TT US VC VG VI", "south-america": "AR BO BR CL CO EC FK GF GY PE PY SR UY VE", europe: "AD AL AT AX BA BE BG BY CH CY CZ DE DK EE ES FI FO FR GB GG GI GR HR HU IE IM IS IT JE LI LT LU LV MC MD ME MK MT NL NO PL PT RO RS RU SE SI SJ SK SM UA VA", africa: "AO BF BI BJ BW CD CF CG CI CM CV DJ DZ EG EH ER ET GA GH GM GN GQ GW KE KM LR LS LY MA MG ML MR MU MW MZ NA NE NG RE RW SC SD SH SL SN SO SS ST SZ TD TG TN TZ UG YT ZA ZM ZW", asia: "AE AF AM AZ BD BH BN BT CC CN CX GE HK ID IL IN IO IQ IR JO JP KG KH KP KR KW KZ LA LB LK MM MN MO MV MY NP OM PH PK PS QA SA SG SY TH TJ TL TM TR TW UZ VN YE", oceania: "AS AU CK FJ FM GU KI MH MP NC NF NR NU NZ PF PG PN PW SB TK TO TV UM VU WF WS", antarctica: "AQ BV GS HM TF" };
|
|
@@ -1550,51 +1550,51 @@ var ct2 = new RegExp([String.raw`\bisMeasure\b`, String.raw`\bdataType\b`, Strin
|
|
|
1550
1550
|
|
|
1551
1551
|
// ../shape-core/dist/index.mjs
|
|
1552
1552
|
/*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
|
|
1553
|
-
var
|
|
1554
|
-
var
|
|
1555
|
-
function
|
|
1553
|
+
var G2 = 2;
|
|
1554
|
+
var q3 = 400;
|
|
1555
|
+
function O2(i) {
|
|
1556
1556
|
return !!E(i);
|
|
1557
1557
|
}
|
|
1558
|
-
function
|
|
1558
|
+
function A(i) {
|
|
1559
1559
|
let n = /* @__PURE__ */ new Set();
|
|
1560
1560
|
for (let t of i) {
|
|
1561
1561
|
if (t == null) continue;
|
|
1562
|
-
let
|
|
1563
|
-
if (!V(
|
|
1562
|
+
let r = u(String(t));
|
|
1563
|
+
if (!V(r) && !n.has(r) && (n.add(r), n.size >= q3)) break;
|
|
1564
1564
|
}
|
|
1565
1565
|
return Array.from(n);
|
|
1566
1566
|
}
|
|
1567
|
-
function
|
|
1568
|
-
let n =
|
|
1569
|
-
if (n.length === 0 ||
|
|
1570
|
-
let t = n.filter((
|
|
1571
|
-
return t >= 1 && t >=
|
|
1567
|
+
function x3(i) {
|
|
1568
|
+
let n = A(i);
|
|
1569
|
+
if (n.length === 0 || E2(i) < 95) return false;
|
|
1570
|
+
let t = n.filter((c2) => O2(c2) && !Y(c2)).length, r = n.filter((c2) => !O2(c2) && !!Y(c2)).length;
|
|
1571
|
+
return t >= 1 && t >= r;
|
|
1572
1572
|
}
|
|
1573
1573
|
function W2(i, n) {
|
|
1574
1574
|
if (!Y(i)) return false;
|
|
1575
1575
|
let t = E(i);
|
|
1576
1576
|
return t ? n === "world" ? true : s3.has(t) : false;
|
|
1577
1577
|
}
|
|
1578
|
-
function
|
|
1579
|
-
let n =
|
|
1578
|
+
function E2(i) {
|
|
1579
|
+
let n = A(i);
|
|
1580
1580
|
if (n.length === 0) return 0;
|
|
1581
1581
|
let t = 0;
|
|
1582
|
-
for (let
|
|
1582
|
+
for (let r of n) O2(r) && t++;
|
|
1583
1583
|
return Math.round(t / n.length * 1e3) / 10;
|
|
1584
1584
|
}
|
|
1585
|
-
function
|
|
1586
|
-
let n =
|
|
1585
|
+
function _2(i) {
|
|
1586
|
+
let n = A(i);
|
|
1587
1587
|
if (n.length === 0) return 0;
|
|
1588
1588
|
let t = 0;
|
|
1589
|
-
for (let
|
|
1589
|
+
for (let r of n) Y(r) && t++;
|
|
1590
1590
|
return Math.round(t / n.length * 1e3) / 10;
|
|
1591
1591
|
}
|
|
1592
1592
|
function $2(i) {
|
|
1593
1593
|
let n = /* @__PURE__ */ new Set();
|
|
1594
1594
|
for (let t of i) {
|
|
1595
1595
|
if (t == null) continue;
|
|
1596
|
-
let
|
|
1597
|
-
if (!V(u(
|
|
1596
|
+
let r = String(t).trim();
|
|
1597
|
+
if (!V(u(r)) && !n.has(r) && (n.add(r), n.size >= q3)) break;
|
|
1598
1598
|
}
|
|
1599
1599
|
return Array.from(n);
|
|
1600
1600
|
}
|
|
@@ -1602,95 +1602,95 @@ function z2(i) {
|
|
|
1602
1602
|
let n = $2(i);
|
|
1603
1603
|
if (n.length === 0) return 0;
|
|
1604
1604
|
let t = 0;
|
|
1605
|
-
for (let
|
|
1605
|
+
for (let r of n) Z(r).length > 0 && t++;
|
|
1606
1606
|
return Math.round(t / n.length * 1e3) / 10;
|
|
1607
1607
|
}
|
|
1608
|
-
function
|
|
1608
|
+
function j2(i, n) {
|
|
1609
1609
|
return y2(n, rt) ? true : $2(i).some((t) => /^\d{5}(-\d{4})?$/.test(t.replace(/\.0+$/, "")));
|
|
1610
1610
|
}
|
|
1611
|
-
function
|
|
1612
|
-
let t =
|
|
1611
|
+
function yt2(i, n) {
|
|
1612
|
+
let t = A(i);
|
|
1613
1613
|
if (t.length === 0) return 0;
|
|
1614
|
-
let
|
|
1615
|
-
for (let
|
|
1616
|
-
return Math.round(
|
|
1614
|
+
let r = 0;
|
|
1615
|
+
for (let c2 of t) p3(c2, n) && r++;
|
|
1616
|
+
return Math.round(r / t.length * 1e3) / 10;
|
|
1617
1617
|
}
|
|
1618
|
-
function
|
|
1618
|
+
function k2(i, n) {
|
|
1619
1619
|
let t = 0;
|
|
1620
|
-
for (let
|
|
1620
|
+
for (let r of A(i)) n(r) && t++;
|
|
1621
1621
|
return t;
|
|
1622
1622
|
}
|
|
1623
|
-
function
|
|
1623
|
+
function Ct(i, n) {
|
|
1624
1624
|
let t = 0;
|
|
1625
|
-
for (let
|
|
1625
|
+
for (let r of $2(i)) n(r) && t++;
|
|
1626
1626
|
return t;
|
|
1627
1627
|
}
|
|
1628
|
-
function
|
|
1629
|
-
let
|
|
1628
|
+
function ht(i, n, t, r, c2) {
|
|
1629
|
+
let l = [], a4 = [], o = {}, R2 = {}, h3 = new Set(i), f4 = (e) => n.map((s) => s[e]);
|
|
1630
1630
|
for (let e of ["city", "country"]) {
|
|
1631
|
-
let
|
|
1632
|
-
|
|
1631
|
+
let s = t?.[e];
|
|
1632
|
+
s && h3.has(s) && (o[e] = s);
|
|
1633
1633
|
}
|
|
1634
|
-
let
|
|
1634
|
+
let Y2 = new Set(c2 ?? i);
|
|
1635
1635
|
for (let e of ["lat", "lon"]) {
|
|
1636
|
-
let
|
|
1637
|
-
|
|
1636
|
+
let s = t?.[e];
|
|
1637
|
+
s && Y2.has(s) && (o[e] = s);
|
|
1638
1638
|
}
|
|
1639
|
-
let
|
|
1640
|
-
if (
|
|
1641
|
-
let e =
|
|
1642
|
-
|
|
1639
|
+
let g3 = t?.zip;
|
|
1640
|
+
if (g3 && h3.has(g3)) {
|
|
1641
|
+
let e = f4(g3), s = z2(e);
|
|
1642
|
+
s < 95 ? a4.push(`zip=${g3} (only ${s}% of values read as ZIPs)`) : j2(e, g3) ? o.zip = g3 : a4.push(`zip=${g3} (all values are 3-4 digits with nothing to say they are postal)`);
|
|
1643
1643
|
}
|
|
1644
|
-
let
|
|
1645
|
-
if (
|
|
1646
|
-
let e =
|
|
1647
|
-
|
|
1644
|
+
let p2 = t?.state;
|
|
1645
|
+
if (p2 && h3.has(p2)) {
|
|
1646
|
+
let e = f4(p2), s = A(e);
|
|
1647
|
+
s.length > 0 && s.every((u2) => W2(u2, r)) ? a4.push(`state=${p2} (every value is "CA", which is both Canada and California)`) : x3(e) ? (a4.push(`state=${p2} (every value is a country, not a state)`), o.country || (o.country = p2)) : _2(e) < 95 ? a4.push(`state=${p2} (only ${_2(e)}% of values are states/provinces)`) : o.state = p2;
|
|
1648
1648
|
}
|
|
1649
|
-
let
|
|
1649
|
+
let y5 = new Set(Object.values(o).filter(Boolean)), S = i.filter((e) => !y5.has(e) && !e.startsWith("__"));
|
|
1650
1650
|
if (!o.state) {
|
|
1651
1651
|
let e = null;
|
|
1652
|
-
for (let
|
|
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,
|
|
1652
|
+
for (let s of S) {
|
|
1653
|
+
let u2 = f4(s);
|
|
1654
|
+
if (x3(u2)) continue;
|
|
1655
|
+
let m2 = _2(u2);
|
|
1656
|
+
if (m2 < 95) continue;
|
|
1657
|
+
let w2 = k2(u2, (T3) => !!Y(T3)), Q3 = k2(u2, (T3) => !!Y(T3) && !W2(T3, r));
|
|
1658
|
+
w2 < G2 && Q3 < 1 || (!e || m2 > e.pct) && (e = { name: s, pct: m2 });
|
|
1659
|
+
}
|
|
1660
|
+
e && (o.state = e.name, y5.add(e.name), l.push(`state=${e.name} (${e.pct}% states/provinces)`));
|
|
1661
|
+
}
|
|
1662
|
+
if (!o.zip) for (let e of S) {
|
|
1663
|
+
if (y5.has(e)) continue;
|
|
1664
|
+
let s = f4(e), u2 = z2(s);
|
|
1665
|
+
if (!(u2 < 95) && j2(s, e) && !(Ct(s, (m2) => Z(m2).length > 0) < G2)) {
|
|
1666
|
+
o.zip = e, y5.add(e), l.push(`zip=${e} (${u2}% ZIP codes)`);
|
|
1667
1667
|
break;
|
|
1668
1668
|
}
|
|
1669
1669
|
}
|
|
1670
|
-
let
|
|
1671
|
-
if (!
|
|
1670
|
+
let P2 = o.country;
|
|
1671
|
+
if (!P2 || !x3(f4(P2))) {
|
|
1672
1672
|
let e = null;
|
|
1673
|
-
for (let
|
|
1674
|
-
if (
|
|
1675
|
-
let
|
|
1676
|
-
(!e ||
|
|
1673
|
+
for (let s of S) {
|
|
1674
|
+
if (y5.has(s) || !x3(f4(s))) continue;
|
|
1675
|
+
let u2 = E2(f4(s));
|
|
1676
|
+
(!e || u2 > e.pct) && (e = { name: s, pct: u2 });
|
|
1677
1677
|
}
|
|
1678
|
-
e && (
|
|
1678
|
+
e && (P2 && (a4.push(`country=${P2} (only ${E2(f4(P2))}% of values are country identifiers; using ${e.name} instead)`), R2.country = P2), o.country = e.name, y5.add(e.name), l.push(`country=${e.name}`));
|
|
1679
1679
|
}
|
|
1680
1680
|
if (!o.city) {
|
|
1681
1681
|
let e = null;
|
|
1682
|
-
for (let
|
|
1683
|
-
if (
|
|
1684
|
-
let
|
|
1685
|
-
|
|
1682
|
+
for (let s of S) {
|
|
1683
|
+
if (y5.has(s)) continue;
|
|
1684
|
+
let u2 = f4(s), m2 = yt2(u2, r);
|
|
1685
|
+
m2 < m3 || k2(u2, (w2) => p3(w2, r)) < G2 || (!e || m2 > e.pct) && (e = { name: s, pct: m2 });
|
|
1686
1686
|
}
|
|
1687
|
-
e && (o.city = e.name,
|
|
1687
|
+
e && (o.city = e.name, l.push(`city=${e.name} (${e.pct}% known cities)`));
|
|
1688
1688
|
}
|
|
1689
|
-
let B2 = o.country ?
|
|
1690
|
-
let
|
|
1691
|
-
return isFinite(
|
|
1689
|
+
let B2 = o.country ? f4(o.country) : [], D3 = !!o.country && x3(B2), J2 = D3 ? new Set(B2.map((e) => E(e == null ? null : String(e))).filter(Boolean)).size : 0, H2 = D3 && J2 >= 2, L2 = !!(o.lat && o.lon) && n.some((e) => {
|
|
1690
|
+
let s = +String(e[o.lat] ?? "").trim(), u2 = +String(e[o.lon] ?? "").trim();
|
|
1691
|
+
return isFinite(s) && isFinite(u2) && s >= -90 && s <= 90 && u2 >= -180 && u2 <= 180 && String(e[o.lat] ?? "").trim() !== "" && String(e[o.lon] ?? "").trim() !== "";
|
|
1692
1692
|
});
|
|
1693
|
-
return o.lat && o.lon && !
|
|
1693
|
+
return o.lat && o.lon && !L2 && a4.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`), o.country && !H2 && !(o.city || o.state || o.zip || L2) && a4.push(D3 ? `country=${o.country} (every row resolves to the same country - nothing to place apart)` : `country=${o.country} (values are not country identifiers)`), { bind: !!(o.city || o.state || o.zip || H2 || L2) ? o : null, backfilled: l, refused: a4, ...Object.keys(R2).length ? { labelFallback: R2 } : {} };
|
|
1694
1694
|
}
|
|
1695
1695
|
|
|
1696
1696
|
// src/payload.ts
|
|
@@ -1705,7 +1705,7 @@ function resolvePointChannel(cols, rowObjs, point) {
|
|
|
1705
1705
|
let labelCol;
|
|
1706
1706
|
if (bind) {
|
|
1707
1707
|
const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
|
|
1708
|
-
const res =
|
|
1708
|
+
const res = ht(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
|
|
1709
1709
|
bind = res.bind;
|
|
1710
1710
|
rolesBackfilled = res.backfilled;
|
|
1711
1711
|
rolesRefused = res.refused;
|
|
@@ -1793,27 +1793,27 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
|
|
|
1793
1793
|
const row = rowObjs[r];
|
|
1794
1794
|
const a4 = new Array(cols.length + extra);
|
|
1795
1795
|
for (let c2 = 0; c2 < cols.length; c2++) {
|
|
1796
|
-
const
|
|
1797
|
-
if (
|
|
1798
|
-
a4[c2] =
|
|
1796
|
+
const v2 = row[colNames[c2]];
|
|
1797
|
+
if (v2 instanceof Date) {
|
|
1798
|
+
a4[c2] = v2.toISOString();
|
|
1799
1799
|
} else {
|
|
1800
|
-
a4[c2] =
|
|
1800
|
+
a4[c2] = v2 ?? null;
|
|
1801
1801
|
}
|
|
1802
1802
|
}
|
|
1803
|
-
let
|
|
1804
|
-
a4[
|
|
1805
|
-
if (geoIso) a4[
|
|
1803
|
+
let k3 = cols.length;
|
|
1804
|
+
a4[k3++] = r;
|
|
1805
|
+
if (geoIso) a4[k3++] = geoIso[r];
|
|
1806
1806
|
if (pLat && pLon) {
|
|
1807
|
-
a4[
|
|
1808
|
-
a4[
|
|
1809
|
-
a4[
|
|
1807
|
+
a4[k3++] = pLat[r];
|
|
1808
|
+
a4[k3++] = pLon[r];
|
|
1809
|
+
a4[k3++] = pPrec ? pPrec[r] : null;
|
|
1810
1810
|
}
|
|
1811
1811
|
if (dLat && dLon) {
|
|
1812
|
-
a4[
|
|
1813
|
-
a4[
|
|
1814
|
-
a4[
|
|
1812
|
+
a4[k3++] = dLat[r];
|
|
1813
|
+
a4[k3++] = dLon[r];
|
|
1814
|
+
a4[k3++] = dPrec ? dPrec[r] : null;
|
|
1815
1815
|
}
|
|
1816
|
-
for (const ac of aliasCols) a4[
|
|
1816
|
+
for (const ac of aliasCols) a4[k3++] = a4[ac.from];
|
|
1817
1817
|
out[r] = a4;
|
|
1818
1818
|
}
|
|
1819
1819
|
const colsOut = [...cols, { name: "__rowIdx__", dataType: "Integer", isMeasure: false, modelDesc: "" }];
|
|
@@ -1848,6 +1848,141 @@ function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
|
|
|
1848
1848
|
};
|
|
1849
1849
|
}
|
|
1850
1850
|
|
|
1851
|
+
// src/codeComments.ts
|
|
1852
|
+
function stripJsComments(code) {
|
|
1853
|
+
const src = String(code ?? "");
|
|
1854
|
+
const n = src.length;
|
|
1855
|
+
let out = "";
|
|
1856
|
+
let i = 0;
|
|
1857
|
+
const templates = [];
|
|
1858
|
+
let prevSig = "";
|
|
1859
|
+
let prevWord = "";
|
|
1860
|
+
let wordOpen = false;
|
|
1861
|
+
const regexMayFollow = () => {
|
|
1862
|
+
if (prevSig === "") return true;
|
|
1863
|
+
if ("(,=:[!&|?{};+-*%<>~^".includes(prevSig)) return true;
|
|
1864
|
+
return /^(return|typeof|instanceof|in|of|new|delete|void|throw|case|do|else|yield|await)$/.test(prevWord);
|
|
1865
|
+
};
|
|
1866
|
+
while (i < n) {
|
|
1867
|
+
const ch = src[i];
|
|
1868
|
+
const next = i + 1 < n ? src[i + 1] : "";
|
|
1869
|
+
const top = templates.length > 0 ? templates[templates.length - 1] : null;
|
|
1870
|
+
if (top === -1) {
|
|
1871
|
+
if (ch === "\\") {
|
|
1872
|
+
out += src.slice(i, i + 2);
|
|
1873
|
+
i += 2;
|
|
1874
|
+
continue;
|
|
1875
|
+
}
|
|
1876
|
+
if (ch === "`") {
|
|
1877
|
+
templates.pop();
|
|
1878
|
+
out += ch;
|
|
1879
|
+
i++;
|
|
1880
|
+
prevSig = "`";
|
|
1881
|
+
prevWord = "";
|
|
1882
|
+
wordOpen = false;
|
|
1883
|
+
continue;
|
|
1884
|
+
}
|
|
1885
|
+
if (ch === "$" && next === "{") {
|
|
1886
|
+
templates[templates.length - 1] = 0;
|
|
1887
|
+
out += "${";
|
|
1888
|
+
i += 2;
|
|
1889
|
+
prevSig = "{";
|
|
1890
|
+
prevWord = "";
|
|
1891
|
+
wordOpen = false;
|
|
1892
|
+
continue;
|
|
1893
|
+
}
|
|
1894
|
+
out += ch;
|
|
1895
|
+
i++;
|
|
1896
|
+
continue;
|
|
1897
|
+
}
|
|
1898
|
+
if (ch === "/" && next === "/") {
|
|
1899
|
+
let j3 = i + 2;
|
|
1900
|
+
while (j3 < n && src[j3] !== "\n" && src[j3] !== "\r") j3++;
|
|
1901
|
+
out += " ";
|
|
1902
|
+
i = j3;
|
|
1903
|
+
wordOpen = false;
|
|
1904
|
+
continue;
|
|
1905
|
+
}
|
|
1906
|
+
if (ch === "/" && next === "*") {
|
|
1907
|
+
const end = src.indexOf("*/", i + 2);
|
|
1908
|
+
const body = end < 0 ? src.slice(i + 2) : src.slice(i + 2, end);
|
|
1909
|
+
const newlines = body.match(/\r\n|\r|\n/g);
|
|
1910
|
+
out += newlines ? newlines.join("") : " ";
|
|
1911
|
+
i = end < 0 ? n : end + 2;
|
|
1912
|
+
wordOpen = false;
|
|
1913
|
+
continue;
|
|
1914
|
+
}
|
|
1915
|
+
if (ch === "'" || ch === '"') {
|
|
1916
|
+
let j3 = i + 1;
|
|
1917
|
+
while (j3 < n && src[j3] !== ch && src[j3] !== "\n") j3 += src[j3] === "\\" ? 2 : 1;
|
|
1918
|
+
out += src.slice(i, Math.min(j3 + 1, n));
|
|
1919
|
+
i = j3 + 1;
|
|
1920
|
+
prevSig = ch;
|
|
1921
|
+
prevWord = "";
|
|
1922
|
+
wordOpen = false;
|
|
1923
|
+
continue;
|
|
1924
|
+
}
|
|
1925
|
+
if (ch === "`") {
|
|
1926
|
+
templates.push(-1);
|
|
1927
|
+
out += ch;
|
|
1928
|
+
i++;
|
|
1929
|
+
wordOpen = false;
|
|
1930
|
+
continue;
|
|
1931
|
+
}
|
|
1932
|
+
if (ch === "/" && regexMayFollow()) {
|
|
1933
|
+
let j3 = i + 1, inClass = false;
|
|
1934
|
+
while (j3 < n && src[j3] !== "\n") {
|
|
1935
|
+
const c2 = src[j3];
|
|
1936
|
+
if (c2 === "\\") {
|
|
1937
|
+
j3 += 2;
|
|
1938
|
+
continue;
|
|
1939
|
+
}
|
|
1940
|
+
if (c2 === "[") inClass = true;
|
|
1941
|
+
else if (c2 === "]") inClass = false;
|
|
1942
|
+
else if (c2 === "/" && !inClass) break;
|
|
1943
|
+
j3++;
|
|
1944
|
+
}
|
|
1945
|
+
if (j3 < n && src[j3] === "/") {
|
|
1946
|
+
j3++;
|
|
1947
|
+
while (j3 < n && /[A-Za-z]/.test(src[j3])) j3++;
|
|
1948
|
+
out += src.slice(i, j3);
|
|
1949
|
+
i = j3;
|
|
1950
|
+
prevSig = "/";
|
|
1951
|
+
prevWord = "";
|
|
1952
|
+
wordOpen = false;
|
|
1953
|
+
continue;
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1956
|
+
if (top !== null && top >= 0) {
|
|
1957
|
+
if (ch === "{") templates[templates.length - 1] = top + 1;
|
|
1958
|
+
else if (ch === "}") {
|
|
1959
|
+
if (top === 0) {
|
|
1960
|
+
templates[templates.length - 1] = -1;
|
|
1961
|
+
out += ch;
|
|
1962
|
+
i++;
|
|
1963
|
+
continue;
|
|
1964
|
+
}
|
|
1965
|
+
templates[templates.length - 1] = top - 1;
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1968
|
+
out += ch;
|
|
1969
|
+
i++;
|
|
1970
|
+
if (/\s/.test(ch)) {
|
|
1971
|
+
wordOpen = false;
|
|
1972
|
+
} else {
|
|
1973
|
+
if (/[A-Za-z0-9_$]/.test(ch)) {
|
|
1974
|
+
prevWord = wordOpen ? prevWord + ch : ch;
|
|
1975
|
+
wordOpen = true;
|
|
1976
|
+
} else {
|
|
1977
|
+
prevWord = "";
|
|
1978
|
+
wordOpen = false;
|
|
1979
|
+
}
|
|
1980
|
+
prevSig = ch;
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
return out;
|
|
1984
|
+
}
|
|
1985
|
+
|
|
1851
1986
|
// src/selection.ts
|
|
1852
1987
|
function createMarkResolver(env) {
|
|
1853
1988
|
const { root, doc, log } = env;
|
|
@@ -1872,7 +2007,7 @@ function createMarkResolver(env) {
|
|
|
1872
2007
|
const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
|
|
1873
2008
|
return s === "transparent" || s === "none" || so <= 0.01;
|
|
1874
2009
|
};
|
|
1875
|
-
const distToPathCenterline = (el,
|
|
2010
|
+
const distToPathCenterline = (el, x4, y5) => {
|
|
1876
2011
|
const L2 = el.getTotalLength();
|
|
1877
2012
|
if (!(L2 > 0)) return Number.MAX_VALUE;
|
|
1878
2013
|
const m2 = el.getScreenCTM();
|
|
@@ -1881,17 +2016,17 @@ function createMarkResolver(env) {
|
|
|
1881
2016
|
const N2 = 64;
|
|
1882
2017
|
for (let i = 0; i <= N2; i++) {
|
|
1883
2018
|
const pt = el.getPointAtLength(L2 * i / N2);
|
|
1884
|
-
const dx = m2.a * pt.x + m2.c * pt.y + m2.e -
|
|
2019
|
+
const dx = m2.a * pt.x + m2.c * pt.y + m2.e - x4;
|
|
1885
2020
|
const dy = m2.b * pt.x + m2.d * pt.y + m2.f - y5;
|
|
1886
2021
|
const d2 = dx * dx + dy * dy;
|
|
1887
2022
|
if (d2 < best) best = d2;
|
|
1888
2023
|
}
|
|
1889
2024
|
return Math.sqrt(best);
|
|
1890
2025
|
};
|
|
1891
|
-
const refineHitCorridor = (mark,
|
|
2026
|
+
const refineHitCorridor = (mark, x4, y5, sel) => {
|
|
1892
2027
|
try {
|
|
1893
2028
|
if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
|
|
1894
|
-
const stack = doc.elementsFromPoint(
|
|
2029
|
+
const stack = doc.elementsFromPoint(x4, y5);
|
|
1895
2030
|
const candidates = [];
|
|
1896
2031
|
for (const el of stack) {
|
|
1897
2032
|
if (!root.contains(el)) continue;
|
|
@@ -1905,7 +2040,7 @@ function createMarkResolver(env) {
|
|
|
1905
2040
|
let best = mark;
|
|
1906
2041
|
let bestD = Number.MAX_VALUE;
|
|
1907
2042
|
for (const el of candidates) {
|
|
1908
|
-
const d2 = distToPathCenterline(el,
|
|
2043
|
+
const d2 = distToPathCenterline(el, x4, y5);
|
|
1909
2044
|
if (d2 < bestD) {
|
|
1910
2045
|
bestD = d2;
|
|
1911
2046
|
best = el;
|
|
@@ -1942,9 +2077,9 @@ function createMarkResolver(env) {
|
|
|
1942
2077
|
}
|
|
1943
2078
|
return out;
|
|
1944
2079
|
};
|
|
1945
|
-
const penetrateOverlayAt = (
|
|
2080
|
+
const penetrateOverlayAt = (x4, y5, sel) => {
|
|
1946
2081
|
try {
|
|
1947
|
-
const stack = doc.elementsFromPoint(
|
|
2082
|
+
const stack = doc.elementsFromPoint(x4, y5);
|
|
1948
2083
|
for (const el of stack) {
|
|
1949
2084
|
if (!root.contains(el) || !isElement(el)) continue;
|
|
1950
2085
|
const cand = el.matches(sel) ? el : el.closest(sel);
|
|
@@ -1956,7 +2091,7 @@ function createMarkResolver(env) {
|
|
|
1956
2091
|
}
|
|
1957
2092
|
return null;
|
|
1958
2093
|
};
|
|
1959
|
-
const resolveByGeometry = (
|
|
2094
|
+
const resolveByGeometry = (x4, y5, sel) => {
|
|
1960
2095
|
try {
|
|
1961
2096
|
const cands = root.querySelectorAll(sel);
|
|
1962
2097
|
let best = null, bestArea = Number.MAX_VALUE;
|
|
@@ -1965,7 +2100,7 @@ function createMarkResolver(env) {
|
|
|
1965
2100
|
if (!el.getAttribute("data-row-idx")) continue;
|
|
1966
2101
|
const r = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
|
|
1967
2102
|
if (!r || r.width <= 0 || r.height <= 0) continue;
|
|
1968
|
-
if (
|
|
2103
|
+
if (x4 < r.left || x4 > r.right || y5 < r.top || y5 > r.bottom) continue;
|
|
1969
2104
|
const area = r.width * r.height;
|
|
1970
2105
|
if (area < bestArea) {
|
|
1971
2106
|
bestArea = area;
|
|
@@ -2201,9 +2336,9 @@ var VALUE_AXIS_MIN_FIT = 0.8;
|
|
|
2201
2336
|
var MIN_AXIS_SPAN_PX = 40;
|
|
2202
2337
|
var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
|
|
2203
2338
|
function num(el, name) {
|
|
2204
|
-
const
|
|
2205
|
-
if (
|
|
2206
|
-
return parseFloat(String(
|
|
2339
|
+
const v2 = el.getAttribute?.(name);
|
|
2340
|
+
if (v2 === null || v2 === void 0 || String(v2).trim() === "") return NaN;
|
|
2341
|
+
return parseFloat(String(v2));
|
|
2207
2342
|
}
|
|
2208
2343
|
function median(xs) {
|
|
2209
2344
|
if (!xs.length) return NaN;
|
|
@@ -2211,15 +2346,15 @@ function median(xs) {
|
|
|
2211
2346
|
const m2 = s.length >> 1;
|
|
2212
2347
|
return s.length % 2 ? s[m2] : (s[m2 - 1] + s[m2]) / 2;
|
|
2213
2348
|
}
|
|
2214
|
-
function robustLine(
|
|
2215
|
-
const n =
|
|
2349
|
+
function robustLine(v2, pos) {
|
|
2350
|
+
const n = v2.length;
|
|
2216
2351
|
const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
|
|
2217
2352
|
const idx = [];
|
|
2218
2353
|
for (let i = 0; i < n; i += step) idx.push(i);
|
|
2219
2354
|
const slopes = [];
|
|
2220
2355
|
for (let p2 = 0; p2 < idx.length; p2++) {
|
|
2221
2356
|
for (let q4 = p2 + 1; q4 < idx.length; q4++) {
|
|
2222
|
-
const dv =
|
|
2357
|
+
const dv = v2[idx[q4]] - v2[idx[p2]];
|
|
2223
2358
|
if (Math.abs(dv) < 1e-12) continue;
|
|
2224
2359
|
slopes.push((pos[idx[q4]] - pos[idx[p2]]) / dv);
|
|
2225
2360
|
}
|
|
@@ -2227,7 +2362,7 @@ function robustLine(v3, pos) {
|
|
|
2227
2362
|
if (slopes.length < 3) return null;
|
|
2228
2363
|
const b4 = median(slopes);
|
|
2229
2364
|
if (!Number.isFinite(b4) || Math.abs(b4) < 1e-12) return null;
|
|
2230
|
-
const a4 = median(pos.map((y5, i) => y5 - b4 *
|
|
2365
|
+
const a4 = median(pos.map((y5, i) => y5 - b4 * v2[i]));
|
|
2231
2366
|
return Number.isFinite(a4) ? { a: a4, b: b4 } : null;
|
|
2232
2367
|
}
|
|
2233
2368
|
function censusValuePlacement(container, data) {
|
|
@@ -2245,40 +2380,40 @@ function censusValuePlacement(container, data) {
|
|
|
2245
2380
|
if (!/^\d+$/.test(raw)) continue;
|
|
2246
2381
|
const i = +raw;
|
|
2247
2382
|
const row = rows[i];
|
|
2248
|
-
const
|
|
2249
|
-
if (!row || !Number.isFinite(
|
|
2383
|
+
const x4 = num(el, "cx"), y5 = num(el, "cy"), r = num(el, "r");
|
|
2384
|
+
if (!row || !Number.isFinite(x4) || !Number.isFinite(y5) || !(r > 0)) continue;
|
|
2250
2385
|
seen.add(i);
|
|
2251
|
-
dots.push({ row, x:
|
|
2386
|
+
dots.push({ row, x: x4, y: y5, r });
|
|
2252
2387
|
}
|
|
2253
2388
|
if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
|
|
2254
2389
|
let best = null;
|
|
2255
2390
|
for (let c2 = 0; c2 < columns.length; c2++) {
|
|
2256
2391
|
if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
|
|
2257
2392
|
const vals = dots.map((d2) => {
|
|
2258
|
-
const
|
|
2259
|
-
return
|
|
2393
|
+
const v2 = d2.row[c2];
|
|
2394
|
+
return v2 === null || v2 === void 0 || v2 === "" ? NaN : typeof v2 === "number" ? v2 : Number(v2);
|
|
2260
2395
|
});
|
|
2261
2396
|
const finite = vals.filter(Number.isFinite);
|
|
2262
2397
|
if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
|
|
2263
|
-
const logs = finite.every((
|
|
2398
|
+
const logs = finite.every((v2) => v2 > 0) ? [false, true] : [false];
|
|
2264
2399
|
for (const log of logs) {
|
|
2265
2400
|
for (const axis of ["x", "y"]) {
|
|
2266
2401
|
const keep = [];
|
|
2267
|
-
const
|
|
2268
|
-
dots.forEach((d2,
|
|
2269
|
-
if (!Number.isFinite(vals[
|
|
2270
|
-
keep.push(
|
|
2271
|
-
|
|
2402
|
+
const v2 = [], pos = [];
|
|
2403
|
+
dots.forEach((d2, k3) => {
|
|
2404
|
+
if (!Number.isFinite(vals[k3])) return;
|
|
2405
|
+
keep.push(k3);
|
|
2406
|
+
v2.push(log ? Math.log10(vals[k3]) : vals[k3]);
|
|
2272
2407
|
pos.push(axis === "x" ? d2.x : d2.y);
|
|
2273
2408
|
});
|
|
2274
|
-
const line = robustLine(
|
|
2409
|
+
const line = robustLine(v2, pos);
|
|
2275
2410
|
if (!line) continue;
|
|
2276
2411
|
const lo = Math.min(...pos), hi = Math.max(...pos);
|
|
2277
2412
|
if (hi - lo < MIN_AXIS_SPAN_PX) continue;
|
|
2278
2413
|
const mean = pos.reduce((s, p2) => s + p2, 0) / pos.length;
|
|
2279
2414
|
let ssRes = 0, ssTot = 0;
|
|
2280
|
-
const res = pos.map((p2,
|
|
2281
|
-
const e = p2 - (line.a + line.b *
|
|
2415
|
+
const res = pos.map((p2, k3) => {
|
|
2416
|
+
const e = p2 - (line.a + line.b * v2[k3]);
|
|
2282
2417
|
ssRes += e * e;
|
|
2283
2418
|
ssTot += (p2 - mean) ** 2;
|
|
2284
2419
|
return e;
|
|
@@ -2287,8 +2422,8 @@ function censusValuePlacement(container, data) {
|
|
|
2287
2422
|
const fit = 1 - ssRes / ssTot;
|
|
2288
2423
|
if (fit >= VALUE_AXIS_MIN_FIT && (!best || fit > best.fit)) {
|
|
2289
2424
|
const full = new Array(dots.length).fill(NaN);
|
|
2290
|
-
keep.forEach((
|
|
2291
|
-
full[
|
|
2425
|
+
keep.forEach((k3, j3) => {
|
|
2426
|
+
full[k3] = res[j3];
|
|
2292
2427
|
});
|
|
2293
2428
|
best = { col: c2, axis, fit, res: full, log };
|
|
2294
2429
|
}
|
|
@@ -2298,8 +2433,8 @@ function censusValuePlacement(container, data) {
|
|
|
2298
2433
|
if (!best) return EMPTY4;
|
|
2299
2434
|
let off = 0, measured = 0;
|
|
2300
2435
|
const radii = [];
|
|
2301
|
-
dots.forEach((d2,
|
|
2302
|
-
const e = best.res[
|
|
2436
|
+
dots.forEach((d2, k3) => {
|
|
2437
|
+
const e = best.res[k3];
|
|
2303
2438
|
if (!Number.isFinite(e)) return;
|
|
2304
2439
|
measured++;
|
|
2305
2440
|
const inRadii = Math.abs(e) / Math.max(d2.r, 1);
|
|
@@ -2339,12 +2474,12 @@ function contentExtentOf(boxes) {
|
|
|
2339
2474
|
if (usable.length === 0) return { w: 0, h: 0, source: "none" };
|
|
2340
2475
|
const inFlow = usable.filter((b4) => !b4.floating);
|
|
2341
2476
|
const counted = inFlow.length > 0 ? inFlow : usable;
|
|
2342
|
-
let w2 = 0,
|
|
2477
|
+
let w2 = 0, h3 = 0;
|
|
2343
2478
|
for (const b4 of counted) {
|
|
2344
2479
|
if (b4.right > w2) w2 = b4.right;
|
|
2345
|
-
if (b4.bottom >
|
|
2480
|
+
if (b4.bottom > h3) h3 = b4.bottom;
|
|
2346
2481
|
}
|
|
2347
|
-
return { w: w2, h:
|
|
2482
|
+
return { w: w2, h: h3, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
|
|
2348
2483
|
}
|
|
2349
2484
|
function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
|
|
2350
2485
|
return {
|
|
@@ -2354,8 +2489,8 @@ function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL
|
|
|
2354
2489
|
}
|
|
2355
2490
|
var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
|
|
2356
2491
|
var PHANTOM_FRACTION = 0.95;
|
|
2357
|
-
function isPhantomBox(w2,
|
|
2358
|
-
return w2 > refW * PHANTOM_FRACTION ||
|
|
2492
|
+
function isPhantomBox(w2, h3, refW, refH) {
|
|
2493
|
+
return w2 > refW * PHANTOM_FRACTION || h3 > refH * PHANTOM_FRACTION;
|
|
2359
2494
|
}
|
|
2360
2495
|
var MAX_FRAME_GROW_FACTOR = 20;
|
|
2361
2496
|
function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
|
|
@@ -2654,8 +2789,8 @@ function pinScrolledAxis(container, svg) {
|
|
|
2654
2789
|
}
|
|
2655
2790
|
const pinSvg = doc.createElementNS(SVG_NS2, "svg");
|
|
2656
2791
|
for (const a4 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
|
|
2657
|
-
const
|
|
2658
|
-
if (
|
|
2792
|
+
const v2 = svg.getAttribute(a4);
|
|
2793
|
+
if (v2) pinSvg.setAttribute(a4, v2);
|
|
2659
2794
|
}
|
|
2660
2795
|
const styles = svg.querySelectorAll("style");
|
|
2661
2796
|
for (let i = 0; i < styles.length; i++) pinSvg.appendChild(styles[i].cloneNode(true));
|
|
@@ -2836,10 +2971,10 @@ function parseRGBA(c2) {
|
|
|
2836
2971
|
const s = c2.trim();
|
|
2837
2972
|
const m2 = s.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
|
|
2838
2973
|
if (m2) return [parseFloat(m2[1]), parseFloat(m2[2]), parseFloat(m2[3]), m2[4] !== void 0 ? parseFloat(m2[4]) : 1];
|
|
2839
|
-
let
|
|
2840
|
-
if (
|
|
2841
|
-
if (
|
|
2842
|
-
return [parseInt(
|
|
2974
|
+
let h3 = s.replace(/^#/, "");
|
|
2975
|
+
if (h3.length === 3) h3 = h3.split("").map((ch) => ch + ch).join("");
|
|
2976
|
+
if (h3.length === 6 && /^[0-9a-fA-F]{6}$/.test(h3)) {
|
|
2977
|
+
return [parseInt(h3.slice(0, 2), 16), parseInt(h3.slice(2, 4), 16), parseInt(h3.slice(4, 6), 16), 1];
|
|
2843
2978
|
}
|
|
2844
2979
|
return null;
|
|
2845
2980
|
}
|
|
@@ -2874,8 +3009,8 @@ var NAMED = {
|
|
|
2874
3009
|
};
|
|
2875
3010
|
function toRGBA(c2) {
|
|
2876
3011
|
if (typeof c2 !== "string") return null;
|
|
2877
|
-
const
|
|
2878
|
-
if (
|
|
3012
|
+
const k3 = c2.trim().toLowerCase();
|
|
3013
|
+
if (k3 in NAMED) return NAMED[k3];
|
|
2879
3014
|
return parseRGBA(c2);
|
|
2880
3015
|
}
|
|
2881
3016
|
function compositeOver(fg, bg) {
|
|
@@ -2887,8 +3022,8 @@ function compositeOver(fg, bg) {
|
|
|
2887
3022
|
];
|
|
2888
3023
|
}
|
|
2889
3024
|
function relativeLuminance(rgb) {
|
|
2890
|
-
const lin = rgb.map((
|
|
2891
|
-
const s =
|
|
3025
|
+
const lin = rgb.map((v2) => {
|
|
3026
|
+
const s = v2 / 255;
|
|
2892
3027
|
return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
|
|
2893
3028
|
});
|
|
2894
3029
|
return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
|
|
@@ -2925,20 +3060,20 @@ var GLYPH_SAMPLE_N = 3;
|
|
|
2925
3060
|
function glyphSampleGrid(box, n = GLYPH_SAMPLE_N) {
|
|
2926
3061
|
const out = [];
|
|
2927
3062
|
if (!box || !(box.width > 0) || !(box.height > 0) || !(n >= 1)) return out;
|
|
2928
|
-
const
|
|
2929
|
-
for (let i = 0; i <
|
|
2930
|
-
for (let
|
|
3063
|
+
const k3 = Math.floor(n);
|
|
3064
|
+
for (let i = 0; i < k3; i++) {
|
|
3065
|
+
for (let j3 = 0; j3 < k3; j3++) {
|
|
2931
3066
|
out.push({
|
|
2932
|
-
x: box.left + box.width * (i + 0.5) /
|
|
2933
|
-
y: box.top + box.height * (
|
|
3067
|
+
x: box.left + box.width * (i + 0.5) / k3,
|
|
3068
|
+
y: box.top + box.height * (j3 + 0.5) / k3
|
|
2934
3069
|
});
|
|
2935
3070
|
}
|
|
2936
3071
|
}
|
|
2937
3072
|
return out;
|
|
2938
3073
|
}
|
|
2939
|
-
function clamp01(
|
|
2940
|
-
if (typeof
|
|
2941
|
-
return Math.max(0, Math.min(1,
|
|
3074
|
+
function clamp01(v2) {
|
|
3075
|
+
if (typeof v2 !== "number" || !isFinite(v2)) return 1;
|
|
3076
|
+
return Math.max(0, Math.min(1, v2));
|
|
2942
3077
|
}
|
|
2943
3078
|
function hexToRGB(hex2) {
|
|
2944
3079
|
const p2 = toRGBA(hex2);
|
|
@@ -3054,31 +3189,31 @@ function applyLabelContrast(container, opts = {}) {
|
|
|
3054
3189
|
const glyphArea = tr.width * tr.height;
|
|
3055
3190
|
const txRoot = paintRoot(tx, container);
|
|
3056
3191
|
let over = 0;
|
|
3057
|
-
const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((
|
|
3058
|
-
if (!(
|
|
3059
|
-
if (drawnBeneath(
|
|
3060
|
-
if (effAlpha(
|
|
3192
|
+
const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x4) => {
|
|
3193
|
+
if (!(x4.ov > 0)) return false;
|
|
3194
|
+
if (drawnBeneath(x4.mk, tx, txRoot)) return true;
|
|
3195
|
+
if (effAlpha(x4.mk) >= PILL_MIN_ALPHA) over++;
|
|
3061
3196
|
return false;
|
|
3062
3197
|
});
|
|
3063
3198
|
if (over > 0) report.paintedOver++;
|
|
3064
3199
|
const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
|
|
3065
3200
|
const painted = pts.map(() => false);
|
|
3066
3201
|
let unmeasured = 0;
|
|
3067
|
-
const under = boxed.map((
|
|
3068
|
-
const mask = backedSamples(
|
|
3202
|
+
const under = boxed.map((x4) => {
|
|
3203
|
+
const mask = backedSamples(x4.mk.el, pts);
|
|
3069
3204
|
if (mask === null) {
|
|
3070
3205
|
unmeasured++;
|
|
3071
|
-
return
|
|
3206
|
+
return x4;
|
|
3072
3207
|
}
|
|
3073
3208
|
let inside = 0;
|
|
3074
|
-
const paints = effAlpha(
|
|
3209
|
+
const paints = effAlpha(x4.mk) >= PILL_MIN_ALPHA;
|
|
3075
3210
|
for (let i = 0; i < mask.length; i++) {
|
|
3076
3211
|
if (!mask[i]) continue;
|
|
3077
3212
|
inside++;
|
|
3078
3213
|
if (paints) painted[i] = true;
|
|
3079
3214
|
}
|
|
3080
|
-
return { mk:
|
|
3081
|
-
}).filter((
|
|
3215
|
+
return { mk: x4.mk, ov: glyphArea * (inside / mask.length) };
|
|
3216
|
+
}).filter((x4) => x4.ov > 0);
|
|
3082
3217
|
if (under.length === 0 && boxed.length > 0) report.offFill++;
|
|
3083
3218
|
if (under.length === 0) continue;
|
|
3084
3219
|
if (unmeasured === 0 && pts.length > 0) {
|
|
@@ -3090,10 +3225,10 @@ function applyLabelContrast(container, opts = {}) {
|
|
|
3090
3225
|
}
|
|
3091
3226
|
}
|
|
3092
3227
|
report.scanned++;
|
|
3093
|
-
const opaqueUnder = under.filter((
|
|
3228
|
+
const opaqueUnder = under.filter((x4) => effAlpha(x4.mk) >= PILL_OPAQUE_ALPHA);
|
|
3094
3229
|
const cellEntry = (opaqueUnder.length ? opaqueUnder : under).reduce((a4, b4) => b4.ov > a4.ov || b4.ov === a4.ov && b4.mk.ord > a4.mk.ord ? b4 : a4);
|
|
3095
3230
|
const cell = cellEntry.mk;
|
|
3096
|
-
const pill = under.find((
|
|
3231
|
+
const pill = under.find((x4) => x4.mk !== cell && isPillBackdropAlpha(effAlpha(x4.mk)) && x4.mk.ord > cell.ord && pillBacksGlyph(x4.ov, glyphArea))?.mk;
|
|
3097
3232
|
const cellRGBA = toRGBA(cell.fill);
|
|
3098
3233
|
let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
|
|
3099
3234
|
if (pill) {
|
|
@@ -3145,7 +3280,7 @@ function sessionViewStateProvider(container) {
|
|
|
3145
3280
|
load: () => store,
|
|
3146
3281
|
save: (next) => {
|
|
3147
3282
|
if (!next || typeof next !== "object") return;
|
|
3148
|
-
for (const
|
|
3283
|
+
for (const k3 of Object.keys(store)) delete store[k3];
|
|
3149
3284
|
Object.assign(store, next);
|
|
3150
3285
|
}
|
|
3151
3286
|
};
|
|
@@ -3154,7 +3289,7 @@ function noopViewStateProvider() {
|
|
|
3154
3289
|
return { load: () => ({}), save: () => {
|
|
3155
3290
|
} };
|
|
3156
3291
|
}
|
|
3157
|
-
var parseRowIdxs = (s) => (s || "").split(",").map((
|
|
3292
|
+
var parseRowIdxs = (s) => (s || "").split(",").map((x4) => parseInt(x4, 10)).filter((n) => Number.isFinite(n));
|
|
3158
3293
|
var D3_PLUGIN_PACKAGES = {
|
|
3159
3294
|
sankey: "d3-sankey",
|
|
3160
3295
|
sankeyLinkHorizontal: "d3-sankey",
|
|
@@ -3168,11 +3303,23 @@ var D3_PLUGIN_PACKAGES = {
|
|
|
3168
3303
|
weightedVoronoi: "d3-weighted-voronoi",
|
|
3169
3304
|
// Attached onto d3 like the rest, but reached as d3.mermaid.render(...) — a NAMESPACE
|
|
3170
3305
|
// OBJECT with methods, not a function on d3. The scan below accounts for that shape.
|
|
3171
|
-
mermaid: "mermaid"
|
|
3306
|
+
mermaid: "mermaid",
|
|
3307
|
+
// AND THE NAME A REAL CHART ACTUALLY WRITES. This one is not a member of the mermaid
|
|
3308
|
+
// package at all: it is a helper the SERVER prepends into the generated code, and the
|
|
3309
|
+
// helper is what reaches for the library. So a genuine diagram chart contains
|
|
3310
|
+
// `d3.llmMermaid(` and never once writes `d3.mermaid` — measured on the first real
|
|
3311
|
+
// generation of that type, for which this scan returned an EMPTY list. It drew, because
|
|
3312
|
+
// the host it ran in happened to carry the library; a host relying on this answer to
|
|
3313
|
+
// decide what to install would have been told nothing and failed several frames deep.
|
|
3314
|
+
//
|
|
3315
|
+
// Mapping the helper is right rather than a hack, because this map answers "what must a
|
|
3316
|
+
// host INSTALL for this code to run" and not "which package exports this symbol". For
|
|
3317
|
+
// code that calls the helper, the answer is the library the helper reaches for.
|
|
3318
|
+
llmMermaid: "mermaid"
|
|
3172
3319
|
};
|
|
3173
3320
|
function requiredD3Plugins(code) {
|
|
3174
3321
|
const out = /* @__PURE__ */ new Set();
|
|
3175
|
-
for (const m2 of String(code || "").matchAll(/\bd3\s*\.\s*(\w+)\s*[.(]/g)) {
|
|
3322
|
+
for (const m2 of stripJsComments(String(code || "")).matchAll(/\bd3\s*\.\s*(\w+)\s*[.(]/g)) {
|
|
3176
3323
|
const pkg = D3_PLUGIN_PACKAGES[m2[1]];
|
|
3177
3324
|
if (pkg) out.add(pkg);
|
|
3178
3325
|
}
|
|
@@ -3227,7 +3374,7 @@ function compileRenderFn(code, win, doc, d3) {
|
|
|
3227
3374
|
return fn;
|
|
3228
3375
|
}
|
|
3229
3376
|
var ASYNC_RENDER_TIMEOUT_MS = 15e3;
|
|
3230
|
-
var isThenable = (
|
|
3377
|
+
var isThenable = (v2) => !!v2 && (typeof v2 === "object" || typeof v2 === "function") && typeof v2.then === "function";
|
|
3231
3378
|
function createChartHost(container, config) {
|
|
3232
3379
|
const doc = container.ownerDocument;
|
|
3233
3380
|
const win = doc?.defaultView ?? globalThis;
|
|
@@ -3235,7 +3382,7 @@ function createChartHost(container, config) {
|
|
|
3235
3382
|
let data = config.data;
|
|
3236
3383
|
{
|
|
3237
3384
|
const stamped = config.data?.meta?.hostContract;
|
|
3238
|
-
const major = (
|
|
3385
|
+
const major = (v2) => (v2 || "").split(".")[0];
|
|
3239
3386
|
if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
|
|
3240
3387
|
try {
|
|
3241
3388
|
(win?.console ?? console)?.warn(
|
|
@@ -3708,6 +3855,7 @@ export {
|
|
|
3708
3855
|
Xt,
|
|
3709
3856
|
qt,
|
|
3710
3857
|
buildRenderPayload,
|
|
3858
|
+
stripJsComments,
|
|
3711
3859
|
createMarkResolver,
|
|
3712
3860
|
ensureCrossfilterHitTargets,
|
|
3713
3861
|
censusMarks,
|