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