@bicharts/chart-host 0.5.88 → 0.5.90
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-NWMMNXH2.mjs → chunk-GUCTCDEO.mjs} +1797 -1146
- package/dist/index.mjs +317 -810
- package/dist/react.mjs +1 -1
- package/dist/types/colourSpread.d.ts +75 -0
- package/dist/types/host.d.ts +16 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/palette.d.ts +26 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -44,13 +44,16 @@ import {
|
|
|
44
44
|
MAX_FRAME_GROW_FACTOR,
|
|
45
45
|
MIN_CONTRAST,
|
|
46
46
|
MIN_HIT_BAND_PX,
|
|
47
|
+
MIN_RAMP_FILLS,
|
|
47
48
|
Me,
|
|
49
|
+
Mt,
|
|
48
50
|
PAGE_MATCH_TOLERANCE,
|
|
49
51
|
PHANTOM_FRACTION,
|
|
50
52
|
PILL_MIN_ALPHA,
|
|
51
53
|
PILL_MIN_COVERAGE,
|
|
52
54
|
PILL_OPAQUE_ALPHA,
|
|
53
55
|
ROW_IDX_ATTR,
|
|
56
|
+
SAME_SHADE_DELTA_E,
|
|
54
57
|
SCROLL_SLACK_PX,
|
|
55
58
|
SEASONAL_MARKERS_DEFAULT,
|
|
56
59
|
SELECTION_ACTIVE_CLASS,
|
|
@@ -64,10 +67,12 @@ import {
|
|
|
64
67
|
blankRenderFlag,
|
|
65
68
|
buildRenderPayload,
|
|
66
69
|
cellSuppressesNormalize,
|
|
70
|
+
censusColourSpread,
|
|
67
71
|
censusHitBands,
|
|
68
72
|
censusMarks,
|
|
69
73
|
chartOwnsTimeline,
|
|
70
74
|
clearGeoCache,
|
|
75
|
+
colourSpreadFlag,
|
|
71
76
|
compileRenderFn,
|
|
72
77
|
compositeOver,
|
|
73
78
|
contentExtentOf,
|
|
@@ -112,7 +117,7 @@ import {
|
|
|
112
117
|
u,
|
|
113
118
|
unpinScrolledAxis,
|
|
114
119
|
vt
|
|
115
|
-
} from "./chunk-
|
|
120
|
+
} from "./chunk-GUCTCDEO.mjs";
|
|
116
121
|
import "./chunk-A2GMXZP7.mjs";
|
|
117
122
|
import "./chunk-GHODWOAL.mjs";
|
|
118
123
|
|
|
@@ -120,33 +125,33 @@ import "./chunk-GHODWOAL.mjs";
|
|
|
120
125
|
var META_COLUMNS = /* @__PURE__ */ new Set(["__rowIdx__", "__geoIso__", "__geoLat__", "__geoLon__", "__geoPrecision__"]);
|
|
121
126
|
var MAX_FREQUENCY_CATEGORIES = 30;
|
|
122
127
|
var MIN_HISTOGRAM_ROWS = 8;
|
|
123
|
-
function columnName(
|
|
124
|
-
return typeof
|
|
128
|
+
function columnName(c) {
|
|
129
|
+
return typeof c === "string" ? c : String(c?.name ?? "");
|
|
125
130
|
}
|
|
126
131
|
function isNumericColumn(rows, idx) {
|
|
127
132
|
let seen = 0;
|
|
128
|
-
for (let
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
133
|
+
for (let r = 0; r < rows.length && seen < 50; r++) {
|
|
134
|
+
const v = rows[r]?.[idx];
|
|
135
|
+
if (v === null || v === void 0 || v === "") continue;
|
|
131
136
|
seen++;
|
|
132
|
-
if (typeof
|
|
133
|
-
if (!isFinite(
|
|
137
|
+
if (typeof v === "number") {
|
|
138
|
+
if (!isFinite(v)) return false;
|
|
134
139
|
continue;
|
|
135
140
|
}
|
|
136
|
-
if (String(
|
|
141
|
+
if (String(v).trim() === "" || !isFinite(Number(v))) return false;
|
|
137
142
|
}
|
|
138
143
|
return seen > 0;
|
|
139
144
|
}
|
|
140
|
-
function lit(
|
|
141
|
-
return JSON.stringify(String(
|
|
145
|
+
function lit(s) {
|
|
146
|
+
return JSON.stringify(String(s));
|
|
142
147
|
}
|
|
143
148
|
function planTrivialChart(data) {
|
|
144
149
|
const allCols = Array.isArray(data?.columns) ? data.columns : [];
|
|
145
150
|
const rows = Array.isArray(data?.rows) ? data.rows : [];
|
|
146
151
|
if (!allCols.length || !rows.length) return null;
|
|
147
152
|
const dataCols = [];
|
|
148
|
-
for (let
|
|
149
|
-
if (!META_COLUMNS.has(columnName(allCols[
|
|
153
|
+
for (let i = 0; i < allCols.length; i++) {
|
|
154
|
+
if (!META_COLUMNS.has(columnName(allCols[i]))) dataCols.push(i);
|
|
150
155
|
}
|
|
151
156
|
if (dataCols.length !== 1) return null;
|
|
152
157
|
const idx = dataCols[0];
|
|
@@ -174,8 +179,8 @@ function planTrivialChart(data) {
|
|
|
174
179
|
);
|
|
175
180
|
}
|
|
176
181
|
const distinct = /* @__PURE__ */ new Set();
|
|
177
|
-
for (let
|
|
178
|
-
const raw = rows[
|
|
182
|
+
for (let r = 0; r < rows.length; r++) {
|
|
183
|
+
const raw = rows[r]?.[idx];
|
|
179
184
|
distinct.add(raw === null || raw === void 0 || raw === "" ? "(blank)" : String(raw));
|
|
180
185
|
}
|
|
181
186
|
if (distinct.size < 2 || distinct.size >= rows.length) return null;
|
|
@@ -392,21 +397,21 @@ function histogramSource(idx, name2) {
|
|
|
392
397
|
var DEFAULT_TIMEOUT_MS = 2e3;
|
|
393
398
|
function svgToDataUrl(svg) {
|
|
394
399
|
const cloned = svg.cloneNode(true);
|
|
395
|
-
const
|
|
396
|
-
const
|
|
397
|
-
cloned.setAttribute("width", String(Math.round(
|
|
398
|
-
cloned.setAttribute("height", String(Math.round(
|
|
400
|
+
const w = svg.clientWidth || svg.getBoundingClientRect && svg.getBoundingClientRect().width || 600;
|
|
401
|
+
const h = svg.clientHeight || svg.getBoundingClientRect && svg.getBoundingClientRect().height || 400;
|
|
402
|
+
cloned.setAttribute("width", String(Math.round(w)));
|
|
403
|
+
cloned.setAttribute("height", String(Math.round(h)));
|
|
399
404
|
if (!cloned.getAttribute("xmlns")) cloned.setAttribute("xmlns", "http://www.w3.org/2000/svg");
|
|
400
405
|
const svgStr = new XMLSerializer().serializeToString(cloned);
|
|
401
406
|
const bytes = new TextEncoder().encode(svgStr);
|
|
402
407
|
let binary = "";
|
|
403
|
-
for (let
|
|
408
|
+
for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
|
|
404
409
|
return "data:image/svg+xml;base64," + btoa(binary);
|
|
405
410
|
}
|
|
406
411
|
function svgNaturalSize(svg) {
|
|
407
|
-
const
|
|
408
|
-
const
|
|
409
|
-
return { width: Math.round(
|
|
412
|
+
const w = svg.clientWidth || svg.getBoundingClientRect && svg.getBoundingClientRect().width || 600;
|
|
413
|
+
const h = svg.clientHeight || svg.getBoundingClientRect && svg.getBoundingClientRect().height || 400;
|
|
414
|
+
return { width: Math.round(w), height: Math.round(h) };
|
|
410
415
|
}
|
|
411
416
|
function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
|
|
412
417
|
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
@@ -414,8 +419,8 @@ function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
|
|
|
414
419
|
let img;
|
|
415
420
|
try {
|
|
416
421
|
img = new Image();
|
|
417
|
-
} catch (
|
|
418
|
-
opts.onWarn?.("snapshot-no-image",
|
|
422
|
+
} catch (e) {
|
|
423
|
+
opts.onWarn?.("snapshot-no-image", e instanceof Error ? e.message : String(e));
|
|
419
424
|
resolve(null);
|
|
420
425
|
return;
|
|
421
426
|
}
|
|
@@ -442,8 +447,8 @@ function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
|
|
|
442
447
|
c2d.fillRect(0, 0, cw, ch);
|
|
443
448
|
c2d.drawImage(img, 0, 0, cw, ch);
|
|
444
449
|
resolve(canvas.toDataURL("image/png"));
|
|
445
|
-
} catch (
|
|
446
|
-
opts.onWarn?.("snapshot-raster-draw",
|
|
450
|
+
} catch (e) {
|
|
451
|
+
opts.onWarn?.("snapshot-raster-draw", e instanceof Error ? e.message : String(e));
|
|
447
452
|
resolve(null);
|
|
448
453
|
}
|
|
449
454
|
};
|
|
@@ -462,33 +467,33 @@ async function captureSvgSnapshot(root, opts = {}) {
|
|
|
462
467
|
let svgUrl;
|
|
463
468
|
try {
|
|
464
469
|
svgUrl = svgToDataUrl(svg);
|
|
465
|
-
} catch (
|
|
466
|
-
opts.onWarn?.("snapshot-serialize",
|
|
470
|
+
} catch (e) {
|
|
471
|
+
opts.onWarn?.("snapshot-serialize", e instanceof Error ? e.message : String(e));
|
|
467
472
|
return null;
|
|
468
473
|
}
|
|
469
474
|
const { width, height } = svgNaturalSize(svg);
|
|
470
475
|
try {
|
|
471
476
|
const png = await rasterizeSvgToPngDataUrl(svgUrl, width, height, opts);
|
|
472
477
|
return png || svgUrl;
|
|
473
|
-
} catch (
|
|
474
|
-
opts.onWarn?.("snapshot-raster-unexpected",
|
|
478
|
+
} catch (e) {
|
|
479
|
+
opts.onWarn?.("snapshot-raster-unexpected", e instanceof Error ? e.message : String(e));
|
|
475
480
|
return svgUrl;
|
|
476
481
|
}
|
|
477
482
|
}
|
|
478
483
|
|
|
479
484
|
// src/review.ts
|
|
480
|
-
function shouldReview(
|
|
481
|
-
if (!
|
|
482
|
-
if (!
|
|
483
|
-
if (!
|
|
484
|
-
if (!
|
|
485
|
-
if (
|
|
486
|
-
if (
|
|
485
|
+
function shouldReview(g) {
|
|
486
|
+
if (!g.enabled) return false;
|
|
487
|
+
if (!g.modeLicensed) return false;
|
|
488
|
+
if (!g.firstRenderAfterGenerate) return false;
|
|
489
|
+
if (!g.codeVersion || g.codeVersion <= 0) return false;
|
|
490
|
+
if (g.inFlight) return false;
|
|
491
|
+
if (g.reviewedVersions.has(g.codeVersion)) return false;
|
|
487
492
|
return true;
|
|
488
493
|
}
|
|
489
494
|
function bareBase64(dataUrlOrB64) {
|
|
490
|
-
const
|
|
491
|
-
if (
|
|
495
|
+
const m = /^data:([^;,]+);base64,(.*)$/s.exec(dataUrlOrB64 || "");
|
|
496
|
+
if (m) return { b64: m[2], mediaType: m[1] };
|
|
492
497
|
return { b64: dataUrlOrB64 || "", mediaType: "image/png" };
|
|
493
498
|
}
|
|
494
499
|
function buildReviewWire(input) {
|
|
@@ -504,17 +509,17 @@ function buildReviewWire(input) {
|
|
|
504
509
|
correlationId: (input.correlationId ?? "").toString()
|
|
505
510
|
};
|
|
506
511
|
}
|
|
507
|
-
function actionFor(
|
|
508
|
-
if (!
|
|
509
|
-
if (
|
|
510
|
-
const instr = (
|
|
512
|
+
function actionFor(v) {
|
|
513
|
+
if (!v) return { kind: "keep", reason: "no verdict returned", userVisible: false };
|
|
514
|
+
if (v.status === "PROPOSED") {
|
|
515
|
+
const instr = (v.instruction ?? "").toString().trim();
|
|
511
516
|
if (instr === "") return { kind: "keep", reason: "reviewer proposed no actionable change", userVisible: false };
|
|
512
|
-
return { kind: "propose", instruction: instr, reason: (
|
|
517
|
+
return { kind: "propose", instruction: instr, reason: (v.verdictReason ?? "").toString().trim() };
|
|
513
518
|
}
|
|
514
|
-
if (
|
|
515
|
-
if (
|
|
516
|
-
if (
|
|
517
|
-
return { kind: "keep", reason:
|
|
519
|
+
if (v.status === "OK" && v.fix) return { kind: "apply-fix", fix: v.fix, reason: v.verdictReason ?? "" };
|
|
520
|
+
if (v.status === "NOCHANGE") return { kind: "keep", reason: v.verdictReason ?? "the chart renders as asked", userVisible: false };
|
|
521
|
+
if (v.status === "REFUSED") return { kind: "keep", reason: v.errorMessage ?? "review not available", userVisible: false };
|
|
522
|
+
return { kind: "keep", reason: v.errorMessage ?? v.verdictReason ?? "review failed", userVisible: false };
|
|
518
523
|
}
|
|
519
524
|
|
|
520
525
|
// src/reviewDialog.ts
|
|
@@ -530,9 +535,9 @@ function askApplyImprovements(container, reason, opts = {}) {
|
|
|
530
535
|
try {
|
|
531
536
|
const minW = opts.minWidth ?? 260;
|
|
532
537
|
const minH = opts.minHeight ?? 170;
|
|
533
|
-
const
|
|
534
|
-
const
|
|
535
|
-
if (
|
|
538
|
+
const w = container.clientWidth || container.offsetWidth || 0;
|
|
539
|
+
const h = container.clientHeight || container.offsetHeight || 0;
|
|
540
|
+
if (w < minW || h < minH) {
|
|
536
541
|
resolve(false);
|
|
537
542
|
return;
|
|
538
543
|
}
|
|
@@ -577,7 +582,7 @@ function askApplyImprovements(container, reason, opts = {}) {
|
|
|
577
582
|
yes.textContent = text.accept;
|
|
578
583
|
yes.style.cssText = "font-weight:600;";
|
|
579
584
|
let done = false;
|
|
580
|
-
const finish = (
|
|
585
|
+
const finish = (v) => {
|
|
581
586
|
if (done) return;
|
|
582
587
|
done = true;
|
|
583
588
|
try {
|
|
@@ -585,17 +590,17 @@ function askApplyImprovements(container, reason, opts = {}) {
|
|
|
585
590
|
} catch {
|
|
586
591
|
}
|
|
587
592
|
doc.removeEventListener("keydown", onKey, true);
|
|
588
|
-
resolve(
|
|
593
|
+
resolve(v);
|
|
589
594
|
};
|
|
590
|
-
const onKey = (
|
|
591
|
-
if (
|
|
592
|
-
|
|
595
|
+
const onKey = (e) => {
|
|
596
|
+
if (e.key === "Escape") {
|
|
597
|
+
e.stopPropagation();
|
|
593
598
|
finish(false);
|
|
594
599
|
}
|
|
595
600
|
};
|
|
596
601
|
no.addEventListener("click", () => finish(false));
|
|
597
602
|
yes.addEventListener("click", () => finish(true));
|
|
598
|
-
ov.addEventListener("click", (
|
|
603
|
+
ov.addEventListener("click", (e) => e.stopPropagation());
|
|
599
604
|
doc.addEventListener("keydown", onKey, true);
|
|
600
605
|
row.append(no, yes);
|
|
601
606
|
card.append(head, why, cost, row);
|
|
@@ -645,8 +650,8 @@ function refusalIsSelectable(row) {
|
|
|
645
650
|
}
|
|
646
651
|
function orderRefusalsForDisplay(rows) {
|
|
647
652
|
if (!Array.isArray(rows)) return [];
|
|
648
|
-
const named = rows.filter((
|
|
649
|
-
return [...named.filter(refusalIsSelectable), ...named.filter((
|
|
653
|
+
const named = rows.filter((r) => !!r && typeof r.name === "string" && r.name.trim() !== "");
|
|
654
|
+
return [...named.filter(refusalIsSelectable), ...named.filter((r) => !refusalIsSelectable(r))];
|
|
650
655
|
}
|
|
651
656
|
function qualifyRefusalHeadingFor(row, state) {
|
|
652
657
|
if (refusalIsSelectable(row)) {
|
|
@@ -667,8 +672,8 @@ function hasRefusalsToShow(rows) {
|
|
|
667
672
|
}
|
|
668
673
|
var QUALIFY_REFUSAL_UNSPECIFIED = "refused for the fields as bound - no single requirement to name";
|
|
669
674
|
function qualifyRefusalReason(reason, fallback = QUALIFY_REFUSAL_UNSPECIFIED) {
|
|
670
|
-
const
|
|
671
|
-
return
|
|
675
|
+
const s = (reason ?? "").trim();
|
|
676
|
+
return s !== "" ? s : fallback;
|
|
672
677
|
}
|
|
673
678
|
|
|
674
679
|
// src/qualifyLaunch.ts
|
|
@@ -687,13 +692,13 @@ function chooserFitsViewport(width, height) {
|
|
|
687
692
|
if (!isFinite(width) || !isFinite(height)) return false;
|
|
688
693
|
return width >= CHOOSER_MIN_WIDTH_PX && height >= CHOOSER_MIN_HEIGHT_PX;
|
|
689
694
|
}
|
|
690
|
-
function shouldOpenChooserOnGenerate(
|
|
691
|
-
if (!
|
|
692
|
-
if (!
|
|
693
|
-
return chooserFitsViewport(
|
|
695
|
+
function shouldOpenChooserOnGenerate(i) {
|
|
696
|
+
if (!i.enabled) return false;
|
|
697
|
+
if (!i.hasData) return false;
|
|
698
|
+
return chooserFitsViewport(i.width, i.height);
|
|
694
699
|
}
|
|
695
|
-
function shouldOpenInlineChooserOnGenerate(
|
|
696
|
-
return
|
|
700
|
+
function shouldOpenInlineChooserOnGenerate(i) {
|
|
701
|
+
return i.enabled === true && i.hasData === true;
|
|
697
702
|
}
|
|
698
703
|
function canConfirmLaunch(selected) {
|
|
699
704
|
return typeof selected === "string" && selected.trim() !== "";
|
|
@@ -711,10 +716,10 @@ function normalizeFilterTerm(raw) {
|
|
|
711
716
|
return raw.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/\s+/g, " ").trim();
|
|
712
717
|
}
|
|
713
718
|
var FILTER_MIN_TERM_CHARS = 2;
|
|
714
|
-
function startsAWord(name2,
|
|
715
|
-
for (let
|
|
716
|
-
if (
|
|
717
|
-
const prev = name2.charCodeAt(
|
|
719
|
+
function startsAWord(name2, t) {
|
|
720
|
+
for (let i = name2.indexOf(t); i >= 0; i = name2.indexOf(t, i + 1)) {
|
|
721
|
+
if (i === 0) return true;
|
|
722
|
+
const prev = name2.charCodeAt(i - 1);
|
|
718
723
|
const alnum = prev >= 97 && prev <= 122 || prev >= 48 && prev <= 57;
|
|
719
724
|
if (!alnum) return true;
|
|
720
725
|
}
|
|
@@ -722,31 +727,31 @@ function startsAWord(name2, t2) {
|
|
|
722
727
|
}
|
|
723
728
|
function filterQualifyRows(rows, term, read) {
|
|
724
729
|
const all = Array.isArray(rows) ? rows.slice() : [];
|
|
725
|
-
const
|
|
726
|
-
if (
|
|
730
|
+
const t = normalizeFilterTerm(term);
|
|
731
|
+
if (t.length < FILTER_MIN_TERM_CHARS) return { rows: all, tier: "all", term: "" };
|
|
727
732
|
const atWordStart = [];
|
|
728
733
|
const midWord = [];
|
|
729
734
|
const byDesc = [];
|
|
730
735
|
for (const row of all) {
|
|
731
|
-
const
|
|
732
|
-
const name2 = normalizeFilterTerm(
|
|
736
|
+
const f = read(row);
|
|
737
|
+
const name2 = normalizeFilterTerm(f.name);
|
|
733
738
|
if (name2 === "") continue;
|
|
734
|
-
if (name2.indexOf(
|
|
735
|
-
(startsAWord(name2,
|
|
739
|
+
if (name2.indexOf(t) >= 0) {
|
|
740
|
+
(startsAWord(name2, t) ? atWordStart : midWord).push(row);
|
|
736
741
|
continue;
|
|
737
742
|
}
|
|
738
|
-
if (normalizeFilterTerm(
|
|
743
|
+
if (normalizeFilterTerm(f.description).indexOf(t) >= 0) byDesc.push(row);
|
|
739
744
|
}
|
|
740
|
-
if (atWordStart.length > 0) return { rows: atWordStart, tier: "name", term:
|
|
741
|
-
if (midWord.length > 0) return { rows: midWord, tier: "namePart", term:
|
|
742
|
-
if (byDesc.length > 0) return { rows: byDesc, tier: "desc", term:
|
|
743
|
-
return { rows: [], tier: "none", term:
|
|
745
|
+
if (atWordStart.length > 0) return { rows: atWordStart, tier: "name", term: t };
|
|
746
|
+
if (midWord.length > 0) return { rows: midWord, tier: "namePart", term: t };
|
|
747
|
+
if (byDesc.length > 0) return { rows: byDesc, tier: "desc", term: t };
|
|
748
|
+
return { rows: [], tier: "none", term: t };
|
|
744
749
|
}
|
|
745
|
-
function readQualifyChartRow(
|
|
746
|
-
return { name:
|
|
750
|
+
function readQualifyChartRow(r) {
|
|
751
|
+
return { name: r.name, description: r.description };
|
|
747
752
|
}
|
|
748
|
-
function readQualifyRefusalRow(
|
|
749
|
-
return { name:
|
|
753
|
+
function readQualifyRefusalRow(r) {
|
|
754
|
+
return { name: r.name, description: r.reason };
|
|
750
755
|
}
|
|
751
756
|
var FILTER_ROW_PX = 32;
|
|
752
757
|
var FILTER_MIN_WIDTH_PX = 420;
|
|
@@ -758,34 +763,34 @@ function listNeedsFilter(scrollHeight, clientHeight) {
|
|
|
758
763
|
if (!Number.isFinite(scrollHeight) || !Number.isFinite(clientHeight)) return false;
|
|
759
764
|
return scrollHeight > clientHeight - FILTER_ROW_PX;
|
|
760
765
|
}
|
|
761
|
-
function qualifyFilterGate(
|
|
762
|
-
if (!filterFitsChooser(
|
|
763
|
-
if (!listNeedsFilter(
|
|
766
|
+
function qualifyFilterGate(i) {
|
|
767
|
+
if (!filterFitsChooser(i.cardWidth, i.cardHeight)) return { show: false, why: "too-small" };
|
|
768
|
+
if (!listNeedsFilter(i.scrollHeight, i.clientHeight)) return { show: false, why: "no-overflow" };
|
|
764
769
|
return { show: true, why: "shown" };
|
|
765
770
|
}
|
|
766
771
|
function computeQualifyFilterView(groups, term) {
|
|
767
|
-
const
|
|
768
|
-
const read = (
|
|
772
|
+
const g = Array.isArray(groups) ? groups : [];
|
|
773
|
+
const read = (r) => ({ name: r.name, description: r.description });
|
|
769
774
|
const collect = (section) => {
|
|
770
775
|
const out = [];
|
|
771
|
-
for (const grp of
|
|
776
|
+
for (const grp of g) if (grp.section === section) for (const r of grp.rows) out.push(r);
|
|
772
777
|
return out;
|
|
773
778
|
};
|
|
774
779
|
const fitRows = collect("fits");
|
|
775
780
|
const fit = filterQualifyRows(fitRows, term, read);
|
|
776
781
|
const ref = filterQualifyRows(collect("refused"), term, read);
|
|
777
782
|
const visible = /* @__PURE__ */ new Set();
|
|
778
|
-
for (const
|
|
779
|
-
for (const
|
|
783
|
+
for (const r of fit.rows) visible.add(r.el);
|
|
784
|
+
for (const r of ref.rows) visible.add(r.el);
|
|
780
785
|
const show = [], hide = [], showHeadings = [], hideHeadings = [];
|
|
781
|
-
for (const grp of
|
|
786
|
+
for (const grp of g) {
|
|
782
787
|
let any = false;
|
|
783
|
-
for (const
|
|
784
|
-
if (visible.has(
|
|
785
|
-
show.push(
|
|
788
|
+
for (const r of grp.rows) {
|
|
789
|
+
if (visible.has(r.el)) {
|
|
790
|
+
show.push(r.el);
|
|
786
791
|
any = true;
|
|
787
792
|
} else {
|
|
788
|
-
hide.push(
|
|
793
|
+
hide.push(r.el);
|
|
789
794
|
}
|
|
790
795
|
}
|
|
791
796
|
if (grp.heading !== null) (any ? showHeadings : hideHeadings).push(grp.heading);
|
|
@@ -824,17 +829,17 @@ var INLINE_FILTER_MIN_ROWS = 8;
|
|
|
824
829
|
|
|
825
830
|
// src/sourceDateFormat.ts
|
|
826
831
|
function formatSourceDate(raw, opts = {}) {
|
|
827
|
-
const
|
|
828
|
-
if (!
|
|
829
|
-
const dayFrame = u(
|
|
832
|
+
const d = toDate(raw);
|
|
833
|
+
if (!d) return null;
|
|
834
|
+
const dayFrame = u(d);
|
|
830
835
|
const frame = dayFrame ?? (opts.dialect === "dotnet" ? "local" : "utc");
|
|
831
|
-
const
|
|
836
|
+
const p3 = partsIn(d, frame);
|
|
832
837
|
const format = cleanFormat(opts.format, opts.dialect);
|
|
833
838
|
if (format && opts.dialect) {
|
|
834
|
-
const rendered = renderFormat(format,
|
|
839
|
+
const rendered = renderFormat(format, p3, opts.dialect, opts.culture);
|
|
835
840
|
if (rendered) return rendered;
|
|
836
841
|
}
|
|
837
|
-
return localeDate(
|
|
842
|
+
return localeDate(p3, !!dayFrame, opts.culture);
|
|
838
843
|
}
|
|
839
844
|
function formatSourceDateFor(raw, columnName2, formats, culture) {
|
|
840
845
|
return formatSourceDate(raw, {
|
|
@@ -847,41 +852,41 @@ var ISO_LIKE_RE = /^\s*\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(
|
|
|
847
852
|
function toDate(raw) {
|
|
848
853
|
if (raw instanceof Date) return isNaN(raw.getTime()) ? null : raw;
|
|
849
854
|
if (typeof raw !== "string" || !ISO_LIKE_RE.test(raw)) return null;
|
|
850
|
-
const
|
|
851
|
-
return
|
|
855
|
+
const d = p(raw.trim());
|
|
856
|
+
return d && !isNaN(d.getTime()) ? d : null;
|
|
852
857
|
}
|
|
853
|
-
function partsIn(
|
|
858
|
+
function partsIn(d, frame) {
|
|
854
859
|
return frame === "utc" ? {
|
|
855
|
-
year:
|
|
856
|
-
month:
|
|
857
|
-
day:
|
|
858
|
-
hours:
|
|
859
|
-
minutes:
|
|
860
|
-
seconds:
|
|
861
|
-
ms:
|
|
862
|
-
weekday:
|
|
860
|
+
year: d.getUTCFullYear(),
|
|
861
|
+
month: d.getUTCMonth() + 1,
|
|
862
|
+
day: d.getUTCDate(),
|
|
863
|
+
hours: d.getUTCHours(),
|
|
864
|
+
minutes: d.getUTCMinutes(),
|
|
865
|
+
seconds: d.getUTCSeconds(),
|
|
866
|
+
ms: d.getUTCMilliseconds(),
|
|
867
|
+
weekday: d.getUTCDay()
|
|
863
868
|
} : {
|
|
864
|
-
year:
|
|
865
|
-
month:
|
|
866
|
-
day:
|
|
867
|
-
hours:
|
|
868
|
-
minutes:
|
|
869
|
-
seconds:
|
|
870
|
-
ms:
|
|
871
|
-
weekday:
|
|
869
|
+
year: d.getFullYear(),
|
|
870
|
+
month: d.getMonth() + 1,
|
|
871
|
+
day: d.getDate(),
|
|
872
|
+
hours: d.getHours(),
|
|
873
|
+
minutes: d.getMinutes(),
|
|
874
|
+
seconds: d.getSeconds(),
|
|
875
|
+
ms: d.getMilliseconds(),
|
|
876
|
+
weekday: d.getDay()
|
|
872
877
|
};
|
|
873
878
|
}
|
|
874
|
-
function utcAnchor(
|
|
875
|
-
const
|
|
876
|
-
if (
|
|
877
|
-
return
|
|
879
|
+
function utcAnchor(p3) {
|
|
880
|
+
const d = new Date(Date.UTC(p3.year, p3.month - 1, p3.day, p3.hours, p3.minutes, p3.seconds, p3.ms));
|
|
881
|
+
if (p3.year >= 0 && p3.year < 100) d.setUTCFullYear(p3.year);
|
|
882
|
+
return d;
|
|
878
883
|
}
|
|
879
|
-
function localeDate(
|
|
880
|
-
const anchor = utcAnchor(
|
|
884
|
+
function localeDate(p3, wholeDay, culture) {
|
|
885
|
+
const anchor = utcAnchor(p3);
|
|
881
886
|
try {
|
|
882
|
-
const
|
|
883
|
-
if (!wholeDay)
|
|
884
|
-
return new Intl.DateTimeFormat(culture || void 0,
|
|
887
|
+
const o = { dateStyle: "medium", timeZone: "UTC" };
|
|
888
|
+
if (!wholeDay) o.timeStyle = p3.seconds || p3.ms ? "medium" : "short";
|
|
889
|
+
return new Intl.DateTimeFormat(culture || void 0, o).format(anchor);
|
|
885
890
|
} catch {
|
|
886
891
|
const iso = anchor.toISOString();
|
|
887
892
|
return wholeDay ? iso.slice(0, 10) : `${iso.slice(0, 10)} ${iso.slice(11, 19)}`;
|
|
@@ -889,18 +894,18 @@ function localeDate(p4, wholeDay, culture) {
|
|
|
889
894
|
}
|
|
890
895
|
function cleanFormat(raw, dialect) {
|
|
891
896
|
if (!raw || !dialect) return null;
|
|
892
|
-
let
|
|
897
|
+
let s = firstSection(String(raw), dialect);
|
|
893
898
|
if (dialect === "excel") {
|
|
894
|
-
|
|
899
|
+
s = s.replace(/\[(h{1,2}|m{1,2}|s{1,2})\]/gi, "$1").replace(/\[[^\]]*\]/g, "");
|
|
895
900
|
}
|
|
896
|
-
if (!
|
|
897
|
-
return hasDateToken(
|
|
901
|
+
if (!s.trim() || /^general$/i.test(s.trim())) return null;
|
|
902
|
+
return hasDateToken(s, dialect) ? s : null;
|
|
898
903
|
}
|
|
899
|
-
function firstSection(
|
|
904
|
+
function firstSection(s, dialect) {
|
|
900
905
|
let out = "";
|
|
901
906
|
let quote = "";
|
|
902
|
-
for (let
|
|
903
|
-
const ch =
|
|
907
|
+
for (let i = 0; i < s.length; i++) {
|
|
908
|
+
const ch = s[i];
|
|
904
909
|
if (quote) {
|
|
905
910
|
out += ch;
|
|
906
911
|
if (ch === quote) quote = "";
|
|
@@ -912,8 +917,8 @@ function firstSection(s2, dialect) {
|
|
|
912
917
|
continue;
|
|
913
918
|
}
|
|
914
919
|
if (ch === "\\") {
|
|
915
|
-
out += ch + (
|
|
916
|
-
|
|
920
|
+
out += ch + (s[i + 1] ?? "");
|
|
921
|
+
i++;
|
|
917
922
|
continue;
|
|
918
923
|
}
|
|
919
924
|
if (ch === ";") break;
|
|
@@ -921,21 +926,21 @@ function firstSection(s2, dialect) {
|
|
|
921
926
|
}
|
|
922
927
|
return out;
|
|
923
928
|
}
|
|
924
|
-
function hasDateToken(
|
|
925
|
-
const stripped = stripLiterals(
|
|
929
|
+
function hasDateToken(s, dialect) {
|
|
930
|
+
const stripped = stripLiterals(s, dialect);
|
|
926
931
|
return dialect === "excel" ? /[ymdhs]/i.test(stripped) : /[yMdHhmsft]/.test(stripped);
|
|
927
932
|
}
|
|
928
|
-
function stripLiterals(
|
|
933
|
+
function stripLiterals(s, dialect) {
|
|
929
934
|
let out = "";
|
|
930
|
-
for (let
|
|
931
|
-
const ch =
|
|
935
|
+
for (let i = 0; i < s.length; i++) {
|
|
936
|
+
const ch = s[i];
|
|
932
937
|
if (ch === "\\" || dialect === "dotnet" && ch === "%") {
|
|
933
|
-
|
|
938
|
+
i++;
|
|
934
939
|
continue;
|
|
935
940
|
}
|
|
936
941
|
if (ch === '"' || dialect === "dotnet" && ch === "'") {
|
|
937
|
-
const end =
|
|
938
|
-
|
|
942
|
+
const end = s.indexOf(ch, i + 1);
|
|
943
|
+
i = end < 0 ? s.length : end;
|
|
939
944
|
continue;
|
|
940
945
|
}
|
|
941
946
|
out += ch;
|
|
@@ -984,62 +989,62 @@ var DOTNET_TOKENS = [
|
|
|
984
989
|
[/^tt/, "meridiemLong"],
|
|
985
990
|
[/^t/, "meridiemShort"]
|
|
986
991
|
];
|
|
987
|
-
function tokenize(
|
|
992
|
+
function tokenize(s, dialect) {
|
|
988
993
|
const table = dialect === "excel" ? EXCEL_TOKENS : DOTNET_TOKENS;
|
|
989
994
|
const out = [];
|
|
990
|
-
let
|
|
991
|
-
while (
|
|
992
|
-
const ch =
|
|
995
|
+
let i = 0;
|
|
996
|
+
while (i < s.length) {
|
|
997
|
+
const ch = s[i];
|
|
993
998
|
if (ch === "\\" || dialect === "dotnet" && ch === "%") {
|
|
994
|
-
if (
|
|
995
|
-
|
|
999
|
+
if (i + 1 < s.length) out.push({ kind: "literal", text: s[i + 1] });
|
|
1000
|
+
i += 2;
|
|
996
1001
|
continue;
|
|
997
1002
|
}
|
|
998
1003
|
if (ch === '"' || dialect === "dotnet" && ch === "'") {
|
|
999
|
-
const end =
|
|
1000
|
-
out.push({ kind: "literal", text: end < 0 ?
|
|
1001
|
-
|
|
1004
|
+
const end = s.indexOf(ch, i + 1);
|
|
1005
|
+
out.push({ kind: "literal", text: end < 0 ? s.slice(i + 1) : s.slice(i + 1, end) });
|
|
1006
|
+
i = end < 0 ? s.length : end + 1;
|
|
1002
1007
|
continue;
|
|
1003
1008
|
}
|
|
1004
|
-
const rest =
|
|
1009
|
+
const rest = s.slice(i);
|
|
1005
1010
|
let matched = false;
|
|
1006
1011
|
for (const [re, kind] of table) {
|
|
1007
|
-
const
|
|
1008
|
-
if (
|
|
1012
|
+
const m = re.exec(rest);
|
|
1013
|
+
if (m) {
|
|
1009
1014
|
out.push({ kind });
|
|
1010
|
-
|
|
1015
|
+
i += m[0].length;
|
|
1011
1016
|
matched = true;
|
|
1012
1017
|
break;
|
|
1013
1018
|
}
|
|
1014
1019
|
}
|
|
1015
1020
|
if (!matched) {
|
|
1016
1021
|
out.push({ kind: "literal", text: ch });
|
|
1017
|
-
|
|
1022
|
+
i++;
|
|
1018
1023
|
}
|
|
1019
1024
|
}
|
|
1020
1025
|
return out;
|
|
1021
1026
|
}
|
|
1022
1027
|
function resolveAmbiguousM(tokens) {
|
|
1023
|
-
const isHour = (
|
|
1024
|
-
const isSecond = (
|
|
1025
|
-
for (let
|
|
1026
|
-
const
|
|
1027
|
-
if (
|
|
1028
|
-
const two =
|
|
1028
|
+
const isHour = (t) => t.kind === "hour1" || t.kind === "hour2";
|
|
1029
|
+
const isSecond = (t) => t.kind === "second1" || t.kind === "second2";
|
|
1030
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
1031
|
+
const t = tokens[i];
|
|
1032
|
+
if (t.kind !== "mAmbiguous1" && t.kind !== "mAmbiguous2") continue;
|
|
1033
|
+
const two = t.kind === "mAmbiguous2";
|
|
1029
1034
|
let minute = false;
|
|
1030
|
-
for (let
|
|
1031
|
-
if (tokens[
|
|
1032
|
-
minute = isHour(tokens[
|
|
1035
|
+
for (let j = i - 1; j >= 0; j--) {
|
|
1036
|
+
if (tokens[j].kind === "literal") continue;
|
|
1037
|
+
minute = isHour(tokens[j]);
|
|
1033
1038
|
break;
|
|
1034
1039
|
}
|
|
1035
1040
|
if (!minute) {
|
|
1036
|
-
for (let
|
|
1037
|
-
if (tokens[
|
|
1038
|
-
minute = isSecond(tokens[
|
|
1041
|
+
for (let j = i + 1; j < tokens.length; j++) {
|
|
1042
|
+
if (tokens[j].kind === "literal") continue;
|
|
1043
|
+
minute = isSecond(tokens[j]);
|
|
1039
1044
|
break;
|
|
1040
1045
|
}
|
|
1041
1046
|
}
|
|
1042
|
-
|
|
1047
|
+
t.kind = minute ? two ? "minute2" : "minute1" : two ? "month2" : "month1";
|
|
1043
1048
|
}
|
|
1044
1049
|
}
|
|
1045
1050
|
var EN_MONTHS_LONG = [
|
|
@@ -1059,113 +1064,113 @@ var EN_MONTHS_LONG = [
|
|
|
1059
1064
|
var EN_MONTHS_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
1060
1065
|
var EN_DAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
1061
1066
|
var EN_DAYS_SHORT = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
1062
|
-
function name(
|
|
1067
|
+
function name(p3, kind, width, culture) {
|
|
1063
1068
|
try {
|
|
1064
1069
|
const opts = kind === "month" ? { month: width, timeZone: "UTC" } : { weekday: width === "narrow" ? "short" : width, timeZone: "UTC" };
|
|
1065
|
-
return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(
|
|
1070
|
+
return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(p3));
|
|
1066
1071
|
} catch {
|
|
1067
1072
|
if (kind === "month") {
|
|
1068
|
-
const long = EN_MONTHS_LONG[
|
|
1073
|
+
const long = EN_MONTHS_LONG[p3.month - 1] ?? "";
|
|
1069
1074
|
if (width === "long") return long;
|
|
1070
|
-
return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[
|
|
1075
|
+
return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[p3.month - 1] ?? "";
|
|
1071
1076
|
}
|
|
1072
|
-
return (width === "long" ? EN_DAYS_LONG[
|
|
1077
|
+
return (width === "long" ? EN_DAYS_LONG[p3.weekday] : EN_DAYS_SHORT[p3.weekday]) ?? "";
|
|
1073
1078
|
}
|
|
1074
1079
|
}
|
|
1075
|
-
var p2 = (
|
|
1076
|
-
function renderFormat(format,
|
|
1080
|
+
var p2 = (n) => (n < 10 ? "0" : "") + n;
|
|
1081
|
+
function renderFormat(format, p3, dialect, culture) {
|
|
1077
1082
|
const tokens = tokenize(format, dialect);
|
|
1078
1083
|
if (dialect === "excel") resolveAmbiguousM(tokens);
|
|
1079
|
-
const twelve = tokens.some((
|
|
1084
|
+
const twelve = tokens.some((t) => t.kind === "meridiemLong" || t.kind === "meridiemShort");
|
|
1080
1085
|
const hour12 = () => {
|
|
1081
|
-
const
|
|
1082
|
-
return
|
|
1086
|
+
const h = p3.hours % 12;
|
|
1087
|
+
return h === 0 ? 12 : h;
|
|
1083
1088
|
};
|
|
1084
1089
|
let out = "";
|
|
1085
1090
|
let sawField = false;
|
|
1086
|
-
for (const
|
|
1087
|
-
switch (
|
|
1091
|
+
for (const t of tokens) {
|
|
1092
|
+
switch (t.kind) {
|
|
1088
1093
|
case "literal":
|
|
1089
|
-
out +=
|
|
1094
|
+
out += t.text ?? "";
|
|
1090
1095
|
break;
|
|
1091
1096
|
case "year4":
|
|
1092
|
-
out += String(
|
|
1097
|
+
out += String(p3.year);
|
|
1093
1098
|
sawField = true;
|
|
1094
1099
|
break;
|
|
1095
1100
|
case "year2":
|
|
1096
|
-
out += p2((
|
|
1101
|
+
out += p2((p3.year % 100 + 100) % 100);
|
|
1097
1102
|
sawField = true;
|
|
1098
1103
|
break;
|
|
1099
1104
|
case "monthLong":
|
|
1100
|
-
out += name(
|
|
1105
|
+
out += name(p3, "month", "long", culture);
|
|
1101
1106
|
sawField = true;
|
|
1102
1107
|
break;
|
|
1103
1108
|
case "monthShort":
|
|
1104
|
-
out += name(
|
|
1109
|
+
out += name(p3, "month", "short", culture);
|
|
1105
1110
|
sawField = true;
|
|
1106
1111
|
break;
|
|
1107
1112
|
case "monthNarrow":
|
|
1108
|
-
out += name(
|
|
1113
|
+
out += name(p3, "month", "long", culture).slice(0, 1);
|
|
1109
1114
|
sawField = true;
|
|
1110
1115
|
break;
|
|
1111
1116
|
case "month2":
|
|
1112
|
-
out += p2(
|
|
1117
|
+
out += p2(p3.month);
|
|
1113
1118
|
sawField = true;
|
|
1114
1119
|
break;
|
|
1115
1120
|
case "month1":
|
|
1116
|
-
out += String(
|
|
1121
|
+
out += String(p3.month);
|
|
1117
1122
|
sawField = true;
|
|
1118
1123
|
break;
|
|
1119
1124
|
case "weekdayLong":
|
|
1120
|
-
out += name(
|
|
1125
|
+
out += name(p3, "weekday", "long", culture);
|
|
1121
1126
|
sawField = true;
|
|
1122
1127
|
break;
|
|
1123
1128
|
case "weekdayShort":
|
|
1124
|
-
out += name(
|
|
1129
|
+
out += name(p3, "weekday", "short", culture);
|
|
1125
1130
|
sawField = true;
|
|
1126
1131
|
break;
|
|
1127
1132
|
case "day2":
|
|
1128
|
-
out += p2(
|
|
1133
|
+
out += p2(p3.day);
|
|
1129
1134
|
sawField = true;
|
|
1130
1135
|
break;
|
|
1131
1136
|
case "day1":
|
|
1132
|
-
out += String(
|
|
1137
|
+
out += String(p3.day);
|
|
1133
1138
|
sawField = true;
|
|
1134
1139
|
break;
|
|
1135
1140
|
case "hour2":
|
|
1136
|
-
out += p2(twelve ? hour12() :
|
|
1141
|
+
out += p2(twelve ? hour12() : p3.hours);
|
|
1137
1142
|
sawField = true;
|
|
1138
1143
|
break;
|
|
1139
1144
|
case "hour1":
|
|
1140
|
-
out += String(twelve ? hour12() :
|
|
1145
|
+
out += String(twelve ? hour12() : p3.hours);
|
|
1141
1146
|
sawField = true;
|
|
1142
1147
|
break;
|
|
1143
1148
|
case "minute2":
|
|
1144
|
-
out += p2(
|
|
1149
|
+
out += p2(p3.minutes);
|
|
1145
1150
|
sawField = true;
|
|
1146
1151
|
break;
|
|
1147
1152
|
case "minute1":
|
|
1148
|
-
out += String(
|
|
1153
|
+
out += String(p3.minutes);
|
|
1149
1154
|
sawField = true;
|
|
1150
1155
|
break;
|
|
1151
1156
|
case "second2":
|
|
1152
|
-
out += p2(
|
|
1157
|
+
out += p2(p3.seconds);
|
|
1153
1158
|
sawField = true;
|
|
1154
1159
|
break;
|
|
1155
1160
|
case "second1":
|
|
1156
|
-
out += String(
|
|
1161
|
+
out += String(p3.seconds);
|
|
1157
1162
|
sawField = true;
|
|
1158
1163
|
break;
|
|
1159
1164
|
case "fraction":
|
|
1160
|
-
out += String(
|
|
1165
|
+
out += String(p3.ms).padStart(3, "0");
|
|
1161
1166
|
sawField = true;
|
|
1162
1167
|
break;
|
|
1163
1168
|
case "meridiemLong":
|
|
1164
|
-
out +=
|
|
1169
|
+
out += p3.hours < 12 ? "AM" : "PM";
|
|
1165
1170
|
sawField = true;
|
|
1166
1171
|
break;
|
|
1167
1172
|
case "meridiemShort":
|
|
1168
|
-
out +=
|
|
1173
|
+
out += p3.hours < 12 ? "A" : "P";
|
|
1169
1174
|
sawField = true;
|
|
1170
1175
|
break;
|
|
1171
1176
|
}
|
|
@@ -1177,14 +1182,14 @@ function renderFormat(format, p4, dialect, culture) {
|
|
|
1177
1182
|
var SYNTHETIC_PREFIX = "__";
|
|
1178
1183
|
var NUMERIC_DATATYPE = /int|double|decimal|single|float|number|currency|money/i;
|
|
1179
1184
|
function normaliseAggregation(raw) {
|
|
1180
|
-
const
|
|
1181
|
-
if (!
|
|
1182
|
-
if (/^(avg|average|mean)$/.test(
|
|
1183
|
-
if (/^(min|minimum)$/.test(
|
|
1184
|
-
if (/^(max|maximum)$/.test(
|
|
1185
|
-
if (/^(count|countrows)$/.test(
|
|
1186
|
-
if (/^(median|med)$/.test(
|
|
1187
|
-
if (/^(distinctcount|dcount|countdistinct|uniques?)$/.test(
|
|
1185
|
+
const s = String(raw ?? "").trim().toLowerCase();
|
|
1186
|
+
if (!s) return "sum";
|
|
1187
|
+
if (/^(avg|average|mean)$/.test(s)) return "average";
|
|
1188
|
+
if (/^(min|minimum)$/.test(s)) return "min";
|
|
1189
|
+
if (/^(max|maximum)$/.test(s)) return "max";
|
|
1190
|
+
if (/^(count|countrows)$/.test(s)) return "count";
|
|
1191
|
+
if (/^(median|med)$/.test(s)) return "median";
|
|
1192
|
+
if (/^(distinctcount|dcount|countdistinct|uniques?)$/.test(s)) return "distinctcount";
|
|
1188
1193
|
return "sum";
|
|
1189
1194
|
}
|
|
1190
1195
|
function aggLabel(agg) {
|
|
@@ -1236,59 +1241,59 @@ function isSuppressed(col) {
|
|
|
1236
1241
|
}
|
|
1237
1242
|
function resolveAgg(col, requested, auto) {
|
|
1238
1243
|
const fallback = () => {
|
|
1239
|
-
const
|
|
1240
|
-
return
|
|
1244
|
+
const d = Me(col);
|
|
1245
|
+
return d === "first" ? "count" : d;
|
|
1241
1246
|
};
|
|
1242
1247
|
if (auto) return fallback();
|
|
1243
1248
|
return It(col).indexOf(requested) >= 0 ? requested : fallback();
|
|
1244
1249
|
}
|
|
1245
|
-
function toNumber(
|
|
1246
|
-
if (
|
|
1247
|
-
const
|
|
1248
|
-
return Number.isFinite(
|
|
1250
|
+
function toNumber(v) {
|
|
1251
|
+
if (v == null || v === "") return null;
|
|
1252
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
1253
|
+
return Number.isFinite(n) ? n : null;
|
|
1249
1254
|
}
|
|
1250
1255
|
function reduce(values, agg, distinctRaw) {
|
|
1251
1256
|
if (agg === "count") return values.length;
|
|
1252
|
-
if (agg === "distinctcount") return new Set(distinctRaw.map((
|
|
1257
|
+
if (agg === "distinctcount") return new Set(distinctRaw.map((v) => v == null ? "\0" : String(v))).size;
|
|
1253
1258
|
if (!values.length) return null;
|
|
1254
1259
|
switch (agg) {
|
|
1255
1260
|
case "average":
|
|
1256
|
-
return values.reduce((
|
|
1261
|
+
return values.reduce((a, b) => a + b, 0) / values.length;
|
|
1257
1262
|
case "min":
|
|
1258
1263
|
return Math.min(...values);
|
|
1259
1264
|
case "max":
|
|
1260
1265
|
return Math.max(...values);
|
|
1261
1266
|
case "median": {
|
|
1262
|
-
const
|
|
1263
|
-
const
|
|
1264
|
-
return
|
|
1267
|
+
const s = [...values].sort((a, b) => a - b);
|
|
1268
|
+
const m = s.length >> 1;
|
|
1269
|
+
return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
|
|
1265
1270
|
}
|
|
1266
1271
|
default:
|
|
1267
|
-
return values.reduce((
|
|
1272
|
+
return values.reduce((a, b) => a + b, 0);
|
|
1268
1273
|
}
|
|
1269
1274
|
}
|
|
1270
|
-
function fmtNumber(
|
|
1275
|
+
function fmtNumber(v, culture) {
|
|
1271
1276
|
try {
|
|
1272
|
-
const abs = Math.abs(
|
|
1277
|
+
const abs = Math.abs(v);
|
|
1273
1278
|
const opts = abs >= 1e6 ? { notation: "compact", maximumFractionDigits: 1 } : { maximumFractionDigits: abs < 10 ? 2 : 0 };
|
|
1274
|
-
return new Intl.NumberFormat(culture || void 0, opts).format(
|
|
1279
|
+
return new Intl.NumberFormat(culture || void 0, opts).format(v);
|
|
1275
1280
|
} catch {
|
|
1276
|
-
return String(Math.round(
|
|
1281
|
+
return String(Math.round(v * 100) / 100);
|
|
1277
1282
|
}
|
|
1278
1283
|
}
|
|
1279
1284
|
function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
1280
1285
|
const columns = payload?.columns ?? [];
|
|
1281
1286
|
const rows = payload?.rows ?? [];
|
|
1282
1287
|
if (!columns.length || !rows.length) return null;
|
|
1283
|
-
const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((
|
|
1288
|
+
const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((n) => Number.isInteger(n))));
|
|
1284
1289
|
if (!wanted.length) return null;
|
|
1285
|
-
const rowIdxCol = columns.findIndex((
|
|
1290
|
+
const rowIdxCol = columns.findIndex((c) => c?.name === "__rowIdx__");
|
|
1286
1291
|
let byIdx = null;
|
|
1287
1292
|
if (rowIdxCol >= 0) {
|
|
1288
1293
|
byIdx = /* @__PURE__ */ new Map();
|
|
1289
|
-
for (let
|
|
1290
|
-
const
|
|
1291
|
-
if (
|
|
1294
|
+
for (let r = 0; r < rows.length; r++) {
|
|
1295
|
+
const v = toNumber(rows[r]?.[rowIdxCol]);
|
|
1296
|
+
if (v != null) byIdx.set(v, r);
|
|
1292
1297
|
}
|
|
1293
1298
|
}
|
|
1294
1299
|
const positions = [];
|
|
@@ -1302,16 +1307,16 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1302
1307
|
const maxMeasures = opts.maxMeasures ?? 4;
|
|
1303
1308
|
const maxHeaderValues = opts.maxHeaderValues ?? 3;
|
|
1304
1309
|
const maxDimensions = opts.maxDimensions ?? 2;
|
|
1305
|
-
const dimIdx = columns.findIndex((
|
|
1310
|
+
const dimIdx = columns.findIndex((c) => c && !isSynthetic(c.name) && !isMeasureColumn(c));
|
|
1306
1311
|
let header;
|
|
1307
1312
|
if (dimIdx >= 0) {
|
|
1308
1313
|
const seen = [];
|
|
1309
1314
|
const set = /* @__PURE__ */ new Set();
|
|
1310
|
-
for (const
|
|
1311
|
-
const
|
|
1312
|
-
if (!set.has(
|
|
1313
|
-
set.add(
|
|
1314
|
-
seen.push(
|
|
1315
|
+
for (const p3 of positions) {
|
|
1316
|
+
const s = displayText(columns[dimIdx], rows[p3]?.[dimIdx], opts);
|
|
1317
|
+
if (!set.has(s)) {
|
|
1318
|
+
set.add(s);
|
|
1319
|
+
seen.push(s);
|
|
1315
1320
|
}
|
|
1316
1321
|
if (seen.length > maxHeaderValues) break;
|
|
1317
1322
|
}
|
|
@@ -1321,35 +1326,35 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1321
1326
|
}
|
|
1322
1327
|
const measureCols = [];
|
|
1323
1328
|
const suppressedColumns = [];
|
|
1324
|
-
for (let
|
|
1325
|
-
if (!isMeasureColumn(columns[
|
|
1326
|
-
if (isSuppressed(columns[
|
|
1327
|
-
suppressedColumns.push(String(columns[
|
|
1329
|
+
for (let c = 0; c < columns.length; c++) {
|
|
1330
|
+
if (!isMeasureColumn(columns[c])) continue;
|
|
1331
|
+
if (isSuppressed(columns[c])) {
|
|
1332
|
+
suppressedColumns.push(String(columns[c]?.name ?? ""));
|
|
1328
1333
|
continue;
|
|
1329
1334
|
}
|
|
1330
|
-
measureCols.push(
|
|
1335
|
+
measureCols.push(c);
|
|
1331
1336
|
}
|
|
1332
1337
|
const shown = measureCols.slice(0, maxMeasures);
|
|
1333
1338
|
const lines = [];
|
|
1334
|
-
for (const
|
|
1335
|
-
const col = columns[
|
|
1339
|
+
for (const c of shown) {
|
|
1340
|
+
const col = columns[c];
|
|
1336
1341
|
const colAgg = resolveAgg(col, agg, auto);
|
|
1337
1342
|
const selVals = [];
|
|
1338
1343
|
const selRaw = [];
|
|
1339
|
-
for (const
|
|
1340
|
-
const
|
|
1341
|
-
selRaw.push(rows[
|
|
1342
|
-
if (
|
|
1344
|
+
for (const p3 of positions) {
|
|
1345
|
+
const n = toNumber(rows[p3]?.[c]);
|
|
1346
|
+
selRaw.push(rows[p3]?.[c]);
|
|
1347
|
+
if (n != null) selVals.push(n);
|
|
1343
1348
|
}
|
|
1344
1349
|
const value = reduce(selVals, colAgg, selRaw);
|
|
1345
1350
|
let sharePct = null;
|
|
1346
1351
|
if (Te(col, colAgg) && value != null) {
|
|
1347
1352
|
const allVals = [];
|
|
1348
1353
|
const allRaw = [];
|
|
1349
|
-
for (let
|
|
1350
|
-
const
|
|
1351
|
-
allRaw.push(rows[
|
|
1352
|
-
if (
|
|
1354
|
+
for (let r = 0; r < rows.length; r++) {
|
|
1355
|
+
const n = toNumber(rows[r]?.[c]);
|
|
1356
|
+
allRaw.push(rows[r]?.[c]);
|
|
1357
|
+
if (n != null) allVals.push(n);
|
|
1353
1358
|
}
|
|
1354
1359
|
const total = reduce(allVals, colAgg, allRaw);
|
|
1355
1360
|
if (total != null && total > 0) sharePct = value / total * 100;
|
|
@@ -1365,16 +1370,16 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1365
1370
|
});
|
|
1366
1371
|
}
|
|
1367
1372
|
const dimensionLines = [];
|
|
1368
|
-
for (let
|
|
1369
|
-
if (
|
|
1370
|
-
if (!isRealColumn(columns[
|
|
1371
|
-
const name2 = String(columns[
|
|
1373
|
+
for (let c = 0; c < columns.length && dimensionLines.length < maxDimensions; c++) {
|
|
1374
|
+
if (c === dimIdx) continue;
|
|
1375
|
+
if (!isRealColumn(columns[c]) || isMeasureColumn(columns[c])) continue;
|
|
1376
|
+
const name2 = String(columns[c]?.name ?? "");
|
|
1372
1377
|
const distinct = /* @__PURE__ */ new Set();
|
|
1373
1378
|
let firstText = "";
|
|
1374
|
-
for (const
|
|
1375
|
-
const raw = rows[
|
|
1379
|
+
for (const p3 of positions) {
|
|
1380
|
+
const raw = rows[p3]?.[c];
|
|
1376
1381
|
const key = raw == null || raw === "" ? "(blank)" : String(raw);
|
|
1377
|
-
if (!distinct.size) firstText = displayText(columns[
|
|
1382
|
+
if (!distinct.size) firstText = displayText(columns[c], raw, opts);
|
|
1378
1383
|
distinct.add(key);
|
|
1379
1384
|
}
|
|
1380
1385
|
if (!distinct.size) continue;
|
|
@@ -1402,546 +1407,27 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1402
1407
|
};
|
|
1403
1408
|
}
|
|
1404
1409
|
|
|
1405
|
-
// ../../node_modules/colorsea/dist/index.esm.js
|
|
1406
|
-
function t(t2, r2, n2, e2) {
|
|
1407
|
-
var o2, i2 = arguments.length, a2 = i2 < 3 ? r2 : null === e2 ? e2 = Object.getOwnPropertyDescriptor(r2, n2) : e2;
|
|
1408
|
-
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a2 = Reflect.decorate(t2, r2, n2, e2);
|
|
1409
|
-
else for (var u3 = t2.length - 1; u3 >= 0; u3--) (o2 = t2[u3]) && (a2 = (i2 < 3 ? o2(a2) : i2 > 3 ? o2(r2, n2, a2) : o2(r2, n2)) || a2);
|
|
1410
|
-
return i2 > 3 && a2 && Object.defineProperty(r2, n2, a2), a2;
|
|
1411
|
-
}
|
|
1412
|
-
function r(t2, r2, n2) {
|
|
1413
|
-
if (n2 || 2 === arguments.length) for (var e2, o2 = 0, i2 = r2.length; o2 < i2; o2++) !e2 && o2 in r2 || (e2 || (e2 = Array.prototype.slice.call(r2, 0, o2)), e2[o2] = r2[o2]);
|
|
1414
|
-
return t2.concat(e2 || Array.prototype.slice.call(r2));
|
|
1415
|
-
}
|
|
1416
|
-
var n = function(t2, r2, n2) {
|
|
1417
|
-
return [t2, r2, n2].map((function(t3) {
|
|
1418
|
-
return (t3 /= 255) > 0.04045 ? Math.pow((t3 + 0.055) / 1.055, 2.4) : t3 / 12.92;
|
|
1419
|
-
}));
|
|
1420
|
-
};
|
|
1421
|
-
var e = function(t2, r2, n2) {
|
|
1422
|
-
return [t2, r2, n2].map((function(t3) {
|
|
1423
|
-
return 255 * (t3 <= 304e-5 ? 12.92 * t3 : 1.055 * Math.pow(t3, 1 / 2.4) - 0.055);
|
|
1424
|
-
}));
|
|
1425
|
-
};
|
|
1426
|
-
var o = function(t2, r2, n2) {
|
|
1427
|
-
return Math.min(Math.max(t2, r2), n2);
|
|
1428
|
-
};
|
|
1429
|
-
var i = function(t2, r2) {
|
|
1430
|
-
return Math.round((t2 + Number.EPSILON) * Math.pow(10, r2)) / Math.pow(10, r2);
|
|
1431
|
-
};
|
|
1432
|
-
var a = function(t2, r2) {
|
|
1433
|
-
return Math.floor(Math.random() * (r2 - t2 + 1) - t2);
|
|
1434
|
-
};
|
|
1435
|
-
var u2 = function(t2, r2, n2, e2) {
|
|
1436
|
-
for (var i2, a2 = [t2, r2, n2], u3 = "#", h2 = 0; h2 < a2.length; h2++) u3 += (i2 = a2[h2], Math.round(o(i2, 0, 255)).toString(16).padStart(2, "0"));
|
|
1437
|
-
return null != e2 && (u3 += Math.round(o(e2, 0, 100) / 100 * 255).toString(16).padStart(2, "0")), u3;
|
|
1438
|
-
};
|
|
1439
|
-
var h = function(t2) {
|
|
1440
|
-
var n2 = t2.length, e2 = (t2 = (function(t3) {
|
|
1441
|
-
var r2 = (t3 = /^#/.test(t3) ? t3.slice(1) : t3).length;
|
|
1442
|
-
if (![3, 4, 6, 8].includes(r2)) return "000000";
|
|
1443
|
-
if (6 === r2 || 8 === r2) return t3;
|
|
1444
|
-
if (3 === r2 || 4 === r2) {
|
|
1445
|
-
for (var n3 = "", e3 = 0; e3 < r2; e3++) {
|
|
1446
|
-
var o3 = t3[e3];
|
|
1447
|
-
n3 += "" + o3 + o3;
|
|
1448
|
-
}
|
|
1449
|
-
return n3;
|
|
1450
|
-
}
|
|
1451
|
-
return "000000";
|
|
1452
|
-
})(t2).padEnd(8, "ff")).match(/.{2}/g);
|
|
1453
|
-
if (!e2) return [0, 0, 0, 1];
|
|
1454
|
-
var o2 = [0, 0, 0], i2 = false;
|
|
1455
|
-
return e2.forEach((function(t3, r2) {
|
|
1456
|
-
r2 < 3 ? o2[r2] = parseInt(t3, 16) : i2 = 100 * parseInt(t3, 16) / 255;
|
|
1457
|
-
})), false === i2 || n2 < 8 ? o2 : r(r([], o2, true), [i2], false);
|
|
1458
|
-
};
|
|
1459
|
-
var c = function(t2, r2, n2) {
|
|
1460
|
-
var e2;
|
|
1461
|
-
e2 = [t2, r2, n2].map((function(t3) {
|
|
1462
|
-
return t3 / 255;
|
|
1463
|
-
})), t2 = e2[0], r2 = e2[1], n2 = e2[2];
|
|
1464
|
-
var o2 = 1 - Math.max(t2, r2, n2), i2 = o2 < 1 ? 1 / (1 - o2) : 0;
|
|
1465
|
-
return [(1 - t2 - o2) * i2 * 100, (1 - r2 - o2) * i2 * 100, (1 - n2 - o2) * i2 * 100, 100 * o2];
|
|
1466
|
-
};
|
|
1467
|
-
var l = function(t2, r2, n2, e2) {
|
|
1468
|
-
return 100 === e2 ? [0, 0, 0] : (e2 /= 100, [t2, r2, n2].map((function(t3) {
|
|
1469
|
-
return (t3 /= 100) >= 1 ? 0 : 255 * (1 - t3) * (1 - e2);
|
|
1470
|
-
})));
|
|
1471
|
-
};
|
|
1472
|
-
function p3(t2, r2, n2, e2) {
|
|
1473
|
-
var o2;
|
|
1474
|
-
void 0 === e2 && (e2 = "l"), o2 = [t2, r2, n2].map((function(t3) {
|
|
1475
|
-
return t3 / 255;
|
|
1476
|
-
})), t2 = o2[0], r2 = o2[1], n2 = o2[2];
|
|
1477
|
-
var i2 = Math.max(t2, r2, n2), a2 = Math.min(t2, r2, n2), u3 = (function(t3, r3, n3, e3) {
|
|
1478
|
-
var o3;
|
|
1479
|
-
void 0 === e3 && (e3 = false), o3 = [t3, r3, n3].map((function(t4) {
|
|
1480
|
-
return t4 / 255;
|
|
1481
|
-
})), t3 = o3[0], r3 = o3[1], n3 = o3[2];
|
|
1482
|
-
var i3 = Math.max(t3, r3, n3), a3 = Math.min(t3, r3, n3), u4 = 0;
|
|
1483
|
-
if (i3 !== a3) if (e3) u4 = (t3 - r3 + (t3 - n3)) / 2, u4 /= Math.sqrt((t3 - r3) * (t3 - r3) + (t3 - n3) * (r3 - n3)), u4 = Math.acos(u4), n3 > r3 && (u4 = 2 * Math.PI - u4), u4 /= 2 * Math.PI;
|
|
1484
|
-
else {
|
|
1485
|
-
var h3 = i3 - a3;
|
|
1486
|
-
u4 = i3 === t3 ? (r3 - n3) / h3 + (r3 < n3 ? 6 : 0) : i3 === r3 ? (n3 - t3) / h3 + 2 : (t3 - r3) / h3 + 4, u4 /= 6;
|
|
1487
|
-
}
|
|
1488
|
-
else u4 = NaN;
|
|
1489
|
-
return 360 * u4;
|
|
1490
|
-
})(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l2 = i2 - a2, p4 = i2, f2 = (t2 + r2 + n2) / 3;
|
|
1491
|
-
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, p4 *= 100] : [u3, h2, f2];
|
|
1492
|
-
}
|
|
1493
|
-
var f = function(t2, r2, n2) {
|
|
1494
|
-
return p3(t2, r2, n2, "l");
|
|
1495
|
-
};
|
|
1496
|
-
var s = function(t2, r2, n2) {
|
|
1497
|
-
var e2, i2, a2 = function(t3) {
|
|
1498
|
-
return 6 * (t3 = t3 < 0 ? t3 + 1 : t3 > 1 ? t3 - 1 : t3) < 1 ? e2 + (i2 - e2) * t3 * 6 : 2 * t3 < 1 ? i2 : 3 * t3 < 2 ? e2 + (i2 - e2) * (2 / 3 - t3) * 6 : e2;
|
|
1499
|
-
};
|
|
1500
|
-
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)];
|
|
1501
|
-
};
|
|
1502
|
-
var v = function(t2, r2, n2) {
|
|
1503
|
-
return p3(t2, r2, n2, "v");
|
|
1504
|
-
};
|
|
1505
|
-
var b = function(t2, r2, n2) {
|
|
1506
|
-
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]];
|
|
1507
|
-
return [255 * i2[a2[e2][0]], 255 * i2[a2[e2][1]], 255 * i2[a2[e2][2]]];
|
|
1508
|
-
};
|
|
1509
|
-
var y = function(t2, r2, n2) {
|
|
1510
|
-
return p3(t2, r2, n2, "i");
|
|
1511
|
-
};
|
|
1512
|
-
var d = function(t2, r2, n2) {
|
|
1513
|
-
var e2, i2, a2, u3;
|
|
1514
|
-
r2 /= 100, n2 /= 100, isNaN(t2) && (t2 = 0), isNaN(r2) && (r2 = 0);
|
|
1515
|
-
var h2 = function(t3) {
|
|
1516
|
-
return (1 + r2 * Math.cos(2 * Math.PI * t3) / Math.cos(Math.PI / 3 - 2 * Math.PI * t3)) / 3;
|
|
1517
|
-
};
|
|
1518
|
-
return (t2 = (360 + t2) % 360 / 360) < 1 / 3 ? a2 = 1 - ((u3 = (1 - r2) / 3) + (i2 = h2(t2))) : t2 < 2 / 3 ? u3 = 1 - ((i2 = (1 - r2) / 3) + (a2 = h2(t2 -= 1 / 3))) : i2 = 1 - ((a2 = (1 - r2) / 3) + (u3 = h2(t2 -= 2 / 3))), e2 = [i2, a2, u3].map((function(t3) {
|
|
1519
|
-
return 255 * o(n2 * t3 * 3, 0, 1);
|
|
1520
|
-
})), [i2 = e2[0], a2 = e2[1], u3 = e2[2]];
|
|
1521
|
-
};
|
|
1522
|
-
var g = function(t2, r2, n2) {
|
|
1523
|
-
return [f(t2, r2, n2)[0], 100 * (Math.min(t2, r2, n2) / 255), 100 * (1 - Math.max(t2, r2, n2) / 255)];
|
|
1524
|
-
};
|
|
1525
|
-
function w(t2, r2, n2) {
|
|
1526
|
-
return r2 /= 100, n2 /= 100, s(t2, 100, 50).map((function(t3) {
|
|
1527
|
-
return 255 * (t3 / 255 * (1 - r2 - n2) + r2);
|
|
1528
|
-
}));
|
|
1529
|
-
}
|
|
1530
|
-
var m = { x: [0.4124564, 0.3575761, 0.1804375], y: [0.2126729, 0.7151522, 0.072175], z: [0.0193339, 0.119192, 0.9503041] };
|
|
1531
|
-
var M = { r: [3.2404542, -1.5371385, -0.4985314], g: [-0.969266, 1.8760108, 0.041556], b: [0.0556434, -0.2040259, 1.0572252] };
|
|
1532
|
-
var x = 0.95047;
|
|
1533
|
-
var _ = 1;
|
|
1534
|
-
var C = 1.08883;
|
|
1535
|
-
var I = 0.206896552;
|
|
1536
|
-
var k = 8856452e-9;
|
|
1537
|
-
var E = 24389 / 27;
|
|
1538
|
-
var z = function(t2, r2, e2) {
|
|
1539
|
-
var o2 = n(t2, r2, e2);
|
|
1540
|
-
return [100 * m.x.reduce((function(t3, r3, n2) {
|
|
1541
|
-
return t3 + r3 * o2[n2];
|
|
1542
|
-
}), 0), 100 * m.y.reduce((function(t3, r3, n2) {
|
|
1543
|
-
return t3 + r3 * o2[n2];
|
|
1544
|
-
}), 0), 100 * m.z.reduce((function(t3, r3, n2) {
|
|
1545
|
-
return t3 + r3 * o2[n2];
|
|
1546
|
-
}), 0)];
|
|
1547
|
-
};
|
|
1548
|
-
var N = function(t2, r2, n2) {
|
|
1549
|
-
var o2 = [t2, r2, n2], i2 = M.r.reduce((function(t3, r3, n3) {
|
|
1550
|
-
return t3 + r3 * o2[n3];
|
|
1551
|
-
}), 0) / 100, a2 = M.g.reduce((function(t3, r3, n3) {
|
|
1552
|
-
return t3 + r3 * o2[n3];
|
|
1553
|
-
}), 0) / 100, u3 = M.b.reduce((function(t3, r3, n3) {
|
|
1554
|
-
return t3 + r3 * o2[n3];
|
|
1555
|
-
}), 0) / 100;
|
|
1556
|
-
return e(i2, a2, u3);
|
|
1557
|
-
};
|
|
1558
|
-
var O = function(t2, r2, n2) {
|
|
1559
|
-
var e2;
|
|
1560
|
-
return e2 = [t2 = t2 / x / 100, r2 = r2 / _ / 100, n2 = n2 / C / 100].map((function(t3) {
|
|
1561
|
-
return t3 > k ? Math.pow(t3, 1 / 3) : (E * t3 + 16) / 116;
|
|
1562
|
-
})), t2 = e2[0], r2 = e2[1], n2 = e2[2], [Math.max(0, 116 * r2 - 16), 500 * (t2 - r2), 200 * (r2 - n2)];
|
|
1563
|
-
};
|
|
1564
|
-
var P = function(t2, r2, n2) {
|
|
1565
|
-
var e2, o2 = (t2 + 16) / 116, i2 = isNaN(r2) ? o2 : o2 + r2 / 500, a2 = isNaN(n2) ? o2 : o2 - n2 / 200;
|
|
1566
|
-
return e2 = [i2, o2, a2].map((function(t3) {
|
|
1567
|
-
return t3 > I ? Math.pow(t3, 3) : (116 * t3 - 16) / E;
|
|
1568
|
-
})), i2 = e2[0], o2 = e2[1], a2 = e2[2], [i2 * x * 100, o2 * _ * 100, a2 * C * 100];
|
|
1569
|
-
};
|
|
1570
|
-
var j = function(t2, r2, n2) {
|
|
1571
|
-
return N.apply(void 0, P(t2, r2, n2));
|
|
1572
|
-
};
|
|
1573
|
-
var S = function(t2, r2, n2) {
|
|
1574
|
-
r2 = o(r2, -100, 100), n2 = o(n2, -100, 100);
|
|
1575
|
-
var e2 = Math.sqrt(r2 * r2 + n2 * n2), i2 = (180 * Math.atan2(n2, r2) / Math.PI + 360) % 360;
|
|
1576
|
-
return 0 === Math.round(1e4 * e2) && (i2 = Number.NaN), [t2, e2, i2];
|
|
1577
|
-
};
|
|
1578
|
-
var A = function(t2, r2, n2) {
|
|
1579
|
-
return isNaN(n2) && (n2 = 0), n2 *= Math.PI / 180, [t2, Math.cos(n2) * r2, Math.sin(n2) * r2];
|
|
1580
|
-
};
|
|
1581
|
-
var L = function(t2, r2, n2) {
|
|
1582
|
-
return P.apply(void 0, A(t2, r2, n2));
|
|
1583
|
-
};
|
|
1584
|
-
var H = function(t2, r2, n2) {
|
|
1585
|
-
var e2 = t2 + r2 + n2, o2 = 0, i2 = 0;
|
|
1586
|
-
return e2 > 0 && (o2 = t2 / e2, i2 = r2 / e2), [o2, i2, r2];
|
|
1587
|
-
};
|
|
1588
|
-
var Y = Object.freeze({ __proto__: null, linear2rgb: e, rgb2linear: n, rgb2hex: u2, hex2rgb: h, rgb2cmyk: c, cmyk2rgb: l, rgb2hsl: f, hsl2rgb: s, rgb2hsv: v, hsv2rgb: b, rgb2hsi: y, hsi2rgb: d, rgb2hwb: g, hwb2rgb: w, rgb2xyz: z, xyz2rgb: N, xyz2lab: O, lab2xyz: P, rgb2lab: function(t2, r2, n2) {
|
|
1589
|
-
return O.apply(void 0, z(t2, r2, n2));
|
|
1590
|
-
}, lab2rgb: j, lch2lab: A, lab2lch: S, xyz2lch: function(t2, r2, n2) {
|
|
1591
|
-
return S.apply(void 0, O(t2, r2, n2));
|
|
1592
|
-
}, lch2xyz: L, xyY2xyz: function(t2, r2, n2) {
|
|
1593
|
-
return 0 === r2 ? [0, 0, 0] : [t2 * (n2 / r2), n2, n2 / r2 * (1 - t2 - r2)];
|
|
1594
|
-
}, xyz2xyY: H });
|
|
1595
|
-
function R(t2, n2) {
|
|
1596
|
-
return void 0 === n2 && (n2 = false), function(e2, o2, i2) {
|
|
1597
|
-
var a2 = i2.value;
|
|
1598
|
-
i2.value = function() {
|
|
1599
|
-
for (var e3 = [], o3 = 0; o3 < arguments.length; o3++) e3[o3] = arguments[o3];
|
|
1600
|
-
if (e3.length > 0 && n2) {
|
|
1601
|
-
var i3 = JSON.stringify(e3);
|
|
1602
|
-
t2 += i3;
|
|
1603
|
-
}
|
|
1604
|
-
if (this.cache.has(t2)) return this.cache.get(t2);
|
|
1605
|
-
var u3 = a2.call.apply(a2, r([this], e3, false));
|
|
1606
|
-
return this.cache.set(t2, u3), u3;
|
|
1607
|
-
};
|
|
1608
|
-
};
|
|
1609
|
-
}
|
|
1610
|
-
function q(t2, n2, e2, o2) {
|
|
1611
|
-
return void 0 === t2 && (t2 = [0, 2, 2]), void 0 === n2 && (n2 = 0), void 0 === e2 && (e2 = true), void 0 === o2 && (o2 = 0), function(a2, u3, h2) {
|
|
1612
|
-
var c2 = h2.value;
|
|
1613
|
-
h2.value = function() {
|
|
1614
|
-
for (var a3 = [], u4 = 0; u4 < arguments.length; u4++) a3[u4] = arguments[u4];
|
|
1615
|
-
var h3 = void 0 === a3[o2] ? e2 : a3[o2], l2 = c2.call.apply(c2, r([this], a3, false));
|
|
1616
|
-
if (false === h3) return l2;
|
|
1617
|
-
var p4 = "number" == typeof h3 ? Math.round(h3) : 0, f2 = "number" == typeof t2 ? new Array(l2.length).fill(t2) : t2, s2 = f2.map((function(t3) {
|
|
1618
|
-
return 1 === n2 ? "number" == typeof h3 ? p4 : t3 : t3 + p4;
|
|
1619
|
-
}));
|
|
1620
|
-
return l2.map((function(t3, r2) {
|
|
1621
|
-
return i(t3, s2[r2]);
|
|
1622
|
-
}));
|
|
1623
|
-
};
|
|
1624
|
-
};
|
|
1625
|
-
}
|
|
1626
|
-
var D = function(t2, r2, n2) {
|
|
1627
|
-
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, p4 = [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);
|
|
1628
|
-
return new ft(p4, f2);
|
|
1629
|
-
};
|
|
1630
|
-
var F = Math.sqrt;
|
|
1631
|
-
var U = Math.pow;
|
|
1632
|
-
var $ = Math.cos;
|
|
1633
|
-
var J = Math.abs;
|
|
1634
|
-
var Z = Math.sin;
|
|
1635
|
-
var B = Math.exp;
|
|
1636
|
-
var G = Math.atan2;
|
|
1637
|
-
var K = Math.PI;
|
|
1638
|
-
var Q = function(t2) {
|
|
1639
|
-
return K * t2 / 180;
|
|
1640
|
-
};
|
|
1641
|
-
var T = function(t2, r2, n2) {
|
|
1642
|
-
void 0 === n2 && (n2 = true);
|
|
1643
|
-
var e2 = G(r2, t2);
|
|
1644
|
-
return n2 && (e2 = (e2 = (e2 = 180 * e2 / K) > 0 ? e2 : e2 + 360) > 360 ? e2 - 360 : e2), e2;
|
|
1645
|
-
};
|
|
1646
|
-
var V = function(t2, r2) {
|
|
1647
|
-
void 0 === r2 && (r2 = true);
|
|
1648
|
-
var n2 = t2.lab(false), e2 = n2[0], o2 = n2[1], i2 = n2[2];
|
|
1649
|
-
return [e2, F(U(o2, 2) + U(i2, 2)), T(o2, i2, r2), o2, i2];
|
|
1650
|
-
};
|
|
1651
|
-
var W = ["CMC", "CIE", "CIE2000", "CIE1994", "CIE1976"];
|
|
1652
|
-
var X = "CMC";
|
|
1653
|
-
var tt = "CIE2000";
|
|
1654
|
-
var rt = "CIE1994";
|
|
1655
|
-
var nt = "CIE1976";
|
|
1656
|
-
var et = function(t2, r2, n2, e2) {
|
|
1657
|
-
void 0 === n2 && (n2 = "CIE");
|
|
1658
|
-
var o2 = (function(t3) {
|
|
1659
|
-
var r3 = t3.toUpperCase();
|
|
1660
|
-
return W.includes(r3) && "CIE" !== r3 ? r3 : tt;
|
|
1661
|
-
})(n2);
|
|
1662
|
-
if (e2 = e2 || {}, o2 === X) {
|
|
1663
|
-
var i2 = Object.assign({}, { l: 1, c: 1 }, e2);
|
|
1664
|
-
return (function(t3, r3, n3, e3) {
|
|
1665
|
-
void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1);
|
|
1666
|
-
var o3 = V(t3, true), i3 = o3[0], a3 = o3[1], u4 = o3[2], h3 = o3[3], c3 = o3[4], l2 = V(r3), p4 = l2[0], f2 = l2[1], s2 = l2[3], v2 = a3 - f2, b2 = i3 - p4, 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)), x2 = w2 * (M2 * m2 + 1 - M2);
|
|
1667
|
-
return F(U(b2 / (n3 * g2), 2) + U(v2 / (e3 * w2), 2) + U(d2 / x2, 2));
|
|
1668
|
-
})(t2, r2, i2.l, i2.c);
|
|
1669
|
-
}
|
|
1670
|
-
if (o2 === rt) {
|
|
1671
|
-
var a2 = { kL: 1, kC: 1, kH: 1, cate: "graphic" }, u3 = Object.assign({}, a2, e2);
|
|
1672
|
-
return (function(t3, r3, n3, e3, o3, i3) {
|
|
1673
|
-
void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o3 && (o3 = 1), void 0 === i3 && (i3 = "graphic");
|
|
1674
|
-
var a3 = "textiles" === i3 ? 0.048 : 0.045, u4 = "textiles" === i3 ? 0.014 : 0.015;
|
|
1675
|
-
n3 = "textiles" === i3 ? 2 : n3;
|
|
1676
|
-
var h3 = V(t3), c3 = h3[0], l2 = h3[1], p4 = 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, x2 = F(U(p4 - y2, 2) + U(w2, 2) - U(g2, 2));
|
|
1677
|
-
return F(U(d2 / (1 * n3), 2) + U(g2 / (e3 * m2), 2) + U(x2 / (o3 * M2), 2));
|
|
1678
|
-
})(t2, r2, u3.kL, u3.kC, u3.kH, u3.cate);
|
|
1679
|
-
}
|
|
1680
|
-
if (o2 === nt) return (function(t3, r3) {
|
|
1681
|
-
var n3 = t3.lab(false), e3 = n3[0], o3 = n3[1], i3 = n3[2], a3 = r3.lab(false), u4 = a3[0], h3 = a3[1], c3 = a3[2];
|
|
1682
|
-
return F(U(e3 - u4, 2) + U(o3 - h3, 2) + U(i3 - c3, 2));
|
|
1683
|
-
})(t2, r2);
|
|
1684
|
-
var h2 = { kL: 1, kC: 1, kH: 1 }, c2 = Object.assign({}, h2, e2);
|
|
1685
|
-
return (function(t3, r3, n3, e3, o3) {
|
|
1686
|
-
void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o3 && (o3 = 1);
|
|
1687
|
-
var i3 = V(t3), a3 = i3[0], u4 = i3[1], h3 = i3[3], c3 = i3[4], l2 = V(r3), p4 = l2[0], f2 = l2[1], s2 = l2[3], v2 = l2[4], b2 = (a3 + p4) / 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)), x2 = T(g2, c3, true), _2 = T(w2, v2, true), C2 = (m2 + M2) / 2, I2 = J(x2 - _2) > 180 ? (x2 + _2 + 360) / 2 : (x2 + _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 - x2) <= 180 ? _2 - x2 : J(_2 - x2) > 180 && _2 <= x2 ? _2 - x2 + 360 : _2 - x2 - 360, z2 = p4 - 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));
|
|
1688
|
-
return F(U(z2 / (n3 * P2), 2) + U(N2 / (e3 * j2), 2) + U(O2 / (o3 * S2), 2) + L2 * (N2 / (e3 * j2)) * (O2 / (o3 * S2)));
|
|
1689
|
-
})(t2, r2, c2.kL, c2.kC, c2.kH);
|
|
1690
|
-
};
|
|
1691
|
-
var ot = function(t2, r2, n2) {
|
|
1692
|
-
var e2 = Math.abs, o2 = Math.max, i2 = Math.min, a2 = t2 instanceof ft ? t2 : new ft(t2), u3 = r2 instanceof ft ? r2 : new ft(r2), h2 = Object.assign({}, { b: 125, c: 500 }, n2);
|
|
1693
|
-
return !(e2(255 * a2.brightness() / 100 - 255 * u3.brightness() / 100) <= h2.b) && !(o2(a2.red(), u3.red()) - i2(a2.red(), u3.red()) + (o2(a2.green(), u3.green()) - i2(a2.green(), u3.green())) + (o2(a2.blue(), u3.blue()) - i2(a2.blue(), u3.blue())) <= h2.c);
|
|
1694
|
-
};
|
|
1695
|
-
var it = function(t2, r2, n2) {
|
|
1696
|
-
var e2, i2 = function(t3) {
|
|
1697
|
-
return o(t3, 0, 100);
|
|
1698
|
-
}, a2 = function(t3) {
|
|
1699
|
-
return o(t3, 0, 255);
|
|
1700
|
-
}, u3 = { h: [0, function(t3) {
|
|
1701
|
-
return t3 % 360;
|
|
1702
|
-
}], s: [1, i2], l: [2, i2], r: [0, a2], g: [1, a2], b: [2, a2] }, h2 = u3[r2][0];
|
|
1703
|
-
if (["h", "s", "l"].includes(r2)) {
|
|
1704
|
-
var c2 = t2.hsl();
|
|
1705
|
-
if (void 0 === n2) return c2[h2];
|
|
1706
|
-
n2 = u3[r2][1](n2), c2[h2] = n2, e2 = s.apply(void 0, c2);
|
|
1707
|
-
} else {
|
|
1708
|
-
if (e2 = t2.rgb(), void 0 === n2) return e2[h2];
|
|
1709
|
-
n2 = u3[r2][1](n2), e2[h2] = n2;
|
|
1710
|
-
}
|
|
1711
|
-
return new ft(e2, t2.alpha());
|
|
1712
|
-
};
|
|
1713
|
-
var at = {};
|
|
1714
|
-
var ut = /* @__PURE__ */ new Set(["rgb", "rgba", "cmyk", "lab", "hsl", "hsla", "hsv", "hsva", "hsi", "hsia", "xyz", "lch", "hwb", "hwba"]);
|
|
1715
|
-
var ht = /^([a-zA-Z]+)\(([\s\S]+)\)$/;
|
|
1716
|
-
var ct = function(t2) {
|
|
1717
|
-
return "string" == typeof t2 ? -1 === t2.indexOf("%") ? ct(Number(t2.trim())) : (t2 = t2.split("%")[0], (t2 = Number(t2.trim())) || 0) : Math.abs(t2) < 1 ? 100 * t2 : t2;
|
|
1718
|
-
};
|
|
1719
|
-
var lt = function(t2, r2) {
|
|
1720
|
-
void 0 === r2 && (r2 = /* @__PURE__ */ new Set());
|
|
1721
|
-
var n2 = "string" == typeof t2 ? t2 : t2.join(",");
|
|
1722
|
-
if (r2.has(n2)) throw new Error("Invalid Color");
|
|
1723
|
-
r2.add(n2);
|
|
1724
|
-
var e2 = "rgb", o2 = [0, 0, 0], i2 = 100;
|
|
1725
|
-
if (Array.isArray(t2)) {
|
|
1726
|
-
if (t2.length < 3) throw new Error("Invalid Color");
|
|
1727
|
-
for (var a2 = 0; a2 < t2.length; a2++) if (a2 < 3) o2[a2] = t2[a2];
|
|
1728
|
-
else {
|
|
1729
|
-
if (3 !== a2 || void 0 === t2[3]) break;
|
|
1730
|
-
i2 = t2[3];
|
|
1731
|
-
}
|
|
1732
|
-
} else {
|
|
1733
|
-
var u3 = false, c2 = t2.trim().match(ht);
|
|
1734
|
-
if (c2 || (u3 = true), c2) {
|
|
1735
|
-
var l2 = c2[1].toLocaleLowerCase();
|
|
1736
|
-
if (e2 = l2, ut.has(l2) || (u3 = true), c2[2] && !u3) {
|
|
1737
|
-
var p4 = c2[2], f2 = -1 !== p4.indexOf(",") ? "," : " ", s2 = p4.split(f2);
|
|
1738
|
-
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()));
|
|
1739
|
-
["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);
|
|
1740
|
-
}
|
|
1741
|
-
}
|
|
1742
|
-
if (u3) {
|
|
1743
|
-
if (!/^#(([a-fA-F\d]{3}){1,2}|[a-fA-F\d]{8})$/.test(t2)) try {
|
|
1744
|
-
return t2 = (function(t3, r3) {
|
|
1745
|
-
if (void 0 === r3 && (r3 = false), t3 = t3.toLowerCase(), void 0 === at[t3]) {
|
|
1746
|
-
if (r3) throw new Error("Unknown color name: ".concat(t3, ")"));
|
|
1747
|
-
return t3;
|
|
1748
|
-
}
|
|
1749
|
-
return at[t3];
|
|
1750
|
-
})(t2, true), lt(t2, r2);
|
|
1751
|
-
} catch (t3) {
|
|
1752
|
-
throw new Error("Invalid Color");
|
|
1753
|
-
}
|
|
1754
|
-
o2 = h(t2);
|
|
1755
|
-
}
|
|
1756
|
-
}
|
|
1757
|
-
return [e2, o2, i2];
|
|
1758
|
-
};
|
|
1759
|
-
var pt = { thowParseError: false };
|
|
1760
|
-
var ft = (function() {
|
|
1761
|
-
function n2(t2, r2, n3) {
|
|
1762
|
-
this.cache = /* @__PURE__ */ new Map(), this._rgb = [0, 0, 0], this._alpha = 100;
|
|
1763
|
-
var e2 = { thowParseError: pt.thowParseError }, i2 = Object.assign({}, e2, null != n3 ? n3 : {});
|
|
1764
|
-
try {
|
|
1765
|
-
var a2 = (function(t3) {
|
|
1766
|
-
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];
|
|
1767
|
-
if ("rgb" === i3) return [a3, u4];
|
|
1768
|
-
"lch" === i3 && (i3 = (r3 = ["xyz", L(a3[0], a3[1], a3[2])])[0], a3 = r3[1]);
|
|
1769
|
-
var h3 = a3[0], c2 = a3[1], p4 = a3[2], f2 = a3[3];
|
|
1770
|
-
if ("cmyk" === i3) return [l(h3, c2, p4, f2).map((function(t4) {
|
|
1771
|
-
return o(t4, 0, 255);
|
|
1772
|
-
})), u4];
|
|
1773
|
-
var v2 = "".concat(i3, "2rgb");
|
|
1774
|
-
if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p4).map((function(t4) {
|
|
1775
|
-
return o(t4, 0, 255);
|
|
1776
|
-
})), u4];
|
|
1777
|
-
throw new Error("Invalid color");
|
|
1778
|
-
})(t2), u3 = a2[0], h2 = a2[1];
|
|
1779
|
-
this._alpha = h2, this._rgb = u3;
|
|
1780
|
-
} catch (t3) {
|
|
1781
|
-
if (i2.thowParseError) throw t3;
|
|
1782
|
-
}
|
|
1783
|
-
void 0 !== r2 && (this._alpha = o(r2, 0, 100));
|
|
1784
|
-
}
|
|
1785
|
-
return n2.prototype.red = function(t2) {
|
|
1786
|
-
return it(this, "r", t2);
|
|
1787
|
-
}, n2.prototype.green = function(t2) {
|
|
1788
|
-
return it(this, "g", t2);
|
|
1789
|
-
}, n2.prototype.blue = function(t2) {
|
|
1790
|
-
return it(this, "b", t2);
|
|
1791
|
-
}, n2.prototype.alpha = function(t2) {
|
|
1792
|
-
return void 0 === t2 ? this._alpha : (t2 = o(t2, 0, 100), new n2(this.rgb(), t2));
|
|
1793
|
-
}, n2.prototype.fadeIn = function(t2, r2) {
|
|
1794
|
-
return void 0 === t2 && (t2 = 10), t2 = r2 && "relative" === r2 ? this._alpha * t2 / 100 : t2, new n2(this.rgb(), o(this._alpha + t2, 0, 100));
|
|
1795
|
-
}, n2.prototype.fadeOut = function(t2, r2) {
|
|
1796
|
-
return void 0 === t2 && (t2 = 10), t2 = r2 && "relative" === r2 ? this._alpha * t2 / 100 : t2, new n2(this.rgb(), o(this._alpha - t2, 0, 100));
|
|
1797
|
-
}, n2.prototype.opacify = function(t2, r2) {
|
|
1798
|
-
return void 0 === t2 && (t2 = 10), this.fadeIn(t2, r2);
|
|
1799
|
-
}, n2.prototype.transparentize = function(t2, r2) {
|
|
1800
|
-
return void 0 === t2 && (t2 = 10), this.fadeOut(t2, r2);
|
|
1801
|
-
}, n2.prototype.hue = function(t2) {
|
|
1802
|
-
return it(this, "h", t2);
|
|
1803
|
-
}, n2.prototype.saturation = function(t2) {
|
|
1804
|
-
return it(this, "s", t2);
|
|
1805
|
-
}, n2.prototype.lightness = function(t2) {
|
|
1806
|
-
return it(this, "l", t2);
|
|
1807
|
-
}, n2.prototype.rgb = function(t2) {
|
|
1808
|
-
return r([], this._rgb, true);
|
|
1809
|
-
}, n2.prototype.rgba = function(t2) {
|
|
1810
|
-
return r(r([], this.rgb(false), true), [this._alpha], false);
|
|
1811
|
-
}, n2.prototype.cmyk = function(t2) {
|
|
1812
|
-
return c.apply(void 0, this._rgb);
|
|
1813
|
-
}, n2.prototype.hsl = function(t2) {
|
|
1814
|
-
return f.apply(void 0, this._rgb);
|
|
1815
|
-
}, n2.prototype.hsla = function(t2) {
|
|
1816
|
-
return r(r([], this.hsl(false), true), [this._alpha], false);
|
|
1817
|
-
}, n2.prototype.hsv = function(t2) {
|
|
1818
|
-
return v.apply(void 0, this._rgb);
|
|
1819
|
-
}, n2.prototype.hsi = function(t2) {
|
|
1820
|
-
return y.apply(void 0, this._rgb);
|
|
1821
|
-
}, n2.prototype.hwb = function(t2) {
|
|
1822
|
-
return g.apply(void 0, this._rgb);
|
|
1823
|
-
}, n2.prototype.xyz = function(t2) {
|
|
1824
|
-
return z.apply(void 0, this._rgb);
|
|
1825
|
-
}, n2.prototype.lab = function(t2) {
|
|
1826
|
-
return O.apply(void 0, this.xyz(false));
|
|
1827
|
-
}, n2.prototype.lch = function(t2) {
|
|
1828
|
-
return S.apply(void 0, this.lab(false));
|
|
1829
|
-
}, n2.prototype.xyY = function(t2) {
|
|
1830
|
-
return H.apply(void 0, this.xyz(false));
|
|
1831
|
-
}, n2.prototype.hex = function(t2) {
|
|
1832
|
-
void 0 === t2 && (t2 = 2);
|
|
1833
|
-
var n3 = 0 === t2 ? void 0 : 1 === t2 ? this._alpha : 100 === this._alpha ? void 0 : this._alpha, e2 = "color:hex:param_".concat(t2);
|
|
1834
|
-
if (this.cache.has(e2)) return this.cache.get(e2);
|
|
1835
|
-
var o2 = u2.apply(void 0, r(r([], this._rgb, false), [n3], false));
|
|
1836
|
-
return this.cache.set(e2, o2), o2;
|
|
1837
|
-
}, n2.prototype.lighten = function(t2, r2) {
|
|
1838
|
-
void 0 === t2 && (t2 = 5);
|
|
1839
|
-
var e2 = this.hsl(false), i2 = e2[0], a2 = e2[1], u3 = e2[2];
|
|
1840
|
-
return u3 = o(u3 += void 0 !== r2 && "relative" === r2 ? u3 * (t2 / 100) : t2, 0, 100), new n2(s(i2, a2, u3), this._alpha);
|
|
1841
|
-
}, n2.prototype.darken = function(t2, r2) {
|
|
1842
|
-
return void 0 === t2 && (t2 = 5), this.lighten(-t2, r2);
|
|
1843
|
-
}, n2.prototype.saturate = function(t2, r2) {
|
|
1844
|
-
void 0 === t2 && (t2 = 5);
|
|
1845
|
-
var e2 = this.hsl(false), i2 = e2[0], a2 = e2[1], u3 = e2[2];
|
|
1846
|
-
return a2 = o(a2 += void 0 !== r2 && "relative" === r2 ? a2 * (t2 / 100) : t2, 0, 100), new n2(s(i2, a2, u3), this._alpha);
|
|
1847
|
-
}, n2.prototype.desaturate = function(t2, r2) {
|
|
1848
|
-
return void 0 === t2 && (t2 = 5), this.saturate(-t2, r2);
|
|
1849
|
-
}, n2.prototype.spin = function(t2) {
|
|
1850
|
-
var r2 = this.hsl(false), e2 = r2[0], o2 = r2[1], i2 = r2[2];
|
|
1851
|
-
return new n2(s(e2 = (e2 + t2 % 360 + 360) % 360, o2, i2), this._alpha);
|
|
1852
|
-
}, n2.prototype.adjustHue = function(t2) {
|
|
1853
|
-
return this.spin(t2);
|
|
1854
|
-
}, n2.prototype.complement = function() {
|
|
1855
|
-
return this.spin(180);
|
|
1856
|
-
}, n2.prototype.invert = function() {
|
|
1857
|
-
var t2 = this._rgb.map((function(t3) {
|
|
1858
|
-
return 255 - t3;
|
|
1859
|
-
}));
|
|
1860
|
-
return new n2([t2[0], t2[1], t2[2]], this._alpha);
|
|
1861
|
-
}, n2.prototype.mix = function(t2, r2) {
|
|
1862
|
-
return void 0 === r2 && (r2 = 50), D(this, t2, 100 - o(r2, 0, 100));
|
|
1863
|
-
}, n2.prototype.luma = function() {
|
|
1864
|
-
var t2 = this._rgb.map((function(t3) {
|
|
1865
|
-
return (t3 /= 255) <= 0.03928 ? t3 / 12.92 : Math.pow((t3 + 0.055) / 1.055, 2.4);
|
|
1866
|
-
}));
|
|
1867
|
-
return 0.2126 * t2[0] + 0.7152 * t2[1] + 0.0722 * t2[2];
|
|
1868
|
-
}, n2.prototype.brightness = function() {
|
|
1869
|
-
var t2 = this._rgb;
|
|
1870
|
-
return (function(t3, r2, n3) {
|
|
1871
|
-
return (299 * t3 + 587 * r2 + 114 * n3) / 1e3 / 255 * 100;
|
|
1872
|
-
})(t2[0], t2[1], t2[2]);
|
|
1873
|
-
}, n2.prototype.deltaE = function(t2, r2, n3) {
|
|
1874
|
-
return void 0 === r2 && (r2 = "CMC"), et(this, t2, r2, n3);
|
|
1875
|
-
}, n2.prototype.visibility = function(t2, r2) {
|
|
1876
|
-
return ot(this, t2, r2);
|
|
1877
|
-
}, t([q(0, 1, true, 0), R("color:rgb")], n2.prototype, "rgb", null), t([q(0, 1, true, 0)], n2.prototype, "rgba", null), t([q(0, 1, true, 0), R("color:cmyk")], n2.prototype, "cmyk", null), t([q(0, 1, true, 0), R("color:hsl")], n2.prototype, "hsl", null), t([q(0, 1, true, 0)], n2.prototype, "hsla", null), t([q(0, 1, true, 0), R("color:hsv")], n2.prototype, "hsv", null), t([q(0, 1, true, 0), R("color:hsi")], n2.prototype, "hsi", null), t([q(0, 1, true, 0), R("color: hwb")], n2.prototype, "hwb", null), t([q(2, 1, true, 0), R("color:xyz")], n2.prototype, "xyz", null), t([q(2, 1, true, 0), R("color:lab")], n2.prototype, "lab", null), t([q(2, 1, true, 0), R("color:lch")], n2.prototype, "lch", null), t([q(2, 1, true, 0), R("color:xyY")], n2.prototype, "xyY", null), t([R("color:luma")], n2.prototype, "luma", null), n2;
|
|
1878
|
-
})();
|
|
1879
|
-
var st = function(t2, r2, n2, e2) {
|
|
1880
|
-
return new ft([t2, r2, n2], e2);
|
|
1881
|
-
};
|
|
1882
|
-
var vt2 = function(t2, r2, n2, e2) {
|
|
1883
|
-
return new ft(s(t2, r2, n2), e2);
|
|
1884
|
-
};
|
|
1885
|
-
var bt = function(t2, r2, n2, e2) {
|
|
1886
|
-
return new ft(b(t2, r2, n2), e2);
|
|
1887
|
-
};
|
|
1888
|
-
var yt = function(t2, r2, n2, e2) {
|
|
1889
|
-
return new ft(d(t2, r2, n2), e2);
|
|
1890
|
-
};
|
|
1891
|
-
var dt = function(t2, r2, n2, e2) {
|
|
1892
|
-
return new ft(w(t2, r2, n2), e2);
|
|
1893
|
-
};
|
|
1894
|
-
var gt = function(t2, r2, n2, e2) {
|
|
1895
|
-
return new ft(N(t2, r2, n2), e2);
|
|
1896
|
-
};
|
|
1897
|
-
var wt = function(t2, r2, n2, e2) {
|
|
1898
|
-
return new ft(j(t2, r2, n2), e2);
|
|
1899
|
-
};
|
|
1900
|
-
var mt = function(t2, r2, n2, e2) {
|
|
1901
|
-
return new ft(N.apply(void 0, L(t2, r2, n2)), e2);
|
|
1902
|
-
};
|
|
1903
|
-
function Mt(t2, r2, n2) {
|
|
1904
|
-
return new ft(t2, r2, n2);
|
|
1905
|
-
}
|
|
1906
|
-
Mt.config = function(t2) {
|
|
1907
|
-
Object.assign(pt, t2);
|
|
1908
|
-
}, Mt.random = function() {
|
|
1909
|
-
var t2 = a(0, 255), r2 = a(0, 255), n2 = a(0, 255);
|
|
1910
|
-
return new ft([t2, r2, n2]);
|
|
1911
|
-
}, Mt.convertor = Y, Mt.Color = ft, Mt.rgb = st, Mt.hsl = vt2, Mt.hsv = bt, Mt.hsi = yt, Mt.hwb = dt, Mt.xyz = gt, Mt.lab = wt, Mt.lch = mt, Mt.mix = D, Mt.deltaE = et, Mt.utils = { roundDecimal: i, randomRange: a }, Mt.useNames = function(t2, r2) {
|
|
1912
|
-
return (function(t3, r3) {
|
|
1913
|
-
if (void 0 !== r3 && "function" == typeof r3) {
|
|
1914
|
-
var n2 = {};
|
|
1915
|
-
for (var e2 in t3) {
|
|
1916
|
-
var o2 = r3(e2, t3[e2]), i2 = o2[0], a2 = o2[1];
|
|
1917
|
-
n2[i2] = a2;
|
|
1918
|
-
}
|
|
1919
|
-
Object.assign(at, n2);
|
|
1920
|
-
} else Object.assign(at, t3);
|
|
1921
|
-
})(t2, r2), Mt;
|
|
1922
|
-
};
|
|
1923
|
-
|
|
1924
1410
|
// src/palette.ts
|
|
1925
1411
|
var MIN_DELTA_E = 10;
|
|
1926
1412
|
function pickDistinctColorFromSeed(seedHex, existing, minDistance = MIN_DELTA_E) {
|
|
1927
|
-
const existingCs = [...existing].map((
|
|
1413
|
+
const existingCs = [...existing].map((c) => Mt(c));
|
|
1928
1414
|
const seed = Mt(seedHex);
|
|
1929
|
-
const minDeltaE = (
|
|
1415
|
+
const minDeltaE = (c) => existingCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...existingCs.map((c2) => c.deltaE(c2, "CIE2000")));
|
|
1930
1416
|
if (minDeltaE(seed) >= minDistance) {
|
|
1931
1417
|
const hex = seed.hex();
|
|
1932
1418
|
return { hex, registerHex: hex };
|
|
1933
1419
|
}
|
|
1934
1420
|
let bestCandidate = seed;
|
|
1935
1421
|
let bestMinDist = minDeltaE(seed);
|
|
1936
|
-
const tryVariant = (
|
|
1937
|
-
const
|
|
1938
|
-
if (
|
|
1939
|
-
const hex =
|
|
1422
|
+
const tryVariant = (c) => {
|
|
1423
|
+
const d = minDeltaE(c);
|
|
1424
|
+
if (d >= minDistance) {
|
|
1425
|
+
const hex = c.hex();
|
|
1940
1426
|
return { hex, registerHex: hex };
|
|
1941
1427
|
}
|
|
1942
|
-
if (
|
|
1943
|
-
bestMinDist =
|
|
1944
|
-
bestCandidate =
|
|
1428
|
+
if (d > bestMinDist) {
|
|
1429
|
+
bestMinDist = d;
|
|
1430
|
+
bestCandidate = c;
|
|
1945
1431
|
}
|
|
1946
1432
|
return null;
|
|
1947
1433
|
};
|
|
@@ -1960,14 +1446,27 @@ function pickDistinctColorFromSeed(seedHex, existing, minDistance = MIN_DELTA_E)
|
|
|
1960
1446
|
return { hex: seed.hex(), registerHex: bestCandidate.hex() };
|
|
1961
1447
|
}
|
|
1962
1448
|
function buildPaletteFromSeed(seedHex, count, minDistance = MIN_DELTA_E) {
|
|
1449
|
+
return buildPalette(() => seedHex, count, minDistance);
|
|
1450
|
+
}
|
|
1451
|
+
function buildPalette(seedFor, count, minDistance = MIN_DELTA_E) {
|
|
1963
1452
|
const out = [];
|
|
1964
|
-
if (!
|
|
1453
|
+
if (!(count > 0)) return out;
|
|
1965
1454
|
const issued = /* @__PURE__ */ new Set();
|
|
1966
1455
|
const issuedCs = [];
|
|
1967
|
-
const distance = (hex) => issuedCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...issuedCs.map((
|
|
1456
|
+
const distance = (hex) => issuedCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...issuedCs.map((c) => Mt(hex).deltaE(c, "CIE2000")));
|
|
1968
1457
|
let sweep = null;
|
|
1969
1458
|
let sweepAt = 0;
|
|
1970
|
-
|
|
1459
|
+
let lastSeed = "";
|
|
1460
|
+
for (let i = 0; i < count; i++) {
|
|
1461
|
+
let seedHex = "";
|
|
1462
|
+
try {
|
|
1463
|
+
seedHex = normalise(seedFor(i));
|
|
1464
|
+
} catch {
|
|
1465
|
+
seedHex = "";
|
|
1466
|
+
}
|
|
1467
|
+
if (!seedHex) seedHex = lastSeed;
|
|
1468
|
+
if (!seedHex) break;
|
|
1469
|
+
lastSeed = seedHex;
|
|
1971
1470
|
const { hex, registerHex } = pickDistinctColorFromSeed(seedHex, issued, minDistance);
|
|
1972
1471
|
let chosen = hex;
|
|
1973
1472
|
let register = registerHex;
|
|
@@ -1977,15 +1476,15 @@ function buildPaletteFromSeed(seedHex, count, minDistance = MIN_DELTA_E) {
|
|
|
1977
1476
|
let bestD = distance(chosen);
|
|
1978
1477
|
while (sweepAt < sweep.length) {
|
|
1979
1478
|
const cand = sweep[sweepAt++];
|
|
1980
|
-
const
|
|
1981
|
-
if (
|
|
1479
|
+
const d = distance(cand);
|
|
1480
|
+
if (d >= minDistance) {
|
|
1982
1481
|
best = cand;
|
|
1983
|
-
bestD =
|
|
1482
|
+
bestD = d;
|
|
1984
1483
|
break;
|
|
1985
1484
|
}
|
|
1986
|
-
if (
|
|
1485
|
+
if (d > bestD) {
|
|
1987
1486
|
best = cand;
|
|
1988
|
-
bestD =
|
|
1487
|
+
bestD = d;
|
|
1989
1488
|
}
|
|
1990
1489
|
}
|
|
1991
1490
|
chosen = best;
|
|
@@ -1997,16 +1496,19 @@ function buildPaletteFromSeed(seedHex, count, minDistance = MIN_DELTA_E) {
|
|
|
1997
1496
|
}
|
|
1998
1497
|
return out;
|
|
1999
1498
|
}
|
|
1499
|
+
function normalise(seed) {
|
|
1500
|
+
return typeof seed === "string" ? seed.trim() : "";
|
|
1501
|
+
}
|
|
2000
1502
|
function sweepCandidates(seedHex) {
|
|
2001
|
-
const [
|
|
2002
|
-
const baseHue = Number.isFinite(
|
|
2003
|
-
const baseSat =
|
|
2004
|
-
const baseLight =
|
|
1503
|
+
const [h, s, l] = Mt(seedHex).hsl();
|
|
1504
|
+
const baseHue = Number.isFinite(h) ? h : 210;
|
|
1505
|
+
const baseSat = s < 25 ? 62 : Math.min(90, s);
|
|
1506
|
+
const baseLight = l < 25 || l > 78 ? 52 : l;
|
|
2005
1507
|
const out = [];
|
|
2006
1508
|
for (const dl of [0, -16, 16, -30, 30]) {
|
|
2007
1509
|
const li = Math.min(78, Math.max(26, baseLight + dl));
|
|
2008
|
-
for (let
|
|
2009
|
-
out.push(Mt.hsl((baseHue +
|
|
1510
|
+
for (let k = 1; k <= 12; k++) {
|
|
1511
|
+
out.push(Mt.hsl((baseHue + k * 30) % 360, baseSat, li).hex());
|
|
2010
1512
|
}
|
|
2011
1513
|
}
|
|
2012
1514
|
return out;
|
|
@@ -2067,6 +1569,7 @@ export {
|
|
|
2067
1569
|
MIN_CONTRAST,
|
|
2068
1570
|
MIN_DELTA_E,
|
|
2069
1571
|
MIN_HIT_BAND_PX,
|
|
1572
|
+
MIN_RAMP_FILLS,
|
|
2070
1573
|
PAGE_MATCH_TOLERANCE,
|
|
2071
1574
|
PHANTOM_FRACTION,
|
|
2072
1575
|
PILL_MIN_ALPHA,
|
|
@@ -2074,6 +1577,7 @@ export {
|
|
|
2074
1577
|
PILL_OPAQUE_ALPHA,
|
|
2075
1578
|
QUALIFY_REFUSAL_UNSPECIFIED,
|
|
2076
1579
|
ROW_IDX_ATTR,
|
|
1580
|
+
SAME_SHADE_DELTA_E,
|
|
2077
1581
|
SCROLL_SLACK_PX,
|
|
2078
1582
|
SEASONAL_MARKERS_DEFAULT,
|
|
2079
1583
|
SELECTION_ACTIVE_CLASS,
|
|
@@ -2087,17 +1591,20 @@ export {
|
|
|
2087
1591
|
backingHoldsGlyph,
|
|
2088
1592
|
bareBase64,
|
|
2089
1593
|
blankRenderFlag,
|
|
1594
|
+
buildPalette,
|
|
2090
1595
|
buildPaletteFromSeed,
|
|
2091
1596
|
buildRenderPayload,
|
|
2092
1597
|
buildReviewWire,
|
|
2093
1598
|
canConfirmLaunch,
|
|
2094
1599
|
captureSvgSnapshot,
|
|
2095
1600
|
cellSuppressesNormalize,
|
|
1601
|
+
censusColourSpread,
|
|
2096
1602
|
censusHitBands,
|
|
2097
1603
|
censusMarks,
|
|
2098
1604
|
chartOwnsTimeline,
|
|
2099
1605
|
chooserFitsViewport,
|
|
2100
1606
|
clearGeoCache,
|
|
1607
|
+
colourSpreadFlag,
|
|
2101
1608
|
compileRenderFn,
|
|
2102
1609
|
compileTrivialSource,
|
|
2103
1610
|
compositeOver,
|