@bicharts/chart-host 0.5.87 → 0.5.89
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/index.mjs +897 -267
- package/dist/types/index.d.ts +1 -0
- package/dist/types/palette.d.ts +78 -0
- package/package.json +2 -1
package/dist/index.mjs
CHANGED
|
@@ -120,33 +120,33 @@ import "./chunk-GHODWOAL.mjs";
|
|
|
120
120
|
var META_COLUMNS = /* @__PURE__ */ new Set(["__rowIdx__", "__geoIso__", "__geoLat__", "__geoLon__", "__geoPrecision__"]);
|
|
121
121
|
var MAX_FREQUENCY_CATEGORIES = 30;
|
|
122
122
|
var MIN_HISTOGRAM_ROWS = 8;
|
|
123
|
-
function columnName(
|
|
124
|
-
return typeof
|
|
123
|
+
function columnName(c2) {
|
|
124
|
+
return typeof c2 === "string" ? c2 : String(c2?.name ?? "");
|
|
125
125
|
}
|
|
126
126
|
function isNumericColumn(rows, idx) {
|
|
127
127
|
let seen = 0;
|
|
128
|
-
for (let
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
128
|
+
for (let r2 = 0; r2 < rows.length && seen < 50; r2++) {
|
|
129
|
+
const v2 = rows[r2]?.[idx];
|
|
130
|
+
if (v2 === null || v2 === void 0 || v2 === "") continue;
|
|
131
131
|
seen++;
|
|
132
|
-
if (typeof
|
|
133
|
-
if (!isFinite(
|
|
132
|
+
if (typeof v2 === "number") {
|
|
133
|
+
if (!isFinite(v2)) return false;
|
|
134
134
|
continue;
|
|
135
135
|
}
|
|
136
|
-
if (String(
|
|
136
|
+
if (String(v2).trim() === "" || !isFinite(Number(v2))) return false;
|
|
137
137
|
}
|
|
138
138
|
return seen > 0;
|
|
139
139
|
}
|
|
140
|
-
function lit(
|
|
141
|
-
return JSON.stringify(String(
|
|
140
|
+
function lit(s2) {
|
|
141
|
+
return JSON.stringify(String(s2));
|
|
142
142
|
}
|
|
143
143
|
function planTrivialChart(data) {
|
|
144
144
|
const allCols = Array.isArray(data?.columns) ? data.columns : [];
|
|
145
145
|
const rows = Array.isArray(data?.rows) ? data.rows : [];
|
|
146
146
|
if (!allCols.length || !rows.length) return null;
|
|
147
147
|
const dataCols = [];
|
|
148
|
-
for (let
|
|
149
|
-
if (!META_COLUMNS.has(columnName(allCols[
|
|
148
|
+
for (let i2 = 0; i2 < allCols.length; i2++) {
|
|
149
|
+
if (!META_COLUMNS.has(columnName(allCols[i2]))) dataCols.push(i2);
|
|
150
150
|
}
|
|
151
151
|
if (dataCols.length !== 1) return null;
|
|
152
152
|
const idx = dataCols[0];
|
|
@@ -174,8 +174,8 @@ function planTrivialChart(data) {
|
|
|
174
174
|
);
|
|
175
175
|
}
|
|
176
176
|
const distinct = /* @__PURE__ */ new Set();
|
|
177
|
-
for (let
|
|
178
|
-
const raw = rows[
|
|
177
|
+
for (let r2 = 0; r2 < rows.length; r2++) {
|
|
178
|
+
const raw = rows[r2]?.[idx];
|
|
179
179
|
distinct.add(raw === null || raw === void 0 || raw === "" ? "(blank)" : String(raw));
|
|
180
180
|
}
|
|
181
181
|
if (distinct.size < 2 || distinct.size >= rows.length) return null;
|
|
@@ -392,21 +392,21 @@ function histogramSource(idx, name2) {
|
|
|
392
392
|
var DEFAULT_TIMEOUT_MS = 2e3;
|
|
393
393
|
function svgToDataUrl(svg) {
|
|
394
394
|
const cloned = svg.cloneNode(true);
|
|
395
|
-
const
|
|
396
|
-
const
|
|
397
|
-
cloned.setAttribute("width", String(Math.round(
|
|
398
|
-
cloned.setAttribute("height", String(Math.round(
|
|
395
|
+
const w2 = svg.clientWidth || svg.getBoundingClientRect && svg.getBoundingClientRect().width || 600;
|
|
396
|
+
const h2 = svg.clientHeight || svg.getBoundingClientRect && svg.getBoundingClientRect().height || 400;
|
|
397
|
+
cloned.setAttribute("width", String(Math.round(w2)));
|
|
398
|
+
cloned.setAttribute("height", String(Math.round(h2)));
|
|
399
399
|
if (!cloned.getAttribute("xmlns")) cloned.setAttribute("xmlns", "http://www.w3.org/2000/svg");
|
|
400
400
|
const svgStr = new XMLSerializer().serializeToString(cloned);
|
|
401
401
|
const bytes = new TextEncoder().encode(svgStr);
|
|
402
402
|
let binary = "";
|
|
403
|
-
for (let
|
|
403
|
+
for (let i2 = 0; i2 < bytes.length; i2++) binary += String.fromCharCode(bytes[i2]);
|
|
404
404
|
return "data:image/svg+xml;base64," + btoa(binary);
|
|
405
405
|
}
|
|
406
406
|
function svgNaturalSize(svg) {
|
|
407
|
-
const
|
|
408
|
-
const
|
|
409
|
-
return { width: Math.round(
|
|
407
|
+
const w2 = svg.clientWidth || svg.getBoundingClientRect && svg.getBoundingClientRect().width || 600;
|
|
408
|
+
const h2 = svg.clientHeight || svg.getBoundingClientRect && svg.getBoundingClientRect().height || 400;
|
|
409
|
+
return { width: Math.round(w2), height: Math.round(h2) };
|
|
410
410
|
}
|
|
411
411
|
function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
|
|
412
412
|
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
@@ -414,8 +414,8 @@ function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
|
|
|
414
414
|
let img;
|
|
415
415
|
try {
|
|
416
416
|
img = new Image();
|
|
417
|
-
} catch (
|
|
418
|
-
opts.onWarn?.("snapshot-no-image",
|
|
417
|
+
} catch (e2) {
|
|
418
|
+
opts.onWarn?.("snapshot-no-image", e2 instanceof Error ? e2.message : String(e2));
|
|
419
419
|
resolve(null);
|
|
420
420
|
return;
|
|
421
421
|
}
|
|
@@ -442,8 +442,8 @@ function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
|
|
|
442
442
|
c2d.fillRect(0, 0, cw, ch);
|
|
443
443
|
c2d.drawImage(img, 0, 0, cw, ch);
|
|
444
444
|
resolve(canvas.toDataURL("image/png"));
|
|
445
|
-
} catch (
|
|
446
|
-
opts.onWarn?.("snapshot-raster-draw",
|
|
445
|
+
} catch (e2) {
|
|
446
|
+
opts.onWarn?.("snapshot-raster-draw", e2 instanceof Error ? e2.message : String(e2));
|
|
447
447
|
resolve(null);
|
|
448
448
|
}
|
|
449
449
|
};
|
|
@@ -462,33 +462,33 @@ async function captureSvgSnapshot(root, opts = {}) {
|
|
|
462
462
|
let svgUrl;
|
|
463
463
|
try {
|
|
464
464
|
svgUrl = svgToDataUrl(svg);
|
|
465
|
-
} catch (
|
|
466
|
-
opts.onWarn?.("snapshot-serialize",
|
|
465
|
+
} catch (e2) {
|
|
466
|
+
opts.onWarn?.("snapshot-serialize", e2 instanceof Error ? e2.message : String(e2));
|
|
467
467
|
return null;
|
|
468
468
|
}
|
|
469
469
|
const { width, height } = svgNaturalSize(svg);
|
|
470
470
|
try {
|
|
471
471
|
const png = await rasterizeSvgToPngDataUrl(svgUrl, width, height, opts);
|
|
472
472
|
return png || svgUrl;
|
|
473
|
-
} catch (
|
|
474
|
-
opts.onWarn?.("snapshot-raster-unexpected",
|
|
473
|
+
} catch (e2) {
|
|
474
|
+
opts.onWarn?.("snapshot-raster-unexpected", e2 instanceof Error ? e2.message : String(e2));
|
|
475
475
|
return svgUrl;
|
|
476
476
|
}
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
// src/review.ts
|
|
480
|
-
function shouldReview(
|
|
481
|
-
if (!
|
|
482
|
-
if (!
|
|
483
|
-
if (!
|
|
484
|
-
if (!
|
|
485
|
-
if (
|
|
486
|
-
if (
|
|
480
|
+
function shouldReview(g2) {
|
|
481
|
+
if (!g2.enabled) return false;
|
|
482
|
+
if (!g2.modeLicensed) return false;
|
|
483
|
+
if (!g2.firstRenderAfterGenerate) return false;
|
|
484
|
+
if (!g2.codeVersion || g2.codeVersion <= 0) return false;
|
|
485
|
+
if (g2.inFlight) return false;
|
|
486
|
+
if (g2.reviewedVersions.has(g2.codeVersion)) return false;
|
|
487
487
|
return true;
|
|
488
488
|
}
|
|
489
489
|
function bareBase64(dataUrlOrB64) {
|
|
490
|
-
const
|
|
491
|
-
if (
|
|
490
|
+
const m2 = /^data:([^;,]+);base64,(.*)$/s.exec(dataUrlOrB64 || "");
|
|
491
|
+
if (m2) return { b64: m2[2], mediaType: m2[1] };
|
|
492
492
|
return { b64: dataUrlOrB64 || "", mediaType: "image/png" };
|
|
493
493
|
}
|
|
494
494
|
function buildReviewWire(input) {
|
|
@@ -504,17 +504,17 @@ function buildReviewWire(input) {
|
|
|
504
504
|
correlationId: (input.correlationId ?? "").toString()
|
|
505
505
|
};
|
|
506
506
|
}
|
|
507
|
-
function actionFor(
|
|
508
|
-
if (!
|
|
509
|
-
if (
|
|
510
|
-
const instr = (
|
|
507
|
+
function actionFor(v2) {
|
|
508
|
+
if (!v2) return { kind: "keep", reason: "no verdict returned", userVisible: false };
|
|
509
|
+
if (v2.status === "PROPOSED") {
|
|
510
|
+
const instr = (v2.instruction ?? "").toString().trim();
|
|
511
511
|
if (instr === "") return { kind: "keep", reason: "reviewer proposed no actionable change", userVisible: false };
|
|
512
|
-
return { kind: "propose", instruction: instr, reason: (
|
|
512
|
+
return { kind: "propose", instruction: instr, reason: (v2.verdictReason ?? "").toString().trim() };
|
|
513
513
|
}
|
|
514
|
-
if (
|
|
515
|
-
if (
|
|
516
|
-
if (
|
|
517
|
-
return { kind: "keep", reason:
|
|
514
|
+
if (v2.status === "OK" && v2.fix) return { kind: "apply-fix", fix: v2.fix, reason: v2.verdictReason ?? "" };
|
|
515
|
+
if (v2.status === "NOCHANGE") return { kind: "keep", reason: v2.verdictReason ?? "the chart renders as asked", userVisible: false };
|
|
516
|
+
if (v2.status === "REFUSED") return { kind: "keep", reason: v2.errorMessage ?? "review not available", userVisible: false };
|
|
517
|
+
return { kind: "keep", reason: v2.errorMessage ?? v2.verdictReason ?? "review failed", userVisible: false };
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
// src/reviewDialog.ts
|
|
@@ -530,9 +530,9 @@ function askApplyImprovements(container, reason, opts = {}) {
|
|
|
530
530
|
try {
|
|
531
531
|
const minW = opts.minWidth ?? 260;
|
|
532
532
|
const minH = opts.minHeight ?? 170;
|
|
533
|
-
const
|
|
534
|
-
const
|
|
535
|
-
if (
|
|
533
|
+
const w2 = container.clientWidth || container.offsetWidth || 0;
|
|
534
|
+
const h2 = container.clientHeight || container.offsetHeight || 0;
|
|
535
|
+
if (w2 < minW || h2 < minH) {
|
|
536
536
|
resolve(false);
|
|
537
537
|
return;
|
|
538
538
|
}
|
|
@@ -577,7 +577,7 @@ function askApplyImprovements(container, reason, opts = {}) {
|
|
|
577
577
|
yes.textContent = text.accept;
|
|
578
578
|
yes.style.cssText = "font-weight:600;";
|
|
579
579
|
let done = false;
|
|
580
|
-
const finish = (
|
|
580
|
+
const finish = (v2) => {
|
|
581
581
|
if (done) return;
|
|
582
582
|
done = true;
|
|
583
583
|
try {
|
|
@@ -585,17 +585,17 @@ function askApplyImprovements(container, reason, opts = {}) {
|
|
|
585
585
|
} catch {
|
|
586
586
|
}
|
|
587
587
|
doc.removeEventListener("keydown", onKey, true);
|
|
588
|
-
resolve(
|
|
588
|
+
resolve(v2);
|
|
589
589
|
};
|
|
590
|
-
const onKey = (
|
|
591
|
-
if (
|
|
592
|
-
|
|
590
|
+
const onKey = (e2) => {
|
|
591
|
+
if (e2.key === "Escape") {
|
|
592
|
+
e2.stopPropagation();
|
|
593
593
|
finish(false);
|
|
594
594
|
}
|
|
595
595
|
};
|
|
596
596
|
no.addEventListener("click", () => finish(false));
|
|
597
597
|
yes.addEventListener("click", () => finish(true));
|
|
598
|
-
ov.addEventListener("click", (
|
|
598
|
+
ov.addEventListener("click", (e2) => e2.stopPropagation());
|
|
599
599
|
doc.addEventListener("keydown", onKey, true);
|
|
600
600
|
row.append(no, yes);
|
|
601
601
|
card.append(head, why, cost, row);
|
|
@@ -645,8 +645,8 @@ function refusalIsSelectable(row) {
|
|
|
645
645
|
}
|
|
646
646
|
function orderRefusalsForDisplay(rows) {
|
|
647
647
|
if (!Array.isArray(rows)) return [];
|
|
648
|
-
const named = rows.filter((
|
|
649
|
-
return [...named.filter(refusalIsSelectable), ...named.filter((
|
|
648
|
+
const named = rows.filter((r2) => !!r2 && typeof r2.name === "string" && r2.name.trim() !== "");
|
|
649
|
+
return [...named.filter(refusalIsSelectable), ...named.filter((r2) => !refusalIsSelectable(r2))];
|
|
650
650
|
}
|
|
651
651
|
function qualifyRefusalHeadingFor(row, state) {
|
|
652
652
|
if (refusalIsSelectable(row)) {
|
|
@@ -667,8 +667,8 @@ function hasRefusalsToShow(rows) {
|
|
|
667
667
|
}
|
|
668
668
|
var QUALIFY_REFUSAL_UNSPECIFIED = "refused for the fields as bound - no single requirement to name";
|
|
669
669
|
function qualifyRefusalReason(reason, fallback = QUALIFY_REFUSAL_UNSPECIFIED) {
|
|
670
|
-
const
|
|
671
|
-
return
|
|
670
|
+
const s2 = (reason ?? "").trim();
|
|
671
|
+
return s2 !== "" ? s2 : fallback;
|
|
672
672
|
}
|
|
673
673
|
|
|
674
674
|
// src/qualifyLaunch.ts
|
|
@@ -687,13 +687,13 @@ function chooserFitsViewport(width, height) {
|
|
|
687
687
|
if (!isFinite(width) || !isFinite(height)) return false;
|
|
688
688
|
return width >= CHOOSER_MIN_WIDTH_PX && height >= CHOOSER_MIN_HEIGHT_PX;
|
|
689
689
|
}
|
|
690
|
-
function shouldOpenChooserOnGenerate(
|
|
691
|
-
if (!
|
|
692
|
-
if (!
|
|
693
|
-
return chooserFitsViewport(
|
|
690
|
+
function shouldOpenChooserOnGenerate(i2) {
|
|
691
|
+
if (!i2.enabled) return false;
|
|
692
|
+
if (!i2.hasData) return false;
|
|
693
|
+
return chooserFitsViewport(i2.width, i2.height);
|
|
694
694
|
}
|
|
695
|
-
function shouldOpenInlineChooserOnGenerate(
|
|
696
|
-
return
|
|
695
|
+
function shouldOpenInlineChooserOnGenerate(i2) {
|
|
696
|
+
return i2.enabled === true && i2.hasData === true;
|
|
697
697
|
}
|
|
698
698
|
function canConfirmLaunch(selected) {
|
|
699
699
|
return typeof selected === "string" && selected.trim() !== "";
|
|
@@ -711,10 +711,10 @@ function normalizeFilterTerm(raw) {
|
|
|
711
711
|
return raw.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/\s+/g, " ").trim();
|
|
712
712
|
}
|
|
713
713
|
var FILTER_MIN_TERM_CHARS = 2;
|
|
714
|
-
function startsAWord(name2,
|
|
715
|
-
for (let
|
|
716
|
-
if (
|
|
717
|
-
const prev = name2.charCodeAt(
|
|
714
|
+
function startsAWord(name2, t2) {
|
|
715
|
+
for (let i2 = name2.indexOf(t2); i2 >= 0; i2 = name2.indexOf(t2, i2 + 1)) {
|
|
716
|
+
if (i2 === 0) return true;
|
|
717
|
+
const prev = name2.charCodeAt(i2 - 1);
|
|
718
718
|
const alnum = prev >= 97 && prev <= 122 || prev >= 48 && prev <= 57;
|
|
719
719
|
if (!alnum) return true;
|
|
720
720
|
}
|
|
@@ -722,31 +722,31 @@ function startsAWord(name2, t) {
|
|
|
722
722
|
}
|
|
723
723
|
function filterQualifyRows(rows, term, read) {
|
|
724
724
|
const all = Array.isArray(rows) ? rows.slice() : [];
|
|
725
|
-
const
|
|
726
|
-
if (
|
|
725
|
+
const t2 = normalizeFilterTerm(term);
|
|
726
|
+
if (t2.length < FILTER_MIN_TERM_CHARS) return { rows: all, tier: "all", term: "" };
|
|
727
727
|
const atWordStart = [];
|
|
728
728
|
const midWord = [];
|
|
729
729
|
const byDesc = [];
|
|
730
730
|
for (const row of all) {
|
|
731
|
-
const
|
|
732
|
-
const name2 = normalizeFilterTerm(
|
|
731
|
+
const f2 = read(row);
|
|
732
|
+
const name2 = normalizeFilterTerm(f2.name);
|
|
733
733
|
if (name2 === "") continue;
|
|
734
|
-
if (name2.indexOf(
|
|
735
|
-
(startsAWord(name2,
|
|
734
|
+
if (name2.indexOf(t2) >= 0) {
|
|
735
|
+
(startsAWord(name2, t2) ? atWordStart : midWord).push(row);
|
|
736
736
|
continue;
|
|
737
737
|
}
|
|
738
|
-
if (normalizeFilterTerm(
|
|
738
|
+
if (normalizeFilterTerm(f2.description).indexOf(t2) >= 0) byDesc.push(row);
|
|
739
739
|
}
|
|
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:
|
|
740
|
+
if (atWordStart.length > 0) return { rows: atWordStart, tier: "name", term: t2 };
|
|
741
|
+
if (midWord.length > 0) return { rows: midWord, tier: "namePart", term: t2 };
|
|
742
|
+
if (byDesc.length > 0) return { rows: byDesc, tier: "desc", term: t2 };
|
|
743
|
+
return { rows: [], tier: "none", term: t2 };
|
|
744
744
|
}
|
|
745
|
-
function readQualifyChartRow(
|
|
746
|
-
return { name:
|
|
745
|
+
function readQualifyChartRow(r2) {
|
|
746
|
+
return { name: r2.name, description: r2.description };
|
|
747
747
|
}
|
|
748
|
-
function readQualifyRefusalRow(
|
|
749
|
-
return { name:
|
|
748
|
+
function readQualifyRefusalRow(r2) {
|
|
749
|
+
return { name: r2.name, description: r2.reason };
|
|
750
750
|
}
|
|
751
751
|
var FILTER_ROW_PX = 32;
|
|
752
752
|
var FILTER_MIN_WIDTH_PX = 420;
|
|
@@ -758,34 +758,34 @@ function listNeedsFilter(scrollHeight, clientHeight) {
|
|
|
758
758
|
if (!Number.isFinite(scrollHeight) || !Number.isFinite(clientHeight)) return false;
|
|
759
759
|
return scrollHeight > clientHeight - FILTER_ROW_PX;
|
|
760
760
|
}
|
|
761
|
-
function qualifyFilterGate(
|
|
762
|
-
if (!filterFitsChooser(
|
|
763
|
-
if (!listNeedsFilter(
|
|
761
|
+
function qualifyFilterGate(i2) {
|
|
762
|
+
if (!filterFitsChooser(i2.cardWidth, i2.cardHeight)) return { show: false, why: "too-small" };
|
|
763
|
+
if (!listNeedsFilter(i2.scrollHeight, i2.clientHeight)) return { show: false, why: "no-overflow" };
|
|
764
764
|
return { show: true, why: "shown" };
|
|
765
765
|
}
|
|
766
766
|
function computeQualifyFilterView(groups, term) {
|
|
767
|
-
const
|
|
768
|
-
const read = (
|
|
767
|
+
const g2 = Array.isArray(groups) ? groups : [];
|
|
768
|
+
const read = (r2) => ({ name: r2.name, description: r2.description });
|
|
769
769
|
const collect = (section) => {
|
|
770
770
|
const out = [];
|
|
771
|
-
for (const grp of
|
|
771
|
+
for (const grp of g2) if (grp.section === section) for (const r2 of grp.rows) out.push(r2);
|
|
772
772
|
return out;
|
|
773
773
|
};
|
|
774
774
|
const fitRows = collect("fits");
|
|
775
775
|
const fit = filterQualifyRows(fitRows, term, read);
|
|
776
776
|
const ref = filterQualifyRows(collect("refused"), term, read);
|
|
777
777
|
const visible = /* @__PURE__ */ new Set();
|
|
778
|
-
for (const
|
|
779
|
-
for (const
|
|
778
|
+
for (const r2 of fit.rows) visible.add(r2.el);
|
|
779
|
+
for (const r2 of ref.rows) visible.add(r2.el);
|
|
780
780
|
const show = [], hide = [], showHeadings = [], hideHeadings = [];
|
|
781
|
-
for (const grp of
|
|
781
|
+
for (const grp of g2) {
|
|
782
782
|
let any = false;
|
|
783
|
-
for (const
|
|
784
|
-
if (visible.has(
|
|
785
|
-
show.push(
|
|
783
|
+
for (const r2 of grp.rows) {
|
|
784
|
+
if (visible.has(r2.el)) {
|
|
785
|
+
show.push(r2.el);
|
|
786
786
|
any = true;
|
|
787
787
|
} else {
|
|
788
|
-
hide.push(
|
|
788
|
+
hide.push(r2.el);
|
|
789
789
|
}
|
|
790
790
|
}
|
|
791
791
|
if (grp.heading !== null) (any ? showHeadings : hideHeadings).push(grp.heading);
|
|
@@ -824,17 +824,17 @@ var INLINE_FILTER_MIN_ROWS = 8;
|
|
|
824
824
|
|
|
825
825
|
// src/sourceDateFormat.ts
|
|
826
826
|
function formatSourceDate(raw, opts = {}) {
|
|
827
|
-
const
|
|
828
|
-
if (!
|
|
829
|
-
const dayFrame = u(
|
|
827
|
+
const d2 = toDate(raw);
|
|
828
|
+
if (!d2) return null;
|
|
829
|
+
const dayFrame = u(d2);
|
|
830
830
|
const frame = dayFrame ?? (opts.dialect === "dotnet" ? "local" : "utc");
|
|
831
|
-
const
|
|
831
|
+
const p4 = partsIn(d2, frame);
|
|
832
832
|
const format = cleanFormat(opts.format, opts.dialect);
|
|
833
833
|
if (format && opts.dialect) {
|
|
834
|
-
const rendered = renderFormat(format,
|
|
834
|
+
const rendered = renderFormat(format, p4, opts.dialect, opts.culture);
|
|
835
835
|
if (rendered) return rendered;
|
|
836
836
|
}
|
|
837
|
-
return localeDate(
|
|
837
|
+
return localeDate(p4, !!dayFrame, opts.culture);
|
|
838
838
|
}
|
|
839
839
|
function formatSourceDateFor(raw, columnName2, formats, culture) {
|
|
840
840
|
return formatSourceDate(raw, {
|
|
@@ -847,41 +847,41 @@ var ISO_LIKE_RE = /^\s*\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(
|
|
|
847
847
|
function toDate(raw) {
|
|
848
848
|
if (raw instanceof Date) return isNaN(raw.getTime()) ? null : raw;
|
|
849
849
|
if (typeof raw !== "string" || !ISO_LIKE_RE.test(raw)) return null;
|
|
850
|
-
const
|
|
851
|
-
return
|
|
850
|
+
const d2 = p(raw.trim());
|
|
851
|
+
return d2 && !isNaN(d2.getTime()) ? d2 : null;
|
|
852
852
|
}
|
|
853
|
-
function partsIn(
|
|
853
|
+
function partsIn(d2, frame) {
|
|
854
854
|
return frame === "utc" ? {
|
|
855
|
-
year:
|
|
856
|
-
month:
|
|
857
|
-
day:
|
|
858
|
-
hours:
|
|
859
|
-
minutes:
|
|
860
|
-
seconds:
|
|
861
|
-
ms:
|
|
862
|
-
weekday:
|
|
855
|
+
year: d2.getUTCFullYear(),
|
|
856
|
+
month: d2.getUTCMonth() + 1,
|
|
857
|
+
day: d2.getUTCDate(),
|
|
858
|
+
hours: d2.getUTCHours(),
|
|
859
|
+
minutes: d2.getUTCMinutes(),
|
|
860
|
+
seconds: d2.getUTCSeconds(),
|
|
861
|
+
ms: d2.getUTCMilliseconds(),
|
|
862
|
+
weekday: d2.getUTCDay()
|
|
863
863
|
} : {
|
|
864
|
-
year:
|
|
865
|
-
month:
|
|
866
|
-
day:
|
|
867
|
-
hours:
|
|
868
|
-
minutes:
|
|
869
|
-
seconds:
|
|
870
|
-
ms:
|
|
871
|
-
weekday:
|
|
864
|
+
year: d2.getFullYear(),
|
|
865
|
+
month: d2.getMonth() + 1,
|
|
866
|
+
day: d2.getDate(),
|
|
867
|
+
hours: d2.getHours(),
|
|
868
|
+
minutes: d2.getMinutes(),
|
|
869
|
+
seconds: d2.getSeconds(),
|
|
870
|
+
ms: d2.getMilliseconds(),
|
|
871
|
+
weekday: d2.getDay()
|
|
872
872
|
};
|
|
873
873
|
}
|
|
874
|
-
function utcAnchor(
|
|
875
|
-
const
|
|
876
|
-
if (
|
|
877
|
-
return
|
|
874
|
+
function utcAnchor(p4) {
|
|
875
|
+
const d2 = new Date(Date.UTC(p4.year, p4.month - 1, p4.day, p4.hours, p4.minutes, p4.seconds, p4.ms));
|
|
876
|
+
if (p4.year >= 0 && p4.year < 100) d2.setUTCFullYear(p4.year);
|
|
877
|
+
return d2;
|
|
878
878
|
}
|
|
879
|
-
function localeDate(
|
|
880
|
-
const anchor = utcAnchor(
|
|
879
|
+
function localeDate(p4, wholeDay, culture) {
|
|
880
|
+
const anchor = utcAnchor(p4);
|
|
881
881
|
try {
|
|
882
|
-
const
|
|
883
|
-
if (!wholeDay)
|
|
884
|
-
return new Intl.DateTimeFormat(culture || void 0,
|
|
882
|
+
const o2 = { dateStyle: "medium", timeZone: "UTC" };
|
|
883
|
+
if (!wholeDay) o2.timeStyle = p4.seconds || p4.ms ? "medium" : "short";
|
|
884
|
+
return new Intl.DateTimeFormat(culture || void 0, o2).format(anchor);
|
|
885
885
|
} catch {
|
|
886
886
|
const iso = anchor.toISOString();
|
|
887
887
|
return wholeDay ? iso.slice(0, 10) : `${iso.slice(0, 10)} ${iso.slice(11, 19)}`;
|
|
@@ -889,18 +889,18 @@ function localeDate(p3, wholeDay, culture) {
|
|
|
889
889
|
}
|
|
890
890
|
function cleanFormat(raw, dialect) {
|
|
891
891
|
if (!raw || !dialect) return null;
|
|
892
|
-
let
|
|
892
|
+
let s2 = firstSection(String(raw), dialect);
|
|
893
893
|
if (dialect === "excel") {
|
|
894
|
-
|
|
894
|
+
s2 = s2.replace(/\[(h{1,2}|m{1,2}|s{1,2})\]/gi, "$1").replace(/\[[^\]]*\]/g, "");
|
|
895
895
|
}
|
|
896
|
-
if (!
|
|
897
|
-
return hasDateToken(
|
|
896
|
+
if (!s2.trim() || /^general$/i.test(s2.trim())) return null;
|
|
897
|
+
return hasDateToken(s2, dialect) ? s2 : null;
|
|
898
898
|
}
|
|
899
|
-
function firstSection(
|
|
899
|
+
function firstSection(s2, dialect) {
|
|
900
900
|
let out = "";
|
|
901
901
|
let quote = "";
|
|
902
|
-
for (let
|
|
903
|
-
const ch =
|
|
902
|
+
for (let i2 = 0; i2 < s2.length; i2++) {
|
|
903
|
+
const ch = s2[i2];
|
|
904
904
|
if (quote) {
|
|
905
905
|
out += ch;
|
|
906
906
|
if (ch === quote) quote = "";
|
|
@@ -912,8 +912,8 @@ function firstSection(s, dialect) {
|
|
|
912
912
|
continue;
|
|
913
913
|
}
|
|
914
914
|
if (ch === "\\") {
|
|
915
|
-
out += ch + (
|
|
916
|
-
|
|
915
|
+
out += ch + (s2[i2 + 1] ?? "");
|
|
916
|
+
i2++;
|
|
917
917
|
continue;
|
|
918
918
|
}
|
|
919
919
|
if (ch === ";") break;
|
|
@@ -921,21 +921,21 @@ function firstSection(s, dialect) {
|
|
|
921
921
|
}
|
|
922
922
|
return out;
|
|
923
923
|
}
|
|
924
|
-
function hasDateToken(
|
|
925
|
-
const stripped = stripLiterals(
|
|
924
|
+
function hasDateToken(s2, dialect) {
|
|
925
|
+
const stripped = stripLiterals(s2, dialect);
|
|
926
926
|
return dialect === "excel" ? /[ymdhs]/i.test(stripped) : /[yMdHhmsft]/.test(stripped);
|
|
927
927
|
}
|
|
928
|
-
function stripLiterals(
|
|
928
|
+
function stripLiterals(s2, dialect) {
|
|
929
929
|
let out = "";
|
|
930
|
-
for (let
|
|
931
|
-
const ch =
|
|
930
|
+
for (let i2 = 0; i2 < s2.length; i2++) {
|
|
931
|
+
const ch = s2[i2];
|
|
932
932
|
if (ch === "\\" || dialect === "dotnet" && ch === "%") {
|
|
933
|
-
|
|
933
|
+
i2++;
|
|
934
934
|
continue;
|
|
935
935
|
}
|
|
936
936
|
if (ch === '"' || dialect === "dotnet" && ch === "'") {
|
|
937
|
-
const end =
|
|
938
|
-
|
|
937
|
+
const end = s2.indexOf(ch, i2 + 1);
|
|
938
|
+
i2 = end < 0 ? s2.length : end;
|
|
939
939
|
continue;
|
|
940
940
|
}
|
|
941
941
|
out += ch;
|
|
@@ -984,62 +984,62 @@ var DOTNET_TOKENS = [
|
|
|
984
984
|
[/^tt/, "meridiemLong"],
|
|
985
985
|
[/^t/, "meridiemShort"]
|
|
986
986
|
];
|
|
987
|
-
function tokenize(
|
|
987
|
+
function tokenize(s2, dialect) {
|
|
988
988
|
const table = dialect === "excel" ? EXCEL_TOKENS : DOTNET_TOKENS;
|
|
989
989
|
const out = [];
|
|
990
|
-
let
|
|
991
|
-
while (
|
|
992
|
-
const ch =
|
|
990
|
+
let i2 = 0;
|
|
991
|
+
while (i2 < s2.length) {
|
|
992
|
+
const ch = s2[i2];
|
|
993
993
|
if (ch === "\\" || dialect === "dotnet" && ch === "%") {
|
|
994
|
-
if (
|
|
995
|
-
|
|
994
|
+
if (i2 + 1 < s2.length) out.push({ kind: "literal", text: s2[i2 + 1] });
|
|
995
|
+
i2 += 2;
|
|
996
996
|
continue;
|
|
997
997
|
}
|
|
998
998
|
if (ch === '"' || dialect === "dotnet" && ch === "'") {
|
|
999
|
-
const end =
|
|
1000
|
-
out.push({ kind: "literal", text: end < 0 ?
|
|
1001
|
-
|
|
999
|
+
const end = s2.indexOf(ch, i2 + 1);
|
|
1000
|
+
out.push({ kind: "literal", text: end < 0 ? s2.slice(i2 + 1) : s2.slice(i2 + 1, end) });
|
|
1001
|
+
i2 = end < 0 ? s2.length : end + 1;
|
|
1002
1002
|
continue;
|
|
1003
1003
|
}
|
|
1004
|
-
const rest =
|
|
1004
|
+
const rest = s2.slice(i2);
|
|
1005
1005
|
let matched = false;
|
|
1006
1006
|
for (const [re, kind] of table) {
|
|
1007
|
-
const
|
|
1008
|
-
if (
|
|
1007
|
+
const m2 = re.exec(rest);
|
|
1008
|
+
if (m2) {
|
|
1009
1009
|
out.push({ kind });
|
|
1010
|
-
|
|
1010
|
+
i2 += m2[0].length;
|
|
1011
1011
|
matched = true;
|
|
1012
1012
|
break;
|
|
1013
1013
|
}
|
|
1014
1014
|
}
|
|
1015
1015
|
if (!matched) {
|
|
1016
1016
|
out.push({ kind: "literal", text: ch });
|
|
1017
|
-
|
|
1017
|
+
i2++;
|
|
1018
1018
|
}
|
|
1019
1019
|
}
|
|
1020
1020
|
return out;
|
|
1021
1021
|
}
|
|
1022
1022
|
function resolveAmbiguousM(tokens) {
|
|
1023
|
-
const isHour = (
|
|
1024
|
-
const isSecond = (
|
|
1025
|
-
for (let
|
|
1026
|
-
const
|
|
1027
|
-
if (
|
|
1028
|
-
const two =
|
|
1023
|
+
const isHour = (t2) => t2.kind === "hour1" || t2.kind === "hour2";
|
|
1024
|
+
const isSecond = (t2) => t2.kind === "second1" || t2.kind === "second2";
|
|
1025
|
+
for (let i2 = 0; i2 < tokens.length; i2++) {
|
|
1026
|
+
const t2 = tokens[i2];
|
|
1027
|
+
if (t2.kind !== "mAmbiguous1" && t2.kind !== "mAmbiguous2") continue;
|
|
1028
|
+
const two = t2.kind === "mAmbiguous2";
|
|
1029
1029
|
let minute = false;
|
|
1030
|
-
for (let
|
|
1031
|
-
if (tokens[
|
|
1032
|
-
minute = isHour(tokens[
|
|
1030
|
+
for (let j2 = i2 - 1; j2 >= 0; j2--) {
|
|
1031
|
+
if (tokens[j2].kind === "literal") continue;
|
|
1032
|
+
minute = isHour(tokens[j2]);
|
|
1033
1033
|
break;
|
|
1034
1034
|
}
|
|
1035
1035
|
if (!minute) {
|
|
1036
|
-
for (let
|
|
1037
|
-
if (tokens[
|
|
1038
|
-
minute = isSecond(tokens[
|
|
1036
|
+
for (let j2 = i2 + 1; j2 < tokens.length; j2++) {
|
|
1037
|
+
if (tokens[j2].kind === "literal") continue;
|
|
1038
|
+
minute = isSecond(tokens[j2]);
|
|
1039
1039
|
break;
|
|
1040
1040
|
}
|
|
1041
1041
|
}
|
|
1042
|
-
|
|
1042
|
+
t2.kind = minute ? two ? "minute2" : "minute1" : two ? "month2" : "month1";
|
|
1043
1043
|
}
|
|
1044
1044
|
}
|
|
1045
1045
|
var EN_MONTHS_LONG = [
|
|
@@ -1059,113 +1059,113 @@ var EN_MONTHS_LONG = [
|
|
|
1059
1059
|
var EN_MONTHS_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
1060
1060
|
var EN_DAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
1061
1061
|
var EN_DAYS_SHORT = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
1062
|
-
function name(
|
|
1062
|
+
function name(p4, kind, width, culture) {
|
|
1063
1063
|
try {
|
|
1064
1064
|
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(
|
|
1065
|
+
return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(p4));
|
|
1066
1066
|
} catch {
|
|
1067
1067
|
if (kind === "month") {
|
|
1068
|
-
const long = EN_MONTHS_LONG[
|
|
1068
|
+
const long = EN_MONTHS_LONG[p4.month - 1] ?? "";
|
|
1069
1069
|
if (width === "long") return long;
|
|
1070
|
-
return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[
|
|
1070
|
+
return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[p4.month - 1] ?? "";
|
|
1071
1071
|
}
|
|
1072
|
-
return (width === "long" ? EN_DAYS_LONG[
|
|
1072
|
+
return (width === "long" ? EN_DAYS_LONG[p4.weekday] : EN_DAYS_SHORT[p4.weekday]) ?? "";
|
|
1073
1073
|
}
|
|
1074
1074
|
}
|
|
1075
|
-
var p2 = (
|
|
1076
|
-
function renderFormat(format,
|
|
1075
|
+
var p2 = (n2) => (n2 < 10 ? "0" : "") + n2;
|
|
1076
|
+
function renderFormat(format, p4, dialect, culture) {
|
|
1077
1077
|
const tokens = tokenize(format, dialect);
|
|
1078
1078
|
if (dialect === "excel") resolveAmbiguousM(tokens);
|
|
1079
|
-
const twelve = tokens.some((
|
|
1079
|
+
const twelve = tokens.some((t2) => t2.kind === "meridiemLong" || t2.kind === "meridiemShort");
|
|
1080
1080
|
const hour12 = () => {
|
|
1081
|
-
const
|
|
1082
|
-
return
|
|
1081
|
+
const h2 = p4.hours % 12;
|
|
1082
|
+
return h2 === 0 ? 12 : h2;
|
|
1083
1083
|
};
|
|
1084
1084
|
let out = "";
|
|
1085
1085
|
let sawField = false;
|
|
1086
|
-
for (const
|
|
1087
|
-
switch (
|
|
1086
|
+
for (const t2 of tokens) {
|
|
1087
|
+
switch (t2.kind) {
|
|
1088
1088
|
case "literal":
|
|
1089
|
-
out +=
|
|
1089
|
+
out += t2.text ?? "";
|
|
1090
1090
|
break;
|
|
1091
1091
|
case "year4":
|
|
1092
|
-
out += String(
|
|
1092
|
+
out += String(p4.year);
|
|
1093
1093
|
sawField = true;
|
|
1094
1094
|
break;
|
|
1095
1095
|
case "year2":
|
|
1096
|
-
out += p2((
|
|
1096
|
+
out += p2((p4.year % 100 + 100) % 100);
|
|
1097
1097
|
sawField = true;
|
|
1098
1098
|
break;
|
|
1099
1099
|
case "monthLong":
|
|
1100
|
-
out += name(
|
|
1100
|
+
out += name(p4, "month", "long", culture);
|
|
1101
1101
|
sawField = true;
|
|
1102
1102
|
break;
|
|
1103
1103
|
case "monthShort":
|
|
1104
|
-
out += name(
|
|
1104
|
+
out += name(p4, "month", "short", culture);
|
|
1105
1105
|
sawField = true;
|
|
1106
1106
|
break;
|
|
1107
1107
|
case "monthNarrow":
|
|
1108
|
-
out += name(
|
|
1108
|
+
out += name(p4, "month", "long", culture).slice(0, 1);
|
|
1109
1109
|
sawField = true;
|
|
1110
1110
|
break;
|
|
1111
1111
|
case "month2":
|
|
1112
|
-
out += p2(
|
|
1112
|
+
out += p2(p4.month);
|
|
1113
1113
|
sawField = true;
|
|
1114
1114
|
break;
|
|
1115
1115
|
case "month1":
|
|
1116
|
-
out += String(
|
|
1116
|
+
out += String(p4.month);
|
|
1117
1117
|
sawField = true;
|
|
1118
1118
|
break;
|
|
1119
1119
|
case "weekdayLong":
|
|
1120
|
-
out += name(
|
|
1120
|
+
out += name(p4, "weekday", "long", culture);
|
|
1121
1121
|
sawField = true;
|
|
1122
1122
|
break;
|
|
1123
1123
|
case "weekdayShort":
|
|
1124
|
-
out += name(
|
|
1124
|
+
out += name(p4, "weekday", "short", culture);
|
|
1125
1125
|
sawField = true;
|
|
1126
1126
|
break;
|
|
1127
1127
|
case "day2":
|
|
1128
|
-
out += p2(
|
|
1128
|
+
out += p2(p4.day);
|
|
1129
1129
|
sawField = true;
|
|
1130
1130
|
break;
|
|
1131
1131
|
case "day1":
|
|
1132
|
-
out += String(
|
|
1132
|
+
out += String(p4.day);
|
|
1133
1133
|
sawField = true;
|
|
1134
1134
|
break;
|
|
1135
1135
|
case "hour2":
|
|
1136
|
-
out += p2(twelve ? hour12() :
|
|
1136
|
+
out += p2(twelve ? hour12() : p4.hours);
|
|
1137
1137
|
sawField = true;
|
|
1138
1138
|
break;
|
|
1139
1139
|
case "hour1":
|
|
1140
|
-
out += String(twelve ? hour12() :
|
|
1140
|
+
out += String(twelve ? hour12() : p4.hours);
|
|
1141
1141
|
sawField = true;
|
|
1142
1142
|
break;
|
|
1143
1143
|
case "minute2":
|
|
1144
|
-
out += p2(
|
|
1144
|
+
out += p2(p4.minutes);
|
|
1145
1145
|
sawField = true;
|
|
1146
1146
|
break;
|
|
1147
1147
|
case "minute1":
|
|
1148
|
-
out += String(
|
|
1148
|
+
out += String(p4.minutes);
|
|
1149
1149
|
sawField = true;
|
|
1150
1150
|
break;
|
|
1151
1151
|
case "second2":
|
|
1152
|
-
out += p2(
|
|
1152
|
+
out += p2(p4.seconds);
|
|
1153
1153
|
sawField = true;
|
|
1154
1154
|
break;
|
|
1155
1155
|
case "second1":
|
|
1156
|
-
out += String(
|
|
1156
|
+
out += String(p4.seconds);
|
|
1157
1157
|
sawField = true;
|
|
1158
1158
|
break;
|
|
1159
1159
|
case "fraction":
|
|
1160
|
-
out += String(
|
|
1160
|
+
out += String(p4.ms).padStart(3, "0");
|
|
1161
1161
|
sawField = true;
|
|
1162
1162
|
break;
|
|
1163
1163
|
case "meridiemLong":
|
|
1164
|
-
out +=
|
|
1164
|
+
out += p4.hours < 12 ? "AM" : "PM";
|
|
1165
1165
|
sawField = true;
|
|
1166
1166
|
break;
|
|
1167
1167
|
case "meridiemShort":
|
|
1168
|
-
out +=
|
|
1168
|
+
out += p4.hours < 12 ? "A" : "P";
|
|
1169
1169
|
sawField = true;
|
|
1170
1170
|
break;
|
|
1171
1171
|
}
|
|
@@ -1177,14 +1177,14 @@ function renderFormat(format, p3, dialect, culture) {
|
|
|
1177
1177
|
var SYNTHETIC_PREFIX = "__";
|
|
1178
1178
|
var NUMERIC_DATATYPE = /int|double|decimal|single|float|number|currency|money/i;
|
|
1179
1179
|
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(
|
|
1180
|
+
const s2 = String(raw ?? "").trim().toLowerCase();
|
|
1181
|
+
if (!s2) return "sum";
|
|
1182
|
+
if (/^(avg|average|mean)$/.test(s2)) return "average";
|
|
1183
|
+
if (/^(min|minimum)$/.test(s2)) return "min";
|
|
1184
|
+
if (/^(max|maximum)$/.test(s2)) return "max";
|
|
1185
|
+
if (/^(count|countrows)$/.test(s2)) return "count";
|
|
1186
|
+
if (/^(median|med)$/.test(s2)) return "median";
|
|
1187
|
+
if (/^(distinctcount|dcount|countdistinct|uniques?)$/.test(s2)) return "distinctcount";
|
|
1188
1188
|
return "sum";
|
|
1189
1189
|
}
|
|
1190
1190
|
function aggLabel(agg) {
|
|
@@ -1236,59 +1236,59 @@ function isSuppressed(col) {
|
|
|
1236
1236
|
}
|
|
1237
1237
|
function resolveAgg(col, requested, auto) {
|
|
1238
1238
|
const fallback = () => {
|
|
1239
|
-
const
|
|
1240
|
-
return
|
|
1239
|
+
const d2 = Me(col);
|
|
1240
|
+
return d2 === "first" ? "count" : d2;
|
|
1241
1241
|
};
|
|
1242
1242
|
if (auto) return fallback();
|
|
1243
1243
|
return It(col).indexOf(requested) >= 0 ? requested : fallback();
|
|
1244
1244
|
}
|
|
1245
|
-
function toNumber(
|
|
1246
|
-
if (
|
|
1247
|
-
const
|
|
1248
|
-
return Number.isFinite(
|
|
1245
|
+
function toNumber(v2) {
|
|
1246
|
+
if (v2 == null || v2 === "") return null;
|
|
1247
|
+
const n2 = typeof v2 === "number" ? v2 : Number(v2);
|
|
1248
|
+
return Number.isFinite(n2) ? n2 : null;
|
|
1249
1249
|
}
|
|
1250
1250
|
function reduce(values, agg, distinctRaw) {
|
|
1251
1251
|
if (agg === "count") return values.length;
|
|
1252
|
-
if (agg === "distinctcount") return new Set(distinctRaw.map((
|
|
1252
|
+
if (agg === "distinctcount") return new Set(distinctRaw.map((v2) => v2 == null ? "\0" : String(v2))).size;
|
|
1253
1253
|
if (!values.length) return null;
|
|
1254
1254
|
switch (agg) {
|
|
1255
1255
|
case "average":
|
|
1256
|
-
return values.reduce((
|
|
1256
|
+
return values.reduce((a2, b2) => a2 + b2, 0) / values.length;
|
|
1257
1257
|
case "min":
|
|
1258
1258
|
return Math.min(...values);
|
|
1259
1259
|
case "max":
|
|
1260
1260
|
return Math.max(...values);
|
|
1261
1261
|
case "median": {
|
|
1262
|
-
const
|
|
1263
|
-
const
|
|
1264
|
-
return
|
|
1262
|
+
const s2 = [...values].sort((a2, b2) => a2 - b2);
|
|
1263
|
+
const m2 = s2.length >> 1;
|
|
1264
|
+
return s2.length % 2 ? s2[m2] : (s2[m2 - 1] + s2[m2]) / 2;
|
|
1265
1265
|
}
|
|
1266
1266
|
default:
|
|
1267
|
-
return values.reduce((
|
|
1267
|
+
return values.reduce((a2, b2) => a2 + b2, 0);
|
|
1268
1268
|
}
|
|
1269
1269
|
}
|
|
1270
|
-
function fmtNumber(
|
|
1270
|
+
function fmtNumber(v2, culture) {
|
|
1271
1271
|
try {
|
|
1272
|
-
const abs = Math.abs(
|
|
1272
|
+
const abs = Math.abs(v2);
|
|
1273
1273
|
const opts = abs >= 1e6 ? { notation: "compact", maximumFractionDigits: 1 } : { maximumFractionDigits: abs < 10 ? 2 : 0 };
|
|
1274
|
-
return new Intl.NumberFormat(culture || void 0, opts).format(
|
|
1274
|
+
return new Intl.NumberFormat(culture || void 0, opts).format(v2);
|
|
1275
1275
|
} catch {
|
|
1276
|
-
return String(Math.round(
|
|
1276
|
+
return String(Math.round(v2 * 100) / 100);
|
|
1277
1277
|
}
|
|
1278
1278
|
}
|
|
1279
1279
|
function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
1280
1280
|
const columns = payload?.columns ?? [];
|
|
1281
1281
|
const rows = payload?.rows ?? [];
|
|
1282
1282
|
if (!columns.length || !rows.length) return null;
|
|
1283
|
-
const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((
|
|
1283
|
+
const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((n2) => Number.isInteger(n2))));
|
|
1284
1284
|
if (!wanted.length) return null;
|
|
1285
|
-
const rowIdxCol = columns.findIndex((
|
|
1285
|
+
const rowIdxCol = columns.findIndex((c2) => c2?.name === "__rowIdx__");
|
|
1286
1286
|
let byIdx = null;
|
|
1287
1287
|
if (rowIdxCol >= 0) {
|
|
1288
1288
|
byIdx = /* @__PURE__ */ new Map();
|
|
1289
|
-
for (let
|
|
1290
|
-
const
|
|
1291
|
-
if (
|
|
1289
|
+
for (let r2 = 0; r2 < rows.length; r2++) {
|
|
1290
|
+
const v2 = toNumber(rows[r2]?.[rowIdxCol]);
|
|
1291
|
+
if (v2 != null) byIdx.set(v2, r2);
|
|
1292
1292
|
}
|
|
1293
1293
|
}
|
|
1294
1294
|
const positions = [];
|
|
@@ -1302,16 +1302,16 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1302
1302
|
const maxMeasures = opts.maxMeasures ?? 4;
|
|
1303
1303
|
const maxHeaderValues = opts.maxHeaderValues ?? 3;
|
|
1304
1304
|
const maxDimensions = opts.maxDimensions ?? 2;
|
|
1305
|
-
const dimIdx = columns.findIndex((
|
|
1305
|
+
const dimIdx = columns.findIndex((c2) => c2 && !isSynthetic(c2.name) && !isMeasureColumn(c2));
|
|
1306
1306
|
let header;
|
|
1307
1307
|
if (dimIdx >= 0) {
|
|
1308
1308
|
const seen = [];
|
|
1309
1309
|
const set = /* @__PURE__ */ new Set();
|
|
1310
|
-
for (const
|
|
1311
|
-
const
|
|
1312
|
-
if (!set.has(
|
|
1313
|
-
set.add(
|
|
1314
|
-
seen.push(
|
|
1310
|
+
for (const p4 of positions) {
|
|
1311
|
+
const s2 = displayText(columns[dimIdx], rows[p4]?.[dimIdx], opts);
|
|
1312
|
+
if (!set.has(s2)) {
|
|
1313
|
+
set.add(s2);
|
|
1314
|
+
seen.push(s2);
|
|
1315
1315
|
}
|
|
1316
1316
|
if (seen.length > maxHeaderValues) break;
|
|
1317
1317
|
}
|
|
@@ -1321,35 +1321,35 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1321
1321
|
}
|
|
1322
1322
|
const measureCols = [];
|
|
1323
1323
|
const suppressedColumns = [];
|
|
1324
|
-
for (let
|
|
1325
|
-
if (!isMeasureColumn(columns[
|
|
1326
|
-
if (isSuppressed(columns[
|
|
1327
|
-
suppressedColumns.push(String(columns[
|
|
1324
|
+
for (let c2 = 0; c2 < columns.length; c2++) {
|
|
1325
|
+
if (!isMeasureColumn(columns[c2])) continue;
|
|
1326
|
+
if (isSuppressed(columns[c2])) {
|
|
1327
|
+
suppressedColumns.push(String(columns[c2]?.name ?? ""));
|
|
1328
1328
|
continue;
|
|
1329
1329
|
}
|
|
1330
|
-
measureCols.push(
|
|
1330
|
+
measureCols.push(c2);
|
|
1331
1331
|
}
|
|
1332
1332
|
const shown = measureCols.slice(0, maxMeasures);
|
|
1333
1333
|
const lines = [];
|
|
1334
|
-
for (const
|
|
1335
|
-
const col = columns[
|
|
1334
|
+
for (const c2 of shown) {
|
|
1335
|
+
const col = columns[c2];
|
|
1336
1336
|
const colAgg = resolveAgg(col, agg, auto);
|
|
1337
1337
|
const selVals = [];
|
|
1338
1338
|
const selRaw = [];
|
|
1339
|
-
for (const
|
|
1340
|
-
const
|
|
1341
|
-
selRaw.push(rows[
|
|
1342
|
-
if (
|
|
1339
|
+
for (const p4 of positions) {
|
|
1340
|
+
const n2 = toNumber(rows[p4]?.[c2]);
|
|
1341
|
+
selRaw.push(rows[p4]?.[c2]);
|
|
1342
|
+
if (n2 != null) selVals.push(n2);
|
|
1343
1343
|
}
|
|
1344
1344
|
const value = reduce(selVals, colAgg, selRaw);
|
|
1345
1345
|
let sharePct = null;
|
|
1346
1346
|
if (Te(col, colAgg) && value != null) {
|
|
1347
1347
|
const allVals = [];
|
|
1348
1348
|
const allRaw = [];
|
|
1349
|
-
for (let
|
|
1350
|
-
const
|
|
1351
|
-
allRaw.push(rows[
|
|
1352
|
-
if (
|
|
1349
|
+
for (let r2 = 0; r2 < rows.length; r2++) {
|
|
1350
|
+
const n2 = toNumber(rows[r2]?.[c2]);
|
|
1351
|
+
allRaw.push(rows[r2]?.[c2]);
|
|
1352
|
+
if (n2 != null) allVals.push(n2);
|
|
1353
1353
|
}
|
|
1354
1354
|
const total = reduce(allVals, colAgg, allRaw);
|
|
1355
1355
|
if (total != null && total > 0) sharePct = value / total * 100;
|
|
@@ -1365,16 +1365,16 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1365
1365
|
});
|
|
1366
1366
|
}
|
|
1367
1367
|
const dimensionLines = [];
|
|
1368
|
-
for (let
|
|
1369
|
-
if (
|
|
1370
|
-
if (!isRealColumn(columns[
|
|
1371
|
-
const name2 = String(columns[
|
|
1368
|
+
for (let c2 = 0; c2 < columns.length && dimensionLines.length < maxDimensions; c2++) {
|
|
1369
|
+
if (c2 === dimIdx) continue;
|
|
1370
|
+
if (!isRealColumn(columns[c2]) || isMeasureColumn(columns[c2])) continue;
|
|
1371
|
+
const name2 = String(columns[c2]?.name ?? "");
|
|
1372
1372
|
const distinct = /* @__PURE__ */ new Set();
|
|
1373
1373
|
let firstText = "";
|
|
1374
|
-
for (const
|
|
1375
|
-
const raw = rows[
|
|
1374
|
+
for (const p4 of positions) {
|
|
1375
|
+
const raw = rows[p4]?.[c2];
|
|
1376
1376
|
const key = raw == null || raw === "" ? "(blank)" : String(raw);
|
|
1377
|
-
if (!distinct.size) firstText = displayText(columns[
|
|
1377
|
+
if (!distinct.size) firstText = displayText(columns[c2], raw, opts);
|
|
1378
1378
|
distinct.add(key);
|
|
1379
1379
|
}
|
|
1380
1380
|
if (!distinct.size) continue;
|
|
@@ -1402,6 +1402,632 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
|
|
|
1402
1402
|
};
|
|
1403
1403
|
}
|
|
1404
1404
|
|
|
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
|
+
// src/palette.ts
|
|
1925
|
+
var MIN_DELTA_E = 10;
|
|
1926
|
+
function pickDistinctColorFromSeed(seedHex, existing, minDistance = MIN_DELTA_E) {
|
|
1927
|
+
const existingCs = [...existing].map((c2) => Mt(c2));
|
|
1928
|
+
const seed = Mt(seedHex);
|
|
1929
|
+
const minDeltaE = (c2) => existingCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...existingCs.map((c22) => c2.deltaE(c22, "CIE2000")));
|
|
1930
|
+
if (minDeltaE(seed) >= minDistance) {
|
|
1931
|
+
const hex = seed.hex();
|
|
1932
|
+
return { hex, registerHex: hex };
|
|
1933
|
+
}
|
|
1934
|
+
let bestCandidate = seed;
|
|
1935
|
+
let bestMinDist = minDeltaE(seed);
|
|
1936
|
+
const tryVariant = (c2) => {
|
|
1937
|
+
const d2 = minDeltaE(c2);
|
|
1938
|
+
if (d2 >= minDistance) {
|
|
1939
|
+
const hex = c2.hex();
|
|
1940
|
+
return { hex, registerHex: hex };
|
|
1941
|
+
}
|
|
1942
|
+
if (d2 > bestMinDist) {
|
|
1943
|
+
bestMinDist = d2;
|
|
1944
|
+
bestCandidate = c2;
|
|
1945
|
+
}
|
|
1946
|
+
return null;
|
|
1947
|
+
};
|
|
1948
|
+
for (const dSat of [25, -25, 50, -50, 75]) {
|
|
1949
|
+
const hit = tryVariant(dSat >= 0 ? seed.saturate(dSat) : seed.desaturate(-dSat));
|
|
1950
|
+
if (hit) return hit;
|
|
1951
|
+
}
|
|
1952
|
+
for (const dLight of [15, -15, 30, -30, 45]) {
|
|
1953
|
+
const hit = tryVariant(dLight >= 0 ? seed.lighten(dLight) : seed.darken(-dLight));
|
|
1954
|
+
if (hit) return hit;
|
|
1955
|
+
}
|
|
1956
|
+
for (const dHue of [30, -30, 60, -60, 90, -90, 120, -120]) {
|
|
1957
|
+
const hit = tryVariant(seed.spin(dHue));
|
|
1958
|
+
if (hit) return hit;
|
|
1959
|
+
}
|
|
1960
|
+
return { hex: seed.hex(), registerHex: bestCandidate.hex() };
|
|
1961
|
+
}
|
|
1962
|
+
function buildPaletteFromSeed(seedHex, count, minDistance = MIN_DELTA_E) {
|
|
1963
|
+
return buildPalette(() => seedHex, count, minDistance);
|
|
1964
|
+
}
|
|
1965
|
+
function buildPalette(seedFor, count, minDistance = MIN_DELTA_E) {
|
|
1966
|
+
const out = [];
|
|
1967
|
+
if (!(count > 0)) return out;
|
|
1968
|
+
const issued = /* @__PURE__ */ new Set();
|
|
1969
|
+
const issuedCs = [];
|
|
1970
|
+
const distance = (hex) => issuedCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...issuedCs.map((c2) => Mt(hex).deltaE(c2, "CIE2000")));
|
|
1971
|
+
let sweep = null;
|
|
1972
|
+
let sweepAt = 0;
|
|
1973
|
+
let lastSeed = "";
|
|
1974
|
+
for (let i2 = 0; i2 < count; i2++) {
|
|
1975
|
+
let seedHex = "";
|
|
1976
|
+
try {
|
|
1977
|
+
seedHex = normalise(seedFor(i2));
|
|
1978
|
+
} catch {
|
|
1979
|
+
seedHex = "";
|
|
1980
|
+
}
|
|
1981
|
+
if (!seedHex) seedHex = lastSeed;
|
|
1982
|
+
if (!seedHex) break;
|
|
1983
|
+
lastSeed = seedHex;
|
|
1984
|
+
const { hex, registerHex } = pickDistinctColorFromSeed(seedHex, issued, minDistance);
|
|
1985
|
+
let chosen = hex;
|
|
1986
|
+
let register = registerHex;
|
|
1987
|
+
if (distance(chosen) < minDistance) {
|
|
1988
|
+
if (!sweep) sweep = sweepCandidates(seedHex);
|
|
1989
|
+
let best = chosen;
|
|
1990
|
+
let bestD = distance(chosen);
|
|
1991
|
+
while (sweepAt < sweep.length) {
|
|
1992
|
+
const cand = sweep[sweepAt++];
|
|
1993
|
+
const d2 = distance(cand);
|
|
1994
|
+
if (d2 >= minDistance) {
|
|
1995
|
+
best = cand;
|
|
1996
|
+
bestD = d2;
|
|
1997
|
+
break;
|
|
1998
|
+
}
|
|
1999
|
+
if (d2 > bestD) {
|
|
2000
|
+
best = cand;
|
|
2001
|
+
bestD = d2;
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
2004
|
+
chosen = best;
|
|
2005
|
+
register = best;
|
|
2006
|
+
}
|
|
2007
|
+
issued.add(register);
|
|
2008
|
+
issuedCs.push(Mt(register));
|
|
2009
|
+
out.push(chosen);
|
|
2010
|
+
}
|
|
2011
|
+
return out;
|
|
2012
|
+
}
|
|
2013
|
+
function normalise(seed) {
|
|
2014
|
+
return typeof seed === "string" ? seed.trim() : "";
|
|
2015
|
+
}
|
|
2016
|
+
function sweepCandidates(seedHex) {
|
|
2017
|
+
const [h2, s2, l2] = Mt(seedHex).hsl();
|
|
2018
|
+
const baseHue = Number.isFinite(h2) ? h2 : 210;
|
|
2019
|
+
const baseSat = s2 < 25 ? 62 : Math.min(90, s2);
|
|
2020
|
+
const baseLight = l2 < 25 || l2 > 78 ? 52 : l2;
|
|
2021
|
+
const out = [];
|
|
2022
|
+
for (const dl of [0, -16, 16, -30, 30]) {
|
|
2023
|
+
const li = Math.min(78, Math.max(26, baseLight + dl));
|
|
2024
|
+
for (let k2 = 1; k2 <= 12; k2++) {
|
|
2025
|
+
out.push(Mt.hsl((baseHue + k2 * 30) % 360, baseSat, li).hex());
|
|
2026
|
+
}
|
|
2027
|
+
}
|
|
2028
|
+
return out;
|
|
2029
|
+
}
|
|
2030
|
+
|
|
1405
2031
|
// src/index.ts
|
|
1406
2032
|
function registerCityTable(packed) {
|
|
1407
2033
|
L3(packed);
|
|
@@ -1455,6 +2081,7 @@ export {
|
|
|
1455
2081
|
MARK_SELECTED_CLASS,
|
|
1456
2082
|
MAX_FRAME_GROW_FACTOR,
|
|
1457
2083
|
MIN_CONTRAST,
|
|
2084
|
+
MIN_DELTA_E,
|
|
1458
2085
|
MIN_HIT_BAND_PX,
|
|
1459
2086
|
PAGE_MATCH_TOLERANCE,
|
|
1460
2087
|
PHANTOM_FRACTION,
|
|
@@ -1476,6 +2103,8 @@ export {
|
|
|
1476
2103
|
backingHoldsGlyph,
|
|
1477
2104
|
bareBase64,
|
|
1478
2105
|
blankRenderFlag,
|
|
2106
|
+
buildPalette,
|
|
2107
|
+
buildPaletteFromSeed,
|
|
1479
2108
|
buildRenderPayload,
|
|
1480
2109
|
buildReviewWire,
|
|
1481
2110
|
canConfirmLaunch,
|
|
@@ -1530,6 +2159,7 @@ export {
|
|
|
1530
2159
|
normalizeFilterTerm,
|
|
1531
2160
|
orderRefusalsForDisplay,
|
|
1532
2161
|
periodTickSuppressesFeedback,
|
|
2162
|
+
pickDistinctColorFromSeed,
|
|
1533
2163
|
pillBacksGlyph,
|
|
1534
2164
|
pinScrolledAxis,
|
|
1535
2165
|
planAxisPin,
|