@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/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-GUCTCDEO.mjs";
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(c) {
129
- return typeof c === "string" ? c : String(c?.name ?? "");
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 r = 0; r < rows.length && seen < 50; r++) {
134
- const v = rows[r]?.[idx];
135
- if (v === null || v === void 0 || v === "") continue;
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 v === "number") {
138
- if (!isFinite(v)) return false;
136
+ if (typeof v2 === "number") {
137
+ if (!isFinite(v2)) return false;
139
138
  continue;
140
139
  }
141
- if (String(v).trim() === "" || !isFinite(Number(v))) return false;
140
+ if (String(v2).trim() === "" || !isFinite(Number(v2))) return false;
142
141
  }
143
142
  return seen > 0;
144
143
  }
145
- function lit(s) {
146
- return JSON.stringify(String(s));
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 i = 0; i < allCols.length; i++) {
154
- if (!META_COLUMNS.has(columnName(allCols[i]))) dataCols.push(i);
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 r = 0; r < rows.length; r++) {
183
- const raw = rows[r]?.[idx];
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 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
+ 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 i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
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 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) };
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 (e) {
423
- opts.onWarn?.("snapshot-no-image", e instanceof Error ? e.message : String(e));
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 (e) {
451
- opts.onWarn?.("snapshot-raster-draw", e instanceof Error ? e.message : String(e));
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 (e) {
471
- opts.onWarn?.("snapshot-serialize", e instanceof Error ? e.message : String(e));
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 (e) {
479
- opts.onWarn?.("snapshot-raster-unexpected", e instanceof Error ? e.message : String(e));
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(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;
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 m = /^data:([^;,]+);base64,(.*)$/s.exec(dataUrlOrB64 || "");
496
- if (m) return { b64: m[2], mediaType: m[1] };
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(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
+ 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: (v.verdictReason ?? "").toString().trim() };
516
+ return { kind: "propose", instruction: instr, reason: (v2.verdictReason ?? "").toString().trim() };
518
517
  }
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
+ 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 w = container.clientWidth || container.offsetWidth || 0;
539
- const h = container.clientHeight || container.offsetHeight || 0;
540
- if (w < minW || h < minH) {
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 = (v) => {
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(v);
592
+ resolve(v2);
594
593
  };
595
- const onKey = (e) => {
596
- if (e.key === "Escape") {
597
- e.stopPropagation();
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", (e) => e.stopPropagation());
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((r) => !!r && typeof r.name === "string" && r.name.trim() !== "");
654
- return [...named.filter(refusalIsSelectable), ...named.filter((r) => !refusalIsSelectable(r))];
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 s = (reason ?? "").trim();
676
- return s !== "" ? s : fallback;
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(i) {
696
- if (!i.enabled) return false;
697
- if (!i.hasData) return false;
698
- return chooserFitsViewport(i.width, i.height);
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(i) {
701
- return i.enabled === true && i.hasData === true;
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, 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
+ 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 t = normalizeFilterTerm(term);
731
- if (t.length < FILTER_MIN_TERM_CHARS) return { rows: all, tier: "all", term: "" };
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 f = read(row);
737
- const name2 = normalizeFilterTerm(f.name);
735
+ const f2 = read(row);
736
+ const name2 = normalizeFilterTerm(f2.name);
738
737
  if (name2 === "") continue;
739
- if (name2.indexOf(t) >= 0) {
740
- (startsAWord(name2, t) ? atWordStart : midWord).push(row);
738
+ if (name2.indexOf(t2) >= 0) {
739
+ (startsAWord(name2, t2) ? atWordStart : midWord).push(row);
741
740
  continue;
742
741
  }
743
- if (normalizeFilterTerm(f.description).indexOf(t) >= 0) byDesc.push(row);
742
+ if (normalizeFilterTerm(f2.description).indexOf(t2) >= 0) byDesc.push(row);
744
743
  }
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
+ 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(r) {
751
- return { name: r.name, description: r.description };
749
+ function readQualifyChartRow(r2) {
750
+ return { name: r2.name, description: r2.description };
752
751
  }
753
- function readQualifyRefusalRow(r) {
754
- return { name: r.name, description: r.reason };
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(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" };
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 g = Array.isArray(groups) ? groups : [];
773
- const read = (r) => ({ name: r.name, description: r.description });
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 g) if (grp.section === section) for (const r of grp.rows) out.push(r);
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 r of fit.rows) visible.add(r.el);
784
- for (const r of ref.rows) visible.add(r.el);
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 g) {
785
+ for (const grp of g2) {
787
786
  let any = false;
788
- for (const r of grp.rows) {
789
- if (visible.has(r.el)) {
790
- show.push(r.el);
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(r.el);
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 d = toDate(raw);
833
- if (!d) return null;
834
- const dayFrame = u(d);
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 p3 = partsIn(d, frame);
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, p3, opts.dialect, opts.culture);
838
+ const rendered = renderFormat(format, p4, opts.dialect, opts.culture);
840
839
  if (rendered) return rendered;
841
840
  }
842
- return localeDate(p3, !!dayFrame, opts.culture);
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 d = p(raw.trim());
856
- return d && !isNaN(d.getTime()) ? d : null;
854
+ const d2 = p(raw.trim());
855
+ return d2 && !isNaN(d2.getTime()) ? d2 : null;
857
856
  }
858
- function partsIn(d, frame) {
857
+ function partsIn(d2, frame) {
859
858
  return frame === "utc" ? {
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()
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: 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()
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(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
+ 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(p3, wholeDay, culture) {
885
- const anchor = utcAnchor(p3);
883
+ function localeDate(p4, wholeDay, culture) {
884
+ const anchor = utcAnchor(p4);
886
885
  try {
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);
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 s = firstSection(String(raw), dialect);
896
+ let s2 = firstSection(String(raw), dialect);
898
897
  if (dialect === "excel") {
899
- s = s.replace(/\[(h{1,2}|m{1,2}|s{1,2})\]/gi, "$1").replace(/\[[^\]]*\]/g, "");
898
+ s2 = s2.replace(/\[(h{1,2}|m{1,2}|s{1,2})\]/gi, "$1").replace(/\[[^\]]*\]/g, "");
900
899
  }
901
- if (!s.trim() || /^general$/i.test(s.trim())) return null;
902
- return hasDateToken(s, dialect) ? s : null;
900
+ if (!s2.trim() || /^general$/i.test(s2.trim())) return null;
901
+ return hasDateToken(s2, dialect) ? s2 : null;
903
902
  }
904
- function firstSection(s, dialect) {
903
+ function firstSection(s2, dialect) {
905
904
  let out = "";
906
905
  let quote = "";
907
- for (let i = 0; i < s.length; i++) {
908
- const ch = s[i];
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 + (s[i + 1] ?? "");
921
- i++;
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(s, dialect) {
930
- const stripped = stripLiterals(s, dialect);
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(s, dialect) {
932
+ function stripLiterals(s2, dialect) {
934
933
  let out = "";
935
- for (let i = 0; i < s.length; i++) {
936
- const ch = s[i];
934
+ for (let i2 = 0; i2 < s2.length; i2++) {
935
+ const ch = s2[i2];
937
936
  if (ch === "\\" || dialect === "dotnet" && ch === "%") {
938
- i++;
937
+ i2++;
939
938
  continue;
940
939
  }
941
940
  if (ch === '"' || dialect === "dotnet" && ch === "'") {
942
- const end = s.indexOf(ch, i + 1);
943
- i = end < 0 ? s.length : end;
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(s, dialect) {
991
+ function tokenize(s2, dialect) {
993
992
  const table = dialect === "excel" ? EXCEL_TOKENS : DOTNET_TOKENS;
994
993
  const out = [];
995
- let i = 0;
996
- while (i < s.length) {
997
- const ch = s[i];
994
+ let i2 = 0;
995
+ while (i2 < s2.length) {
996
+ const ch = s2[i2];
998
997
  if (ch === "\\" || dialect === "dotnet" && ch === "%") {
999
- if (i + 1 < s.length) out.push({ kind: "literal", text: s[i + 1] });
1000
- i += 2;
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 = 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;
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 = s.slice(i);
1008
+ const rest = s2.slice(i2);
1010
1009
  let matched = false;
1011
1010
  for (const [re, kind] of table) {
1012
- const m = re.exec(rest);
1013
- if (m) {
1011
+ const m2 = re.exec(rest);
1012
+ if (m2) {
1014
1013
  out.push({ kind });
1015
- i += m[0].length;
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
- i++;
1021
+ i2++;
1023
1022
  }
1024
1023
  }
1025
1024
  return out;
1026
1025
  }
1027
1026
  function resolveAmbiguousM(tokens) {
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";
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 j = i - 1; j >= 0; j--) {
1036
- if (tokens[j].kind === "literal") continue;
1037
- minute = isHour(tokens[j]);
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 j = i + 1; j < tokens.length; j++) {
1042
- if (tokens[j].kind === "literal") continue;
1043
- minute = isSecond(tokens[j]);
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
- t.kind = minute ? two ? "minute2" : "minute1" : two ? "month2" : "month1";
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(p3, kind, width, culture) {
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(p3));
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[p3.month - 1] ?? "";
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[p3.month - 1] ?? "";
1074
+ return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[p4.month - 1] ?? "";
1076
1075
  }
1077
- return (width === "long" ? EN_DAYS_LONG[p3.weekday] : EN_DAYS_SHORT[p3.weekday]) ?? "";
1076
+ return (width === "long" ? EN_DAYS_LONG[p4.weekday] : EN_DAYS_SHORT[p4.weekday]) ?? "";
1078
1077
  }
1079
1078
  }
1080
- var p2 = (n) => (n < 10 ? "0" : "") + n;
1081
- function renderFormat(format, p3, dialect, culture) {
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((t) => t.kind === "meridiemLong" || t.kind === "meridiemShort");
1083
+ const twelve = tokens.some((t2) => t2.kind === "meridiemLong" || t2.kind === "meridiemShort");
1085
1084
  const hour12 = () => {
1086
- const h = p3.hours % 12;
1087
- return h === 0 ? 12 : h;
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 t of tokens) {
1092
- switch (t.kind) {
1090
+ for (const t2 of tokens) {
1091
+ switch (t2.kind) {
1093
1092
  case "literal":
1094
- out += t.text ?? "";
1093
+ out += t2.text ?? "";
1095
1094
  break;
1096
1095
  case "year4":
1097
- out += String(p3.year);
1096
+ out += String(p4.year);
1098
1097
  sawField = true;
1099
1098
  break;
1100
1099
  case "year2":
1101
- out += p2((p3.year % 100 + 100) % 100);
1100
+ out += p2((p4.year % 100 + 100) % 100);
1102
1101
  sawField = true;
1103
1102
  break;
1104
1103
  case "monthLong":
1105
- out += name(p3, "month", "long", culture);
1104
+ out += name(p4, "month", "long", culture);
1106
1105
  sawField = true;
1107
1106
  break;
1108
1107
  case "monthShort":
1109
- out += name(p3, "month", "short", culture);
1108
+ out += name(p4, "month", "short", culture);
1110
1109
  sawField = true;
1111
1110
  break;
1112
1111
  case "monthNarrow":
1113
- out += name(p3, "month", "long", culture).slice(0, 1);
1112
+ out += name(p4, "month", "long", culture).slice(0, 1);
1114
1113
  sawField = true;
1115
1114
  break;
1116
1115
  case "month2":
1117
- out += p2(p3.month);
1116
+ out += p2(p4.month);
1118
1117
  sawField = true;
1119
1118
  break;
1120
1119
  case "month1":
1121
- out += String(p3.month);
1120
+ out += String(p4.month);
1122
1121
  sawField = true;
1123
1122
  break;
1124
1123
  case "weekdayLong":
1125
- out += name(p3, "weekday", "long", culture);
1124
+ out += name(p4, "weekday", "long", culture);
1126
1125
  sawField = true;
1127
1126
  break;
1128
1127
  case "weekdayShort":
1129
- out += name(p3, "weekday", "short", culture);
1128
+ out += name(p4, "weekday", "short", culture);
1130
1129
  sawField = true;
1131
1130
  break;
1132
1131
  case "day2":
1133
- out += p2(p3.day);
1132
+ out += p2(p4.day);
1134
1133
  sawField = true;
1135
1134
  break;
1136
1135
  case "day1":
1137
- out += String(p3.day);
1136
+ out += String(p4.day);
1138
1137
  sawField = true;
1139
1138
  break;
1140
1139
  case "hour2":
1141
- out += p2(twelve ? hour12() : p3.hours);
1140
+ out += p2(twelve ? hour12() : p4.hours);
1142
1141
  sawField = true;
1143
1142
  break;
1144
1143
  case "hour1":
1145
- out += String(twelve ? hour12() : p3.hours);
1144
+ out += String(twelve ? hour12() : p4.hours);
1146
1145
  sawField = true;
1147
1146
  break;
1148
1147
  case "minute2":
1149
- out += p2(p3.minutes);
1148
+ out += p2(p4.minutes);
1150
1149
  sawField = true;
1151
1150
  break;
1152
1151
  case "minute1":
1153
- out += String(p3.minutes);
1152
+ out += String(p4.minutes);
1154
1153
  sawField = true;
1155
1154
  break;
1156
1155
  case "second2":
1157
- out += p2(p3.seconds);
1156
+ out += p2(p4.seconds);
1158
1157
  sawField = true;
1159
1158
  break;
1160
1159
  case "second1":
1161
- out += String(p3.seconds);
1160
+ out += String(p4.seconds);
1162
1161
  sawField = true;
1163
1162
  break;
1164
1163
  case "fraction":
1165
- out += String(p3.ms).padStart(3, "0");
1164
+ out += String(p4.ms).padStart(3, "0");
1166
1165
  sawField = true;
1167
1166
  break;
1168
1167
  case "meridiemLong":
1169
- out += p3.hours < 12 ? "AM" : "PM";
1168
+ out += p4.hours < 12 ? "AM" : "PM";
1170
1169
  sawField = true;
1171
1170
  break;
1172
1171
  case "meridiemShort":
1173
- out += p3.hours < 12 ? "A" : "P";
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 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";
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 d = Me(col);
1245
- return d === "first" ? "count" : d;
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(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
+ 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((v) => v == null ? "\0" : String(v))).size;
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((a, b) => a + b, 0) / values.length;
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 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;
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((a, b) => a + b, 0);
1271
+ return values.reduce((a2, b2) => a2 + b2, 0);
1273
1272
  }
1274
1273
  }
1275
- function fmtNumber(v, culture) {
1274
+ function fmtNumber(v2, culture) {
1276
1275
  try {
1277
- const abs = Math.abs(v);
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(v);
1278
+ return new Intl.NumberFormat(culture || void 0, opts).format(v2);
1280
1279
  } catch {
1281
- return String(Math.round(v * 100) / 100);
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((n) => Number.isInteger(n))));
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((c) => c?.name === "__rowIdx__");
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 r = 0; r < rows.length; r++) {
1295
- const v = toNumber(rows[r]?.[rowIdxCol]);
1296
- if (v != null) byIdx.set(v, r);
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((c) => c && !isSynthetic(c.name) && !isMeasureColumn(c));
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 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);
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 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
+ 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(c);
1334
+ measureCols.push(c2);
1336
1335
  }
1337
1336
  const shown = measureCols.slice(0, maxMeasures);
1338
1337
  const lines = [];
1339
- for (const c of shown) {
1340
- const col = columns[c];
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 p3 of positions) {
1345
- const n = toNumber(rows[p3]?.[c]);
1346
- selRaw.push(rows[p3]?.[c]);
1347
- if (n != null) selVals.push(n);
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 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
+ 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 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
+ 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 p3 of positions) {
1380
- const raw = rows[p3]?.[c];
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[c], raw, opts);
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((c) => Mt(c));
1931
+ const existingCs = [...existing].map((c2) => Mt(c2));
1414
1932
  const seed = Mt(seedHex);
1415
- const minDeltaE = (c) => existingCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...existingCs.map((c2) => c.deltaE(c2, "CIE2000")));
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 = (c) => {
1423
- const d = minDeltaE(c);
1424
- if (d >= minDistance) {
1425
- const hex = c.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 (d > bestMinDist) {
1429
- bestMinDist = d;
1430
- bestCandidate = c;
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((c) => Mt(hex).deltaE(c, "CIE2000")));
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 i = 0; i < count; i++) {
1978
+ for (let i2 = 0; i2 < count; i2++) {
1461
1979
  let seedHex = "";
1462
1980
  try {
1463
- seedHex = normalise(seedFor(i));
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 d = distance(cand);
1480
- if (d >= minDistance) {
1997
+ const d2 = distance(cand);
1998
+ if (d2 >= minDistance) {
1481
1999
  best = cand;
1482
- bestD = d;
2000
+ bestD = d2;
1483
2001
  break;
1484
2002
  }
1485
- if (d > bestD) {
2003
+ if (d2 > bestD) {
1486
2004
  best = cand;
1487
- bestD = d;
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 [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;
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 k = 1; k <= 12; k++) {
1511
- out.push(Mt.hsl((baseHue + k * 30) % 360, baseSat, li).hex());
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;