@bicharts/chart-host 0.6.76 → 0.6.78

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
@@ -1,4 +1,11 @@
1
1
  /*! @bicharts/chart-host — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; Natural Earth and US Census/TIGER (public domain). Full text: NOTICE in this package. */
2
+ import {
3
+ computeSelectionCard,
4
+ formatSourceDate,
5
+ formatSourceDateFor,
6
+ isExcelDateFormat,
7
+ normaliseAggregation
8
+ } from "./chunk-M7VM6F73.mjs";
2
9
  import {
3
10
  ANNOTATION_CLASS,
4
11
  ANNOTATION_LAYER_CLASS,
@@ -15,25 +22,20 @@ import {
15
22
  DARK_TEXT,
16
23
  FIT_CONTENT_SELECTOR,
17
24
  GLYPH_SAMPLE_N,
18
- L,
19
25
  LABEL_CONTRAST_CAP,
20
26
  LABEL_CONTRAST_DONE_ATTR,
21
27
  LABEL_PILL_CLASS,
22
28
  LIGHT_TEXT,
23
29
  MAX_FRAME_GROW_FACTOR,
24
30
  MIN_CONTRAST,
25
- MIN_HIT_BAND_PX,
26
31
  MIN_RAMP_FILLS,
27
32
  PAGE_MATCH_TOLERANCE,
28
33
  PHANTOM_FRACTION,
29
34
  PILL_MIN_ALPHA,
30
35
  PILL_MIN_COVERAGE,
31
36
  PILL_OPAQUE_ALPHA,
32
- Qe,
33
- Qn,
34
37
  SAME_SHADE_DELTA_E,
35
38
  SCROLL_SLACK_PX,
36
- SELECTION_GLYPH_CLASS,
37
39
  STRADDLE_COLS,
38
40
  STRADDLE_MIN_SHARE,
39
41
  STRADDLE_PILL_ALPHA,
@@ -41,8 +43,6 @@ import {
41
43
  STRADDLE_TARGET_CONTRAST,
42
44
  VALUE_AXIS_MIN_FIT,
43
45
  WHITE_TEXT_BG_LUM,
44
- Zn,
45
- _3,
46
46
  applyLabelContrast,
47
47
  assembleD3,
48
48
  autoRampCanvas,
@@ -54,13 +54,10 @@ import {
54
54
  cellSuppressesNormalize,
55
55
  censusClippedText,
56
56
  censusColourSpread,
57
- censusHitBands,
58
57
  censusMarks,
59
58
  censusValuePlacement,
60
59
  clearGeoCache,
61
- clearSelectionGlyphs,
62
60
  clippedTextFlag,
63
- collectD3GlyphCenters,
64
61
  colourSpreadFlag,
65
62
  compileRenderFn,
66
63
  compositeOver,
@@ -68,57 +65,41 @@ import {
68
65
  contrastRatio,
69
66
  createChartGroup,
70
67
  createChartHost,
71
- createMarkResolver,
72
68
  ctmScaleOf,
73
69
  decideLabelColor,
74
70
  deltaEHex,
75
- ensureCrossfilterHitTargets,
76
71
  explainRenderFailure,
77
72
  fitReadingFor,
78
73
  fitRenderedChart,
79
74
  geoAssetFor,
80
75
  geoFromCache,
81
76
  glyphSampleGrid,
82
- hitBandFlag,
83
77
  invalidSentinelReason,
84
78
  isBlankRender,
85
79
  isHorizontalLabelRow,
86
- isInsideControl,
87
80
  isInvalidSentinelError,
88
81
  isPhantomBox,
89
82
  isPillBackdropAlpha,
90
- l,
91
83
  labelBand,
92
- le,
93
84
  loadGeo,
94
- markKeyOf,
95
85
  measureContainerBoxes,
96
86
  minContrastOver,
97
87
  needsScroll,
98
88
  newIdScope,
99
- nextClickedMarks,
100
- nextSelection,
101
89
  noopViewStateProvider,
102
- o,
103
- paintSelectionGlyphs,
104
90
  pickColorOver,
105
91
  pillBacksGlyph,
106
92
  pinScrolledAxis,
107
93
  planAxisPin,
108
94
  planFrameGrow,
109
- planSelectionPaint,
110
- qe,
111
95
  registerGeo,
112
96
  registerGeoAsset,
113
97
  relativeLuminance,
114
98
  requiredD3Plugins,
115
99
  resolveAutoColorScale,
116
100
  resolveOptions,
117
- rowIdxsFromMark,
118
- sameRowSet,
119
101
  scopeChartIds,
120
102
  scrollFitFor,
121
- selectionRuleOf,
122
103
  sessionViewStateProvider,
123
104
  straddleSampleGrid,
124
105
  straddles,
@@ -130,7 +111,31 @@ import {
130
111
  toSourceRows,
131
112
  unpinScrolledAxis,
132
113
  valuePlacementFlag
133
- } from "./chunk-ZEXMBZHP.mjs";
114
+ } from "./chunk-BFN4NY22.mjs";
115
+ import {
116
+ _3,
117
+ l,
118
+ o
119
+ } from "./chunk-L554L6HF.mjs";
120
+ import {
121
+ MIN_HIT_BAND_PX,
122
+ SELECTION_GLYPH_CLASS,
123
+ censusHitBands,
124
+ clearSelectionGlyphs,
125
+ collectD3GlyphCenters,
126
+ createMarkResolver,
127
+ ensureCrossfilterHitTargets,
128
+ hitBandFlag,
129
+ isInsideControl,
130
+ markKeyOf,
131
+ nextClickedMarks,
132
+ nextSelection,
133
+ paintSelectionGlyphs,
134
+ planSelectionPaint,
135
+ rowIdxsFromMark,
136
+ sameRowSet,
137
+ selectionRuleOf
138
+ } from "./chunk-MGAO2DR7.mjs";
134
139
  import "./chunk-A2GMXZP7.mjs";
135
140
  import {
136
141
  ACTIVE_TICK_CLASS,
@@ -317,7 +322,7 @@ function planTrivialChart(data) {
317
322
  }
318
323
  if (dataCols.length !== 1) return null;
319
324
  const idx = dataCols[0];
320
- const name2 = columnName(allCols[idx]) || "Value";
325
+ const name = columnName(allCols[idx]) || "Value";
321
326
  const finish = (kind, reason, source) => ({
322
327
  kind,
323
328
  reason,
@@ -329,7 +334,7 @@ function planTrivialChart(data) {
329
334
  return finish(
330
335
  "card",
331
336
  "One row of one column holds a single value, so this is a card. No generation was needed and none was used.",
332
- cardSource(idx, name2)
337
+ cardSource(idx, name)
333
338
  );
334
339
  }
335
340
  if (isNumericColumn(rows, idx)) {
@@ -337,7 +342,7 @@ function planTrivialChart(data) {
337
342
  return finish(
338
343
  "histogram",
339
344
  "A single numeric column has one defensible chart: the distribution of its values. No generation was needed and none was used.",
340
- histogramSource(idx, name2)
345
+ histogramSource(idx, name)
341
346
  );
342
347
  }
343
348
  const distinct = /* @__PURE__ */ new Set();
@@ -350,7 +355,7 @@ function planTrivialChart(data) {
350
355
  return finish(
351
356
  "frequency-bar",
352
357
  "A single categorical column has one defensible chart: how often each value occurs. No generation was needed and none was used.",
353
- frequencySource(idx, name2)
358
+ frequencySource(idx, name)
354
359
  );
355
360
  }
356
361
  function compileTrivialSource(source) {
@@ -391,7 +396,7 @@ var PRELUDE = `
391
396
  }
392
397
  container.replaceChildren();
393
398
  `;
394
- function cardSource(idx, name2) {
399
+ function cardSource(idx, name) {
395
400
  return `function render(container, data, options) {${PRELUDE}
396
401
  var raw = rows[0] ? rows[0][${idx}] : null;
397
402
  var blank = (raw === null || raw === undefined || raw === '');
@@ -423,13 +428,13 @@ function cardSource(idx, name2) {
423
428
  label.style.marginTop = '6px'; label.style.textAlign = 'center';
424
429
  label.style.maxWidth = '100%'; label.style.overflow = 'hidden';
425
430
  label.style.textOverflow = 'ellipsis'; label.style.whiteSpace = 'nowrap';
426
- label.textContent = ${lit(name2)};
431
+ label.textContent = ${lit(name)};
427
432
 
428
433
  root.appendChild(value); root.appendChild(label);
429
434
  container.appendChild(root);
430
435
  }`;
431
436
  }
432
- function frequencySource(idx, name2) {
437
+ function frequencySource(idx, name) {
433
438
  return `function render(container, data, options) {${PRELUDE}
434
439
  var counts = new Map();
435
440
  for (var r = 0; r < rows.length; r++) {
@@ -449,7 +454,7 @@ function frequencySource(idx, name2) {
449
454
  var barH = Math.min(bandH - 3, 26);
450
455
 
451
456
  var title = svgEl('text', { x: 8, y: CF + 2, 'font-size': CF, 'font-weight': '700', fill: FG });
452
- title.textContent = ${lit(name2)} + ' \\u2014 count of ' + fmt(rows.length) + ' rows';
457
+ title.textContent = ${lit(name)} + ' \\u2014 count of ' + fmt(rows.length) + ' rows';
453
458
  svg.appendChild(title);
454
459
 
455
460
  entries.forEach(function (e, i) {
@@ -488,7 +493,7 @@ function frequencySource(idx, name2) {
488
493
  container.appendChild(svg);
489
494
  }`;
490
495
  }
491
- function histogramSource(idx, name2) {
496
+ function histogramSource(idx, name) {
492
497
  return `function render(container, data, options) {${PRELUDE}
493
498
  var vals = [];
494
499
  for (var r = 0; r < rows.length; r++) {
@@ -524,7 +529,7 @@ function histogramSource(idx, name2) {
524
529
  var bw = plotW / binCount;
525
530
 
526
531
  var title = svgEl('text', { x: padL, y: CF + 2, 'font-size': CF, 'font-weight': '700', fill: FG });
527
- title.textContent = ${lit(name2)} + ' \\u2014 distribution of ' + fmt(vals.length) + ' values';
532
+ title.textContent = ${lit(name)} + ' \\u2014 distribution of ' + fmt(vals.length) + ' values';
528
533
  svg.appendChild(title);
529
534
 
530
535
  bins.forEach(function (idxs, i) {
@@ -1200,20 +1205,20 @@ function normalizeFilterTerm(raw) {
1200
1205
  return raw.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/\s+/g, " ").trim();
1201
1206
  }
1202
1207
  var FILTER_MIN_TERM_CHARS = 2;
1203
- function startsAWord(name2, t2) {
1204
- for (let i2 = name2.indexOf(t2); i2 >= 0; i2 = name2.indexOf(t2, i2 + 1)) {
1208
+ function startsAWord(name, t2) {
1209
+ for (let i2 = name.indexOf(t2); i2 >= 0; i2 = name.indexOf(t2, i2 + 1)) {
1205
1210
  if (i2 === 0) return true;
1206
- const prev = name2.charCodeAt(i2 - 1);
1211
+ const prev = name.charCodeAt(i2 - 1);
1207
1212
  const alnum = prev >= 97 && prev <= 122 || prev >= 48 && prev <= 57;
1208
1213
  if (!alnum) return true;
1209
1214
  }
1210
1215
  return false;
1211
1216
  }
1212
- function looseFormWithWordStarts(name2) {
1217
+ function looseFormWithWordStarts(name) {
1213
1218
  let form = "";
1214
1219
  const starts = /* @__PURE__ */ new Set();
1215
1220
  let prevAlnum = false;
1216
- for (const ch of name2) {
1221
+ for (const ch of name) {
1217
1222
  const piece = l(ch);
1218
1223
  const code = ch.charCodeAt(0);
1219
1224
  const alnum = code >= 97 && code <= 122 || code >= 48 && code <= 57;
@@ -1242,13 +1247,13 @@ function filterQualifyRows(rows, term, read, style = DEFAULT_FILTER_MATCH_STYLE)
1242
1247
  const byDesc = [];
1243
1248
  for (const row of all) {
1244
1249
  const f2 = read(row);
1245
- const name2 = normalizeFilterTerm(f2.name);
1246
- if (name2 === "") continue;
1247
- if (name2.indexOf(t2) >= 0) {
1248
- (startsAWord(name2, t2) ? atWordStart : midWord).push(row);
1250
+ const name = normalizeFilterTerm(f2.name);
1251
+ if (name === "") continue;
1252
+ if (name.indexOf(t2) >= 0) {
1253
+ (startsAWord(name, t2) ? atWordStart : midWord).push(row);
1249
1254
  continue;
1250
1255
  }
1251
- if (loose && startsALooseWord(looseFormWithWordStarts(name2), loose)) {
1256
+ if (loose && startsALooseWord(looseFormWithWordStarts(name), loose)) {
1252
1257
  atWordStart.push(row);
1253
1258
  continue;
1254
1259
  }
@@ -1354,603 +1359,6 @@ function qualifyTableRows(rows) {
1354
1359
  }));
1355
1360
  }
1356
1361
 
1357
- // src/sourceDateFormat.ts
1358
- function formatSourceDate(raw, opts = {}) {
1359
- const d2 = toDate(raw);
1360
- if (!d2) return null;
1361
- const dayFrame = L(d2);
1362
- const frame = dayFrame ?? (opts.dialect === "dotnet" ? "local" : "utc");
1363
- const p3 = partsIn(d2, frame);
1364
- const format = cleanFormat(opts.format, opts.dialect);
1365
- if (format && opts.dialect) {
1366
- const rendered = renderFormat(format, p3, opts.dialect, opts.culture);
1367
- if (rendered) return rendered;
1368
- }
1369
- return localeDate(p3, !!dayFrame, opts.culture);
1370
- }
1371
- function formatSourceDateFor(raw, columnName2, formats, culture) {
1372
- return formatSourceDate(raw, {
1373
- format: formats?.byColumn?.[columnName2] ?? null,
1374
- dialect: formats?.dialect,
1375
- culture
1376
- });
1377
- }
1378
- 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*$/;
1379
- function toDate(raw) {
1380
- if (raw instanceof Date) return isNaN(raw.getTime()) ? null : raw;
1381
- if (typeof raw !== "string" || !ISO_LIKE_RE.test(raw)) return null;
1382
- const d2 = le(raw.trim());
1383
- return d2 && !isNaN(d2.getTime()) ? d2 : null;
1384
- }
1385
- function partsIn(d2, frame) {
1386
- return frame === "utc" ? {
1387
- year: d2.getUTCFullYear(),
1388
- month: d2.getUTCMonth() + 1,
1389
- day: d2.getUTCDate(),
1390
- hours: d2.getUTCHours(),
1391
- minutes: d2.getUTCMinutes(),
1392
- seconds: d2.getUTCSeconds(),
1393
- ms: d2.getUTCMilliseconds(),
1394
- weekday: d2.getUTCDay()
1395
- } : {
1396
- year: d2.getFullYear(),
1397
- month: d2.getMonth() + 1,
1398
- day: d2.getDate(),
1399
- hours: d2.getHours(),
1400
- minutes: d2.getMinutes(),
1401
- seconds: d2.getSeconds(),
1402
- ms: d2.getMilliseconds(),
1403
- weekday: d2.getDay()
1404
- };
1405
- }
1406
- function utcAnchor(p3) {
1407
- const d2 = new Date(Date.UTC(p3.year, p3.month - 1, p3.day, p3.hours, p3.minutes, p3.seconds, p3.ms));
1408
- if (p3.year >= 0 && p3.year < 100) d2.setUTCFullYear(p3.year);
1409
- return d2;
1410
- }
1411
- function localeDate(p3, wholeDay, culture) {
1412
- const anchor = utcAnchor(p3);
1413
- try {
1414
- const o3 = { dateStyle: "medium", timeZone: "UTC" };
1415
- if (!wholeDay) o3.timeStyle = p3.seconds || p3.ms ? "medium" : "short";
1416
- return new Intl.DateTimeFormat(culture || void 0, o3).format(anchor);
1417
- } catch {
1418
- const iso = anchor.toISOString();
1419
- return wholeDay ? iso.slice(0, 10) : `${iso.slice(0, 10)} ${iso.slice(11, 19)}`;
1420
- }
1421
- }
1422
- function cleanFormat(raw, dialect) {
1423
- if (!raw || !dialect) return null;
1424
- let s2 = firstSection(String(raw), dialect);
1425
- if (dialect === "excel") {
1426
- s2 = s2.replace(/\[(h{1,2}|m{1,2}|s{1,2})\]/gi, "$1").replace(/\[[^\]]*\]/g, "");
1427
- }
1428
- if (!s2.trim() || /^general$/i.test(s2.trim())) return null;
1429
- return hasDateToken(s2, dialect) ? s2 : null;
1430
- }
1431
- function isExcelDateFormat(raw) {
1432
- if (!raw) return false;
1433
- const bare = stripLiterals(firstSection(String(raw), "excel"), "excel");
1434
- if (/\[(h+|m+|s+)\]/i.test(bare)) return false;
1435
- const tokens = bare.replace(/\[[^\]]*\]/g, "").trim();
1436
- if (!tokens || /^general$/i.test(tokens)) return false;
1437
- return /[ymdhs]/i.test(tokens);
1438
- }
1439
- function firstSection(s2, dialect) {
1440
- let out = "";
1441
- let quote = "";
1442
- for (let i2 = 0; i2 < s2.length; i2++) {
1443
- const ch = s2[i2];
1444
- if (quote) {
1445
- out += ch;
1446
- if (ch === quote) quote = "";
1447
- continue;
1448
- }
1449
- if (ch === '"' || dialect === "dotnet" && ch === "'") {
1450
- quote = ch;
1451
- out += ch;
1452
- continue;
1453
- }
1454
- if (ch === "\\") {
1455
- out += ch + (s2[i2 + 1] ?? "");
1456
- i2++;
1457
- continue;
1458
- }
1459
- if (ch === ";") break;
1460
- out += ch;
1461
- }
1462
- return out;
1463
- }
1464
- function hasDateToken(s2, dialect) {
1465
- const stripped = stripLiterals(s2, dialect);
1466
- return dialect === "excel" ? /[ymdhs]/i.test(stripped) : /[yMdHhmsft]/.test(stripped);
1467
- }
1468
- function stripLiterals(s2, dialect) {
1469
- let out = "";
1470
- for (let i2 = 0; i2 < s2.length; i2++) {
1471
- const ch = s2[i2];
1472
- if (ch === "\\" || dialect === "dotnet" && ch === "%") {
1473
- i2++;
1474
- continue;
1475
- }
1476
- if (dialect === "excel" && (ch === "_" || ch === "*")) {
1477
- i2++;
1478
- continue;
1479
- }
1480
- if (ch === '"' || dialect === "dotnet" && ch === "'") {
1481
- const end = s2.indexOf(ch, i2 + 1);
1482
- i2 = end < 0 ? s2.length : end;
1483
- continue;
1484
- }
1485
- out += ch;
1486
- }
1487
- return out;
1488
- }
1489
- var EXCEL_TOKENS = [
1490
- [/^am\/pm/i, "meridiemLong"],
1491
- [/^a\/p/i, "meridiemShort"],
1492
- [/^y{3,}/i, "year4"],
1493
- [/^y{1,2}/i, "year2"],
1494
- [/^m{5,}/i, "monthNarrow"],
1495
- [/^m{4}/i, "monthLong"],
1496
- [/^m{3}/i, "monthShort"],
1497
- [/^m{2}/i, "mAmbiguous2"],
1498
- [/^m/i, "mAmbiguous1"],
1499
- [/^d{4,}/i, "weekdayLong"],
1500
- [/^d{3}/i, "weekdayShort"],
1501
- [/^d{2}/i, "day2"],
1502
- [/^d/i, "day1"],
1503
- [/^h{2,}/i, "hour2"],
1504
- [/^h/i, "hour1"],
1505
- [/^s{2,}/i, "second2"],
1506
- [/^s/i, "second1"]
1507
- ];
1508
- var DOTNET_TOKENS = [
1509
- [/^y{3,}/, "year4"],
1510
- [/^y{1,2}/, "year2"],
1511
- [/^M{4,}/, "monthLong"],
1512
- [/^M{3}/, "monthShort"],
1513
- [/^M{2}/, "month2"],
1514
- [/^M/, "month1"],
1515
- [/^d{4,}/, "weekdayLong"],
1516
- [/^d{3}/, "weekdayShort"],
1517
- [/^d{2}/, "day2"],
1518
- [/^d/, "day1"],
1519
- [/^H{2,}/, "hour2"],
1520
- [/^H/, "hour1"],
1521
- [/^h{2,}/, "hour2"],
1522
- [/^h/, "hour1"],
1523
- [/^m{2,}/, "minute2"],
1524
- [/^m/, "minute1"],
1525
- [/^s{2,}/, "second2"],
1526
- [/^s/, "second1"],
1527
- [/^f+/, "fraction"],
1528
- [/^tt/, "meridiemLong"],
1529
- [/^t/, "meridiemShort"]
1530
- ];
1531
- function tokenize(s2, dialect) {
1532
- const table = dialect === "excel" ? EXCEL_TOKENS : DOTNET_TOKENS;
1533
- const out = [];
1534
- let i2 = 0;
1535
- while (i2 < s2.length) {
1536
- const ch = s2[i2];
1537
- if (ch === "\\" || dialect === "dotnet" && ch === "%") {
1538
- if (i2 + 1 < s2.length) out.push({ kind: "literal", text: s2[i2 + 1] });
1539
- i2 += 2;
1540
- continue;
1541
- }
1542
- if (ch === '"' || dialect === "dotnet" && ch === "'") {
1543
- const end = s2.indexOf(ch, i2 + 1);
1544
- out.push({ kind: "literal", text: end < 0 ? s2.slice(i2 + 1) : s2.slice(i2 + 1, end) });
1545
- i2 = end < 0 ? s2.length : end + 1;
1546
- continue;
1547
- }
1548
- const rest = s2.slice(i2);
1549
- let matched = false;
1550
- for (const [re, kind] of table) {
1551
- const m2 = re.exec(rest);
1552
- if (m2) {
1553
- out.push({ kind });
1554
- i2 += m2[0].length;
1555
- matched = true;
1556
- break;
1557
- }
1558
- }
1559
- if (!matched) {
1560
- out.push({ kind: "literal", text: ch });
1561
- i2++;
1562
- }
1563
- }
1564
- return out;
1565
- }
1566
- function resolveAmbiguousM(tokens) {
1567
- const isHour = (t2) => t2.kind === "hour1" || t2.kind === "hour2";
1568
- const isSecond = (t2) => t2.kind === "second1" || t2.kind === "second2";
1569
- for (let i2 = 0; i2 < tokens.length; i2++) {
1570
- const t2 = tokens[i2];
1571
- if (t2.kind !== "mAmbiguous1" && t2.kind !== "mAmbiguous2") continue;
1572
- const two = t2.kind === "mAmbiguous2";
1573
- let minute = false;
1574
- for (let j2 = i2 - 1; j2 >= 0; j2--) {
1575
- if (tokens[j2].kind === "literal") continue;
1576
- minute = isHour(tokens[j2]);
1577
- break;
1578
- }
1579
- if (!minute) {
1580
- for (let j2 = i2 + 1; j2 < tokens.length; j2++) {
1581
- if (tokens[j2].kind === "literal") continue;
1582
- minute = isSecond(tokens[j2]);
1583
- break;
1584
- }
1585
- }
1586
- t2.kind = minute ? two ? "minute2" : "minute1" : two ? "month2" : "month1";
1587
- }
1588
- }
1589
- var EN_MONTHS_LONG = [
1590
- "January",
1591
- "February",
1592
- "March",
1593
- "April",
1594
- "May",
1595
- "June",
1596
- "July",
1597
- "August",
1598
- "September",
1599
- "October",
1600
- "November",
1601
- "December"
1602
- ];
1603
- var EN_MONTHS_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
1604
- var EN_DAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
1605
- var EN_DAYS_SHORT = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1606
- function name(p3, kind, width, culture) {
1607
- try {
1608
- const opts = kind === "month" ? { month: width, timeZone: "UTC" } : { weekday: width === "narrow" ? "short" : width, timeZone: "UTC" };
1609
- return new Intl.DateTimeFormat(culture || void 0, opts).format(utcAnchor(p3));
1610
- } catch {
1611
- if (kind === "month") {
1612
- const long = EN_MONTHS_LONG[p3.month - 1] ?? "";
1613
- if (width === "long") return long;
1614
- return width === "narrow" ? long.slice(0, 1) : EN_MONTHS_SHORT[p3.month - 1] ?? "";
1615
- }
1616
- return (width === "long" ? EN_DAYS_LONG[p3.weekday] : EN_DAYS_SHORT[p3.weekday]) ?? "";
1617
- }
1618
- }
1619
- var p2 = (n2) => (n2 < 10 ? "0" : "") + n2;
1620
- function renderFormat(format, p3, dialect, culture) {
1621
- const tokens = tokenize(format, dialect);
1622
- if (dialect === "excel") resolveAmbiguousM(tokens);
1623
- const twelve = tokens.some((t2) => t2.kind === "meridiemLong" || t2.kind === "meridiemShort");
1624
- const hour12 = () => {
1625
- const h2 = p3.hours % 12;
1626
- return h2 === 0 ? 12 : h2;
1627
- };
1628
- let out = "";
1629
- let sawField = false;
1630
- for (const t2 of tokens) {
1631
- switch (t2.kind) {
1632
- case "literal":
1633
- out += t2.text ?? "";
1634
- break;
1635
- case "year4":
1636
- out += String(p3.year);
1637
- sawField = true;
1638
- break;
1639
- case "year2":
1640
- out += p2((p3.year % 100 + 100) % 100);
1641
- sawField = true;
1642
- break;
1643
- case "monthLong":
1644
- out += name(p3, "month", "long", culture);
1645
- sawField = true;
1646
- break;
1647
- case "monthShort":
1648
- out += name(p3, "month", "short", culture);
1649
- sawField = true;
1650
- break;
1651
- case "monthNarrow":
1652
- out += name(p3, "month", "long", culture).slice(0, 1);
1653
- sawField = true;
1654
- break;
1655
- case "month2":
1656
- out += p2(p3.month);
1657
- sawField = true;
1658
- break;
1659
- case "month1":
1660
- out += String(p3.month);
1661
- sawField = true;
1662
- break;
1663
- case "weekdayLong":
1664
- out += name(p3, "weekday", "long", culture);
1665
- sawField = true;
1666
- break;
1667
- case "weekdayShort":
1668
- out += name(p3, "weekday", "short", culture);
1669
- sawField = true;
1670
- break;
1671
- case "day2":
1672
- out += p2(p3.day);
1673
- sawField = true;
1674
- break;
1675
- case "day1":
1676
- out += String(p3.day);
1677
- sawField = true;
1678
- break;
1679
- case "hour2":
1680
- out += p2(twelve ? hour12() : p3.hours);
1681
- sawField = true;
1682
- break;
1683
- case "hour1":
1684
- out += String(twelve ? hour12() : p3.hours);
1685
- sawField = true;
1686
- break;
1687
- case "minute2":
1688
- out += p2(p3.minutes);
1689
- sawField = true;
1690
- break;
1691
- case "minute1":
1692
- out += String(p3.minutes);
1693
- sawField = true;
1694
- break;
1695
- case "second2":
1696
- out += p2(p3.seconds);
1697
- sawField = true;
1698
- break;
1699
- case "second1":
1700
- out += String(p3.seconds);
1701
- sawField = true;
1702
- break;
1703
- case "fraction":
1704
- out += String(p3.ms).padStart(3, "0");
1705
- sawField = true;
1706
- break;
1707
- case "meridiemLong":
1708
- out += p3.hours < 12 ? "AM" : "PM";
1709
- sawField = true;
1710
- break;
1711
- case "meridiemShort":
1712
- out += p3.hours < 12 ? "A" : "P";
1713
- sawField = true;
1714
- break;
1715
- }
1716
- }
1717
- return sawField && out.trim() ? out : null;
1718
- }
1719
-
1720
- // src/selectionCard.ts
1721
- var SYNTHETIC_PREFIX = "__";
1722
- var NUMERIC_DATATYPE = /int|double|decimal|single|float|number|currency|money/i;
1723
- function normaliseAggregation(raw) {
1724
- const s2 = String(raw ?? "").trim().toLowerCase();
1725
- if (!s2) return "sum";
1726
- if (/^(avg|average|mean)$/.test(s2)) return "average";
1727
- if (/^(min|minimum)$/.test(s2)) return "min";
1728
- if (/^(max|maximum)$/.test(s2)) return "max";
1729
- if (/^(count|countrows)$/.test(s2)) return "count";
1730
- if (/^(median|med)$/.test(s2)) return "median";
1731
- if (/^(distinctcount|dcount|countdistinct|uniques?)$/.test(s2)) return "distinctcount";
1732
- return "sum";
1733
- }
1734
- function aggLabel(agg) {
1735
- switch (agg) {
1736
- case "average":
1737
- return "Average";
1738
- case "min":
1739
- return "Min";
1740
- case "max":
1741
- return "Max";
1742
- case "count":
1743
- return "Count";
1744
- case "median":
1745
- return "Median";
1746
- case "distinctcount":
1747
- return "Distinct";
1748
- default:
1749
- return "Sum";
1750
- }
1751
- }
1752
- function measureLineLabel(agg, name2) {
1753
- const col = String(name2 ?? "");
1754
- const prefix = aggLabel(agg) + " of ";
1755
- return col.trim().toLowerCase().startsWith(prefix.toLowerCase()) ? col.trim() : prefix + col;
1756
- }
1757
- function isSynthetic(name2) {
1758
- return String(name2 ?? "").startsWith(SYNTHETIC_PREFIX);
1759
- }
1760
- function isMeasureColumn(col) {
1761
- if (!col || isSynthetic(col.name)) return false;
1762
- if (col.isMeasure === true) return true;
1763
- return NUMERIC_DATATYPE.test(String(col.dataType ?? ""));
1764
- }
1765
- function isRealColumn(col) {
1766
- return !!col && !isSynthetic(col.name);
1767
- }
1768
- function isSerialisedDateColumn(col) {
1769
- return /^datetime/i.test(String(col?.dataType ?? ""));
1770
- }
1771
- function displayText(col, raw, opts) {
1772
- if (raw == null || raw === "") return "(blank)";
1773
- if (isSerialisedDateColumn(col)) {
1774
- const shown = formatSourceDate(raw, {
1775
- format: opts.sourceFormats?.byColumn?.[String(col?.name ?? "")] ?? null,
1776
- dialect: opts.sourceFormats?.dialect,
1777
- culture: opts.cultureCode
1778
- });
1779
- if (shown) return shown;
1780
- }
1781
- return String(raw);
1782
- }
1783
- function isSuppressed(col) {
1784
- return qe(col).suppressed;
1785
- }
1786
- function resolveAgg(col, requested, auto) {
1787
- const fallback = () => {
1788
- const d2 = Zn(col);
1789
- return d2 === "first" ? "count" : d2;
1790
- };
1791
- if (auto) return fallback();
1792
- return Qe(col).indexOf(requested) >= 0 ? requested : fallback();
1793
- }
1794
- function toNumber(v2) {
1795
- if (v2 == null || v2 === "") return null;
1796
- const n2 = typeof v2 === "number" ? v2 : Number(v2);
1797
- return Number.isFinite(n2) ? n2 : null;
1798
- }
1799
- function reduce(values, agg, distinctRaw) {
1800
- if (agg === "count") return values.length;
1801
- if (agg === "distinctcount") return new Set(distinctRaw.map((v2) => v2 == null ? "\0" : String(v2))).size;
1802
- if (!values.length) return null;
1803
- switch (agg) {
1804
- case "average":
1805
- return values.reduce((a2, b2) => a2 + b2, 0) / values.length;
1806
- case "min":
1807
- return Math.min(...values);
1808
- case "max":
1809
- return Math.max(...values);
1810
- case "median": {
1811
- const s2 = [...values].sort((a2, b2) => a2 - b2);
1812
- const m2 = s2.length >> 1;
1813
- return s2.length % 2 ? s2[m2] : (s2[m2 - 1] + s2[m2]) / 2;
1814
- }
1815
- default:
1816
- return values.reduce((a2, b2) => a2 + b2, 0);
1817
- }
1818
- }
1819
- function fmtNumber(v2, culture) {
1820
- try {
1821
- const abs = Math.abs(v2);
1822
- const opts = abs >= 1e6 ? { notation: "compact", maximumFractionDigits: 1 } : { maximumFractionDigits: abs < 10 ? 2 : 0 };
1823
- return new Intl.NumberFormat(culture || void 0, opts).format(v2);
1824
- } catch {
1825
- return String(Math.round(v2 * 100) / 100);
1826
- }
1827
- }
1828
- function computeSelectionCard(payload, selectedRowIdxs, opts = {}) {
1829
- const columns = payload?.columns ?? [];
1830
- const rows = payload?.rows ?? [];
1831
- if (!columns.length || !rows.length) return null;
1832
- const wanted = Array.from(new Set((selectedRowIdxs ?? []).filter((n2) => Number.isInteger(n2))));
1833
- if (!wanted.length) return null;
1834
- const rowIdxCol = columns.findIndex((c2) => c2?.name === "__rowIdx__");
1835
- let byIdx = null;
1836
- if (rowIdxCol >= 0) {
1837
- byIdx = /* @__PURE__ */ new Map();
1838
- for (let r2 = 0; r2 < rows.length; r2++) {
1839
- const v2 = toNumber(rows[r2]?.[rowIdxCol]);
1840
- if (v2 != null) byIdx.set(v2, r2);
1841
- }
1842
- }
1843
- const positions = [];
1844
- for (const idx of wanted) {
1845
- const pos = byIdx ? byIdx.get(idx) : idx;
1846
- if (pos != null && pos >= 0 && pos < rows.length) positions.push(pos);
1847
- }
1848
- if (!positions.length) return null;
1849
- const auto = String(opts.aggregation ?? "").trim().length === 0;
1850
- const agg = normaliseAggregation(opts.aggregation);
1851
- const maxMeasures = opts.maxMeasures ?? 4;
1852
- const maxHeaderValues = opts.maxHeaderValues ?? 3;
1853
- const maxDimensions = opts.maxDimensions ?? 2;
1854
- const dimIdx = columns.findIndex((c2) => c2 && !isSynthetic(c2.name) && !isMeasureColumn(c2));
1855
- let header;
1856
- if (dimIdx >= 0) {
1857
- const seen = [];
1858
- const set = /* @__PURE__ */ new Set();
1859
- for (const p3 of positions) {
1860
- const s2 = displayText(columns[dimIdx], rows[p3]?.[dimIdx], opts);
1861
- if (!set.has(s2)) {
1862
- set.add(s2);
1863
- seen.push(s2);
1864
- }
1865
- if (seen.length > maxHeaderValues) break;
1866
- }
1867
- header = seen.length > maxHeaderValues ? `${positions.length} marks` : seen.join(", ");
1868
- } else {
1869
- header = `${positions.length} mark${positions.length === 1 ? "" : "s"}`;
1870
- }
1871
- const measureCols = [];
1872
- const suppressedColumns = [];
1873
- for (let c2 = 0; c2 < columns.length; c2++) {
1874
- if (!isMeasureColumn(columns[c2])) continue;
1875
- if (isSuppressed(columns[c2])) {
1876
- suppressedColumns.push(String(columns[c2]?.name ?? ""));
1877
- continue;
1878
- }
1879
- measureCols.push(c2);
1880
- }
1881
- const shown = measureCols.slice(0, maxMeasures);
1882
- const lines = [];
1883
- for (const c2 of shown) {
1884
- const col = columns[c2];
1885
- const colAgg = resolveAgg(col, agg, auto);
1886
- const selVals = [];
1887
- const selRaw = [];
1888
- for (const p3 of positions) {
1889
- const n2 = toNumber(rows[p3]?.[c2]);
1890
- selRaw.push(rows[p3]?.[c2]);
1891
- if (n2 != null) selVals.push(n2);
1892
- }
1893
- const value = reduce(selVals, colAgg, selRaw);
1894
- let sharePct = null;
1895
- if (Qn(col, colAgg) && value != null) {
1896
- const allVals = [];
1897
- const allRaw = [];
1898
- for (let r2 = 0; r2 < rows.length; r2++) {
1899
- const n2 = toNumber(rows[r2]?.[c2]);
1900
- allRaw.push(rows[r2]?.[c2]);
1901
- if (n2 != null) allVals.push(n2);
1902
- }
1903
- const total = reduce(allVals, colAgg, allRaw);
1904
- if (total != null && total > 0) sharePct = value / total * 100;
1905
- }
1906
- lines.push({
1907
- column: String(col?.name ?? ""),
1908
- label: measureLineLabel(colAgg, String(col?.name ?? "")),
1909
- value,
1910
- valueText: value == null ? "\u2014" : fmtNumber(value, opts.cultureCode),
1911
- sharePct,
1912
- shareText: sharePct == null ? "" : `${sharePct < 0.1 ? "<0.1" : sharePct.toFixed(1)}% of total`,
1913
- aggregation: colAgg
1914
- });
1915
- }
1916
- const dimensionLines = [];
1917
- for (let c2 = 0; c2 < columns.length && dimensionLines.length < maxDimensions; c2++) {
1918
- if (c2 === dimIdx) continue;
1919
- if (!isRealColumn(columns[c2]) || isMeasureColumn(columns[c2])) continue;
1920
- const name2 = String(columns[c2]?.name ?? "");
1921
- const distinct = /* @__PURE__ */ new Set();
1922
- let firstText = "";
1923
- for (const p3 of positions) {
1924
- const raw = rows[p3]?.[c2];
1925
- const key = raw == null || raw === "" ? "(blank)" : String(raw);
1926
- if (!distinct.size) firstText = displayText(columns[c2], raw, opts);
1927
- distinct.add(key);
1928
- }
1929
- if (!distinct.size) continue;
1930
- const single = distinct.size === 1;
1931
- dimensionLines.push({
1932
- column: name2,
1933
- label: single ? name2 : `Distinct ${name2}`,
1934
- value: single ? null : distinct.size,
1935
- valueText: single ? firstText : fmtNumber(distinct.size, opts.cultureCode),
1936
- sharePct: null,
1937
- shareText: "",
1938
- aggregation: single ? "first" : "distinctcount"
1939
- });
1940
- }
1941
- return {
1942
- header,
1943
- lines,
1944
- dimensionLines,
1945
- suppressedColumns,
1946
- rowsText: `${positions.length} of ${rows.length} rows`,
1947
- selectedRows: positions.length,
1948
- totalRows: rows.length,
1949
- hiddenMeasures: Math.max(0, measureCols.length - shown.length),
1950
- aggregation: agg
1951
- };
1952
- }
1953
-
1954
1362
  // src/summaryText.ts
1955
1363
  function composeSummaryText(codeSummary, warningMsg) {
1956
1364
  let sumText = String(codeSummary ?? "");
@@ -2049,8 +1457,8 @@ function p(t2, r2, n2, e2) {
2049
1457
  }
2050
1458
  else u3 = NaN;
2051
1459
  return 360 * u3;
2052
- })(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l3 = i2 - a2, p3 = i2, f2 = (t2 + r2 + n2) / 3;
2053
- return "v" === e2 && (h2 = 0 === i2 ? 0 : l3 / i2), i2 !== a2 && "l" === e2 && (h2 = c2 > 0.5 ? l3 / (2 - i2 - a2) : l3 / (i2 + a2)), "i" === e2 && (h2 = f2 > 0 ? 1 - a2 / f2 : 0), h2 *= 100, c2 *= 100, f2 *= 100, "l" === e2 ? [u2, h2, c2] : "v" === e2 ? [u2, h2, p3 *= 100] : [u2, h2, f2];
1460
+ })(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l3 = i2 - a2, p2 = i2, f2 = (t2 + r2 + n2) / 3;
1461
+ return "v" === e2 && (h2 = 0 === i2 ? 0 : l3 / i2), i2 !== a2 && "l" === e2 && (h2 = c2 > 0.5 ? l3 / (2 - i2 - a2) : l3 / (i2 + a2)), "i" === e2 && (h2 = f2 > 0 ? 1 - a2 / f2 : 0), h2 *= 100, c2 *= 100, f2 *= 100, "l" === e2 ? [u2, h2, c2] : "v" === e2 ? [u2, h2, p2 *= 100] : [u2, h2, f2];
2054
1462
  }
2055
1463
  var f = function(t2, r2, n2) {
2056
1464
  return p(t2, r2, n2, "l");
@@ -2140,7 +1548,7 @@ var S = function(t2, r2, n2) {
2140
1548
  var A = function(t2, r2, n2) {
2141
1549
  return isNaN(n2) && (n2 = 0), n2 *= Math.PI / 180, [t2, Math.cos(n2) * r2, Math.sin(n2) * r2];
2142
1550
  };
2143
- var L2 = function(t2, r2, n2) {
1551
+ var L = function(t2, r2, n2) {
2144
1552
  return P.apply(void 0, A(t2, r2, n2));
2145
1553
  };
2146
1554
  var H = function(t2, r2, n2) {
@@ -2151,7 +1559,7 @@ var Y = Object.freeze({ __proto__: null, linear2rgb: e, rgb2linear: n, rgb2hex:
2151
1559
  return O.apply(void 0, z(t2, r2, n2));
2152
1560
  }, lab2rgb: j, lch2lab: A, lab2lch: S, xyz2lch: function(t2, r2, n2) {
2153
1561
  return S.apply(void 0, O(t2, r2, n2));
2154
- }, lch2xyz: L2, xyY2xyz: function(t2, r2, n2) {
1562
+ }, lch2xyz: L, xyY2xyz: function(t2, r2, n2) {
2155
1563
  return 0 === r2 ? [0, 0, 0] : [t2 * (n2 / r2), n2, n2 / r2 * (1 - t2 - r2)];
2156
1564
  }, xyz2xyY: H });
2157
1565
  function R(t2, n2) {
@@ -2176,8 +1584,8 @@ function q(t2, n2, e2, o3) {
2176
1584
  for (var a3 = [], u3 = 0; u3 < arguments.length; u3++) a3[u3] = arguments[u3];
2177
1585
  var h3 = void 0 === a3[o3] ? e2 : a3[o3], l3 = c2.call.apply(c2, r([this], a3, false));
2178
1586
  if (false === h3) return l3;
2179
- var p3 = "number" == typeof h3 ? Math.round(h3) : 0, f2 = "number" == typeof t2 ? new Array(l3.length).fill(t2) : t2, s2 = f2.map((function(t3) {
2180
- return 1 === n2 ? "number" == typeof h3 ? p3 : t3 : t3 + p3;
1587
+ var p2 = "number" == typeof h3 ? Math.round(h3) : 0, f2 = "number" == typeof t2 ? new Array(l3.length).fill(t2) : t2, s2 = f2.map((function(t3) {
1588
+ return 1 === n2 ? "number" == typeof h3 ? p2 : t3 : t3 + p2;
2181
1589
  }));
2182
1590
  return l3.map((function(t3, r2) {
2183
1591
  return i(t3, s2[r2]);
@@ -2186,8 +1594,8 @@ function q(t2, n2, e2, o3) {
2186
1594
  };
2187
1595
  }
2188
1596
  var D = function(t2, r2, n2) {
2189
- var e2 = t2 instanceof ft ? t2 : new ft(t2), i2 = r2 instanceof ft ? r2 : new ft(r2), a2 = o2(n2, 0, 100) / 100, u2 = 2 * a2 - 1, h2 = e2.alpha() - i2.alpha(), c2 = ((u2 * h2 == -1 ? u2 : (u2 + h2) / (1 + u2 * h2)) + 1) / 2, l3 = 1 - c2, p3 = [Math.round(o2(e2.red() * c2 + i2.red() * l3, 0, 255)), Math.round(o2(e2.green() * c2 + i2.green() * l3, 0, 255)), Math.round(o2(e2.blue() * c2 + i2.blue() * l3, 0, 255))], f2 = e2.alpha() * a2 + i2.alpha() * (1 - a2);
2190
- return new ft(p3, f2);
1597
+ var e2 = t2 instanceof ft ? t2 : new ft(t2), i2 = r2 instanceof ft ? r2 : new ft(r2), a2 = o2(n2, 0, 100) / 100, u2 = 2 * a2 - 1, h2 = e2.alpha() - i2.alpha(), c2 = ((u2 * h2 == -1 ? u2 : (u2 + h2) / (1 + u2 * h2)) + 1) / 2, l3 = 1 - c2, p2 = [Math.round(o2(e2.red() * c2 + i2.red() * l3, 0, 255)), Math.round(o2(e2.green() * c2 + i2.green() * l3, 0, 255)), Math.round(o2(e2.blue() * c2 + i2.blue() * l3, 0, 255))], f2 = e2.alpha() * a2 + i2.alpha() * (1 - a2);
1598
+ return new ft(p2, f2);
2191
1599
  };
2192
1600
  var F = Math.sqrt;
2193
1601
  var U = Math.pow;
@@ -2225,7 +1633,7 @@ var et = function(t2, r2, n2, e2) {
2225
1633
  var i2 = Object.assign({}, { l: 1, c: 1 }, e2);
2226
1634
  return (function(t3, r3, n3, e3) {
2227
1635
  void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1);
2228
- var o4 = V(t3, true), i3 = o4[0], a3 = o4[1], u3 = o4[2], h3 = o4[3], c3 = o4[4], l3 = V(r3), p3 = l3[0], f2 = l3[1], s2 = l3[3], v2 = a3 - f2, b2 = i3 - p3, y2 = c3 - l3[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 <= u3 && u3 <= 345 ? 0.56 + J(0.2 * $(Q(u3 + 168))) : 0.36 + J(0.4 * $(Q(u3 + 35))), M2 = F(U(a3, 4) / (U(a3, 4) + 1900)), x2 = w2 * (M2 * m2 + 1 - M2);
1636
+ var o4 = V(t3, true), i3 = o4[0], a3 = o4[1], u3 = o4[2], h3 = o4[3], c3 = o4[4], l3 = V(r3), p2 = l3[0], f2 = l3[1], s2 = l3[3], v2 = a3 - f2, b2 = i3 - p2, y2 = c3 - l3[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 <= u3 && u3 <= 345 ? 0.56 + J(0.2 * $(Q(u3 + 168))) : 0.36 + J(0.4 * $(Q(u3 + 35))), M2 = F(U(a3, 4) / (U(a3, 4) + 1900)), x2 = w2 * (M2 * m2 + 1 - M2);
2229
1637
  return F(U(b2 / (n3 * g2), 2) + U(v2 / (e3 * w2), 2) + U(d2 / x2, 2));
2230
1638
  })(t2, r2, i2.l, i2.c);
2231
1639
  }
@@ -2235,7 +1643,7 @@ var et = function(t2, r2, n2, e2) {
2235
1643
  void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o4 && (o4 = 1), void 0 === i3 && (i3 = "graphic");
2236
1644
  var a3 = "textiles" === i3 ? 0.048 : 0.045, u3 = "textiles" === i3 ? 0.014 : 0.015;
2237
1645
  n3 = "textiles" === i3 ? 2 : n3;
2238
- var h3 = V(t3), c3 = h3[0], l3 = h3[1], p3 = h3[3], f2 = h3[4], s2 = V(r3), v2 = s2[0], b2 = s2[1], y2 = s2[3], d2 = c3 - v2, g2 = l3 - b2, w2 = f2 - s2[4], m2 = 1 + a3 * l3, M2 = 1 + u3 * l3, x2 = F(U(p3 - y2, 2) + U(w2, 2) - U(g2, 2));
1646
+ var h3 = V(t3), c3 = h3[0], l3 = h3[1], p2 = h3[3], f2 = h3[4], s2 = V(r3), v2 = s2[0], b2 = s2[1], y2 = s2[3], d2 = c3 - v2, g2 = l3 - b2, w2 = f2 - s2[4], m2 = 1 + a3 * l3, M2 = 1 + u3 * l3, x2 = F(U(p2 - y2, 2) + U(w2, 2) - U(g2, 2));
2239
1647
  return F(U(d2 / (1 * n3), 2) + U(g2 / (e3 * m2), 2) + U(x2 / (o4 * M2), 2));
2240
1648
  })(t2, r2, u2.kL, u2.kC, u2.kH, u2.cate);
2241
1649
  }
@@ -2246,8 +1654,8 @@ var et = function(t2, r2, n2, e2) {
2246
1654
  var h2 = { kL: 1, kC: 1, kH: 1 }, c2 = Object.assign({}, h2, e2);
2247
1655
  return (function(t3, r3, n3, e3, o4) {
2248
1656
  void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o4 && (o4 = 1);
2249
- var i3 = V(t3), a3 = i3[0], u3 = i3[1], h3 = i3[3], c3 = i3[4], l3 = V(r3), p3 = l3[0], f2 = l3[1], s2 = l3[3], v2 = l3[4], b2 = (a3 + p3) / 2, y2 = (u3 + 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 = p3 - a3, N2 = f2 - u3, 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)), L3 = -2 * F(U(C2, 7) / (U(C2, 7) + U(25, 7))) * Z(2 * Q(A2));
2250
- return F(U(z2 / (n3 * P2), 2) + U(N2 / (e3 * j2), 2) + U(O2 / (o4 * S2), 2) + L3 * (N2 / (e3 * j2)) * (O2 / (o4 * S2)));
1657
+ var i3 = V(t3), a3 = i3[0], u3 = i3[1], h3 = i3[3], c3 = i3[4], l3 = V(r3), p2 = l3[0], f2 = l3[1], s2 = l3[3], v2 = l3[4], b2 = (a3 + p2) / 2, y2 = (u3 + 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 = p2 - a3, N2 = f2 - u3, 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));
1658
+ return F(U(z2 / (n3 * P2), 2) + U(N2 / (e3 * j2), 2) + U(O2 / (o4 * S2), 2) + L2 * (N2 / (e3 * j2)) * (O2 / (o4 * S2)));
2251
1659
  })(t2, r2, c2.kL, c2.kC, c2.kH);
2252
1660
  };
2253
1661
  var ot = function(t2, r2, n2) {
@@ -2296,7 +1704,7 @@ var lt = function(t2, r2) {
2296
1704
  if (c2 || (u2 = true), c2) {
2297
1705
  var l3 = c2[1].toLocaleLowerCase();
2298
1706
  if (e2 = l3, ut.has(l3) || (u2 = true), c2[2] && !u2) {
2299
- var p3 = c2[2], f2 = -1 !== p3.indexOf(",") ? "," : " ", s2 = p3.split(f2);
1707
+ var p2 = c2[2], f2 = -1 !== p2.indexOf(",") ? "," : " ", s2 = p2.split(f2);
2300
1708
  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 ? o3[a2] = ct(s2[a2]) : o3[a2] = Number(s2[a2].trim()));
2301
1709
  ["rgba", "hsla", "hsva", "hwba", "hsia"].includes(e2) ? (e2 = e2.slice(0, -1), void 0 !== s2[3] && (i2 = ct(s2[3]))) : "cmyk" === e2 && o3.push(void 0 !== s2[3] ? ct(s2[3]) : 0);
2302
1710
  }
@@ -2327,13 +1735,13 @@ var ft = (function() {
2327
1735
  var a2 = (function(t3) {
2328
1736
  var r3, n4 = { lab2rgb: j, hsl2rgb: s, hsv2rgb: b, xyz2rgb: N, hwb2rgb: w, hsi2rgb: d }, e3 = lt(t3), i3 = e3[0], a3 = e3[1], u3 = e3[2];
2329
1737
  if ("rgb" === i3) return [a3, u3];
2330
- "lch" === i3 && (i3 = (r3 = ["xyz", L2(a3[0], a3[1], a3[2])])[0], a3 = r3[1]);
2331
- var h3 = a3[0], c2 = a3[1], p3 = a3[2], f2 = a3[3];
2332
- if ("cmyk" === i3) return [l2(h3, c2, p3, f2).map((function(t4) {
1738
+ "lch" === i3 && (i3 = (r3 = ["xyz", L(a3[0], a3[1], a3[2])])[0], a3 = r3[1]);
1739
+ var h3 = a3[0], c2 = a3[1], p2 = a3[2], f2 = a3[3];
1740
+ if ("cmyk" === i3) return [l2(h3, c2, p2, f2).map((function(t4) {
2333
1741
  return o2(t4, 0, 255);
2334
1742
  })), u3];
2335
1743
  var v2 = "".concat(i3, "2rgb");
2336
- if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p3).map((function(t4) {
1744
+ if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p2).map((function(t4) {
2337
1745
  return o2(t4, 0, 255);
2338
1746
  })), u3];
2339
1747
  throw new Error("Invalid color");
@@ -2460,7 +1868,7 @@ var wt = function(t2, r2, n2, e2) {
2460
1868
  return new ft(j(t2, r2, n2), e2);
2461
1869
  };
2462
1870
  var mt = function(t2, r2, n2, e2) {
2463
- return new ft(N.apply(void 0, L2(t2, r2, n2)), e2);
1871
+ return new ft(N.apply(void 0, L(t2, r2, n2)), e2);
2464
1872
  };
2465
1873
  function Mt(t2, r2, n2) {
2466
1874
  return new ft(t2, r2, n2);
@@ -2857,7 +2265,7 @@ function fnv1a(text) {
2857
2265
  function fingerprintComponentDigest(components) {
2858
2266
  if (!components || typeof components !== "object") return "";
2859
2267
  const parts = [];
2860
- for (const [name2, value] of Object.entries(components)) {
2268
+ for (const [name, value] of Object.entries(components)) {
2861
2269
  const timedOut = !!value && typeof value === "object" && value.timeout === "true";
2862
2270
  let text;
2863
2271
  try {
@@ -2865,7 +2273,7 @@ function fingerprintComponentDigest(components) {
2865
2273
  } catch {
2866
2274
  text = String(value);
2867
2275
  }
2868
- parts.push(`${name2}:${timedOut ? "timeout" : (fnv1a(text) >>> 16).toString(16).padStart(4, "0")}`);
2276
+ parts.push(`${name}:${timedOut ? "timeout" : (fnv1a(text) >>> 16).toString(16).padStart(4, "0")}`);
2869
2277
  }
2870
2278
  return parts.join(",");
2871
2279
  }