@bicharts/chart-host 0.5.88 → 0.5.90

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