@bicharts/chart-host 0.5.86 → 0.5.88

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
@@ -15,7 +15,6 @@ import {
15
15
  AXIS_PIN_MAX_BAND_FRACTION,
16
16
  AXIS_PIN_MIN_LABELS,
17
17
  AXIS_PIN_TRACK_REACH_PX,
18
- Ae,
19
18
  BACKING_MAJORITY,
20
19
  COLOR_SCALE_SELF_CLAMP_PCT_DEFAULT,
21
20
  COLOR_SCALE_SELF_CLAMP_PCT_MAX,
@@ -24,7 +23,6 @@ import {
24
23
  CONTAINER_SLOT_INITIAL_XF_MARK,
25
24
  CONTAINER_SLOT_UI_STATE,
26
25
  CONTAINER_SLOT_XF_CLEAR,
27
- Ce,
28
26
  DARK_TEXT,
29
27
  DIM_OPACITY_DEFAULT,
30
28
  DIM_OPACITY_VAR,
@@ -34,6 +32,7 @@ import {
34
32
  GLYPH_SAMPLE_N,
35
33
  HOST_CONTAINER_CLASS,
36
34
  HOST_CONTRACT_VERSION,
35
+ It,
37
36
  L3,
38
37
  LABEL_CONTRAST_CAP,
39
38
  LABEL_CONTRAST_DONE_ATTR,
@@ -45,16 +44,17 @@ import {
45
44
  MAX_FRAME_GROW_FACTOR,
46
45
  MIN_CONTRAST,
47
46
  MIN_HIT_BAND_PX,
47
+ Me,
48
48
  PAGE_MATCH_TOLERANCE,
49
49
  PHANTOM_FRACTION,
50
50
  PILL_MIN_ALPHA,
51
51
  PILL_MIN_COVERAGE,
52
52
  PILL_OPAQUE_ALPHA,
53
53
  ROW_IDX_ATTR,
54
- Rt,
55
54
  SCROLL_SLACK_PX,
56
55
  SEASONAL_MARKERS_DEFAULT,
57
56
  SELECTION_ACTIVE_CLASS,
57
+ Te,
58
58
  VALUE_AXIS_BASELINE_DEFAULT,
59
59
  WHITE_TEXT_BG_LUM,
60
60
  XFILTER_REFRESH_EVENT,
@@ -93,6 +93,7 @@ import {
93
93
  measureContainerBoxes,
94
94
  needsScroll,
95
95
  noopViewStateProvider,
96
+ p,
96
97
  periodTickSuppressesFeedback,
97
98
  pillBacksGlyph,
98
99
  pinScrolledAxis,
@@ -108,9 +109,10 @@ import {
108
109
  stripEsmExports,
109
110
  svgInkReach,
110
111
  toRGBA,
112
+ u,
111
113
  unpinScrolledAxis,
112
114
  vt
113
- } from "./chunk-R4STRHXO.mjs";
115
+ } from "./chunk-NWMMNXH2.mjs";
114
116
  import "./chunk-A2GMXZP7.mjs";
115
117
  import "./chunk-GHODWOAL.mjs";
116
118
 
@@ -118,37 +120,37 @@ import "./chunk-GHODWOAL.mjs";
118
120
  var META_COLUMNS = /* @__PURE__ */ new Set(["__rowIdx__", "__geoIso__", "__geoLat__", "__geoLon__", "__geoPrecision__"]);
119
121
  var MAX_FREQUENCY_CATEGORIES = 30;
120
122
  var MIN_HISTOGRAM_ROWS = 8;
121
- function columnName(c) {
122
- return typeof c === "string" ? c : String(c?.name ?? "");
123
+ function columnName(c2) {
124
+ return typeof c2 === "string" ? c2 : String(c2?.name ?? "");
123
125
  }
124
126
  function isNumericColumn(rows, idx) {
125
127
  let seen = 0;
126
- for (let r = 0; r < rows.length && seen < 50; r++) {
127
- const v = rows[r]?.[idx];
128
- if (v === null || v === void 0 || v === "") continue;
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;
129
131
  seen++;
130
- if (typeof v === "number") {
131
- if (!isFinite(v)) return false;
132
+ if (typeof v2 === "number") {
133
+ if (!isFinite(v2)) return false;
132
134
  continue;
133
135
  }
134
- if (String(v).trim() === "" || !isFinite(Number(v))) return false;
136
+ if (String(v2).trim() === "" || !isFinite(Number(v2))) return false;
135
137
  }
136
138
  return seen > 0;
137
139
  }
138
- function lit(s) {
139
- return JSON.stringify(String(s));
140
+ function lit(s2) {
141
+ return JSON.stringify(String(s2));
140
142
  }
141
143
  function planTrivialChart(data) {
142
144
  const allCols = Array.isArray(data?.columns) ? data.columns : [];
143
145
  const rows = Array.isArray(data?.rows) ? data.rows : [];
144
146
  if (!allCols.length || !rows.length) return null;
145
147
  const dataCols = [];
146
- for (let i = 0; i < allCols.length; i++) {
147
- if (!META_COLUMNS.has(columnName(allCols[i]))) dataCols.push(i);
148
+ for (let i2 = 0; i2 < allCols.length; i2++) {
149
+ if (!META_COLUMNS.has(columnName(allCols[i2]))) dataCols.push(i2);
148
150
  }
149
151
  if (dataCols.length !== 1) return null;
150
152
  const idx = dataCols[0];
151
- const name = columnName(allCols[idx]) || "Value";
153
+ const name2 = columnName(allCols[idx]) || "Value";
152
154
  const finish = (kind, reason, source) => ({
153
155
  kind,
154
156
  reason,
@@ -160,7 +162,7 @@ function planTrivialChart(data) {
160
162
  return finish(
161
163
  "card",
162
164
  "One row of one column holds a single value, so this is a card. No generation was needed and none was used.",
163
- cardSource(idx, name)
165
+ cardSource(idx, name2)
164
166
  );
165
167
  }
166
168
  if (isNumericColumn(rows, idx)) {
@@ -168,12 +170,12 @@ function planTrivialChart(data) {
168
170
  return finish(
169
171
  "histogram",
170
172
  "A single numeric column has one defensible chart: the distribution of its values. No generation was needed and none was used.",
171
- histogramSource(idx, name)
173
+ histogramSource(idx, name2)
172
174
  );
173
175
  }
174
176
  const distinct = /* @__PURE__ */ new Set();
175
- for (let r = 0; r < rows.length; r++) {
176
- const raw = rows[r]?.[idx];
177
+ for (let r2 = 0; r2 < rows.length; r2++) {
178
+ const raw = rows[r2]?.[idx];
177
179
  distinct.add(raw === null || raw === void 0 || raw === "" ? "(blank)" : String(raw));
178
180
  }
179
181
  if (distinct.size < 2 || distinct.size >= rows.length) return null;
@@ -181,7 +183,7 @@ function planTrivialChart(data) {
181
183
  return finish(
182
184
  "frequency-bar",
183
185
  "A single categorical column has one defensible chart: how often each value occurs. No generation was needed and none was used.",
184
- frequencySource(idx, name)
186
+ frequencySource(idx, name2)
185
187
  );
186
188
  }
187
189
  function compileTrivialSource(source) {
@@ -222,7 +224,7 @@ var PRELUDE = `
222
224
  }
223
225
  container.replaceChildren();
224
226
  `;
225
- function cardSource(idx, name) {
227
+ function cardSource(idx, name2) {
226
228
  return `function render(container, data, options) {${PRELUDE}
227
229
  var raw = rows[0] ? rows[0][${idx}] : null;
228
230
  var blank = (raw === null || raw === undefined || raw === '');
@@ -254,13 +256,13 @@ function cardSource(idx, name) {
254
256
  label.style.marginTop = '6px'; label.style.textAlign = 'center';
255
257
  label.style.maxWidth = '100%'; label.style.overflow = 'hidden';
256
258
  label.style.textOverflow = 'ellipsis'; label.style.whiteSpace = 'nowrap';
257
- label.textContent = ${lit(name)};
259
+ label.textContent = ${lit(name2)};
258
260
 
259
261
  root.appendChild(value); root.appendChild(label);
260
262
  container.appendChild(root);
261
263
  }`;
262
264
  }
263
- function frequencySource(idx, name) {
265
+ function frequencySource(idx, name2) {
264
266
  return `function render(container, data, options) {${PRELUDE}
265
267
  var counts = new Map();
266
268
  for (var r = 0; r < rows.length; r++) {
@@ -280,7 +282,7 @@ function frequencySource(idx, name) {
280
282
  var barH = Math.min(bandH - 3, 26);
281
283
 
282
284
  var title = svgEl('text', { x: 8, y: CF + 2, 'font-size': CF, 'font-weight': '700', fill: FG });
283
- title.textContent = ${lit(name)} + ' \\u2014 count of ' + fmt(rows.length) + ' rows';
285
+ title.textContent = ${lit(name2)} + ' \\u2014 count of ' + fmt(rows.length) + ' rows';
284
286
  svg.appendChild(title);
285
287
 
286
288
  entries.forEach(function (e, i) {
@@ -319,7 +321,7 @@ function frequencySource(idx, name) {
319
321
  container.appendChild(svg);
320
322
  }`;
321
323
  }
322
- function histogramSource(idx, name) {
324
+ function histogramSource(idx, name2) {
323
325
  return `function render(container, data, options) {${PRELUDE}
324
326
  var vals = [];
325
327
  for (var r = 0; r < rows.length; r++) {
@@ -355,7 +357,7 @@ function histogramSource(idx, name) {
355
357
  var bw = plotW / binCount;
356
358
 
357
359
  var title = svgEl('text', { x: padL, y: CF + 2, 'font-size': CF, 'font-weight': '700', fill: FG });
358
- title.textContent = ${lit(name)} + ' \\u2014 distribution of ' + fmt(vals.length) + ' values';
360
+ title.textContent = ${lit(name2)} + ' \\u2014 distribution of ' + fmt(vals.length) + ' values';
359
361
  svg.appendChild(title);
360
362
 
361
363
  bins.forEach(function (idxs, i) {
@@ -390,21 +392,21 @@ function histogramSource(idx, name) {
390
392
  var DEFAULT_TIMEOUT_MS = 2e3;
391
393
  function svgToDataUrl(svg) {
392
394
  const cloned = svg.cloneNode(true);
393
- const w = svg.clientWidth || svg.getBoundingClientRect && svg.getBoundingClientRect().width || 600;
394
- const h = svg.clientHeight || svg.getBoundingClientRect && svg.getBoundingClientRect().height || 400;
395
- cloned.setAttribute("width", String(Math.round(w)));
396
- cloned.setAttribute("height", String(Math.round(h)));
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)));
397
399
  if (!cloned.getAttribute("xmlns")) cloned.setAttribute("xmlns", "http://www.w3.org/2000/svg");
398
400
  const svgStr = new XMLSerializer().serializeToString(cloned);
399
401
  const bytes = new TextEncoder().encode(svgStr);
400
402
  let binary = "";
401
- for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
403
+ for (let i2 = 0; i2 < bytes.length; i2++) binary += String.fromCharCode(bytes[i2]);
402
404
  return "data:image/svg+xml;base64," + btoa(binary);
403
405
  }
404
406
  function svgNaturalSize(svg) {
405
- const w = svg.clientWidth || svg.getBoundingClientRect && svg.getBoundingClientRect().width || 600;
406
- const h = svg.clientHeight || svg.getBoundingClientRect && svg.getBoundingClientRect().height || 400;
407
- return { width: Math.round(w), height: Math.round(h) };
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) };
408
410
  }
409
411
  function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
410
412
  const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
@@ -412,8 +414,8 @@ function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
412
414
  let img;
413
415
  try {
414
416
  img = new Image();
415
- } catch (e) {
416
- opts.onWarn?.("snapshot-no-image", e instanceof Error ? e.message : String(e));
417
+ } catch (e2) {
418
+ opts.onWarn?.("snapshot-no-image", e2 instanceof Error ? e2.message : String(e2));
417
419
  resolve(null);
418
420
  return;
419
421
  }
@@ -440,8 +442,8 @@ function rasterizeSvgToPngDataUrl(svgDataUrl, width, height, opts = {}) {
440
442
  c2d.fillRect(0, 0, cw, ch);
441
443
  c2d.drawImage(img, 0, 0, cw, ch);
442
444
  resolve(canvas.toDataURL("image/png"));
443
- } catch (e) {
444
- opts.onWarn?.("snapshot-raster-draw", e instanceof Error ? e.message : String(e));
445
+ } catch (e2) {
446
+ opts.onWarn?.("snapshot-raster-draw", e2 instanceof Error ? e2.message : String(e2));
445
447
  resolve(null);
446
448
  }
447
449
  };
@@ -460,33 +462,33 @@ async function captureSvgSnapshot(root, opts = {}) {
460
462
  let svgUrl;
461
463
  try {
462
464
  svgUrl = svgToDataUrl(svg);
463
- } catch (e) {
464
- opts.onWarn?.("snapshot-serialize", e instanceof Error ? e.message : String(e));
465
+ } catch (e2) {
466
+ opts.onWarn?.("snapshot-serialize", e2 instanceof Error ? e2.message : String(e2));
465
467
  return null;
466
468
  }
467
469
  const { width, height } = svgNaturalSize(svg);
468
470
  try {
469
471
  const png = await rasterizeSvgToPngDataUrl(svgUrl, width, height, opts);
470
472
  return png || svgUrl;
471
- } catch (e) {
472
- opts.onWarn?.("snapshot-raster-unexpected", e instanceof Error ? e.message : String(e));
473
+ } catch (e2) {
474
+ opts.onWarn?.("snapshot-raster-unexpected", e2 instanceof Error ? e2.message : String(e2));
473
475
  return svgUrl;
474
476
  }
475
477
  }
476
478
 
477
479
  // src/review.ts
478
- function shouldReview(g) {
479
- if (!g.enabled) return false;
480
- if (!g.modeLicensed) return false;
481
- if (!g.firstRenderAfterGenerate) return false;
482
- if (!g.codeVersion || g.codeVersion <= 0) return false;
483
- if (g.inFlight) return false;
484
- if (g.reviewedVersions.has(g.codeVersion)) return false;
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
487
  return true;
486
488
  }
487
489
  function bareBase64(dataUrlOrB64) {
488
- const m = /^data:([^;,]+);base64,(.*)$/s.exec(dataUrlOrB64 || "");
489
- if (m) return { b64: m[2], mediaType: m[1] };
490
+ const m2 = /^data:([^;,]+);base64,(.*)$/s.exec(dataUrlOrB64 || "");
491
+ if (m2) return { b64: m2[2], mediaType: m2[1] };
490
492
  return { b64: dataUrlOrB64 || "", mediaType: "image/png" };
491
493
  }
492
494
  function buildReviewWire(input) {
@@ -502,17 +504,17 @@ function buildReviewWire(input) {
502
504
  correlationId: (input.correlationId ?? "").toString()
503
505
  };
504
506
  }
505
- function actionFor(v) {
506
- if (!v) return { kind: "keep", reason: "no verdict returned", userVisible: false };
507
- if (v.status === "PROPOSED") {
508
- const instr = (v.instruction ?? "").toString().trim();
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();
509
511
  if (instr === "") return { kind: "keep", reason: "reviewer proposed no actionable change", userVisible: false };
510
- return { kind: "propose", instruction: instr, reason: (v.verdictReason ?? "").toString().trim() };
512
+ return { kind: "propose", instruction: instr, reason: (v2.verdictReason ?? "").toString().trim() };
511
513
  }
512
- if (v.status === "OK" && v.fix) return { kind: "apply-fix", fix: v.fix, reason: v.verdictReason ?? "" };
513
- if (v.status === "NOCHANGE") return { kind: "keep", reason: v.verdictReason ?? "the chart renders as asked", userVisible: false };
514
- if (v.status === "REFUSED") return { kind: "keep", reason: v.errorMessage ?? "review not available", userVisible: false };
515
- return { kind: "keep", reason: v.errorMessage ?? v.verdictReason ?? "review failed", userVisible: false };
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 };
516
518
  }
517
519
 
518
520
  // src/reviewDialog.ts
@@ -528,9 +530,9 @@ function askApplyImprovements(container, reason, opts = {}) {
528
530
  try {
529
531
  const minW = opts.minWidth ?? 260;
530
532
  const minH = opts.minHeight ?? 170;
531
- const w = container.clientWidth || container.offsetWidth || 0;
532
- const h = container.clientHeight || container.offsetHeight || 0;
533
- if (w < minW || h < minH) {
533
+ const w2 = container.clientWidth || container.offsetWidth || 0;
534
+ const h2 = container.clientHeight || container.offsetHeight || 0;
535
+ if (w2 < minW || h2 < minH) {
534
536
  resolve(false);
535
537
  return;
536
538
  }
@@ -575,7 +577,7 @@ function askApplyImprovements(container, reason, opts = {}) {
575
577
  yes.textContent = text.accept;
576
578
  yes.style.cssText = "font-weight:600;";
577
579
  let done = false;
578
- const finish = (v) => {
580
+ const finish = (v2) => {
579
581
  if (done) return;
580
582
  done = true;
581
583
  try {
@@ -583,17 +585,17 @@ function askApplyImprovements(container, reason, opts = {}) {
583
585
  } catch {
584
586
  }
585
587
  doc.removeEventListener("keydown", onKey, true);
586
- resolve(v);
588
+ resolve(v2);
587
589
  };
588
- const onKey = (e) => {
589
- if (e.key === "Escape") {
590
- e.stopPropagation();
590
+ const onKey = (e2) => {
591
+ if (e2.key === "Escape") {
592
+ e2.stopPropagation();
591
593
  finish(false);
592
594
  }
593
595
  };
594
596
  no.addEventListener("click", () => finish(false));
595
597
  yes.addEventListener("click", () => finish(true));
596
- ov.addEventListener("click", (e) => e.stopPropagation());
598
+ ov.addEventListener("click", (e2) => e2.stopPropagation());
597
599
  doc.addEventListener("keydown", onKey, true);
598
600
  row.append(no, yes);
599
601
  card.append(head, why, cost, row);
@@ -643,8 +645,8 @@ function refusalIsSelectable(row) {
643
645
  }
644
646
  function orderRefusalsForDisplay(rows) {
645
647
  if (!Array.isArray(rows)) return [];
646
- const named = rows.filter((r) => !!r && typeof r.name === "string" && r.name.trim() !== "");
647
- return [...named.filter(refusalIsSelectable), ...named.filter((r) => !refusalIsSelectable(r))];
648
+ const named = rows.filter((r2) => !!r2 && typeof r2.name === "string" && r2.name.trim() !== "");
649
+ return [...named.filter(refusalIsSelectable), ...named.filter((r2) => !refusalIsSelectable(r2))];
648
650
  }
649
651
  function qualifyRefusalHeadingFor(row, state) {
650
652
  if (refusalIsSelectable(row)) {
@@ -665,8 +667,8 @@ function hasRefusalsToShow(rows) {
665
667
  }
666
668
  var QUALIFY_REFUSAL_UNSPECIFIED = "refused for the fields as bound - no single requirement to name";
667
669
  function qualifyRefusalReason(reason, fallback = QUALIFY_REFUSAL_UNSPECIFIED) {
668
- const s = (reason ?? "").trim();
669
- return s !== "" ? s : fallback;
670
+ const s2 = (reason ?? "").trim();
671
+ return s2 !== "" ? s2 : fallback;
670
672
  }
671
673
 
672
674
  // src/qualifyLaunch.ts
@@ -685,13 +687,13 @@ function chooserFitsViewport(width, height) {
685
687
  if (!isFinite(width) || !isFinite(height)) return false;
686
688
  return width >= CHOOSER_MIN_WIDTH_PX && height >= CHOOSER_MIN_HEIGHT_PX;
687
689
  }
688
- function shouldOpenChooserOnGenerate(i) {
689
- if (!i.enabled) return false;
690
- if (!i.hasData) return false;
691
- return chooserFitsViewport(i.width, i.height);
690
+ function shouldOpenChooserOnGenerate(i2) {
691
+ if (!i2.enabled) return false;
692
+ if (!i2.hasData) return false;
693
+ return chooserFitsViewport(i2.width, i2.height);
692
694
  }
693
- function shouldOpenInlineChooserOnGenerate(i) {
694
- return i.enabled === true && i.hasData === true;
695
+ function shouldOpenInlineChooserOnGenerate(i2) {
696
+ return i2.enabled === true && i2.hasData === true;
695
697
  }
696
698
  function canConfirmLaunch(selected) {
697
699
  return typeof selected === "string" && selected.trim() !== "";
@@ -709,10 +711,10 @@ function normalizeFilterTerm(raw) {
709
711
  return raw.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/\s+/g, " ").trim();
710
712
  }
711
713
  var FILTER_MIN_TERM_CHARS = 2;
712
- function startsAWord(name, t) {
713
- for (let i = name.indexOf(t); i >= 0; i = name.indexOf(t, i + 1)) {
714
- if (i === 0) return true;
715
- const prev = name.charCodeAt(i - 1);
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);
716
718
  const alnum = prev >= 97 && prev <= 122 || prev >= 48 && prev <= 57;
717
719
  if (!alnum) return true;
718
720
  }
@@ -720,31 +722,31 @@ function startsAWord(name, t) {
720
722
  }
721
723
  function filterQualifyRows(rows, term, read) {
722
724
  const all = Array.isArray(rows) ? rows.slice() : [];
723
- const t = normalizeFilterTerm(term);
724
- if (t.length < FILTER_MIN_TERM_CHARS) return { rows: all, tier: "all", term: "" };
725
+ const t2 = normalizeFilterTerm(term);
726
+ if (t2.length < FILTER_MIN_TERM_CHARS) return { rows: all, tier: "all", term: "" };
725
727
  const atWordStart = [];
726
728
  const midWord = [];
727
729
  const byDesc = [];
728
730
  for (const row of all) {
729
- const f = read(row);
730
- const name = normalizeFilterTerm(f.name);
731
- if (name === "") continue;
732
- if (name.indexOf(t) >= 0) {
733
- (startsAWord(name, t) ? atWordStart : midWord).push(row);
731
+ const f2 = read(row);
732
+ const name2 = normalizeFilterTerm(f2.name);
733
+ if (name2 === "") continue;
734
+ if (name2.indexOf(t2) >= 0) {
735
+ (startsAWord(name2, t2) ? atWordStart : midWord).push(row);
734
736
  continue;
735
737
  }
736
- if (normalizeFilterTerm(f.description).indexOf(t) >= 0) byDesc.push(row);
738
+ if (normalizeFilterTerm(f2.description).indexOf(t2) >= 0) byDesc.push(row);
737
739
  }
738
- if (atWordStart.length > 0) return { rows: atWordStart, tier: "name", term: t };
739
- if (midWord.length > 0) return { rows: midWord, tier: "namePart", term: t };
740
- if (byDesc.length > 0) return { rows: byDesc, tier: "desc", term: t };
741
- return { rows: [], tier: "none", term: t };
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 };
742
744
  }
743
- function readQualifyChartRow(r) {
744
- return { name: r.name, description: r.description };
745
+ function readQualifyChartRow(r2) {
746
+ return { name: r2.name, description: r2.description };
745
747
  }
746
- function readQualifyRefusalRow(r) {
747
- return { name: r.name, description: r.reason };
748
+ function readQualifyRefusalRow(r2) {
749
+ return { name: r2.name, description: r2.reason };
748
750
  }
749
751
  var FILTER_ROW_PX = 32;
750
752
  var FILTER_MIN_WIDTH_PX = 420;
@@ -756,34 +758,34 @@ function listNeedsFilter(scrollHeight, clientHeight) {
756
758
  if (!Number.isFinite(scrollHeight) || !Number.isFinite(clientHeight)) return false;
757
759
  return scrollHeight > clientHeight - FILTER_ROW_PX;
758
760
  }
759
- function qualifyFilterGate(i) {
760
- if (!filterFitsChooser(i.cardWidth, i.cardHeight)) return { show: false, why: "too-small" };
761
- if (!listNeedsFilter(i.scrollHeight, i.clientHeight)) return { show: false, why: "no-overflow" };
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" };
762
764
  return { show: true, why: "shown" };
763
765
  }
764
766
  function computeQualifyFilterView(groups, term) {
765
- const g = Array.isArray(groups) ? groups : [];
766
- const read = (r) => ({ name: r.name, description: r.description });
767
+ const g2 = Array.isArray(groups) ? groups : [];
768
+ const read = (r2) => ({ name: r2.name, description: r2.description });
767
769
  const collect = (section) => {
768
770
  const out = [];
769
- for (const grp of g) if (grp.section === section) for (const r of grp.rows) out.push(r);
771
+ for (const grp of g2) if (grp.section === section) for (const r2 of grp.rows) out.push(r2);
770
772
  return out;
771
773
  };
772
774
  const fitRows = collect("fits");
773
775
  const fit = filterQualifyRows(fitRows, term, read);
774
776
  const ref = filterQualifyRows(collect("refused"), term, read);
775
777
  const visible = /* @__PURE__ */ new Set();
776
- for (const r of fit.rows) visible.add(r.el);
777
- for (const r of ref.rows) visible.add(r.el);
778
+ for (const r2 of fit.rows) visible.add(r2.el);
779
+ for (const r2 of ref.rows) visible.add(r2.el);
778
780
  const show = [], hide = [], showHeadings = [], hideHeadings = [];
779
- for (const grp of g) {
781
+ for (const grp of g2) {
780
782
  let any = false;
781
- for (const r of grp.rows) {
782
- if (visible.has(r.el)) {
783
- show.push(r.el);
783
+ for (const r2 of grp.rows) {
784
+ if (visible.has(r2.el)) {
785
+ show.push(r2.el);
784
786
  any = true;
785
787
  } else {
786
- hide.push(r.el);
788
+ hide.push(r2.el);
787
789
  }
788
790
  }
789
791
  if (grp.heading !== null) (any ? showHeadings : hideHeadings).push(grp.heading);
@@ -820,18 +822,369 @@ function inlineFilterGate(rowCount) {
820
822
  }
821
823
  var INLINE_FILTER_MIN_ROWS = 8;
822
824
 
825
+ // src/sourceDateFormat.ts
826
+ function formatSourceDate(raw, opts = {}) {
827
+ const d2 = toDate(raw);
828
+ if (!d2) return null;
829
+ const dayFrame = u(d2);
830
+ const frame = dayFrame ?? (opts.dialect === "dotnet" ? "local" : "utc");
831
+ const p4 = partsIn(d2, frame);
832
+ const format = cleanFormat(opts.format, opts.dialect);
833
+ if (format && opts.dialect) {
834
+ const rendered = renderFormat(format, p4, opts.dialect, opts.culture);
835
+ if (rendered) return rendered;
836
+ }
837
+ return localeDate(p4, !!dayFrame, opts.culture);
838
+ }
839
+ function formatSourceDateFor(raw, columnName2, formats, culture) {
840
+ return formatSourceDate(raw, {
841
+ format: formats?.byColumn?.[columnName2] ?? null,
842
+ dialect: formats?.dialect,
843
+ culture
844
+ });
845
+ }
846
+ var ISO_LIKE_RE = /^\s*\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?\s*$/;
847
+ function toDate(raw) {
848
+ if (raw instanceof Date) return isNaN(raw.getTime()) ? null : raw;
849
+ 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;
852
+ }
853
+ function partsIn(d2, frame) {
854
+ 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()
863
+ } : {
864
+ year: d2.getFullYear(),
865
+ month: d2.getMonth() + 1,
866
+ day: d2.getDate(),
867
+ hours: d2.getHours(),
868
+ minutes: d2.getMinutes(),
869
+ seconds: d2.getSeconds(),
870
+ ms: d2.getMilliseconds(),
871
+ weekday: d2.getDay()
872
+ };
873
+ }
874
+ function utcAnchor(p4) {
875
+ const d2 = new Date(Date.UTC(p4.year, p4.month - 1, p4.day, p4.hours, p4.minutes, p4.seconds, p4.ms));
876
+ if (p4.year >= 0 && p4.year < 100) d2.setUTCFullYear(p4.year);
877
+ return d2;
878
+ }
879
+ function localeDate(p4, wholeDay, culture) {
880
+ const anchor = utcAnchor(p4);
881
+ 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);
885
+ } catch {
886
+ const iso = anchor.toISOString();
887
+ return wholeDay ? iso.slice(0, 10) : `${iso.slice(0, 10)} ${iso.slice(11, 19)}`;
888
+ }
889
+ }
890
+ function cleanFormat(raw, dialect) {
891
+ if (!raw || !dialect) return null;
892
+ let s2 = firstSection(String(raw), dialect);
893
+ if (dialect === "excel") {
894
+ s2 = s2.replace(/\[(h{1,2}|m{1,2}|s{1,2})\]/gi, "$1").replace(/\[[^\]]*\]/g, "");
895
+ }
896
+ if (!s2.trim() || /^general$/i.test(s2.trim())) return null;
897
+ return hasDateToken(s2, dialect) ? s2 : null;
898
+ }
899
+ function firstSection(s2, dialect) {
900
+ let out = "";
901
+ let quote = "";
902
+ for (let i2 = 0; i2 < s2.length; i2++) {
903
+ const ch = s2[i2];
904
+ if (quote) {
905
+ out += ch;
906
+ if (ch === quote) quote = "";
907
+ continue;
908
+ }
909
+ if (ch === '"' || dialect === "dotnet" && ch === "'") {
910
+ quote = ch;
911
+ out += ch;
912
+ continue;
913
+ }
914
+ if (ch === "\\") {
915
+ out += ch + (s2[i2 + 1] ?? "");
916
+ i2++;
917
+ continue;
918
+ }
919
+ if (ch === ";") break;
920
+ out += ch;
921
+ }
922
+ return out;
923
+ }
924
+ function hasDateToken(s2, dialect) {
925
+ const stripped = stripLiterals(s2, dialect);
926
+ return dialect === "excel" ? /[ymdhs]/i.test(stripped) : /[yMdHhmsft]/.test(stripped);
927
+ }
928
+ function stripLiterals(s2, dialect) {
929
+ let out = "";
930
+ for (let i2 = 0; i2 < s2.length; i2++) {
931
+ const ch = s2[i2];
932
+ if (ch === "\\" || dialect === "dotnet" && ch === "%") {
933
+ i2++;
934
+ continue;
935
+ }
936
+ if (ch === '"' || dialect === "dotnet" && ch === "'") {
937
+ const end = s2.indexOf(ch, i2 + 1);
938
+ i2 = end < 0 ? s2.length : end;
939
+ continue;
940
+ }
941
+ out += ch;
942
+ }
943
+ return out;
944
+ }
945
+ var EXCEL_TOKENS = [
946
+ [/^am\/pm/i, "meridiemLong"],
947
+ [/^a\/p/i, "meridiemShort"],
948
+ [/^y{3,}/i, "year4"],
949
+ [/^y{1,2}/i, "year2"],
950
+ [/^m{5,}/i, "monthNarrow"],
951
+ [/^m{4}/i, "monthLong"],
952
+ [/^m{3}/i, "monthShort"],
953
+ [/^m{2}/i, "mAmbiguous2"],
954
+ [/^m/i, "mAmbiguous1"],
955
+ [/^d{4,}/i, "weekdayLong"],
956
+ [/^d{3}/i, "weekdayShort"],
957
+ [/^d{2}/i, "day2"],
958
+ [/^d/i, "day1"],
959
+ [/^h{2,}/i, "hour2"],
960
+ [/^h/i, "hour1"],
961
+ [/^s{2,}/i, "second2"],
962
+ [/^s/i, "second1"]
963
+ ];
964
+ var DOTNET_TOKENS = [
965
+ [/^y{3,}/, "year4"],
966
+ [/^y{1,2}/, "year2"],
967
+ [/^M{4,}/, "monthLong"],
968
+ [/^M{3}/, "monthShort"],
969
+ [/^M{2}/, "month2"],
970
+ [/^M/, "month1"],
971
+ [/^d{4,}/, "weekdayLong"],
972
+ [/^d{3}/, "weekdayShort"],
973
+ [/^d{2}/, "day2"],
974
+ [/^d/, "day1"],
975
+ [/^H{2,}/, "hour2"],
976
+ [/^H/, "hour1"],
977
+ [/^h{2,}/, "hour2"],
978
+ [/^h/, "hour1"],
979
+ [/^m{2,}/, "minute2"],
980
+ [/^m/, "minute1"],
981
+ [/^s{2,}/, "second2"],
982
+ [/^s/, "second1"],
983
+ [/^f+/, "fraction"],
984
+ [/^tt/, "meridiemLong"],
985
+ [/^t/, "meridiemShort"]
986
+ ];
987
+ function tokenize(s2, dialect) {
988
+ const table = dialect === "excel" ? EXCEL_TOKENS : DOTNET_TOKENS;
989
+ const out = [];
990
+ let i2 = 0;
991
+ while (i2 < s2.length) {
992
+ const ch = s2[i2];
993
+ if (ch === "\\" || dialect === "dotnet" && ch === "%") {
994
+ if (i2 + 1 < s2.length) out.push({ kind: "literal", text: s2[i2 + 1] });
995
+ i2 += 2;
996
+ continue;
997
+ }
998
+ 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;
1002
+ continue;
1003
+ }
1004
+ const rest = s2.slice(i2);
1005
+ let matched = false;
1006
+ for (const [re, kind] of table) {
1007
+ const m2 = re.exec(rest);
1008
+ if (m2) {
1009
+ out.push({ kind });
1010
+ i2 += m2[0].length;
1011
+ matched = true;
1012
+ break;
1013
+ }
1014
+ }
1015
+ if (!matched) {
1016
+ out.push({ kind: "literal", text: ch });
1017
+ i2++;
1018
+ }
1019
+ }
1020
+ return out;
1021
+ }
1022
+ 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";
1029
+ let minute = false;
1030
+ for (let j2 = i2 - 1; j2 >= 0; j2--) {
1031
+ if (tokens[j2].kind === "literal") continue;
1032
+ minute = isHour(tokens[j2]);
1033
+ break;
1034
+ }
1035
+ if (!minute) {
1036
+ for (let j2 = i2 + 1; j2 < tokens.length; j2++) {
1037
+ if (tokens[j2].kind === "literal") continue;
1038
+ minute = isSecond(tokens[j2]);
1039
+ break;
1040
+ }
1041
+ }
1042
+ t2.kind = minute ? two ? "minute2" : "minute1" : two ? "month2" : "month1";
1043
+ }
1044
+ }
1045
+ var EN_MONTHS_LONG = [
1046
+ "January",
1047
+ "February",
1048
+ "March",
1049
+ "April",
1050
+ "May",
1051
+ "June",
1052
+ "July",
1053
+ "August",
1054
+ "September",
1055
+ "October",
1056
+ "November",
1057
+ "December"
1058
+ ];
1059
+ var EN_MONTHS_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
1060
+ var EN_DAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
1061
+ var EN_DAYS_SHORT = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1062
+ function name(p4, kind, width, culture) {
1063
+ try {
1064
+ const opts = kind === "month" ? { month: width, timeZone: "UTC" } : { weekday: width === "narrow" ? "short" : width, timeZone: "UTC" };
1065
+ return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(p4));
1066
+ } catch {
1067
+ if (kind === "month") {
1068
+ const long = EN_MONTHS_LONG[p4.month - 1] ?? "";
1069
+ if (width === "long") return long;
1070
+ return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[p4.month - 1] ?? "";
1071
+ }
1072
+ return (width === "long" ? EN_DAYS_LONG[p4.weekday] : EN_DAYS_SHORT[p4.weekday]) ?? "";
1073
+ }
1074
+ }
1075
+ var p2 = (n2) => (n2 < 10 ? "0" : "") + n2;
1076
+ function renderFormat(format, p4, dialect, culture) {
1077
+ const tokens = tokenize(format, dialect);
1078
+ if (dialect === "excel") resolveAmbiguousM(tokens);
1079
+ const twelve = tokens.some((t2) => t2.kind === "meridiemLong" || t2.kind === "meridiemShort");
1080
+ const hour12 = () => {
1081
+ const h2 = p4.hours % 12;
1082
+ return h2 === 0 ? 12 : h2;
1083
+ };
1084
+ let out = "";
1085
+ let sawField = false;
1086
+ for (const t2 of tokens) {
1087
+ switch (t2.kind) {
1088
+ case "literal":
1089
+ out += t2.text ?? "";
1090
+ break;
1091
+ case "year4":
1092
+ out += String(p4.year);
1093
+ sawField = true;
1094
+ break;
1095
+ case "year2":
1096
+ out += p2((p4.year % 100 + 100) % 100);
1097
+ sawField = true;
1098
+ break;
1099
+ case "monthLong":
1100
+ out += name(p4, "month", "long", culture);
1101
+ sawField = true;
1102
+ break;
1103
+ case "monthShort":
1104
+ out += name(p4, "month", "short", culture);
1105
+ sawField = true;
1106
+ break;
1107
+ case "monthNarrow":
1108
+ out += name(p4, "month", "long", culture).slice(0, 1);
1109
+ sawField = true;
1110
+ break;
1111
+ case "month2":
1112
+ out += p2(p4.month);
1113
+ sawField = true;
1114
+ break;
1115
+ case "month1":
1116
+ out += String(p4.month);
1117
+ sawField = true;
1118
+ break;
1119
+ case "weekdayLong":
1120
+ out += name(p4, "weekday", "long", culture);
1121
+ sawField = true;
1122
+ break;
1123
+ case "weekdayShort":
1124
+ out += name(p4, "weekday", "short", culture);
1125
+ sawField = true;
1126
+ break;
1127
+ case "day2":
1128
+ out += p2(p4.day);
1129
+ sawField = true;
1130
+ break;
1131
+ case "day1":
1132
+ out += String(p4.day);
1133
+ sawField = true;
1134
+ break;
1135
+ case "hour2":
1136
+ out += p2(twelve ? hour12() : p4.hours);
1137
+ sawField = true;
1138
+ break;
1139
+ case "hour1":
1140
+ out += String(twelve ? hour12() : p4.hours);
1141
+ sawField = true;
1142
+ break;
1143
+ case "minute2":
1144
+ out += p2(p4.minutes);
1145
+ sawField = true;
1146
+ break;
1147
+ case "minute1":
1148
+ out += String(p4.minutes);
1149
+ sawField = true;
1150
+ break;
1151
+ case "second2":
1152
+ out += p2(p4.seconds);
1153
+ sawField = true;
1154
+ break;
1155
+ case "second1":
1156
+ out += String(p4.seconds);
1157
+ sawField = true;
1158
+ break;
1159
+ case "fraction":
1160
+ out += String(p4.ms).padStart(3, "0");
1161
+ sawField = true;
1162
+ break;
1163
+ case "meridiemLong":
1164
+ out += p4.hours < 12 ? "AM" : "PM";
1165
+ sawField = true;
1166
+ break;
1167
+ case "meridiemShort":
1168
+ out += p4.hours < 12 ? "A" : "P";
1169
+ sawField = true;
1170
+ break;
1171
+ }
1172
+ }
1173
+ return sawField && out.trim() ? out : null;
1174
+ }
1175
+
823
1176
  // src/selectionCard.ts
824
1177
  var SYNTHETIC_PREFIX = "__";
825
1178
  var NUMERIC_DATATYPE = /int|double|decimal|single|float|number|currency|money/i;
826
1179
  function normaliseAggregation(raw) {
827
- const s = String(raw ?? "").trim().toLowerCase();
828
- if (!s) return "sum";
829
- if (/^(avg|average|mean)$/.test(s)) return "average";
830
- if (/^(min|minimum)$/.test(s)) return "min";
831
- if (/^(max|maximum)$/.test(s)) return "max";
832
- if (/^(count|countrows)$/.test(s)) return "count";
833
- if (/^(median|med)$/.test(s)) return "median";
834
- if (/^(distinctcount|dcount|countdistinct|uniques?)$/.test(s)) return "distinctcount";
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";
835
1188
  return "sum";
836
1189
  }
837
1190
  function aggLabel(agg) {
@@ -852,8 +1205,8 @@ function aggLabel(agg) {
852
1205
  return "Sum";
853
1206
  }
854
1207
  }
855
- function isSynthetic(name) {
856
- return String(name ?? "").startsWith(SYNTHETIC_PREFIX);
1208
+ function isSynthetic(name2) {
1209
+ return String(name2 ?? "").startsWith(SYNTHETIC_PREFIX);
857
1210
  }
858
1211
  function isMeasureColumn(col) {
859
1212
  if (!col || isSynthetic(col.name)) return false;
@@ -863,64 +1216,79 @@ function isMeasureColumn(col) {
863
1216
  function isRealColumn(col) {
864
1217
  return !!col && !isSynthetic(col.name);
865
1218
  }
1219
+ function isSerialisedDateColumn(col) {
1220
+ return /^datetime/i.test(String(col?.dataType ?? ""));
1221
+ }
1222
+ function displayText(col, raw, opts) {
1223
+ if (raw == null || raw === "") return "(blank)";
1224
+ if (isSerialisedDateColumn(col)) {
1225
+ const shown = formatSourceDate(raw, {
1226
+ format: opts.sourceFormats?.byColumn?.[String(col?.name ?? "")] ?? null,
1227
+ dialect: opts.sourceFormats?.dialect,
1228
+ culture: opts.cultureCode
1229
+ });
1230
+ if (shown) return shown;
1231
+ }
1232
+ return String(raw);
1233
+ }
866
1234
  function isSuppressed(col) {
867
- return Rt(col).suppressed;
1235
+ return vt(col).suppressed;
868
1236
  }
869
1237
  function resolveAgg(col, requested, auto) {
870
1238
  const fallback = () => {
871
- const d = Ce(col);
872
- return d === "first" ? "count" : d;
1239
+ const d2 = Me(col);
1240
+ return d2 === "first" ? "count" : d2;
873
1241
  };
874
1242
  if (auto) return fallback();
875
- return vt(col).indexOf(requested) >= 0 ? requested : fallback();
1243
+ return It(col).indexOf(requested) >= 0 ? requested : fallback();
876
1244
  }
877
- function toNumber(v) {
878
- if (v == null || v === "") return null;
879
- const n = typeof v === "number" ? v : Number(v);
880
- return Number.isFinite(n) ? n : null;
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;
881
1249
  }
882
1250
  function reduce(values, agg, distinctRaw) {
883
1251
  if (agg === "count") return values.length;
884
- if (agg === "distinctcount") return new Set(distinctRaw.map((v) => v == null ? "\0" : String(v))).size;
1252
+ if (agg === "distinctcount") return new Set(distinctRaw.map((v2) => v2 == null ? "\0" : String(v2))).size;
885
1253
  if (!values.length) return null;
886
1254
  switch (agg) {
887
1255
  case "average":
888
- return values.reduce((a, b) => a + b, 0) / values.length;
1256
+ return values.reduce((a2, b2) => a2 + b2, 0) / values.length;
889
1257
  case "min":
890
1258
  return Math.min(...values);
891
1259
  case "max":
892
1260
  return Math.max(...values);
893
1261
  case "median": {
894
- const s = [...values].sort((a, b) => a - b);
895
- const m = s.length >> 1;
896
- return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
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;
897
1265
  }
898
1266
  default:
899
- return values.reduce((a, b) => a + b, 0);
1267
+ return values.reduce((a2, b2) => a2 + b2, 0);
900
1268
  }
901
1269
  }
902
- function fmtNumber(v, culture) {
1270
+ function fmtNumber(v2, culture) {
903
1271
  try {
904
- const abs = Math.abs(v);
1272
+ const abs = Math.abs(v2);
905
1273
  const opts = abs >= 1e6 ? { notation: "compact", maximumFractionDigits: 1 } : { maximumFractionDigits: abs < 10 ? 2 : 0 };
906
- return new Intl.NumberFormat(culture || void 0, opts).format(v);
1274
+ return new Intl.NumberFormat(culture || void 0, opts).format(v2);
907
1275
  } catch {
908
- return String(Math.round(v * 100) / 100);
1276
+ return String(Math.round(v2 * 100) / 100);
909
1277
  }
910
1278
  }
911
1279
  function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
912
1280
  const columns = payload?.columns ?? [];
913
1281
  const rows = payload?.rows ?? [];
914
1282
  if (!columns.length || !rows.length) return null;
915
- const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((n) => Number.isInteger(n))));
1283
+ const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((n2) => Number.isInteger(n2))));
916
1284
  if (!wanted.length) return null;
917
- const rowIdxCol = columns.findIndex((c) => c?.name === "__rowIdx__");
1285
+ const rowIdxCol = columns.findIndex((c2) => c2?.name === "__rowIdx__");
918
1286
  let byIdx = null;
919
1287
  if (rowIdxCol >= 0) {
920
1288
  byIdx = /* @__PURE__ */ new Map();
921
- for (let r = 0; r < rows.length; r++) {
922
- const v = toNumber(rows[r]?.[rowIdxCol]);
923
- if (v != null) byIdx.set(v, r);
1289
+ for (let r2 = 0; r2 < rows.length; r2++) {
1290
+ const v2 = toNumber(rows[r2]?.[rowIdxCol]);
1291
+ if (v2 != null) byIdx.set(v2, r2);
924
1292
  }
925
1293
  }
926
1294
  const positions = [];
@@ -934,17 +1302,16 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
934
1302
  const maxMeasures = opts.maxMeasures ?? 4;
935
1303
  const maxHeaderValues = opts.maxHeaderValues ?? 3;
936
1304
  const maxDimensions = opts.maxDimensions ?? 2;
937
- const dimIdx = columns.findIndex((c) => c && !isSynthetic(c.name) && !isMeasureColumn(c));
1305
+ const dimIdx = columns.findIndex((c2) => c2 && !isSynthetic(c2.name) && !isMeasureColumn(c2));
938
1306
  let header;
939
1307
  if (dimIdx >= 0) {
940
1308
  const seen = [];
941
1309
  const set = /* @__PURE__ */ new Set();
942
- for (const p of positions) {
943
- const raw = rows[p]?.[dimIdx];
944
- const s = raw == null || raw === "" ? "(blank)" : String(raw);
945
- if (!set.has(s)) {
946
- set.add(s);
947
- seen.push(s);
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);
948
1315
  }
949
1316
  if (seen.length > maxHeaderValues) break;
950
1317
  }
@@ -954,35 +1321,35 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
954
1321
  }
955
1322
  const measureCols = [];
956
1323
  const suppressedColumns = [];
957
- for (let c = 0; c < columns.length; c++) {
958
- if (!isMeasureColumn(columns[c])) continue;
959
- if (isSuppressed(columns[c])) {
960
- suppressedColumns.push(String(columns[c]?.name ?? ""));
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 ?? ""));
961
1328
  continue;
962
1329
  }
963
- measureCols.push(c);
1330
+ measureCols.push(c2);
964
1331
  }
965
1332
  const shown = measureCols.slice(0, maxMeasures);
966
1333
  const lines = [];
967
- for (const c of shown) {
968
- const col = columns[c];
1334
+ for (const c2 of shown) {
1335
+ const col = columns[c2];
969
1336
  const colAgg = resolveAgg(col, agg, auto);
970
1337
  const selVals = [];
971
1338
  const selRaw = [];
972
- for (const p of positions) {
973
- const n = toNumber(rows[p]?.[c]);
974
- selRaw.push(rows[p]?.[c]);
975
- if (n != null) selVals.push(n);
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);
976
1343
  }
977
1344
  const value = reduce(selVals, colAgg, selRaw);
978
1345
  let sharePct = null;
979
- if (Ae(col, colAgg) && value != null) {
1346
+ if (Te(col, colAgg) && value != null) {
980
1347
  const allVals = [];
981
1348
  const allRaw = [];
982
- for (let r = 0; r < rows.length; r++) {
983
- const n = toNumber(rows[r]?.[c]);
984
- allRaw.push(rows[r]?.[c]);
985
- if (n != null) allVals.push(n);
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);
986
1353
  }
987
1354
  const total = reduce(allVals, colAgg, allRaw);
988
1355
  if (total != null && total > 0) sharePct = value / total * 100;
@@ -998,23 +1365,23 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
998
1365
  });
999
1366
  }
1000
1367
  const dimensionLines = [];
1001
- for (let c = 0; c < columns.length && dimensionLines.length < maxDimensions; c++) {
1002
- if (c === dimIdx) continue;
1003
- if (!isRealColumn(columns[c]) || isMeasureColumn(columns[c])) continue;
1004
- const name = String(columns[c]?.name ?? "");
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 ?? "");
1005
1372
  const distinct = /* @__PURE__ */ new Set();
1006
1373
  let firstText = "";
1007
- for (const p of positions) {
1008
- const raw = rows[p]?.[c];
1009
- const s = raw == null || raw === "" ? "(blank)" : String(raw);
1010
- if (!distinct.size) firstText = s;
1011
- distinct.add(s);
1374
+ for (const p4 of positions) {
1375
+ const raw = rows[p4]?.[c2];
1376
+ const key = raw == null || raw === "" ? "(blank)" : String(raw);
1377
+ if (!distinct.size) firstText = displayText(columns[c2], raw, opts);
1378
+ distinct.add(key);
1012
1379
  }
1013
1380
  if (!distinct.size) continue;
1014
1381
  const single = distinct.size === 1;
1015
1382
  dimensionLines.push({
1016
- column: name,
1017
- label: single ? name : `Distinct ${name}`,
1383
+ column: name2,
1384
+ label: single ? name2 : `Distinct ${name2}`,
1018
1385
  value: single ? null : distinct.size,
1019
1386
  valueText: single ? firstText : fmtNumber(distinct.size, opts.cultureCode),
1020
1387
  sharePct: null,
@@ -1035,6 +1402,616 @@ function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
1035
1402
  };
1036
1403
  }
1037
1404
 
1405
+ // ../../node_modules/colorsea/dist/index.esm.js
1406
+ function t(t2, r2, n2, e2) {
1407
+ var o2, i2 = arguments.length, a2 = i2 < 3 ? r2 : null === e2 ? e2 = Object.getOwnPropertyDescriptor(r2, n2) : e2;
1408
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a2 = Reflect.decorate(t2, r2, n2, e2);
1409
+ else for (var u3 = t2.length - 1; u3 >= 0; u3--) (o2 = t2[u3]) && (a2 = (i2 < 3 ? o2(a2) : i2 > 3 ? o2(r2, n2, a2) : o2(r2, n2)) || a2);
1410
+ return i2 > 3 && a2 && Object.defineProperty(r2, n2, a2), a2;
1411
+ }
1412
+ function r(t2, r2, n2) {
1413
+ if (n2 || 2 === arguments.length) for (var e2, o2 = 0, i2 = r2.length; o2 < i2; o2++) !e2 && o2 in r2 || (e2 || (e2 = Array.prototype.slice.call(r2, 0, o2)), e2[o2] = r2[o2]);
1414
+ return t2.concat(e2 || Array.prototype.slice.call(r2));
1415
+ }
1416
+ var n = function(t2, r2, n2) {
1417
+ return [t2, r2, n2].map((function(t3) {
1418
+ return (t3 /= 255) > 0.04045 ? Math.pow((t3 + 0.055) / 1.055, 2.4) : t3 / 12.92;
1419
+ }));
1420
+ };
1421
+ var e = function(t2, r2, n2) {
1422
+ return [t2, r2, n2].map((function(t3) {
1423
+ return 255 * (t3 <= 304e-5 ? 12.92 * t3 : 1.055 * Math.pow(t3, 1 / 2.4) - 0.055);
1424
+ }));
1425
+ };
1426
+ var o = function(t2, r2, n2) {
1427
+ return Math.min(Math.max(t2, r2), n2);
1428
+ };
1429
+ var i = function(t2, r2) {
1430
+ return Math.round((t2 + Number.EPSILON) * Math.pow(10, r2)) / Math.pow(10, r2);
1431
+ };
1432
+ var a = function(t2, r2) {
1433
+ return Math.floor(Math.random() * (r2 - t2 + 1) - t2);
1434
+ };
1435
+ var u2 = function(t2, r2, n2, e2) {
1436
+ for (var i2, a2 = [t2, r2, n2], u3 = "#", h2 = 0; h2 < a2.length; h2++) u3 += (i2 = a2[h2], Math.round(o(i2, 0, 255)).toString(16).padStart(2, "0"));
1437
+ return null != e2 && (u3 += Math.round(o(e2, 0, 100) / 100 * 255).toString(16).padStart(2, "0")), u3;
1438
+ };
1439
+ var h = function(t2) {
1440
+ var n2 = t2.length, e2 = (t2 = (function(t3) {
1441
+ var r2 = (t3 = /^#/.test(t3) ? t3.slice(1) : t3).length;
1442
+ if (![3, 4, 6, 8].includes(r2)) return "000000";
1443
+ if (6 === r2 || 8 === r2) return t3;
1444
+ if (3 === r2 || 4 === r2) {
1445
+ for (var n3 = "", e3 = 0; e3 < r2; e3++) {
1446
+ var o3 = t3[e3];
1447
+ n3 += "" + o3 + o3;
1448
+ }
1449
+ return n3;
1450
+ }
1451
+ return "000000";
1452
+ })(t2).padEnd(8, "ff")).match(/.{2}/g);
1453
+ if (!e2) return [0, 0, 0, 1];
1454
+ var o2 = [0, 0, 0], i2 = false;
1455
+ return e2.forEach((function(t3, r2) {
1456
+ r2 < 3 ? o2[r2] = parseInt(t3, 16) : i2 = 100 * parseInt(t3, 16) / 255;
1457
+ })), false === i2 || n2 < 8 ? o2 : r(r([], o2, true), [i2], false);
1458
+ };
1459
+ var c = function(t2, r2, n2) {
1460
+ var e2;
1461
+ e2 = [t2, r2, n2].map((function(t3) {
1462
+ return t3 / 255;
1463
+ })), t2 = e2[0], r2 = e2[1], n2 = e2[2];
1464
+ var o2 = 1 - Math.max(t2, r2, n2), i2 = o2 < 1 ? 1 / (1 - o2) : 0;
1465
+ return [(1 - t2 - o2) * i2 * 100, (1 - r2 - o2) * i2 * 100, (1 - n2 - o2) * i2 * 100, 100 * o2];
1466
+ };
1467
+ var l = function(t2, r2, n2, e2) {
1468
+ return 100 === e2 ? [0, 0, 0] : (e2 /= 100, [t2, r2, n2].map((function(t3) {
1469
+ return (t3 /= 100) >= 1 ? 0 : 255 * (1 - t3) * (1 - e2);
1470
+ })));
1471
+ };
1472
+ function p3(t2, r2, n2, e2) {
1473
+ var o2;
1474
+ void 0 === e2 && (e2 = "l"), o2 = [t2, r2, n2].map((function(t3) {
1475
+ return t3 / 255;
1476
+ })), t2 = o2[0], r2 = o2[1], n2 = o2[2];
1477
+ var i2 = Math.max(t2, r2, n2), a2 = Math.min(t2, r2, n2), u3 = (function(t3, r3, n3, e3) {
1478
+ var o3;
1479
+ void 0 === e3 && (e3 = false), o3 = [t3, r3, n3].map((function(t4) {
1480
+ return t4 / 255;
1481
+ })), t3 = o3[0], r3 = o3[1], n3 = o3[2];
1482
+ var i3 = Math.max(t3, r3, n3), a3 = Math.min(t3, r3, n3), u4 = 0;
1483
+ if (i3 !== a3) if (e3) u4 = (t3 - r3 + (t3 - n3)) / 2, u4 /= Math.sqrt((t3 - r3) * (t3 - r3) + (t3 - n3) * (r3 - n3)), u4 = Math.acos(u4), n3 > r3 && (u4 = 2 * Math.PI - u4), u4 /= 2 * Math.PI;
1484
+ else {
1485
+ var h3 = i3 - a3;
1486
+ u4 = i3 === t3 ? (r3 - n3) / h3 + (r3 < n3 ? 6 : 0) : i3 === r3 ? (n3 - t3) / h3 + 2 : (t3 - r3) / h3 + 4, u4 /= 6;
1487
+ }
1488
+ else u4 = NaN;
1489
+ return 360 * u4;
1490
+ })(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l2 = i2 - a2, p4 = i2, f2 = (t2 + r2 + n2) / 3;
1491
+ return "v" === e2 && (h2 = 0 === i2 ? 0 : l2 / i2), i2 !== a2 && "l" === e2 && (h2 = c2 > 0.5 ? l2 / (2 - i2 - a2) : l2 / (i2 + a2)), "i" === e2 && (h2 = f2 > 0 ? 1 - a2 / f2 : 0), h2 *= 100, c2 *= 100, f2 *= 100, "l" === e2 ? [u3, h2, c2] : "v" === e2 ? [u3, h2, p4 *= 100] : [u3, h2, f2];
1492
+ }
1493
+ var f = function(t2, r2, n2) {
1494
+ return p3(t2, r2, n2, "l");
1495
+ };
1496
+ var s = function(t2, r2, n2) {
1497
+ var e2, i2, a2 = function(t3) {
1498
+ return 6 * (t3 = t3 < 0 ? t3 + 1 : t3 > 1 ? t3 - 1 : t3) < 1 ? e2 + (i2 - e2) * t3 * 6 : 2 * t3 < 1 ? i2 : 3 * t3 < 2 ? e2 + (i2 - e2) * (2 / 3 - t3) * 6 : e2;
1499
+ };
1500
+ return t2 = t2 % 360 / 360, r2 = o(r2 / 100, 0, 1), n2 = o(n2 / 100, 0, 1), e2 = 2 * n2 - (i2 = n2 <= 0.5 ? n2 * (r2 + 1) : n2 + r2 - n2 * r2), [255 * a2(t2 + 1 / 3), 255 * a2(t2), 255 * a2(t2 - 1 / 3)];
1501
+ };
1502
+ var v = function(t2, r2, n2) {
1503
+ return p3(t2, r2, n2, "v");
1504
+ };
1505
+ var b = function(t2, r2, n2) {
1506
+ var e2, o2, i2 = [n2 /= 100, n2 * (1 - (r2 /= 100)), n2 * (1 - (o2 = (t2 = t2 % 360 / 360 * 360) / 60 - (e2 = Math.floor(t2 / 60 % 6))) * r2), n2 * (1 - (1 - o2) * r2)], a2 = [[0, 3, 1], [2, 0, 1], [1, 0, 3], [1, 2, 0], [3, 1, 0], [0, 1, 2]];
1507
+ return [255 * i2[a2[e2][0]], 255 * i2[a2[e2][1]], 255 * i2[a2[e2][2]]];
1508
+ };
1509
+ var y = function(t2, r2, n2) {
1510
+ return p3(t2, r2, n2, "i");
1511
+ };
1512
+ var d = function(t2, r2, n2) {
1513
+ var e2, i2, a2, u3;
1514
+ r2 /= 100, n2 /= 100, isNaN(t2) && (t2 = 0), isNaN(r2) && (r2 = 0);
1515
+ var h2 = function(t3) {
1516
+ return (1 + r2 * Math.cos(2 * Math.PI * t3) / Math.cos(Math.PI / 3 - 2 * Math.PI * t3)) / 3;
1517
+ };
1518
+ return (t2 = (360 + t2) % 360 / 360) < 1 / 3 ? a2 = 1 - ((u3 = (1 - r2) / 3) + (i2 = h2(t2))) : t2 < 2 / 3 ? u3 = 1 - ((i2 = (1 - r2) / 3) + (a2 = h2(t2 -= 1 / 3))) : i2 = 1 - ((a2 = (1 - r2) / 3) + (u3 = h2(t2 -= 2 / 3))), e2 = [i2, a2, u3].map((function(t3) {
1519
+ return 255 * o(n2 * t3 * 3, 0, 1);
1520
+ })), [i2 = e2[0], a2 = e2[1], u3 = e2[2]];
1521
+ };
1522
+ var g = function(t2, r2, n2) {
1523
+ return [f(t2, r2, n2)[0], 100 * (Math.min(t2, r2, n2) / 255), 100 * (1 - Math.max(t2, r2, n2) / 255)];
1524
+ };
1525
+ function w(t2, r2, n2) {
1526
+ return r2 /= 100, n2 /= 100, s(t2, 100, 50).map((function(t3) {
1527
+ return 255 * (t3 / 255 * (1 - r2 - n2) + r2);
1528
+ }));
1529
+ }
1530
+ var m = { x: [0.4124564, 0.3575761, 0.1804375], y: [0.2126729, 0.7151522, 0.072175], z: [0.0193339, 0.119192, 0.9503041] };
1531
+ var M = { r: [3.2404542, -1.5371385, -0.4985314], g: [-0.969266, 1.8760108, 0.041556], b: [0.0556434, -0.2040259, 1.0572252] };
1532
+ var x = 0.95047;
1533
+ var _ = 1;
1534
+ var C = 1.08883;
1535
+ var I = 0.206896552;
1536
+ var k = 8856452e-9;
1537
+ var E = 24389 / 27;
1538
+ var z = function(t2, r2, e2) {
1539
+ var o2 = n(t2, r2, e2);
1540
+ return [100 * m.x.reduce((function(t3, r3, n2) {
1541
+ return t3 + r3 * o2[n2];
1542
+ }), 0), 100 * m.y.reduce((function(t3, r3, n2) {
1543
+ return t3 + r3 * o2[n2];
1544
+ }), 0), 100 * m.z.reduce((function(t3, r3, n2) {
1545
+ return t3 + r3 * o2[n2];
1546
+ }), 0)];
1547
+ };
1548
+ var N = function(t2, r2, n2) {
1549
+ var o2 = [t2, r2, n2], i2 = M.r.reduce((function(t3, r3, n3) {
1550
+ return t3 + r3 * o2[n3];
1551
+ }), 0) / 100, a2 = M.g.reduce((function(t3, r3, n3) {
1552
+ return t3 + r3 * o2[n3];
1553
+ }), 0) / 100, u3 = M.b.reduce((function(t3, r3, n3) {
1554
+ return t3 + r3 * o2[n3];
1555
+ }), 0) / 100;
1556
+ return e(i2, a2, u3);
1557
+ };
1558
+ var O = function(t2, r2, n2) {
1559
+ var e2;
1560
+ return e2 = [t2 = t2 / x / 100, r2 = r2 / _ / 100, n2 = n2 / C / 100].map((function(t3) {
1561
+ return t3 > k ? Math.pow(t3, 1 / 3) : (E * t3 + 16) / 116;
1562
+ })), t2 = e2[0], r2 = e2[1], n2 = e2[2], [Math.max(0, 116 * r2 - 16), 500 * (t2 - r2), 200 * (r2 - n2)];
1563
+ };
1564
+ var P = function(t2, r2, n2) {
1565
+ var e2, o2 = (t2 + 16) / 116, i2 = isNaN(r2) ? o2 : o2 + r2 / 500, a2 = isNaN(n2) ? o2 : o2 - n2 / 200;
1566
+ return e2 = [i2, o2, a2].map((function(t3) {
1567
+ return t3 > I ? Math.pow(t3, 3) : (116 * t3 - 16) / E;
1568
+ })), i2 = e2[0], o2 = e2[1], a2 = e2[2], [i2 * x * 100, o2 * _ * 100, a2 * C * 100];
1569
+ };
1570
+ var j = function(t2, r2, n2) {
1571
+ return N.apply(void 0, P(t2, r2, n2));
1572
+ };
1573
+ var S = function(t2, r2, n2) {
1574
+ r2 = o(r2, -100, 100), n2 = o(n2, -100, 100);
1575
+ var e2 = Math.sqrt(r2 * r2 + n2 * n2), i2 = (180 * Math.atan2(n2, r2) / Math.PI + 360) % 360;
1576
+ return 0 === Math.round(1e4 * e2) && (i2 = Number.NaN), [t2, e2, i2];
1577
+ };
1578
+ var A = function(t2, r2, n2) {
1579
+ return isNaN(n2) && (n2 = 0), n2 *= Math.PI / 180, [t2, Math.cos(n2) * r2, Math.sin(n2) * r2];
1580
+ };
1581
+ var L = function(t2, r2, n2) {
1582
+ return P.apply(void 0, A(t2, r2, n2));
1583
+ };
1584
+ var H = function(t2, r2, n2) {
1585
+ var e2 = t2 + r2 + n2, o2 = 0, i2 = 0;
1586
+ return e2 > 0 && (o2 = t2 / e2, i2 = r2 / e2), [o2, i2, r2];
1587
+ };
1588
+ var Y = Object.freeze({ __proto__: null, linear2rgb: e, rgb2linear: n, rgb2hex: u2, hex2rgb: h, rgb2cmyk: c, cmyk2rgb: l, rgb2hsl: f, hsl2rgb: s, rgb2hsv: v, hsv2rgb: b, rgb2hsi: y, hsi2rgb: d, rgb2hwb: g, hwb2rgb: w, rgb2xyz: z, xyz2rgb: N, xyz2lab: O, lab2xyz: P, rgb2lab: function(t2, r2, n2) {
1589
+ return O.apply(void 0, z(t2, r2, n2));
1590
+ }, lab2rgb: j, lch2lab: A, lab2lch: S, xyz2lch: function(t2, r2, n2) {
1591
+ return S.apply(void 0, O(t2, r2, n2));
1592
+ }, lch2xyz: L, xyY2xyz: function(t2, r2, n2) {
1593
+ return 0 === r2 ? [0, 0, 0] : [t2 * (n2 / r2), n2, n2 / r2 * (1 - t2 - r2)];
1594
+ }, xyz2xyY: H });
1595
+ function R(t2, n2) {
1596
+ return void 0 === n2 && (n2 = false), function(e2, o2, i2) {
1597
+ var a2 = i2.value;
1598
+ i2.value = function() {
1599
+ for (var e3 = [], o3 = 0; o3 < arguments.length; o3++) e3[o3] = arguments[o3];
1600
+ if (e3.length > 0 && n2) {
1601
+ var i3 = JSON.stringify(e3);
1602
+ t2 += i3;
1603
+ }
1604
+ if (this.cache.has(t2)) return this.cache.get(t2);
1605
+ var u3 = a2.call.apply(a2, r([this], e3, false));
1606
+ return this.cache.set(t2, u3), u3;
1607
+ };
1608
+ };
1609
+ }
1610
+ function q(t2, n2, e2, o2) {
1611
+ return void 0 === t2 && (t2 = [0, 2, 2]), void 0 === n2 && (n2 = 0), void 0 === e2 && (e2 = true), void 0 === o2 && (o2 = 0), function(a2, u3, h2) {
1612
+ var c2 = h2.value;
1613
+ h2.value = function() {
1614
+ for (var a3 = [], u4 = 0; u4 < arguments.length; u4++) a3[u4] = arguments[u4];
1615
+ var h3 = void 0 === a3[o2] ? e2 : a3[o2], l2 = c2.call.apply(c2, r([this], a3, false));
1616
+ if (false === h3) return l2;
1617
+ var p4 = "number" == typeof h3 ? Math.round(h3) : 0, f2 = "number" == typeof t2 ? new Array(l2.length).fill(t2) : t2, s2 = f2.map((function(t3) {
1618
+ return 1 === n2 ? "number" == typeof h3 ? p4 : t3 : t3 + p4;
1619
+ }));
1620
+ return l2.map((function(t3, r2) {
1621
+ return i(t3, s2[r2]);
1622
+ }));
1623
+ };
1624
+ };
1625
+ }
1626
+ var D = function(t2, r2, n2) {
1627
+ var e2 = t2 instanceof ft ? t2 : new ft(t2), i2 = r2 instanceof ft ? r2 : new ft(r2), a2 = o(n2, 0, 100) / 100, u3 = 2 * a2 - 1, h2 = e2.alpha() - i2.alpha(), c2 = ((u3 * h2 == -1 ? u3 : (u3 + h2) / (1 + u3 * h2)) + 1) / 2, l2 = 1 - c2, p4 = [Math.round(o(e2.red() * c2 + i2.red() * l2, 0, 255)), Math.round(o(e2.green() * c2 + i2.green() * l2, 0, 255)), Math.round(o(e2.blue() * c2 + i2.blue() * l2, 0, 255))], f2 = e2.alpha() * a2 + i2.alpha() * (1 - a2);
1628
+ return new ft(p4, f2);
1629
+ };
1630
+ var F = Math.sqrt;
1631
+ var U = Math.pow;
1632
+ var $ = Math.cos;
1633
+ var J = Math.abs;
1634
+ var Z = Math.sin;
1635
+ var B = Math.exp;
1636
+ var G = Math.atan2;
1637
+ var K = Math.PI;
1638
+ var Q = function(t2) {
1639
+ return K * t2 / 180;
1640
+ };
1641
+ var T = function(t2, r2, n2) {
1642
+ void 0 === n2 && (n2 = true);
1643
+ var e2 = G(r2, t2);
1644
+ return n2 && (e2 = (e2 = (e2 = 180 * e2 / K) > 0 ? e2 : e2 + 360) > 360 ? e2 - 360 : e2), e2;
1645
+ };
1646
+ var V = function(t2, r2) {
1647
+ void 0 === r2 && (r2 = true);
1648
+ var n2 = t2.lab(false), e2 = n2[0], o2 = n2[1], i2 = n2[2];
1649
+ return [e2, F(U(o2, 2) + U(i2, 2)), T(o2, i2, r2), o2, i2];
1650
+ };
1651
+ var W = ["CMC", "CIE", "CIE2000", "CIE1994", "CIE1976"];
1652
+ var X = "CMC";
1653
+ var tt = "CIE2000";
1654
+ var rt = "CIE1994";
1655
+ var nt = "CIE1976";
1656
+ var et = function(t2, r2, n2, e2) {
1657
+ void 0 === n2 && (n2 = "CIE");
1658
+ var o2 = (function(t3) {
1659
+ var r3 = t3.toUpperCase();
1660
+ return W.includes(r3) && "CIE" !== r3 ? r3 : tt;
1661
+ })(n2);
1662
+ if (e2 = e2 || {}, o2 === X) {
1663
+ var i2 = Object.assign({}, { l: 1, c: 1 }, e2);
1664
+ return (function(t3, r3, n3, e3) {
1665
+ void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1);
1666
+ var o3 = V(t3, true), i3 = o3[0], a3 = o3[1], u4 = o3[2], h3 = o3[3], c3 = o3[4], l2 = V(r3), p4 = l2[0], f2 = l2[1], s2 = l2[3], v2 = a3 - f2, b2 = i3 - p4, y2 = c3 - l2[4], d2 = F(U(h3 - s2, 2) + U(y2, 2) - U(v2, 2)), g2 = i3 < 16 ? 0.511 : 0.040975 * i3 / (1 + 0.01765 * i3), w2 = 0.0638 * a3 / (1 + 0.0131 * a3) + 0.638, m2 = 164 <= u4 && u4 <= 345 ? 0.56 + J(0.2 * $(Q(u4 + 168))) : 0.36 + J(0.4 * $(Q(u4 + 35))), M2 = F(U(a3, 4) / (U(a3, 4) + 1900)), x2 = w2 * (M2 * m2 + 1 - M2);
1667
+ return F(U(b2 / (n3 * g2), 2) + U(v2 / (e3 * w2), 2) + U(d2 / x2, 2));
1668
+ })(t2, r2, i2.l, i2.c);
1669
+ }
1670
+ if (o2 === rt) {
1671
+ var a2 = { kL: 1, kC: 1, kH: 1, cate: "graphic" }, u3 = Object.assign({}, a2, e2);
1672
+ return (function(t3, r3, n3, e3, o3, i3) {
1673
+ void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o3 && (o3 = 1), void 0 === i3 && (i3 = "graphic");
1674
+ var a3 = "textiles" === i3 ? 0.048 : 0.045, u4 = "textiles" === i3 ? 0.014 : 0.015;
1675
+ n3 = "textiles" === i3 ? 2 : n3;
1676
+ var h3 = V(t3), c3 = h3[0], l2 = h3[1], p4 = h3[3], f2 = h3[4], s2 = V(r3), v2 = s2[0], b2 = s2[1], y2 = s2[3], d2 = c3 - v2, g2 = l2 - b2, w2 = f2 - s2[4], m2 = 1 + a3 * l2, M2 = 1 + u4 * l2, x2 = F(U(p4 - y2, 2) + U(w2, 2) - U(g2, 2));
1677
+ return F(U(d2 / (1 * n3), 2) + U(g2 / (e3 * m2), 2) + U(x2 / (o3 * M2), 2));
1678
+ })(t2, r2, u3.kL, u3.kC, u3.kH, u3.cate);
1679
+ }
1680
+ if (o2 === nt) return (function(t3, r3) {
1681
+ var n3 = t3.lab(false), e3 = n3[0], o3 = n3[1], i3 = n3[2], a3 = r3.lab(false), u4 = a3[0], h3 = a3[1], c3 = a3[2];
1682
+ return F(U(e3 - u4, 2) + U(o3 - h3, 2) + U(i3 - c3, 2));
1683
+ })(t2, r2);
1684
+ var h2 = { kL: 1, kC: 1, kH: 1 }, c2 = Object.assign({}, h2, e2);
1685
+ return (function(t3, r3, n3, e3, o3) {
1686
+ void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o3 && (o3 = 1);
1687
+ var i3 = V(t3), a3 = i3[0], u4 = i3[1], h3 = i3[3], c3 = i3[4], l2 = V(r3), p4 = l2[0], f2 = l2[1], s2 = l2[3], v2 = l2[4], b2 = (a3 + p4) / 2, y2 = (u4 + f2) / 2, d2 = (1 - F(U(y2, 7) / (U(y2, 7) + U(25, 7)))) / 2, g2 = h3 * (1 + d2), w2 = s2 * (1 + d2), m2 = F(U(g2, 2) + U(c3, 2)), M2 = F(U(w2, 2) + U(v2, 2)), x2 = T(g2, c3, true), _2 = T(w2, v2, true), C2 = (m2 + M2) / 2, I2 = J(x2 - _2) > 180 ? (x2 + _2 + 360) / 2 : (x2 + _2) / 2, k2 = 1 - 0.17 * $(Q(I2 - 30)) + 0.24 * $(Q(2 * I2)) + 0.32 * $(Q(3 * I2 + 6)) - 0.2 * $(Q(4 * I2 - 63)), E2 = J(_2 - x2) <= 180 ? _2 - x2 : J(_2 - x2) > 180 && _2 <= x2 ? _2 - x2 + 360 : _2 - x2 - 360, z2 = p4 - a3, N2 = f2 - u4, O2 = 2 * F(m2 * M2) * Z(Q(E2) / 2), P2 = 1 + 0.015 * U(b2 - 50, 2) / F(20 + U(b2 - 50, 2)), j2 = 1 + 0.045 * C2, S2 = 1 + 0.015 * C2 * k2, A2 = 30 * B(-U((I2 - 275) / 25, 2)), L2 = -2 * F(U(C2, 7) / (U(C2, 7) + U(25, 7))) * Z(2 * Q(A2));
1688
+ return F(U(z2 / (n3 * P2), 2) + U(N2 / (e3 * j2), 2) + U(O2 / (o3 * S2), 2) + L2 * (N2 / (e3 * j2)) * (O2 / (o3 * S2)));
1689
+ })(t2, r2, c2.kL, c2.kC, c2.kH);
1690
+ };
1691
+ var ot = function(t2, r2, n2) {
1692
+ var e2 = Math.abs, o2 = Math.max, i2 = Math.min, a2 = t2 instanceof ft ? t2 : new ft(t2), u3 = r2 instanceof ft ? r2 : new ft(r2), h2 = Object.assign({}, { b: 125, c: 500 }, n2);
1693
+ return !(e2(255 * a2.brightness() / 100 - 255 * u3.brightness() / 100) <= h2.b) && !(o2(a2.red(), u3.red()) - i2(a2.red(), u3.red()) + (o2(a2.green(), u3.green()) - i2(a2.green(), u3.green())) + (o2(a2.blue(), u3.blue()) - i2(a2.blue(), u3.blue())) <= h2.c);
1694
+ };
1695
+ var it = function(t2, r2, n2) {
1696
+ var e2, i2 = function(t3) {
1697
+ return o(t3, 0, 100);
1698
+ }, a2 = function(t3) {
1699
+ return o(t3, 0, 255);
1700
+ }, u3 = { h: [0, function(t3) {
1701
+ return t3 % 360;
1702
+ }], s: [1, i2], l: [2, i2], r: [0, a2], g: [1, a2], b: [2, a2] }, h2 = u3[r2][0];
1703
+ if (["h", "s", "l"].includes(r2)) {
1704
+ var c2 = t2.hsl();
1705
+ if (void 0 === n2) return c2[h2];
1706
+ n2 = u3[r2][1](n2), c2[h2] = n2, e2 = s.apply(void 0, c2);
1707
+ } else {
1708
+ if (e2 = t2.rgb(), void 0 === n2) return e2[h2];
1709
+ n2 = u3[r2][1](n2), e2[h2] = n2;
1710
+ }
1711
+ return new ft(e2, t2.alpha());
1712
+ };
1713
+ var at = {};
1714
+ var ut = /* @__PURE__ */ new Set(["rgb", "rgba", "cmyk", "lab", "hsl", "hsla", "hsv", "hsva", "hsi", "hsia", "xyz", "lch", "hwb", "hwba"]);
1715
+ var ht = /^([a-zA-Z]+)\(([\s\S]+)\)$/;
1716
+ var ct = function(t2) {
1717
+ return "string" == typeof t2 ? -1 === t2.indexOf("%") ? ct(Number(t2.trim())) : (t2 = t2.split("%")[0], (t2 = Number(t2.trim())) || 0) : Math.abs(t2) < 1 ? 100 * t2 : t2;
1718
+ };
1719
+ var lt = function(t2, r2) {
1720
+ void 0 === r2 && (r2 = /* @__PURE__ */ new Set());
1721
+ var n2 = "string" == typeof t2 ? t2 : t2.join(",");
1722
+ if (r2.has(n2)) throw new Error("Invalid Color");
1723
+ r2.add(n2);
1724
+ var e2 = "rgb", o2 = [0, 0, 0], i2 = 100;
1725
+ if (Array.isArray(t2)) {
1726
+ if (t2.length < 3) throw new Error("Invalid Color");
1727
+ for (var a2 = 0; a2 < t2.length; a2++) if (a2 < 3) o2[a2] = t2[a2];
1728
+ else {
1729
+ if (3 !== a2 || void 0 === t2[3]) break;
1730
+ i2 = t2[3];
1731
+ }
1732
+ } else {
1733
+ var u3 = false, c2 = t2.trim().match(ht);
1734
+ if (c2 || (u3 = true), c2) {
1735
+ var l2 = c2[1].toLocaleLowerCase();
1736
+ if (e2 = l2, ut.has(l2) || (u3 = true), c2[2] && !u3) {
1737
+ var p4 = c2[2], f2 = -1 !== p4.indexOf(",") ? "," : " ", s2 = p4.split(f2);
1738
+ for (a2 = 0; a2 < 3; a2++) void 0 !== s2[a2] && (["lch", "lab"].includes(e2) && 0 === a2 || ["hsl", "hsla", "hsv", "hsva", "hwb", "hwba", "hsi", "hsia"].includes(e2) && a2 > 0 ? o2[a2] = ct(s2[a2]) : o2[a2] = Number(s2[a2].trim()));
1739
+ ["rgba", "hsla", "hsva", "hwba", "hsia"].includes(e2) ? (e2 = e2.slice(0, -1), void 0 !== s2[3] && (i2 = ct(s2[3]))) : "cmyk" === e2 && o2.push(void 0 !== s2[3] ? ct(s2[3]) : 0);
1740
+ }
1741
+ }
1742
+ if (u3) {
1743
+ if (!/^#(([a-fA-F\d]{3}){1,2}|[a-fA-F\d]{8})$/.test(t2)) try {
1744
+ return t2 = (function(t3, r3) {
1745
+ if (void 0 === r3 && (r3 = false), t3 = t3.toLowerCase(), void 0 === at[t3]) {
1746
+ if (r3) throw new Error("Unknown color name: ".concat(t3, ")"));
1747
+ return t3;
1748
+ }
1749
+ return at[t3];
1750
+ })(t2, true), lt(t2, r2);
1751
+ } catch (t3) {
1752
+ throw new Error("Invalid Color");
1753
+ }
1754
+ o2 = h(t2);
1755
+ }
1756
+ }
1757
+ return [e2, o2, i2];
1758
+ };
1759
+ var pt = { thowParseError: false };
1760
+ var ft = (function() {
1761
+ function n2(t2, r2, n3) {
1762
+ this.cache = /* @__PURE__ */ new Map(), this._rgb = [0, 0, 0], this._alpha = 100;
1763
+ var e2 = { thowParseError: pt.thowParseError }, i2 = Object.assign({}, e2, null != n3 ? n3 : {});
1764
+ try {
1765
+ var a2 = (function(t3) {
1766
+ var r3, n4 = { lab2rgb: j, hsl2rgb: s, hsv2rgb: b, xyz2rgb: N, hwb2rgb: w, hsi2rgb: d }, e3 = lt(t3), i3 = e3[0], a3 = e3[1], u4 = e3[2];
1767
+ if ("rgb" === i3) return [a3, u4];
1768
+ "lch" === i3 && (i3 = (r3 = ["xyz", L(a3[0], a3[1], a3[2])])[0], a3 = r3[1]);
1769
+ var h3 = a3[0], c2 = a3[1], p4 = a3[2], f2 = a3[3];
1770
+ if ("cmyk" === i3) return [l(h3, c2, p4, f2).map((function(t4) {
1771
+ return o(t4, 0, 255);
1772
+ })), u4];
1773
+ var v2 = "".concat(i3, "2rgb");
1774
+ if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p4).map((function(t4) {
1775
+ return o(t4, 0, 255);
1776
+ })), u4];
1777
+ throw new Error("Invalid color");
1778
+ })(t2), u3 = a2[0], h2 = a2[1];
1779
+ this._alpha = h2, this._rgb = u3;
1780
+ } catch (t3) {
1781
+ if (i2.thowParseError) throw t3;
1782
+ }
1783
+ void 0 !== r2 && (this._alpha = o(r2, 0, 100));
1784
+ }
1785
+ return n2.prototype.red = function(t2) {
1786
+ return it(this, "r", t2);
1787
+ }, n2.prototype.green = function(t2) {
1788
+ return it(this, "g", t2);
1789
+ }, n2.prototype.blue = function(t2) {
1790
+ return it(this, "b", t2);
1791
+ }, n2.prototype.alpha = function(t2) {
1792
+ return void 0 === t2 ? this._alpha : (t2 = o(t2, 0, 100), new n2(this.rgb(), t2));
1793
+ }, n2.prototype.fadeIn = function(t2, r2) {
1794
+ return void 0 === t2 && (t2 = 10), t2 = r2 && "relative" === r2 ? this._alpha * t2 / 100 : t2, new n2(this.rgb(), o(this._alpha + t2, 0, 100));
1795
+ }, n2.prototype.fadeOut = function(t2, r2) {
1796
+ return void 0 === t2 && (t2 = 10), t2 = r2 && "relative" === r2 ? this._alpha * t2 / 100 : t2, new n2(this.rgb(), o(this._alpha - t2, 0, 100));
1797
+ }, n2.prototype.opacify = function(t2, r2) {
1798
+ return void 0 === t2 && (t2 = 10), this.fadeIn(t2, r2);
1799
+ }, n2.prototype.transparentize = function(t2, r2) {
1800
+ return void 0 === t2 && (t2 = 10), this.fadeOut(t2, r2);
1801
+ }, n2.prototype.hue = function(t2) {
1802
+ return it(this, "h", t2);
1803
+ }, n2.prototype.saturation = function(t2) {
1804
+ return it(this, "s", t2);
1805
+ }, n2.prototype.lightness = function(t2) {
1806
+ return it(this, "l", t2);
1807
+ }, n2.prototype.rgb = function(t2) {
1808
+ return r([], this._rgb, true);
1809
+ }, n2.prototype.rgba = function(t2) {
1810
+ return r(r([], this.rgb(false), true), [this._alpha], false);
1811
+ }, n2.prototype.cmyk = function(t2) {
1812
+ return c.apply(void 0, this._rgb);
1813
+ }, n2.prototype.hsl = function(t2) {
1814
+ return f.apply(void 0, this._rgb);
1815
+ }, n2.prototype.hsla = function(t2) {
1816
+ return r(r([], this.hsl(false), true), [this._alpha], false);
1817
+ }, n2.prototype.hsv = function(t2) {
1818
+ return v.apply(void 0, this._rgb);
1819
+ }, n2.prototype.hsi = function(t2) {
1820
+ return y.apply(void 0, this._rgb);
1821
+ }, n2.prototype.hwb = function(t2) {
1822
+ return g.apply(void 0, this._rgb);
1823
+ }, n2.prototype.xyz = function(t2) {
1824
+ return z.apply(void 0, this._rgb);
1825
+ }, n2.prototype.lab = function(t2) {
1826
+ return O.apply(void 0, this.xyz(false));
1827
+ }, n2.prototype.lch = function(t2) {
1828
+ return S.apply(void 0, this.lab(false));
1829
+ }, n2.prototype.xyY = function(t2) {
1830
+ return H.apply(void 0, this.xyz(false));
1831
+ }, n2.prototype.hex = function(t2) {
1832
+ void 0 === t2 && (t2 = 2);
1833
+ var n3 = 0 === t2 ? void 0 : 1 === t2 ? this._alpha : 100 === this._alpha ? void 0 : this._alpha, e2 = "color:hex:param_".concat(t2);
1834
+ if (this.cache.has(e2)) return this.cache.get(e2);
1835
+ var o2 = u2.apply(void 0, r(r([], this._rgb, false), [n3], false));
1836
+ return this.cache.set(e2, o2), o2;
1837
+ }, n2.prototype.lighten = function(t2, r2) {
1838
+ void 0 === t2 && (t2 = 5);
1839
+ var e2 = this.hsl(false), i2 = e2[0], a2 = e2[1], u3 = e2[2];
1840
+ return u3 = o(u3 += void 0 !== r2 && "relative" === r2 ? u3 * (t2 / 100) : t2, 0, 100), new n2(s(i2, a2, u3), this._alpha);
1841
+ }, n2.prototype.darken = function(t2, r2) {
1842
+ return void 0 === t2 && (t2 = 5), this.lighten(-t2, r2);
1843
+ }, n2.prototype.saturate = function(t2, r2) {
1844
+ void 0 === t2 && (t2 = 5);
1845
+ var e2 = this.hsl(false), i2 = e2[0], a2 = e2[1], u3 = e2[2];
1846
+ return a2 = o(a2 += void 0 !== r2 && "relative" === r2 ? a2 * (t2 / 100) : t2, 0, 100), new n2(s(i2, a2, u3), this._alpha);
1847
+ }, n2.prototype.desaturate = function(t2, r2) {
1848
+ return void 0 === t2 && (t2 = 5), this.saturate(-t2, r2);
1849
+ }, n2.prototype.spin = function(t2) {
1850
+ var r2 = this.hsl(false), e2 = r2[0], o2 = r2[1], i2 = r2[2];
1851
+ return new n2(s(e2 = (e2 + t2 % 360 + 360) % 360, o2, i2), this._alpha);
1852
+ }, n2.prototype.adjustHue = function(t2) {
1853
+ return this.spin(t2);
1854
+ }, n2.prototype.complement = function() {
1855
+ return this.spin(180);
1856
+ }, n2.prototype.invert = function() {
1857
+ var t2 = this._rgb.map((function(t3) {
1858
+ return 255 - t3;
1859
+ }));
1860
+ return new n2([t2[0], t2[1], t2[2]], this._alpha);
1861
+ }, n2.prototype.mix = function(t2, r2) {
1862
+ return void 0 === r2 && (r2 = 50), D(this, t2, 100 - o(r2, 0, 100));
1863
+ }, n2.prototype.luma = function() {
1864
+ var t2 = this._rgb.map((function(t3) {
1865
+ return (t3 /= 255) <= 0.03928 ? t3 / 12.92 : Math.pow((t3 + 0.055) / 1.055, 2.4);
1866
+ }));
1867
+ return 0.2126 * t2[0] + 0.7152 * t2[1] + 0.0722 * t2[2];
1868
+ }, n2.prototype.brightness = function() {
1869
+ var t2 = this._rgb;
1870
+ return (function(t3, r2, n3) {
1871
+ return (299 * t3 + 587 * r2 + 114 * n3) / 1e3 / 255 * 100;
1872
+ })(t2[0], t2[1], t2[2]);
1873
+ }, n2.prototype.deltaE = function(t2, r2, n3) {
1874
+ return void 0 === r2 && (r2 = "CMC"), et(this, t2, r2, n3);
1875
+ }, n2.prototype.visibility = function(t2, r2) {
1876
+ return ot(this, t2, r2);
1877
+ }, t([q(0, 1, true, 0), R("color:rgb")], n2.prototype, "rgb", null), t([q(0, 1, true, 0)], n2.prototype, "rgba", null), t([q(0, 1, true, 0), R("color:cmyk")], n2.prototype, "cmyk", null), t([q(0, 1, true, 0), R("color:hsl")], n2.prototype, "hsl", null), t([q(0, 1, true, 0)], n2.prototype, "hsla", null), t([q(0, 1, true, 0), R("color:hsv")], n2.prototype, "hsv", null), t([q(0, 1, true, 0), R("color:hsi")], n2.prototype, "hsi", null), t([q(0, 1, true, 0), R("color: hwb")], n2.prototype, "hwb", null), t([q(2, 1, true, 0), R("color:xyz")], n2.prototype, "xyz", null), t([q(2, 1, true, 0), R("color:lab")], n2.prototype, "lab", null), t([q(2, 1, true, 0), R("color:lch")], n2.prototype, "lch", null), t([q(2, 1, true, 0), R("color:xyY")], n2.prototype, "xyY", null), t([R("color:luma")], n2.prototype, "luma", null), n2;
1878
+ })();
1879
+ var st = function(t2, r2, n2, e2) {
1880
+ return new ft([t2, r2, n2], e2);
1881
+ };
1882
+ var vt2 = function(t2, r2, n2, e2) {
1883
+ return new ft(s(t2, r2, n2), e2);
1884
+ };
1885
+ var bt = function(t2, r2, n2, e2) {
1886
+ return new ft(b(t2, r2, n2), e2);
1887
+ };
1888
+ var yt = function(t2, r2, n2, e2) {
1889
+ return new ft(d(t2, r2, n2), e2);
1890
+ };
1891
+ var dt = function(t2, r2, n2, e2) {
1892
+ return new ft(w(t2, r2, n2), e2);
1893
+ };
1894
+ var gt = function(t2, r2, n2, e2) {
1895
+ return new ft(N(t2, r2, n2), e2);
1896
+ };
1897
+ var wt = function(t2, r2, n2, e2) {
1898
+ return new ft(j(t2, r2, n2), e2);
1899
+ };
1900
+ var mt = function(t2, r2, n2, e2) {
1901
+ return new ft(N.apply(void 0, L(t2, r2, n2)), e2);
1902
+ };
1903
+ function Mt(t2, r2, n2) {
1904
+ return new ft(t2, r2, n2);
1905
+ }
1906
+ Mt.config = function(t2) {
1907
+ Object.assign(pt, t2);
1908
+ }, Mt.random = function() {
1909
+ var t2 = a(0, 255), r2 = a(0, 255), n2 = a(0, 255);
1910
+ return new ft([t2, r2, n2]);
1911
+ }, Mt.convertor = Y, Mt.Color = ft, Mt.rgb = st, Mt.hsl = vt2, Mt.hsv = bt, Mt.hsi = yt, Mt.hwb = dt, Mt.xyz = gt, Mt.lab = wt, Mt.lch = mt, Mt.mix = D, Mt.deltaE = et, Mt.utils = { roundDecimal: i, randomRange: a }, Mt.useNames = function(t2, r2) {
1912
+ return (function(t3, r3) {
1913
+ if (void 0 !== r3 && "function" == typeof r3) {
1914
+ var n2 = {};
1915
+ for (var e2 in t3) {
1916
+ var o2 = r3(e2, t3[e2]), i2 = o2[0], a2 = o2[1];
1917
+ n2[i2] = a2;
1918
+ }
1919
+ Object.assign(at, n2);
1920
+ } else Object.assign(at, t3);
1921
+ })(t2, r2), Mt;
1922
+ };
1923
+
1924
+ // src/palette.ts
1925
+ var MIN_DELTA_E = 10;
1926
+ function pickDistinctColorFromSeed(seedHex, existing, minDistance = MIN_DELTA_E) {
1927
+ const existingCs = [...existing].map((c2) => Mt(c2));
1928
+ const seed = Mt(seedHex);
1929
+ const minDeltaE = (c2) => existingCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...existingCs.map((c22) => c2.deltaE(c22, "CIE2000")));
1930
+ if (minDeltaE(seed) >= minDistance) {
1931
+ const hex = seed.hex();
1932
+ return { hex, registerHex: hex };
1933
+ }
1934
+ let bestCandidate = seed;
1935
+ let bestMinDist = minDeltaE(seed);
1936
+ const tryVariant = (c2) => {
1937
+ const d2 = minDeltaE(c2);
1938
+ if (d2 >= minDistance) {
1939
+ const hex = c2.hex();
1940
+ return { hex, registerHex: hex };
1941
+ }
1942
+ if (d2 > bestMinDist) {
1943
+ bestMinDist = d2;
1944
+ bestCandidate = c2;
1945
+ }
1946
+ return null;
1947
+ };
1948
+ for (const dSat of [25, -25, 50, -50, 75]) {
1949
+ const hit = tryVariant(dSat >= 0 ? seed.saturate(dSat) : seed.desaturate(-dSat));
1950
+ if (hit) return hit;
1951
+ }
1952
+ for (const dLight of [15, -15, 30, -30, 45]) {
1953
+ const hit = tryVariant(dLight >= 0 ? seed.lighten(dLight) : seed.darken(-dLight));
1954
+ if (hit) return hit;
1955
+ }
1956
+ for (const dHue of [30, -30, 60, -60, 90, -90, 120, -120]) {
1957
+ const hit = tryVariant(seed.spin(dHue));
1958
+ if (hit) return hit;
1959
+ }
1960
+ return { hex: seed.hex(), registerHex: bestCandidate.hex() };
1961
+ }
1962
+ function buildPaletteFromSeed(seedHex, count, minDistance = MIN_DELTA_E) {
1963
+ const out = [];
1964
+ if (!seedHex || !(count > 0)) return out;
1965
+ const issued = /* @__PURE__ */ new Set();
1966
+ const issuedCs = [];
1967
+ const distance = (hex) => issuedCs.length === 0 ? Number.POSITIVE_INFINITY : Math.min(...issuedCs.map((c2) => Mt(hex).deltaE(c2, "CIE2000")));
1968
+ let sweep = null;
1969
+ let sweepAt = 0;
1970
+ for (let i2 = 0; i2 < count; i2++) {
1971
+ const { hex, registerHex } = pickDistinctColorFromSeed(seedHex, issued, minDistance);
1972
+ let chosen = hex;
1973
+ let register = registerHex;
1974
+ if (distance(chosen) < minDistance) {
1975
+ if (!sweep) sweep = sweepCandidates(seedHex);
1976
+ let best = chosen;
1977
+ let bestD = distance(chosen);
1978
+ while (sweepAt < sweep.length) {
1979
+ const cand = sweep[sweepAt++];
1980
+ const d2 = distance(cand);
1981
+ if (d2 >= minDistance) {
1982
+ best = cand;
1983
+ bestD = d2;
1984
+ break;
1985
+ }
1986
+ if (d2 > bestD) {
1987
+ best = cand;
1988
+ bestD = d2;
1989
+ }
1990
+ }
1991
+ chosen = best;
1992
+ register = best;
1993
+ }
1994
+ issued.add(register);
1995
+ issuedCs.push(Mt(register));
1996
+ out.push(chosen);
1997
+ }
1998
+ return out;
1999
+ }
2000
+ 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;
2005
+ const out = [];
2006
+ for (const dl of [0, -16, 16, -30, 30]) {
2007
+ 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());
2010
+ }
2011
+ }
2012
+ return out;
2013
+ }
2014
+
1038
2015
  // src/index.ts
1039
2016
  function registerCityTable(packed) {
1040
2017
  L3(packed);
@@ -1088,6 +2065,7 @@ export {
1088
2065
  MARK_SELECTED_CLASS,
1089
2066
  MAX_FRAME_GROW_FACTOR,
1090
2067
  MIN_CONTRAST,
2068
+ MIN_DELTA_E,
1091
2069
  MIN_HIT_BAND_PX,
1092
2070
  PAGE_MATCH_TOLERANCE,
1093
2071
  PHANTOM_FRACTION,
@@ -1109,6 +2087,7 @@ export {
1109
2087
  backingHoldsGlyph,
1110
2088
  bareBase64,
1111
2089
  blankRenderFlag,
2090
+ buildPaletteFromSeed,
1112
2091
  buildRenderPayload,
1113
2092
  buildReviewWire,
1114
2093
  canConfirmLaunch,
@@ -1137,6 +2116,8 @@ export {
1137
2116
  filterQualifyRows,
1138
2117
  fitReadingFor,
1139
2118
  fitRenderedChart,
2119
+ formatSourceDate,
2120
+ formatSourceDateFor,
1140
2121
  geoAssetFor,
1141
2122
  geoFromCache,
1142
2123
  glyphSampleGrid,
@@ -1161,6 +2142,7 @@ export {
1161
2142
  normalizeFilterTerm,
1162
2143
  orderRefusalsForDisplay,
1163
2144
  periodTickSuppressesFeedback,
2145
+ pickDistinctColorFromSeed,
1164
2146
  pillBacksGlyph,
1165
2147
  pinScrolledAxis,
1166
2148
  planAxisPin,