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