@bicharts/chart-host 0.5.100 → 0.5.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-UYH37PPI.mjs → chunk-LJU47KQS.mjs} +660 -611
- package/dist/index.mjs +94 -70
- package/dist/react.mjs +1 -1
- package/dist/types/contract.d.ts +2 -1
- package/dist/types/dateCells.d.ts +5 -0
- package/dist/types/host.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/payload.d.ts +13 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -108,7 +108,6 @@ import {
|
|
|
108
108
|
measureContainerBoxes,
|
|
109
109
|
needsScroll,
|
|
110
110
|
noopViewStateProvider,
|
|
111
|
-
p,
|
|
112
111
|
periodTickSuppressesFeedback,
|
|
113
112
|
pillBacksGlyph,
|
|
114
113
|
pinScrolledAxis,
|
|
@@ -127,11 +126,34 @@ import {
|
|
|
127
126
|
toRGBA,
|
|
128
127
|
u,
|
|
129
128
|
unpinScrolledAxis,
|
|
130
|
-
valuePlacementFlag
|
|
131
|
-
|
|
129
|
+
valuePlacementFlag,
|
|
130
|
+
x
|
|
131
|
+
} from "./chunk-LJU47KQS.mjs";
|
|
132
132
|
import "./chunk-A2GMXZP7.mjs";
|
|
133
133
|
import "./chunk-GHODWOAL.mjs";
|
|
134
134
|
|
|
135
|
+
// src/dateCells.ts
|
|
136
|
+
var LOCAL_DATE_METHOD = /\.(?:getFullYear|getMonth|getDate|getDay|getHours|getMinutes|setFullYear|setMonth|setDate|setHours|setMinutes|setSeconds|setMilliseconds)\s*\(/;
|
|
137
|
+
var D3_LOCAL_TIME = /\bd3\s*\.\s*(?:scaleTime|time[A-Z]\w*)\b/;
|
|
138
|
+
var DATE_FROM_LOCAL_COMPONENTS = /\bnew\s+Date\s*\(\s*[^(),]+,/;
|
|
139
|
+
var FORMATTER = /\bIntl\s*\.\s*DateTimeFormat\b|\.toLocaleDateString\s*\(|\.toLocaleTimeString\s*\(/;
|
|
140
|
+
function codeReadsDatesInLocalTime(code) {
|
|
141
|
+
if (!code) return false;
|
|
142
|
+
if (LOCAL_DATE_METHOD.test(code) || D3_LOCAL_TIME.test(code) || DATE_FROM_LOCAL_COMPONENTS.test(code)) return true;
|
|
143
|
+
return FORMATTER.test(code) && !/timeZone/.test(code);
|
|
144
|
+
}
|
|
145
|
+
var VEGA_LOCAL_FN = /\b(?:year|quarter|month|date|day|dayofyear|week|hours|minutes|seconds|milliseconds|datetime|time|timeFormat|timeParse|timeOffset|timeSequence|timeUnitSpecifier)\s*\(/;
|
|
146
|
+
var VEGA_LOCAL_TIMEUNIT = /"timeUnit"\s*:\s*"(?!utc)[a-z]/i;
|
|
147
|
+
var VEGA_LOCAL_UNIT = /"unit"\s*:\s*"(?!utc)(?:year|quarter|month|week|day|date|dayofyear|hours|minutes|seconds|milliseconds)/i;
|
|
148
|
+
var VEGA_TIME_SCALE = /"type"\s*:\s*"time"/;
|
|
149
|
+
var VEGA_TEMPORAL = /"type"\s*:\s*"temporal"/;
|
|
150
|
+
var VEGA_UTC_SCALE = /"type"\s*:\s*"utc"/;
|
|
151
|
+
function vegaSpecReadsDatesInLocalTime(spec) {
|
|
152
|
+
if (!spec) return false;
|
|
153
|
+
if (VEGA_LOCAL_FN.test(spec) || VEGA_LOCAL_TIMEUNIT.test(spec) || VEGA_LOCAL_UNIT.test(spec) || VEGA_TIME_SCALE.test(spec)) return true;
|
|
154
|
+
return VEGA_TEMPORAL.test(spec) && !VEGA_UTC_SCALE.test(spec);
|
|
155
|
+
}
|
|
156
|
+
|
|
135
157
|
// src/trivial.ts
|
|
136
158
|
var META_COLUMNS = /* @__PURE__ */ new Set(["__rowIdx__", "__geoIso__", "__geoLat__", "__geoLon__", "__geoPrecision__"]);
|
|
137
159
|
var MAX_FREQUENCY_CATEGORIES = 30;
|
|
@@ -844,13 +866,13 @@ function formatSourceDate(raw, opts = {}) {
|
|
|
844
866
|
if (!d2) return null;
|
|
845
867
|
const dayFrame = u(d2);
|
|
846
868
|
const frame = dayFrame ?? (opts.dialect === "dotnet" ? "local" : "utc");
|
|
847
|
-
const
|
|
869
|
+
const p3 = partsIn(d2, frame);
|
|
848
870
|
const format = cleanFormat(opts.format, opts.dialect);
|
|
849
871
|
if (format && opts.dialect) {
|
|
850
|
-
const rendered = renderFormat(format,
|
|
872
|
+
const rendered = renderFormat(format, p3, opts.dialect, opts.culture);
|
|
851
873
|
if (rendered) return rendered;
|
|
852
874
|
}
|
|
853
|
-
return localeDate(
|
|
875
|
+
return localeDate(p3, !!dayFrame, opts.culture);
|
|
854
876
|
}
|
|
855
877
|
function formatSourceDateFor(raw, columnName2, formats, culture) {
|
|
856
878
|
return formatSourceDate(raw, {
|
|
@@ -863,7 +885,7 @@ var ISO_LIKE_RE = /^\s*\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(
|
|
|
863
885
|
function toDate(raw) {
|
|
864
886
|
if (raw instanceof Date) return isNaN(raw.getTime()) ? null : raw;
|
|
865
887
|
if (typeof raw !== "string" || !ISO_LIKE_RE.test(raw)) return null;
|
|
866
|
-
const d2 =
|
|
888
|
+
const d2 = x(raw.trim());
|
|
867
889
|
return d2 && !isNaN(d2.getTime()) ? d2 : null;
|
|
868
890
|
}
|
|
869
891
|
function partsIn(d2, frame) {
|
|
@@ -887,16 +909,16 @@ function partsIn(d2, frame) {
|
|
|
887
909
|
weekday: d2.getDay()
|
|
888
910
|
};
|
|
889
911
|
}
|
|
890
|
-
function utcAnchor(
|
|
891
|
-
const d2 = new Date(Date.UTC(
|
|
892
|
-
if (
|
|
912
|
+
function utcAnchor(p3) {
|
|
913
|
+
const d2 = new Date(Date.UTC(p3.year, p3.month - 1, p3.day, p3.hours, p3.minutes, p3.seconds, p3.ms));
|
|
914
|
+
if (p3.year >= 0 && p3.year < 100) d2.setUTCFullYear(p3.year);
|
|
893
915
|
return d2;
|
|
894
916
|
}
|
|
895
|
-
function localeDate(
|
|
896
|
-
const anchor = utcAnchor(
|
|
917
|
+
function localeDate(p3, wholeDay, culture) {
|
|
918
|
+
const anchor = utcAnchor(p3);
|
|
897
919
|
try {
|
|
898
920
|
const o2 = { dateStyle: "medium", timeZone: "UTC" };
|
|
899
|
-
if (!wholeDay) o2.timeStyle =
|
|
921
|
+
if (!wholeDay) o2.timeStyle = p3.seconds || p3.ms ? "medium" : "short";
|
|
900
922
|
return new Intl.DateTimeFormat(culture || void 0, o2).format(anchor);
|
|
901
923
|
} catch {
|
|
902
924
|
const iso = anchor.toISOString();
|
|
@@ -1075,26 +1097,26 @@ var EN_MONTHS_LONG = [
|
|
|
1075
1097
|
var EN_MONTHS_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
1076
1098
|
var EN_DAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
1077
1099
|
var EN_DAYS_SHORT = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
1078
|
-
function name(
|
|
1100
|
+
function name(p3, kind, width, culture) {
|
|
1079
1101
|
try {
|
|
1080
1102
|
const opts = kind === "month" ? { month: width, timeZone: "UTC" } : { weekday: width === "narrow" ? "short" : width, timeZone: "UTC" };
|
|
1081
|
-
return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(
|
|
1103
|
+
return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(p3));
|
|
1082
1104
|
} catch {
|
|
1083
1105
|
if (kind === "month") {
|
|
1084
|
-
const long = EN_MONTHS_LONG[
|
|
1106
|
+
const long = EN_MONTHS_LONG[p3.month - 1] ?? "";
|
|
1085
1107
|
if (width === "long") return long;
|
|
1086
|
-
return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[
|
|
1108
|
+
return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[p3.month - 1] ?? "";
|
|
1087
1109
|
}
|
|
1088
|
-
return (width === "long" ? EN_DAYS_LONG[
|
|
1110
|
+
return (width === "long" ? EN_DAYS_LONG[p3.weekday] : EN_DAYS_SHORT[p3.weekday]) ?? "";
|
|
1089
1111
|
}
|
|
1090
1112
|
}
|
|
1091
1113
|
var p2 = (n2) => (n2 < 10 ? "0" : "") + n2;
|
|
1092
|
-
function renderFormat(format,
|
|
1114
|
+
function renderFormat(format, p3, dialect, culture) {
|
|
1093
1115
|
const tokens = tokenize(format, dialect);
|
|
1094
1116
|
if (dialect === "excel") resolveAmbiguousM(tokens);
|
|
1095
1117
|
const twelve = tokens.some((t2) => t2.kind === "meridiemLong" || t2.kind === "meridiemShort");
|
|
1096
1118
|
const hour12 = () => {
|
|
1097
|
-
const h2 =
|
|
1119
|
+
const h2 = p3.hours % 12;
|
|
1098
1120
|
return h2 === 0 ? 12 : h2;
|
|
1099
1121
|
};
|
|
1100
1122
|
let out = "";
|
|
@@ -1105,83 +1127,83 @@ function renderFormat(format, p4, dialect, culture) {
|
|
|
1105
1127
|
out += t2.text ?? "";
|
|
1106
1128
|
break;
|
|
1107
1129
|
case "year4":
|
|
1108
|
-
out += String(
|
|
1130
|
+
out += String(p3.year);
|
|
1109
1131
|
sawField = true;
|
|
1110
1132
|
break;
|
|
1111
1133
|
case "year2":
|
|
1112
|
-
out += p2((
|
|
1134
|
+
out += p2((p3.year % 100 + 100) % 100);
|
|
1113
1135
|
sawField = true;
|
|
1114
1136
|
break;
|
|
1115
1137
|
case "monthLong":
|
|
1116
|
-
out += name(
|
|
1138
|
+
out += name(p3, "month", "long", culture);
|
|
1117
1139
|
sawField = true;
|
|
1118
1140
|
break;
|
|
1119
1141
|
case "monthShort":
|
|
1120
|
-
out += name(
|
|
1142
|
+
out += name(p3, "month", "short", culture);
|
|
1121
1143
|
sawField = true;
|
|
1122
1144
|
break;
|
|
1123
1145
|
case "monthNarrow":
|
|
1124
|
-
out += name(
|
|
1146
|
+
out += name(p3, "month", "long", culture).slice(0, 1);
|
|
1125
1147
|
sawField = true;
|
|
1126
1148
|
break;
|
|
1127
1149
|
case "month2":
|
|
1128
|
-
out += p2(
|
|
1150
|
+
out += p2(p3.month);
|
|
1129
1151
|
sawField = true;
|
|
1130
1152
|
break;
|
|
1131
1153
|
case "month1":
|
|
1132
|
-
out += String(
|
|
1154
|
+
out += String(p3.month);
|
|
1133
1155
|
sawField = true;
|
|
1134
1156
|
break;
|
|
1135
1157
|
case "weekdayLong":
|
|
1136
|
-
out += name(
|
|
1158
|
+
out += name(p3, "weekday", "long", culture);
|
|
1137
1159
|
sawField = true;
|
|
1138
1160
|
break;
|
|
1139
1161
|
case "weekdayShort":
|
|
1140
|
-
out += name(
|
|
1162
|
+
out += name(p3, "weekday", "short", culture);
|
|
1141
1163
|
sawField = true;
|
|
1142
1164
|
break;
|
|
1143
1165
|
case "day2":
|
|
1144
|
-
out += p2(
|
|
1166
|
+
out += p2(p3.day);
|
|
1145
1167
|
sawField = true;
|
|
1146
1168
|
break;
|
|
1147
1169
|
case "day1":
|
|
1148
|
-
out += String(
|
|
1170
|
+
out += String(p3.day);
|
|
1149
1171
|
sawField = true;
|
|
1150
1172
|
break;
|
|
1151
1173
|
case "hour2":
|
|
1152
|
-
out += p2(twelve ? hour12() :
|
|
1174
|
+
out += p2(twelve ? hour12() : p3.hours);
|
|
1153
1175
|
sawField = true;
|
|
1154
1176
|
break;
|
|
1155
1177
|
case "hour1":
|
|
1156
|
-
out += String(twelve ? hour12() :
|
|
1178
|
+
out += String(twelve ? hour12() : p3.hours);
|
|
1157
1179
|
sawField = true;
|
|
1158
1180
|
break;
|
|
1159
1181
|
case "minute2":
|
|
1160
|
-
out += p2(
|
|
1182
|
+
out += p2(p3.minutes);
|
|
1161
1183
|
sawField = true;
|
|
1162
1184
|
break;
|
|
1163
1185
|
case "minute1":
|
|
1164
|
-
out += String(
|
|
1186
|
+
out += String(p3.minutes);
|
|
1165
1187
|
sawField = true;
|
|
1166
1188
|
break;
|
|
1167
1189
|
case "second2":
|
|
1168
|
-
out += p2(
|
|
1190
|
+
out += p2(p3.seconds);
|
|
1169
1191
|
sawField = true;
|
|
1170
1192
|
break;
|
|
1171
1193
|
case "second1":
|
|
1172
|
-
out += String(
|
|
1194
|
+
out += String(p3.seconds);
|
|
1173
1195
|
sawField = true;
|
|
1174
1196
|
break;
|
|
1175
1197
|
case "fraction":
|
|
1176
|
-
out += String(
|
|
1198
|
+
out += String(p3.ms).padStart(3, "0");
|
|
1177
1199
|
sawField = true;
|
|
1178
1200
|
break;
|
|
1179
1201
|
case "meridiemLong":
|
|
1180
|
-
out +=
|
|
1202
|
+
out += p3.hours < 12 ? "AM" : "PM";
|
|
1181
1203
|
sawField = true;
|
|
1182
1204
|
break;
|
|
1183
1205
|
case "meridiemShort":
|
|
1184
|
-
out +=
|
|
1206
|
+
out += p3.hours < 12 ? "A" : "P";
|
|
1185
1207
|
sawField = true;
|
|
1186
1208
|
break;
|
|
1187
1209
|
}
|
|
@@ -1323,8 +1345,8 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1323
1345
|
if (dimIdx >= 0) {
|
|
1324
1346
|
const seen = [];
|
|
1325
1347
|
const set = /* @__PURE__ */ new Set();
|
|
1326
|
-
for (const
|
|
1327
|
-
const s2 = displayText(columns[dimIdx], rows[
|
|
1348
|
+
for (const p3 of positions) {
|
|
1349
|
+
const s2 = displayText(columns[dimIdx], rows[p3]?.[dimIdx], opts);
|
|
1328
1350
|
if (!set.has(s2)) {
|
|
1329
1351
|
set.add(s2);
|
|
1330
1352
|
seen.push(s2);
|
|
@@ -1352,9 +1374,9 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1352
1374
|
const colAgg = resolveAgg(col, agg, auto);
|
|
1353
1375
|
const selVals = [];
|
|
1354
1376
|
const selRaw = [];
|
|
1355
|
-
for (const
|
|
1356
|
-
const n2 = toNumber(rows[
|
|
1357
|
-
selRaw.push(rows[
|
|
1377
|
+
for (const p3 of positions) {
|
|
1378
|
+
const n2 = toNumber(rows[p3]?.[c2]);
|
|
1379
|
+
selRaw.push(rows[p3]?.[c2]);
|
|
1358
1380
|
if (n2 != null) selVals.push(n2);
|
|
1359
1381
|
}
|
|
1360
1382
|
const value = reduce(selVals, colAgg, selRaw);
|
|
@@ -1387,8 +1409,8 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1387
1409
|
const name2 = String(columns[c2]?.name ?? "");
|
|
1388
1410
|
const distinct = /* @__PURE__ */ new Set();
|
|
1389
1411
|
let firstText = "";
|
|
1390
|
-
for (const
|
|
1391
|
-
const raw = rows[
|
|
1412
|
+
for (const p3 of positions) {
|
|
1413
|
+
const raw = rows[p3]?.[c2];
|
|
1392
1414
|
const key = raw == null || raw === "" ? "(blank)" : String(raw);
|
|
1393
1415
|
if (!distinct.size) firstText = displayText(columns[c2], raw, opts);
|
|
1394
1416
|
distinct.add(key);
|
|
@@ -1498,7 +1520,7 @@ var l = function(t2, r2, n2, e2) {
|
|
|
1498
1520
|
return (t3 /= 100) >= 1 ? 0 : 255 * (1 - t3) * (1 - e2);
|
|
1499
1521
|
})));
|
|
1500
1522
|
};
|
|
1501
|
-
function
|
|
1523
|
+
function p(t2, r2, n2, e2) {
|
|
1502
1524
|
var o2;
|
|
1503
1525
|
void 0 === e2 && (e2 = "l"), o2 = [t2, r2, n2].map((function(t3) {
|
|
1504
1526
|
return t3 / 255;
|
|
@@ -1516,11 +1538,11 @@ function p3(t2, r2, n2, e2) {
|
|
|
1516
1538
|
}
|
|
1517
1539
|
else u4 = NaN;
|
|
1518
1540
|
return 360 * u4;
|
|
1519
|
-
})(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l2 = i2 - a2,
|
|
1520
|
-
return "v" === e2 && (h2 = 0 === i2 ? 0 : l2 / i2), i2 !== a2 && "l" === e2 && (h2 = c2 > 0.5 ? l2 / (2 - i2 - a2) : l2 / (i2 + a2)), "i" === e2 && (h2 = f2 > 0 ? 1 - a2 / f2 : 0), h2 *= 100, c2 *= 100, f2 *= 100, "l" === e2 ? [u3, h2, c2] : "v" === e2 ? [u3, h2,
|
|
1541
|
+
})(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l2 = i2 - a2, p3 = i2, f2 = (t2 + r2 + n2) / 3;
|
|
1542
|
+
return "v" === e2 && (h2 = 0 === i2 ? 0 : l2 / i2), i2 !== a2 && "l" === e2 && (h2 = c2 > 0.5 ? l2 / (2 - i2 - a2) : l2 / (i2 + a2)), "i" === e2 && (h2 = f2 > 0 ? 1 - a2 / f2 : 0), h2 *= 100, c2 *= 100, f2 *= 100, "l" === e2 ? [u3, h2, c2] : "v" === e2 ? [u3, h2, p3 *= 100] : [u3, h2, f2];
|
|
1521
1543
|
}
|
|
1522
1544
|
var f = function(t2, r2, n2) {
|
|
1523
|
-
return
|
|
1545
|
+
return p(t2, r2, n2, "l");
|
|
1524
1546
|
};
|
|
1525
1547
|
var s = function(t2, r2, n2) {
|
|
1526
1548
|
var e2, i2, a2 = function(t3) {
|
|
@@ -1529,14 +1551,14 @@ var s = function(t2, r2, n2) {
|
|
|
1529
1551
|
return t2 = t2 % 360 / 360, r2 = o(r2 / 100, 0, 1), n2 = o(n2 / 100, 0, 1), e2 = 2 * n2 - (i2 = n2 <= 0.5 ? n2 * (r2 + 1) : n2 + r2 - n2 * r2), [255 * a2(t2 + 1 / 3), 255 * a2(t2), 255 * a2(t2 - 1 / 3)];
|
|
1530
1552
|
};
|
|
1531
1553
|
var v = function(t2, r2, n2) {
|
|
1532
|
-
return
|
|
1554
|
+
return p(t2, r2, n2, "v");
|
|
1533
1555
|
};
|
|
1534
1556
|
var b = function(t2, r2, n2) {
|
|
1535
1557
|
var e2, o2, i2 = [n2 /= 100, n2 * (1 - (r2 /= 100)), n2 * (1 - (o2 = (t2 = t2 % 360 / 360 * 360) / 60 - (e2 = Math.floor(t2 / 60 % 6))) * r2), n2 * (1 - (1 - o2) * r2)], a2 = [[0, 3, 1], [2, 0, 1], [1, 0, 3], [1, 2, 0], [3, 1, 0], [0, 1, 2]];
|
|
1536
1558
|
return [255 * i2[a2[e2][0]], 255 * i2[a2[e2][1]], 255 * i2[a2[e2][2]]];
|
|
1537
1559
|
};
|
|
1538
1560
|
var y = function(t2, r2, n2) {
|
|
1539
|
-
return
|
|
1561
|
+
return p(t2, r2, n2, "i");
|
|
1540
1562
|
};
|
|
1541
1563
|
var d = function(t2, r2, n2) {
|
|
1542
1564
|
var e2, i2, a2, u3;
|
|
@@ -1558,7 +1580,7 @@ function w(t2, r2, n2) {
|
|
|
1558
1580
|
}
|
|
1559
1581
|
var m = { x: [0.4124564, 0.3575761, 0.1804375], y: [0.2126729, 0.7151522, 0.072175], z: [0.0193339, 0.119192, 0.9503041] };
|
|
1560
1582
|
var M = { r: [3.2404542, -1.5371385, -0.4985314], g: [-0.969266, 1.8760108, 0.041556], b: [0.0556434, -0.2040259, 1.0572252] };
|
|
1561
|
-
var
|
|
1583
|
+
var x2 = 0.95047;
|
|
1562
1584
|
var _ = 1;
|
|
1563
1585
|
var C = 1.08883;
|
|
1564
1586
|
var I = 0.206896552;
|
|
@@ -1586,7 +1608,7 @@ var N = function(t2, r2, n2) {
|
|
|
1586
1608
|
};
|
|
1587
1609
|
var O = function(t2, r2, n2) {
|
|
1588
1610
|
var e2;
|
|
1589
|
-
return e2 = [t2 = t2 /
|
|
1611
|
+
return e2 = [t2 = t2 / x2 / 100, r2 = r2 / _ / 100, n2 = n2 / C / 100].map((function(t3) {
|
|
1590
1612
|
return t3 > k ? Math.pow(t3, 1 / 3) : (E * t3 + 16) / 116;
|
|
1591
1613
|
})), t2 = e2[0], r2 = e2[1], n2 = e2[2], [Math.max(0, 116 * r2 - 16), 500 * (t2 - r2), 200 * (r2 - n2)];
|
|
1592
1614
|
};
|
|
@@ -1594,7 +1616,7 @@ var P = function(t2, r2, n2) {
|
|
|
1594
1616
|
var e2, o2 = (t2 + 16) / 116, i2 = isNaN(r2) ? o2 : o2 + r2 / 500, a2 = isNaN(n2) ? o2 : o2 - n2 / 200;
|
|
1595
1617
|
return e2 = [i2, o2, a2].map((function(t3) {
|
|
1596
1618
|
return t3 > I ? Math.pow(t3, 3) : (116 * t3 - 16) / E;
|
|
1597
|
-
})), i2 = e2[0], o2 = e2[1], a2 = e2[2], [i2 *
|
|
1619
|
+
})), i2 = e2[0], o2 = e2[1], a2 = e2[2], [i2 * x2 * 100, o2 * _ * 100, a2 * C * 100];
|
|
1598
1620
|
};
|
|
1599
1621
|
var j = function(t2, r2, n2) {
|
|
1600
1622
|
return N.apply(void 0, P(t2, r2, n2));
|
|
@@ -1643,8 +1665,8 @@ function q(t2, n2, e2, o2) {
|
|
|
1643
1665
|
for (var a3 = [], u4 = 0; u4 < arguments.length; u4++) a3[u4] = arguments[u4];
|
|
1644
1666
|
var h3 = void 0 === a3[o2] ? e2 : a3[o2], l2 = c2.call.apply(c2, r([this], a3, false));
|
|
1645
1667
|
if (false === h3) return l2;
|
|
1646
|
-
var
|
|
1647
|
-
return 1 === n2 ? "number" == typeof h3 ?
|
|
1668
|
+
var p3 = "number" == typeof h3 ? Math.round(h3) : 0, f2 = "number" == typeof t2 ? new Array(l2.length).fill(t2) : t2, s2 = f2.map((function(t3) {
|
|
1669
|
+
return 1 === n2 ? "number" == typeof h3 ? p3 : t3 : t3 + p3;
|
|
1648
1670
|
}));
|
|
1649
1671
|
return l2.map((function(t3, r2) {
|
|
1650
1672
|
return i(t3, s2[r2]);
|
|
@@ -1653,8 +1675,8 @@ function q(t2, n2, e2, o2) {
|
|
|
1653
1675
|
};
|
|
1654
1676
|
}
|
|
1655
1677
|
var D = function(t2, r2, n2) {
|
|
1656
|
-
var e2 = t2 instanceof ft ? t2 : new ft(t2), i2 = r2 instanceof ft ? r2 : new ft(r2), a2 = o(n2, 0, 100) / 100, u3 = 2 * a2 - 1, h2 = e2.alpha() - i2.alpha(), c2 = ((u3 * h2 == -1 ? u3 : (u3 + h2) / (1 + u3 * h2)) + 1) / 2, l2 = 1 - c2,
|
|
1657
|
-
return new ft(
|
|
1678
|
+
var e2 = t2 instanceof ft ? t2 : new ft(t2), i2 = r2 instanceof ft ? r2 : new ft(r2), a2 = o(n2, 0, 100) / 100, u3 = 2 * a2 - 1, h2 = e2.alpha() - i2.alpha(), c2 = ((u3 * h2 == -1 ? u3 : (u3 + h2) / (1 + u3 * h2)) + 1) / 2, l2 = 1 - c2, p3 = [Math.round(o(e2.red() * c2 + i2.red() * l2, 0, 255)), Math.round(o(e2.green() * c2 + i2.green() * l2, 0, 255)), Math.round(o(e2.blue() * c2 + i2.blue() * l2, 0, 255))], f2 = e2.alpha() * a2 + i2.alpha() * (1 - a2);
|
|
1679
|
+
return new ft(p3, f2);
|
|
1658
1680
|
};
|
|
1659
1681
|
var F = Math.sqrt;
|
|
1660
1682
|
var U = Math.pow;
|
|
@@ -1692,8 +1714,8 @@ var et = function(t2, r2, n2, e2) {
|
|
|
1692
1714
|
var i2 = Object.assign({}, { l: 1, c: 1 }, e2);
|
|
1693
1715
|
return (function(t3, r3, n3, e3) {
|
|
1694
1716
|
void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1);
|
|
1695
|
-
var o3 = V(t3, true), i3 = o3[0], a3 = o3[1], u4 = o3[2], h3 = o3[3], c3 = o3[4], l2 = V(r3),
|
|
1696
|
-
return F(U(b2 / (n3 * g2), 2) + U(v2 / (e3 * w2), 2) + U(d2 /
|
|
1717
|
+
var o3 = V(t3, true), i3 = o3[0], a3 = o3[1], u4 = o3[2], h3 = o3[3], c3 = o3[4], l2 = V(r3), p3 = l2[0], f2 = l2[1], s2 = l2[3], v2 = a3 - f2, b2 = i3 - p3, y2 = c3 - l2[4], d2 = F(U(h3 - s2, 2) + U(y2, 2) - U(v2, 2)), g2 = i3 < 16 ? 0.511 : 0.040975 * i3 / (1 + 0.01765 * i3), w2 = 0.0638 * a3 / (1 + 0.0131 * a3) + 0.638, m2 = 164 <= u4 && u4 <= 345 ? 0.56 + J(0.2 * $(Q(u4 + 168))) : 0.36 + J(0.4 * $(Q(u4 + 35))), M2 = F(U(a3, 4) / (U(a3, 4) + 1900)), x3 = w2 * (M2 * m2 + 1 - M2);
|
|
1718
|
+
return F(U(b2 / (n3 * g2), 2) + U(v2 / (e3 * w2), 2) + U(d2 / x3, 2));
|
|
1697
1719
|
})(t2, r2, i2.l, i2.c);
|
|
1698
1720
|
}
|
|
1699
1721
|
if (o2 === rt) {
|
|
@@ -1702,8 +1724,8 @@ var et = function(t2, r2, n2, e2) {
|
|
|
1702
1724
|
void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o3 && (o3 = 1), void 0 === i3 && (i3 = "graphic");
|
|
1703
1725
|
var a3 = "textiles" === i3 ? 0.048 : 0.045, u4 = "textiles" === i3 ? 0.014 : 0.015;
|
|
1704
1726
|
n3 = "textiles" === i3 ? 2 : n3;
|
|
1705
|
-
var h3 = V(t3), c3 = h3[0], l2 = h3[1],
|
|
1706
|
-
return F(U(d2 / (1 * n3), 2) + U(g2 / (e3 * m2), 2) + U(
|
|
1727
|
+
var h3 = V(t3), c3 = h3[0], l2 = h3[1], p3 = h3[3], f2 = h3[4], s2 = V(r3), v2 = s2[0], b2 = s2[1], y2 = s2[3], d2 = c3 - v2, g2 = l2 - b2, w2 = f2 - s2[4], m2 = 1 + a3 * l2, M2 = 1 + u4 * l2, x3 = F(U(p3 - y2, 2) + U(w2, 2) - U(g2, 2));
|
|
1728
|
+
return F(U(d2 / (1 * n3), 2) + U(g2 / (e3 * m2), 2) + U(x3 / (o3 * M2), 2));
|
|
1707
1729
|
})(t2, r2, u3.kL, u3.kC, u3.kH, u3.cate);
|
|
1708
1730
|
}
|
|
1709
1731
|
if (o2 === nt) return (function(t3, r3) {
|
|
@@ -1713,7 +1735,7 @@ var et = function(t2, r2, n2, e2) {
|
|
|
1713
1735
|
var h2 = { kL: 1, kC: 1, kH: 1 }, c2 = Object.assign({}, h2, e2);
|
|
1714
1736
|
return (function(t3, r3, n3, e3, o3) {
|
|
1715
1737
|
void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o3 && (o3 = 1);
|
|
1716
|
-
var i3 = V(t3), a3 = i3[0], u4 = i3[1], h3 = i3[3], c3 = i3[4], l2 = V(r3),
|
|
1738
|
+
var i3 = V(t3), a3 = i3[0], u4 = i3[1], h3 = i3[3], c3 = i3[4], l2 = V(r3), p3 = l2[0], f2 = l2[1], s2 = l2[3], v2 = l2[4], b2 = (a3 + p3) / 2, y2 = (u4 + f2) / 2, d2 = (1 - F(U(y2, 7) / (U(y2, 7) + U(25, 7)))) / 2, g2 = h3 * (1 + d2), w2 = s2 * (1 + d2), m2 = F(U(g2, 2) + U(c3, 2)), M2 = F(U(w2, 2) + U(v2, 2)), x3 = T(g2, c3, true), _2 = T(w2, v2, true), C2 = (m2 + M2) / 2, I2 = J(x3 - _2) > 180 ? (x3 + _2 + 360) / 2 : (x3 + _2) / 2, k2 = 1 - 0.17 * $(Q(I2 - 30)) + 0.24 * $(Q(2 * I2)) + 0.32 * $(Q(3 * I2 + 6)) - 0.2 * $(Q(4 * I2 - 63)), E2 = J(_2 - x3) <= 180 ? _2 - x3 : J(_2 - x3) > 180 && _2 <= x3 ? _2 - x3 + 360 : _2 - x3 - 360, z2 = p3 - a3, N2 = f2 - u4, O2 = 2 * F(m2 * M2) * Z(Q(E2) / 2), P2 = 1 + 0.015 * U(b2 - 50, 2) / F(20 + U(b2 - 50, 2)), j2 = 1 + 0.045 * C2, S2 = 1 + 0.015 * C2 * k2, A2 = 30 * B(-U((I2 - 275) / 25, 2)), L2 = -2 * F(U(C2, 7) / (U(C2, 7) + U(25, 7))) * Z(2 * Q(A2));
|
|
1717
1739
|
return F(U(z2 / (n3 * P2), 2) + U(N2 / (e3 * j2), 2) + U(O2 / (o3 * S2), 2) + L2 * (N2 / (e3 * j2)) * (O2 / (o3 * S2)));
|
|
1718
1740
|
})(t2, r2, c2.kL, c2.kC, c2.kH);
|
|
1719
1741
|
};
|
|
@@ -1763,7 +1785,7 @@ var lt = function(t2, r2) {
|
|
|
1763
1785
|
if (c2 || (u3 = true), c2) {
|
|
1764
1786
|
var l2 = c2[1].toLocaleLowerCase();
|
|
1765
1787
|
if (e2 = l2, ut.has(l2) || (u3 = true), c2[2] && !u3) {
|
|
1766
|
-
var
|
|
1788
|
+
var p3 = c2[2], f2 = -1 !== p3.indexOf(",") ? "," : " ", s2 = p3.split(f2);
|
|
1767
1789
|
for (a2 = 0; a2 < 3; a2++) void 0 !== s2[a2] && (["lch", "lab"].includes(e2) && 0 === a2 || ["hsl", "hsla", "hsv", "hsva", "hwb", "hwba", "hsi", "hsia"].includes(e2) && a2 > 0 ? o2[a2] = ct(s2[a2]) : o2[a2] = Number(s2[a2].trim()));
|
|
1768
1790
|
["rgba", "hsla", "hsva", "hwba", "hsia"].includes(e2) ? (e2 = e2.slice(0, -1), void 0 !== s2[3] && (i2 = ct(s2[3]))) : "cmyk" === e2 && o2.push(void 0 !== s2[3] ? ct(s2[3]) : 0);
|
|
1769
1791
|
}
|
|
@@ -1795,12 +1817,12 @@ var ft = (function() {
|
|
|
1795
1817
|
var r3, n4 = { lab2rgb: j, hsl2rgb: s, hsv2rgb: b, xyz2rgb: N, hwb2rgb: w, hsi2rgb: d }, e3 = lt(t3), i3 = e3[0], a3 = e3[1], u4 = e3[2];
|
|
1796
1818
|
if ("rgb" === i3) return [a3, u4];
|
|
1797
1819
|
"lch" === i3 && (i3 = (r3 = ["xyz", L(a3[0], a3[1], a3[2])])[0], a3 = r3[1]);
|
|
1798
|
-
var h3 = a3[0], c2 = a3[1],
|
|
1799
|
-
if ("cmyk" === i3) return [l(h3, c2,
|
|
1820
|
+
var h3 = a3[0], c2 = a3[1], p3 = a3[2], f2 = a3[3];
|
|
1821
|
+
if ("cmyk" === i3) return [l(h3, c2, p3, f2).map((function(t4) {
|
|
1800
1822
|
return o(t4, 0, 255);
|
|
1801
1823
|
})), u4];
|
|
1802
1824
|
var v2 = "".concat(i3, "2rgb");
|
|
1803
|
-
if ("function" == typeof n4[v2]) return [n4[v2](h3, c2,
|
|
1825
|
+
if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p3).map((function(t4) {
|
|
1804
1826
|
return o(t4, 0, 255);
|
|
1805
1827
|
})), u4];
|
|
1806
1828
|
throw new Error("Invalid color");
|
|
@@ -2192,6 +2214,7 @@ export {
|
|
|
2192
2214
|
chartOwnsTimeline,
|
|
2193
2215
|
chooserFitsViewport,
|
|
2194
2216
|
clearGeoCache,
|
|
2217
|
+
codeReadsDatesInLocalTime,
|
|
2195
2218
|
colourSpreadFlag,
|
|
2196
2219
|
compileRenderFn,
|
|
2197
2220
|
compileTrivialSource,
|
|
@@ -2277,5 +2300,6 @@ export {
|
|
|
2277
2300
|
svgToDataUrl,
|
|
2278
2301
|
toRGBA,
|
|
2279
2302
|
unpinScrolledAxis,
|
|
2280
|
-
valuePlacementFlag
|
|
2303
|
+
valuePlacementFlag,
|
|
2304
|
+
vegaSpecReadsDatesInLocalTime
|
|
2281
2305
|
};
|
package/dist/react.mjs
CHANGED
package/dist/types/contract.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const HOST_CONTRACT_VERSION = "1.
|
|
1
|
+
export declare const HOST_CONTRACT_VERSION = "1.9.0";
|
|
2
2
|
export type GeoPointPrecision = "latlon" | "city" | "zip3" | "state" | "country";
|
|
3
3
|
/** Every valid tier, ordered most precise → coarsest. Runtime form of GeoPointPrecision. */
|
|
4
4
|
export declare const GEO_POINT_PRECISIONS: readonly GeoPointPrecision[];
|
|
@@ -93,6 +93,7 @@ export interface RenderOptions {
|
|
|
93
93
|
rolesBackfilled?: string[];
|
|
94
94
|
rolesRefused?: string[];
|
|
95
95
|
} | null;
|
|
96
|
+
dateCellsAreUtcDays?: boolean;
|
|
96
97
|
geoPointDest?: {
|
|
97
98
|
precision: GeoPointPrecision | null;
|
|
98
99
|
precisionCounts: Record<GeoPointPrecision, number>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** True when generated JavaScript (a D3 render function) reads or builds a date in LOCAL time anywhere,
|
|
2
|
+
* or formats one with no `timeZone`. A host must not re-anchor date cells for such code. */
|
|
3
|
+
export declare function codeReadsDatesInLocalTime(code: string | null | undefined): boolean;
|
|
4
|
+
/** True when a Vega or Vega-Lite spec reads dates in LOCAL time anywhere. Same "never worse" rule. */
|
|
5
|
+
export declare function vegaSpecReadsDatesInLocalTime(spec: string | null | undefined): boolean;
|
package/dist/types/host.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export interface ChartHostConfig {
|
|
|
42
42
|
* into options exactly like geoPoint, so a host that hands over the whole payload
|
|
43
43
|
* gets both ends annotated without knowing the field exists. */
|
|
44
44
|
geoPointDest?: RenderOptions["geoPointDest"];
|
|
45
|
+
/** Set by buildRenderPayload(..., { utcDays: true }) - promoted into options exactly like geoPoint. */
|
|
46
|
+
dateCellsAreUtcDays?: boolean;
|
|
45
47
|
/** Provenance the MCP stamps into data.sample.json. `hostContract` is checked
|
|
46
48
|
* against HOST_CONTRACT_VERSION so a major-version drift is LOUD, not silent. */
|
|
47
49
|
meta?: {
|
package/dist/types/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { loadGeo, geoFromCache, registerGeo, registerGeoAsset, geoAssetFor, clea
|
|
|
5
5
|
* note above registerCityTable in shape-core's geoPoint.ts before using it. */
|
|
6
6
|
export declare function registerCityTable(packed: string): void;
|
|
7
7
|
export { buildRenderPayload, type RenderPayload, type GeoPointBinding } from "./payload";
|
|
8
|
+
export { codeReadsDatesInLocalTime, vegaSpecReadsDatesInLocalTime } from "./dateCells";
|
|
8
9
|
export { createChartHost, compileRenderFn, stripEsmExports, requiredD3Plugins, explainRenderFailure, sessionViewStateProvider, noopViewStateProvider, type ChartHost, type ChartHostConfig, type RenderFn } from "./host";
|
|
9
10
|
export { createMarkResolver, type MarkResolver, type MarkResolverEnv } from "./selection";
|
|
10
11
|
export { planTrivialChart, compileTrivialSource, type TrivialPlan, type TrivialShapeKind } from "./trivial";
|
package/dist/types/payload.d.ts
CHANGED
|
@@ -60,10 +60,22 @@ export interface RenderPayload {
|
|
|
60
60
|
* facts, and a single blended count would hide which end of the route is the coarse one.
|
|
61
61
|
*/
|
|
62
62
|
geoPointDest?: GeoPointReport;
|
|
63
|
+
/**
|
|
64
|
+
* The host re-anchored date cells to the UTC midnight of their day (opts.utcDays). Promoted into
|
|
65
|
+
* options.dateCellsAreUtcDays, which tells a chart - and the server-shipped date shim inside it -
|
|
66
|
+
* that no cell can still be sitting at the reader's local midnight. Present only when utcDays was
|
|
67
|
+
* requested, so every other payload is unchanged.
|
|
68
|
+
*/
|
|
69
|
+
dateCellsAreUtcDays?: boolean;
|
|
70
|
+
/** Which columns the re-anchoring actually moved (diagnostics; empty when every date was already
|
|
71
|
+
* UTC midnight). Present only alongside dateCellsAreUtcDays. */
|
|
72
|
+
utcDayColumns?: string[];
|
|
63
73
|
}
|
|
64
74
|
export declare function buildRenderPayload(cols: Array<{
|
|
65
75
|
name: string;
|
|
66
76
|
} & Record<string, any>>, rowObjs: Array<Record<string, any>>, geo?: {
|
|
67
77
|
column: string;
|
|
68
78
|
kind: string;
|
|
69
|
-
} | null, point?: GeoPointBinding | null, destination?: GeoPointBinding | null
|
|
79
|
+
} | null, point?: GeoPointBinding | null, destination?: GeoPointBinding | null, opts?: {
|
|
80
|
+
utcDays?: boolean;
|
|
81
|
+
} | null): RenderPayload;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bicharts/chart-host",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.101",
|
|
4
4
|
"description": "Run a BIC-generated D3 chart in any web host: compiles the generated render() function, applies the shared option defaults, resolves mark clicks (through tooltip overlays), owns the selection affordance, and translates row indices between cross-filtered charts. The same contract the BIC Power BI visual implements, minus Power BI. React bindings at @bicharts/chart-host/react.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|