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