@bicharts/chart-host 0.6.75 → 0.6.77

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-QOKQUXVV.mjs";
2
9
  import {
3
10
  ANNOTATION_CLASS,
4
11
  ANNOTATION_LAYER_CLASS,
@@ -15,7 +22,6 @@ 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,
@@ -29,8 +35,6 @@ import {
29
35
  PILL_MIN_ALPHA,
30
36
  PILL_MIN_COVERAGE,
31
37
  PILL_OPAQUE_ALPHA,
32
- Qe,
33
- Qn,
34
38
  SAME_SHADE_DELTA_E,
35
39
  SCROLL_SLACK_PX,
36
40
  SELECTION_GLYPH_CLASS,
@@ -41,8 +45,6 @@ import {
41
45
  STRADDLE_TARGET_CONTRAST,
42
46
  VALUE_AXIS_MIN_FIT,
43
47
  WHITE_TEXT_BG_LUM,
44
- Zn,
45
- _3,
46
48
  applyLabelContrast,
47
49
  assembleD3,
48
50
  autoRampCanvas,
@@ -87,9 +89,7 @@ import {
87
89
  isInvalidSentinelError,
88
90
  isPhantomBox,
89
91
  isPillBackdropAlpha,
90
- l,
91
92
  labelBand,
92
- le,
93
93
  loadGeo,
94
94
  markKeyOf,
95
95
  measureContainerBoxes,
@@ -99,7 +99,6 @@ import {
99
99
  nextClickedMarks,
100
100
  nextSelection,
101
101
  noopViewStateProvider,
102
- o,
103
102
  paintSelectionGlyphs,
104
103
  pickColorOver,
105
104
  pillBacksGlyph,
@@ -107,7 +106,6 @@ import {
107
106
  planAxisPin,
108
107
  planFrameGrow,
109
108
  planSelectionPaint,
110
- qe,
111
109
  registerGeo,
112
110
  registerGeoAsset,
113
111
  relativeLuminance,
@@ -130,7 +128,12 @@ import {
130
128
  toSourceRows,
131
129
  unpinScrolledAxis,
132
130
  valuePlacementFlag
133
- } from "./chunk-OEN7WGNS.mjs";
131
+ } from "./chunk-IMNZYSIC.mjs";
132
+ import {
133
+ _3,
134
+ l,
135
+ o
136
+ } from "./chunk-H2P63UMG.mjs";
134
137
  import "./chunk-A2GMXZP7.mjs";
135
138
  import {
136
139
  ACTIVE_TICK_CLASS,
@@ -317,7 +320,7 @@ function planTrivialChart(data) {
317
320
  }
318
321
  if (dataCols.length !== 1) return null;
319
322
  const idx = dataCols[0];
320
- const name2 = columnName(allCols[idx]) || "Value";
323
+ const name = columnName(allCols[idx]) || "Value";
321
324
  const finish = (kind, reason, source) => ({
322
325
  kind,
323
326
  reason,
@@ -329,7 +332,7 @@ function planTrivialChart(data) {
329
332
  return finish(
330
333
  "card",
331
334
  "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)
335
+ cardSource(idx, name)
333
336
  );
334
337
  }
335
338
  if (isNumericColumn(rows, idx)) {
@@ -337,7 +340,7 @@ function planTrivialChart(data) {
337
340
  return finish(
338
341
  "histogram",
339
342
  "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)
343
+ histogramSource(idx, name)
341
344
  );
342
345
  }
343
346
  const distinct = /* @__PURE__ */ new Set();
@@ -350,7 +353,7 @@ function planTrivialChart(data) {
350
353
  return finish(
351
354
  "frequency-bar",
352
355
  "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)
356
+ frequencySource(idx, name)
354
357
  );
355
358
  }
356
359
  function compileTrivialSource(source) {
@@ -391,7 +394,7 @@ var PRELUDE = `
391
394
  }
392
395
  container.replaceChildren();
393
396
  `;
394
- function cardSource(idx, name2) {
397
+ function cardSource(idx, name) {
395
398
  return `function render(container, data, options) {${PRELUDE}
396
399
  var raw = rows[0] ? rows[0][${idx}] : null;
397
400
  var blank = (raw === null || raw === undefined || raw === '');
@@ -423,13 +426,13 @@ function cardSource(idx, name2) {
423
426
  label.style.marginTop = '6px'; label.style.textAlign = 'center';
424
427
  label.style.maxWidth = '100%'; label.style.overflow = 'hidden';
425
428
  label.style.textOverflow = 'ellipsis'; label.style.whiteSpace = 'nowrap';
426
- label.textContent = ${lit(name2)};
429
+ label.textContent = ${lit(name)};
427
430
 
428
431
  root.appendChild(value); root.appendChild(label);
429
432
  container.appendChild(root);
430
433
  }`;
431
434
  }
432
- function frequencySource(idx, name2) {
435
+ function frequencySource(idx, name) {
433
436
  return `function render(container, data, options) {${PRELUDE}
434
437
  var counts = new Map();
435
438
  for (var r = 0; r < rows.length; r++) {
@@ -449,7 +452,7 @@ function frequencySource(idx, name2) {
449
452
  var barH = Math.min(bandH - 3, 26);
450
453
 
451
454
  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';
455
+ title.textContent = ${lit(name)} + ' \\u2014 count of ' + fmt(rows.length) + ' rows';
453
456
  svg.appendChild(title);
454
457
 
455
458
  entries.forEach(function (e, i) {
@@ -488,7 +491,7 @@ function frequencySource(idx, name2) {
488
491
  container.appendChild(svg);
489
492
  }`;
490
493
  }
491
- function histogramSource(idx, name2) {
494
+ function histogramSource(idx, name) {
492
495
  return `function render(container, data, options) {${PRELUDE}
493
496
  var vals = [];
494
497
  for (var r = 0; r < rows.length; r++) {
@@ -524,7 +527,7 @@ function histogramSource(idx, name2) {
524
527
  var bw = plotW / binCount;
525
528
 
526
529
  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';
530
+ title.textContent = ${lit(name)} + ' \\u2014 distribution of ' + fmt(vals.length) + ' values';
528
531
  svg.appendChild(title);
529
532
 
530
533
  bins.forEach(function (idxs, i) {
@@ -1200,20 +1203,20 @@ function normalizeFilterTerm(raw) {
1200
1203
  return raw.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/\s+/g, " ").trim();
1201
1204
  }
1202
1205
  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)) {
1206
+ function startsAWord(name, t2) {
1207
+ for (let i2 = name.indexOf(t2); i2 >= 0; i2 = name.indexOf(t2, i2 + 1)) {
1205
1208
  if (i2 === 0) return true;
1206
- const prev = name2.charCodeAt(i2 - 1);
1209
+ const prev = name.charCodeAt(i2 - 1);
1207
1210
  const alnum = prev >= 97 && prev <= 122 || prev >= 48 && prev <= 57;
1208
1211
  if (!alnum) return true;
1209
1212
  }
1210
1213
  return false;
1211
1214
  }
1212
- function looseFormWithWordStarts(name2) {
1215
+ function looseFormWithWordStarts(name) {
1213
1216
  let form = "";
1214
1217
  const starts = /* @__PURE__ */ new Set();
1215
1218
  let prevAlnum = false;
1216
- for (const ch of name2) {
1219
+ for (const ch of name) {
1217
1220
  const piece = l(ch);
1218
1221
  const code = ch.charCodeAt(0);
1219
1222
  const alnum = code >= 97 && code <= 122 || code >= 48 && code <= 57;
@@ -1242,13 +1245,13 @@ function filterQualifyRows(rows, term, read, style = DEFAULT_FILTER_MATCH_STYLE)
1242
1245
  const byDesc = [];
1243
1246
  for (const row of all) {
1244
1247
  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);
1248
+ const name = normalizeFilterTerm(f2.name);
1249
+ if (name === "") continue;
1250
+ if (name.indexOf(t2) >= 0) {
1251
+ (startsAWord(name, t2) ? atWordStart : midWord).push(row);
1249
1252
  continue;
1250
1253
  }
1251
- if (loose && startsALooseWord(looseFormWithWordStarts(name2), loose)) {
1254
+ if (loose && startsALooseWord(looseFormWithWordStarts(name), loose)) {
1252
1255
  atWordStart.push(row);
1253
1256
  continue;
1254
1257
  }
@@ -1354,603 +1357,6 @@ function qualifyTableRows(rows) {
1354
1357
  }));
1355
1358
  }
1356
1359
 
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
1360
  // src/summaryText.ts
1955
1361
  function composeSummaryText(codeSummary, warningMsg) {
1956
1362
  let sumText = String(codeSummary ?? "");
@@ -2049,8 +1455,8 @@ function p(t2, r2, n2, e2) {
2049
1455
  }
2050
1456
  else u3 = NaN;
2051
1457
  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];
1458
+ })(t2, r2, n2, "i" === e2), h2 = 0, c2 = (i2 + a2) / 2, l3 = i2 - a2, p2 = i2, f2 = (t2 + r2 + n2) / 3;
1459
+ 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
1460
  }
2055
1461
  var f = function(t2, r2, n2) {
2056
1462
  return p(t2, r2, n2, "l");
@@ -2140,7 +1546,7 @@ var S = function(t2, r2, n2) {
2140
1546
  var A = function(t2, r2, n2) {
2141
1547
  return isNaN(n2) && (n2 = 0), n2 *= Math.PI / 180, [t2, Math.cos(n2) * r2, Math.sin(n2) * r2];
2142
1548
  };
2143
- var L2 = function(t2, r2, n2) {
1549
+ var L = function(t2, r2, n2) {
2144
1550
  return P.apply(void 0, A(t2, r2, n2));
2145
1551
  };
2146
1552
  var H = function(t2, r2, n2) {
@@ -2151,7 +1557,7 @@ var Y = Object.freeze({ __proto__: null, linear2rgb: e, rgb2linear: n, rgb2hex:
2151
1557
  return O.apply(void 0, z(t2, r2, n2));
2152
1558
  }, lab2rgb: j, lch2lab: A, lab2lch: S, xyz2lch: function(t2, r2, n2) {
2153
1559
  return S.apply(void 0, O(t2, r2, n2));
2154
- }, lch2xyz: L2, xyY2xyz: function(t2, r2, n2) {
1560
+ }, lch2xyz: L, xyY2xyz: function(t2, r2, n2) {
2155
1561
  return 0 === r2 ? [0, 0, 0] : [t2 * (n2 / r2), n2, n2 / r2 * (1 - t2 - r2)];
2156
1562
  }, xyz2xyY: H });
2157
1563
  function R(t2, n2) {
@@ -2176,8 +1582,8 @@ function q(t2, n2, e2, o3) {
2176
1582
  for (var a3 = [], u3 = 0; u3 < arguments.length; u3++) a3[u3] = arguments[u3];
2177
1583
  var h3 = void 0 === a3[o3] ? e2 : a3[o3], l3 = c2.call.apply(c2, r([this], a3, false));
2178
1584
  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;
1585
+ 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) {
1586
+ return 1 === n2 ? "number" == typeof h3 ? p2 : t3 : t3 + p2;
2181
1587
  }));
2182
1588
  return l3.map((function(t3, r2) {
2183
1589
  return i(t3, s2[r2]);
@@ -2186,8 +1592,8 @@ function q(t2, n2, e2, o3) {
2186
1592
  };
2187
1593
  }
2188
1594
  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);
1595
+ 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);
1596
+ return new ft(p2, f2);
2191
1597
  };
2192
1598
  var F = Math.sqrt;
2193
1599
  var U = Math.pow;
@@ -2225,7 +1631,7 @@ var et = function(t2, r2, n2, e2) {
2225
1631
  var i2 = Object.assign({}, { l: 1, c: 1 }, e2);
2226
1632
  return (function(t3, r3, n3, e3) {
2227
1633
  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);
1634
+ 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
1635
  return F(U(b2 / (n3 * g2), 2) + U(v2 / (e3 * w2), 2) + U(d2 / x2, 2));
2230
1636
  })(t2, r2, i2.l, i2.c);
2231
1637
  }
@@ -2235,7 +1641,7 @@ var et = function(t2, r2, n2, e2) {
2235
1641
  void 0 === n3 && (n3 = 1), void 0 === e3 && (e3 = 1), void 0 === o4 && (o4 = 1), void 0 === i3 && (i3 = "graphic");
2236
1642
  var a3 = "textiles" === i3 ? 0.048 : 0.045, u3 = "textiles" === i3 ? 0.014 : 0.015;
2237
1643
  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));
1644
+ 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
1645
  return F(U(d2 / (1 * n3), 2) + U(g2 / (e3 * m2), 2) + U(x2 / (o4 * M2), 2));
2240
1646
  })(t2, r2, u2.kL, u2.kC, u2.kH, u2.cate);
2241
1647
  }
@@ -2246,8 +1652,8 @@ var et = function(t2, r2, n2, e2) {
2246
1652
  var h2 = { kL: 1, kC: 1, kH: 1 }, c2 = Object.assign({}, h2, e2);
2247
1653
  return (function(t3, r3, n3, e3, o4) {
2248
1654
  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)));
1655
+ 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));
1656
+ 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
1657
  })(t2, r2, c2.kL, c2.kC, c2.kH);
2252
1658
  };
2253
1659
  var ot = function(t2, r2, n2) {
@@ -2296,7 +1702,7 @@ var lt = function(t2, r2) {
2296
1702
  if (c2 || (u2 = true), c2) {
2297
1703
  var l3 = c2[1].toLocaleLowerCase();
2298
1704
  if (e2 = l3, ut.has(l3) || (u2 = true), c2[2] && !u2) {
2299
- var p3 = c2[2], f2 = -1 !== p3.indexOf(",") ? "," : " ", s2 = p3.split(f2);
1705
+ var p2 = c2[2], f2 = -1 !== p2.indexOf(",") ? "," : " ", s2 = p2.split(f2);
2300
1706
  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
1707
  ["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
1708
  }
@@ -2327,13 +1733,13 @@ var ft = (function() {
2327
1733
  var a2 = (function(t3) {
2328
1734
  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
1735
  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) {
1736
+ "lch" === i3 && (i3 = (r3 = ["xyz", L(a3[0], a3[1], a3[2])])[0], a3 = r3[1]);
1737
+ var h3 = a3[0], c2 = a3[1], p2 = a3[2], f2 = a3[3];
1738
+ if ("cmyk" === i3) return [l2(h3, c2, p2, f2).map((function(t4) {
2333
1739
  return o2(t4, 0, 255);
2334
1740
  })), u3];
2335
1741
  var v2 = "".concat(i3, "2rgb");
2336
- if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p3).map((function(t4) {
1742
+ if ("function" == typeof n4[v2]) return [n4[v2](h3, c2, p2).map((function(t4) {
2337
1743
  return o2(t4, 0, 255);
2338
1744
  })), u3];
2339
1745
  throw new Error("Invalid color");
@@ -2460,7 +1866,7 @@ var wt = function(t2, r2, n2, e2) {
2460
1866
  return new ft(j(t2, r2, n2), e2);
2461
1867
  };
2462
1868
  var mt = function(t2, r2, n2, e2) {
2463
- return new ft(N.apply(void 0, L2(t2, r2, n2)), e2);
1869
+ return new ft(N.apply(void 0, L(t2, r2, n2)), e2);
2464
1870
  };
2465
1871
  function Mt(t2, r2, n2) {
2466
1872
  return new ft(t2, r2, n2);
@@ -2857,7 +2263,7 @@ function fnv1a(text) {
2857
2263
  function fingerprintComponentDigest(components) {
2858
2264
  if (!components || typeof components !== "object") return "";
2859
2265
  const parts = [];
2860
- for (const [name2, value] of Object.entries(components)) {
2266
+ for (const [name, value] of Object.entries(components)) {
2861
2267
  const timedOut = !!value && typeof value === "object" && value.timeout === "true";
2862
2268
  let text;
2863
2269
  try {
@@ -2865,7 +2271,7 @@ function fingerprintComponentDigest(components) {
2865
2271
  } catch {
2866
2272
  text = String(value);
2867
2273
  }
2868
- parts.push(`${name2}:${timedOut ? "timeout" : (fnv1a(text) >>> 16).toString(16).padStart(4, "0")}`);
2274
+ parts.push(`${name}:${timedOut ? "timeout" : (fnv1a(text) >>> 16).toString(16).padStart(4, "0")}`);
2869
2275
  }
2870
2276
  return parts.join(",");
2871
2277
  }