vega 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,89 +2,7 @@
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
3
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vega = {}));
5
- }(this, (function (exports) { 'use strict';
6
-
7
- var name = "vega";
8
- var version$1 = "5.21.0";
9
- var description = "The Vega visualization grammar.";
10
- var keywords$1 = [
11
- "vega",
12
- "visualization",
13
- "interaction",
14
- "dataflow",
15
- "library",
16
- "data",
17
- "d3"
18
- ];
19
- var license = "BSD-3-Clause";
20
- var author = "UW Interactive Data Lab (http://idl.cs.washington.edu)";
21
- var main = "build/vega-node.js";
22
- var module = "build/vega.module.js";
23
- var unpkg = "build/vega.min.js";
24
- var jsdelivr = "build/vega.min.js";
25
- var types = "index.d.ts";
26
- var repository = "vega/vega";
27
- var scripts = {
28
- bundle: "rollup -c --config-bundle",
29
- prebuild: "rimraf build && rimraf build-es5",
30
- build: "rollup -c --config-core --config-bundle --config-ie",
31
- postbuild: "node schema-copy",
32
- pretest: "yarn build --config-test",
33
- test: "TZ=America/Los_Angeles tape 'test/**/*-test.js'",
34
- prepublishOnly: "yarn test && yarn build",
35
- postpublish: "./schema-deploy.sh"
36
- };
37
- var dependencies = {
38
- "vega-crossfilter": "~4.0.5",
39
- "vega-dataflow": "~5.7.4",
40
- "vega-encode": "~4.8.3",
41
- "vega-event-selector": "~3.0.0",
42
- "vega-expression": "~5.0.0",
43
- "vega-force": "~4.0.7",
44
- "vega-format": "~1.0.4",
45
- "vega-functions": "~5.12.1",
46
- "vega-geo": "~4.3.8",
47
- "vega-hierarchy": "~4.0.9",
48
- "vega-label": "~1.1.0",
49
- "vega-loader": "~4.4.1",
50
- "vega-parser": "~6.1.4",
51
- "vega-projection": "~1.4.5",
52
- "vega-regression": "~1.0.9",
53
- "vega-runtime": "~6.1.3",
54
- "vega-scale": "~7.1.1",
55
- "vega-scenegraph": "~4.9.4",
56
- "vega-statistics": "~1.7.10",
57
- "vega-time": "~2.0.4",
58
- "vega-transforms": "~4.9.4",
59
- "vega-typings": "~0.22.0",
60
- "vega-util": "~1.17.0",
61
- "vega-view": "~5.10.1",
62
- "vega-view-transforms": "~4.5.8",
63
- "vega-voronoi": "~4.1.5",
64
- "vega-wordcloud": "~4.1.3"
65
- };
66
- var devDependencies = {
67
- "vega-schema": "*"
68
- };
69
- var gitHead = "774165e29850b66ec8b79ba52a7955f1ab936ea6";
70
- var pkg = {
71
- name: name,
72
- version: version$1,
73
- description: description,
74
- keywords: keywords$1,
75
- license: license,
76
- author: author,
77
- main: main,
78
- module: module,
79
- unpkg: unpkg,
80
- jsdelivr: jsdelivr,
81
- types: types,
82
- repository: repository,
83
- scripts: scripts,
84
- dependencies: dependencies,
85
- devDependencies: devDependencies,
86
- gitHead: gitHead
87
- };
5
+ })(this, (function (exports) { 'use strict';
88
6
 
89
7
  function accessor(fn, fields, name) {
90
8
  fn.fields = fields || [];
@@ -211,7 +129,8 @@
211
129
  const Info = 3;
212
130
  const Debug = 4;
213
131
 
214
- function logger(_, method, handler = log$1$1) {
132
+ function logger(_, method) {
133
+ let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : log$1$1;
215
134
  let level = _ || None$2;
216
135
  return {
217
136
  level(_) {
@@ -254,7 +173,11 @@
254
173
 
255
174
  const isLegalKey = key => key !== '__proto__';
256
175
 
257
- function mergeConfig(...configs) {
176
+ function mergeConfig() {
177
+ for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {
178
+ configs[_key] = arguments[_key];
179
+ }
180
+
258
181
  return configs.reduce((out, source) => {
259
182
  for (const key in source) {
260
183
  if (key === 'signals') {
@@ -437,12 +360,12 @@
437
360
  return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));
438
361
  }
439
362
 
440
- const ascending$3 = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;
363
+ const ascending$2 = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;
441
364
 
442
365
  const comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);
443
366
 
444
367
  const compare1 = (field, order) => function (a, b) {
445
- return ascending$3(field(a), field(b)) * order;
368
+ return ascending$2(field(a), field(b)) * order;
446
369
  };
447
370
 
448
371
  const compareN = (fields, orders, n) => {
@@ -455,7 +378,7 @@
455
378
 
456
379
  while (c === 0 && ++i < n) {
457
380
  f = fields[i];
458
- c = ascending$3(f(a), f(b));
381
+ c = ascending$2(f(a), f(b));
459
382
  }
460
383
 
461
384
  return c * orders[i];
@@ -1416,47 +1339,58 @@
1416
1339
  return arcs;
1417
1340
  }
1418
1341
 
1419
- function ascending$2 (a, b) {
1420
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
1342
+ function ascending$1(a, b) {
1343
+ return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
1421
1344
  }
1422
1345
 
1423
- function bisector$1 (f) {
1346
+ function bisector(f) {
1424
1347
  let delta = f;
1425
- let compare = f;
1348
+ let compare1 = f;
1349
+ let compare2 = f;
1426
1350
 
1427
- if (f.length === 1) {
1351
+ if (f.length !== 2) {
1428
1352
  delta = (d, x) => f(d) - x;
1429
1353
 
1430
- compare = ascendingComparator$1(f);
1354
+ compare1 = ascending$1;
1355
+
1356
+ compare2 = (d, x) => ascending$1(f(d), x);
1431
1357
  }
1432
1358
 
1433
- function left(a, x, lo, hi) {
1434
- if (lo == null) lo = 0;
1435
- if (hi == null) hi = a.length;
1359
+ function left(a, x) {
1360
+ let lo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1361
+ let hi = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : a.length;
1436
1362
 
1437
- while (lo < hi) {
1438
- const mid = lo + hi >>> 1;
1439
- if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;
1363
+ if (lo < hi) {
1364
+ if (compare1(x, x) !== 0) return hi;
1365
+
1366
+ do {
1367
+ const mid = lo + hi >>> 1;
1368
+ if (compare2(a[mid], x) < 0) lo = mid + 1;else hi = mid;
1369
+ } while (lo < hi);
1440
1370
  }
1441
1371
 
1442
1372
  return lo;
1443
1373
  }
1444
1374
 
1445
- function right(a, x, lo, hi) {
1446
- if (lo == null) lo = 0;
1447
- if (hi == null) hi = a.length;
1375
+ function right(a, x) {
1376
+ let lo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1377
+ let hi = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : a.length;
1448
1378
 
1449
- while (lo < hi) {
1450
- const mid = lo + hi >>> 1;
1451
- if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;
1379
+ if (lo < hi) {
1380
+ if (compare1(x, x) !== 0) return hi;
1381
+
1382
+ do {
1383
+ const mid = lo + hi >>> 1;
1384
+ if (compare2(a[mid], x) <= 0) lo = mid + 1;else hi = mid;
1385
+ } while (lo < hi);
1452
1386
  }
1453
1387
 
1454
1388
  return lo;
1455
1389
  }
1456
1390
 
1457
- function center(a, x, lo, hi) {
1458
- if (lo == null) lo = 0;
1459
- if (hi == null) hi = a.length;
1391
+ function center(a, x) {
1392
+ let lo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1393
+ let hi = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : a.length;
1460
1394
  const i = left(a, x, lo, hi - 1);
1461
1395
  return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
1462
1396
  }
@@ -1468,11 +1402,7 @@
1468
1402
  };
1469
1403
  }
1470
1404
 
1471
- function ascendingComparator$1(f) {
1472
- return (d, x) => ascending$2(f(d), x);
1473
- }
1474
-
1475
- function number$6 (x) {
1405
+ function number$6(x) {
1476
1406
  return x === null ? NaN : +x;
1477
1407
  }
1478
1408
  function* numbers$2(values, valueof) {
@@ -1493,10 +1423,10 @@
1493
1423
  }
1494
1424
  }
1495
1425
 
1496
- const ascendingBisect = bisector$1(ascending$2);
1426
+ const ascendingBisect = bisector(ascending$1);
1497
1427
  const bisectRight$1 = ascendingBisect.right;
1498
1428
  const bisectLeft$1 = ascendingBisect.left;
1499
- bisector$1(number$6).center;
1429
+ bisector(number$6).center;
1500
1430
  var bisect$1 = bisectRight$1;
1501
1431
 
1502
1432
  function variance(values, valueof) {
@@ -1588,14 +1518,136 @@
1588
1518
 
1589
1519
  }
1590
1520
 
1591
- function permute (source, keys) {
1521
+ class InternMap extends Map {
1522
+ constructor(entries) {
1523
+ let key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : keyof;
1524
+ super();
1525
+ Object.defineProperties(this, {
1526
+ _intern: {
1527
+ value: new Map()
1528
+ },
1529
+ _key: {
1530
+ value: key
1531
+ }
1532
+ });
1533
+ if (entries != null) for (const [key, value] of entries) this.set(key, value);
1534
+ }
1535
+
1536
+ get(key) {
1537
+ return super.get(intern_get(this, key));
1538
+ }
1539
+
1540
+ has(key) {
1541
+ return super.has(intern_get(this, key));
1542
+ }
1543
+
1544
+ set(key, value) {
1545
+ return super.set(intern_set(this, key), value);
1546
+ }
1547
+
1548
+ delete(key) {
1549
+ return super.delete(intern_delete(this, key));
1550
+ }
1551
+
1552
+ }
1553
+ class InternSet extends Set {
1554
+ constructor(values) {
1555
+ let key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : keyof;
1556
+ super();
1557
+ Object.defineProperties(this, {
1558
+ _intern: {
1559
+ value: new Map()
1560
+ },
1561
+ _key: {
1562
+ value: key
1563
+ }
1564
+ });
1565
+ if (values != null) for (const value of values) this.add(value);
1566
+ }
1567
+
1568
+ has(value) {
1569
+ return super.has(intern_get(this, value));
1570
+ }
1571
+
1572
+ add(value) {
1573
+ return super.add(intern_set(this, value));
1574
+ }
1575
+
1576
+ delete(value) {
1577
+ return super.delete(intern_delete(this, value));
1578
+ }
1579
+
1580
+ }
1581
+
1582
+ function intern_get(_ref, value) {
1583
+ let {
1584
+ _intern,
1585
+ _key
1586
+ } = _ref;
1587
+
1588
+ const key = _key(value);
1589
+
1590
+ return _intern.has(key) ? _intern.get(key) : value;
1591
+ }
1592
+
1593
+ function intern_set(_ref2, value) {
1594
+ let {
1595
+ _intern,
1596
+ _key
1597
+ } = _ref2;
1598
+
1599
+ const key = _key(value);
1600
+
1601
+ if (_intern.has(key)) return _intern.get(key);
1602
+
1603
+ _intern.set(key, value);
1604
+
1605
+ return value;
1606
+ }
1607
+
1608
+ function intern_delete(_ref3, value) {
1609
+ let {
1610
+ _intern,
1611
+ _key
1612
+ } = _ref3;
1613
+
1614
+ const key = _key(value);
1615
+
1616
+ if (_intern.has(key)) {
1617
+ value = _intern.get(key);
1618
+
1619
+ _intern.delete(key);
1620
+ }
1621
+
1622
+ return value;
1623
+ }
1624
+
1625
+ function keyof(value) {
1626
+ return value !== null && typeof value === "object" ? value.valueOf() : value;
1627
+ }
1628
+
1629
+ function permute(source, keys) {
1592
1630
  return Array.from(keys, key => source[key]);
1593
1631
  }
1594
1632
 
1633
+ function compareDefined() {
1634
+ let compare = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ascending$1;
1635
+ if (compare === ascending$1) return ascendingDefined;
1636
+ if (typeof compare !== "function") throw new TypeError("compare is not a function");
1637
+ return (a, b) => {
1638
+ const x = compare(a, b);
1639
+ if (x || x === 0) return x;
1640
+ return (compare(b, b) === 0) - (compare(a, a) === 0);
1641
+ };
1642
+ }
1643
+ function ascendingDefined(a, b) {
1644
+ return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);
1645
+ }
1646
+
1595
1647
  var e10 = Math.sqrt(50),
1596
1648
  e5 = Math.sqrt(10),
1597
1649
  e2 = Math.sqrt(2);
1598
- function ticks (start, stop, count) {
1650
+ function ticks(start, stop, count) {
1599
1651
  var reverse,
1600
1652
  i = -1,
1601
1653
  n,
@@ -1688,7 +1740,12 @@
1688
1740
 
1689
1741
  // ISC license, Copyright 2018 Vladimir Agafonkin.
1690
1742
 
1691
- function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending$2) {
1743
+ function quickselect(array, k) {
1744
+ let left = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1745
+ let right = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : array.length - 1;
1746
+ let compare = arguments.length > 4 ? arguments[4] : undefined;
1747
+ compare = compare === undefined ? ascendingDefined : compareDefined(compare);
1748
+
1692
1749
  while (right > left) {
1693
1750
  if (right - left > 600) {
1694
1751
  const n = right - left + 1;
@@ -1741,7 +1798,8 @@
1741
1798
  value1 = min$2(values.subarray(i0 + 1));
1742
1799
  return value0 + (value1 - value0) * (i - i0);
1743
1800
  }
1744
- function quantileSorted(values, p, valueof = number$6) {
1801
+ function quantileSorted(values, p) {
1802
+ let valueof = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : number$6;
1745
1803
  if (!(n = values.length)) return;
1746
1804
  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
1747
1805
  if (p >= 1) return +valueof(values[n - 1], n - 1, values);
@@ -1776,7 +1834,7 @@
1776
1834
  if (count) return sum / count;
1777
1835
  }
1778
1836
 
1779
- function median (values, valueof) {
1837
+ function median(values, valueof) {
1780
1838
  return quantile$1(values, 0.5, valueof);
1781
1839
  }
1782
1840
 
@@ -1790,7 +1848,7 @@
1790
1848
  return Array.from(flatten(arrays));
1791
1849
  }
1792
1850
 
1793
- function range$1$1 (start, stop, step) {
1851
+ function range$3(start, stop, step) {
1794
1852
  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
1795
1853
  var i = -1,
1796
1854
  n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
@@ -1803,7 +1861,7 @@
1803
1861
  return range;
1804
1862
  }
1805
1863
 
1806
- function sum(values, valueof) {
1864
+ function sum$1(values, valueof) {
1807
1865
  let sum = 0;
1808
1866
 
1809
1867
  if (valueof === undefined) {
@@ -1825,6 +1883,46 @@
1825
1883
  return sum;
1826
1884
  }
1827
1885
 
1886
+ function intersection(values) {
1887
+ for (var _len = arguments.length, others = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1888
+ others[_key - 1] = arguments[_key];
1889
+ }
1890
+
1891
+ values = new InternSet(values);
1892
+ others = others.map(set$4);
1893
+
1894
+ out: for (const value of values) {
1895
+ for (const other of others) {
1896
+ if (!other.has(value)) {
1897
+ values.delete(value);
1898
+ continue out;
1899
+ }
1900
+ }
1901
+ }
1902
+
1903
+ return values;
1904
+ }
1905
+
1906
+ function set$4(values) {
1907
+ return values instanceof InternSet ? values : new InternSet(values);
1908
+ }
1909
+
1910
+ function union() {
1911
+ const set = new InternSet();
1912
+
1913
+ for (var _len = arguments.length, others = new Array(_len), _key = 0; _key < _len; _key++) {
1914
+ others[_key] = arguments[_key];
1915
+ }
1916
+
1917
+ for (const other of others) {
1918
+ for (const o of other) {
1919
+ set.add(o);
1920
+ }
1921
+ }
1922
+
1923
+ return set;
1924
+ }
1925
+
1828
1926
  function formatDecimal (x) {
1829
1927
  return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);
1830
1928
  } // Computes the decimal coefficient and exponent of the specified number x with
@@ -2427,7 +2525,10 @@
2427
2525
 
2428
2526
  function tickInterval(start, stop, count) {
2429
2527
  const target = Math.abs(stop - start) / count;
2430
- const i = bisector$1(([,, step]) => step).right(tickIntervals, target);
2528
+ const i = bisector(_ref => {
2529
+ let [,, step] = _ref;
2530
+ return step;
2531
+ }).right(tickIntervals, target);
2431
2532
  if (i === tickIntervals.length) return year.every(tickStep(start / durationYear$1, stop / durationYear$1, count));
2432
2533
  if (i === 0) return utcMillisecond.every(Math.max(tickStep(start, stop, count), 1));
2433
2534
  const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
@@ -2463,13 +2564,13 @@
2463
2564
  if (has$1(UNITS, unit)) {
2464
2565
  m[unit] = 1;
2465
2566
  } else {
2466
- error(`Invalid time unit: ${unit}.`);
2567
+ error("Invalid time unit: ".concat(unit, "."));
2467
2568
  }
2468
2569
  });
2469
2570
  const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);
2470
2571
 
2471
2572
  if (numTypes > 1) {
2472
- error(`Incompatible time units: ${units}`);
2573
+ error("Incompatible time units: ".concat(units));
2473
2574
  } // ensure proper sort order
2474
2575
 
2475
2576
 
@@ -2489,9 +2590,9 @@
2489
2590
  [MINUTES]: '00:%M',
2490
2591
  [SECONDS]: ':%S',
2491
2592
  [MILLISECONDS]: '.%L',
2492
- [`${YEAR}-${MONTH}`]: '%Y-%m ',
2493
- [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',
2494
- [`${HOURS}-${MINUTES}`]: '%H:%M'
2593
+ ["".concat(YEAR, "-").concat(MONTH)]: '%Y-%m ',
2594
+ ["".concat(YEAR, "-").concat(MONTH, "-").concat(DATE)]: '%Y-%m-%d ',
2595
+ ["".concat(HOURS, "-").concat(MINUTES)]: '%H:%M'
2495
2596
  };
2496
2597
 
2497
2598
  function timeUnitSpecifier(units, specifiers) {
@@ -2754,7 +2855,7 @@
2754
2855
  const ext = opt.extent,
2755
2856
  max = opt.maxbins || 40,
2756
2857
  target = Math.abs(span(ext)) / max;
2757
- let i = bisector$1(i => i[2]).right(intervals, target),
2858
+ let i = bisector(i => i[2]).right(intervals, target),
2758
2859
  units,
2759
2860
  step;
2760
2861
 
@@ -3637,7 +3738,7 @@
3637
3738
  spec = spec || {};
3638
3739
 
3639
3740
  if (!isObject(spec)) {
3640
- error(`Invalid time multi-format specifier: ${spec}`);
3741
+ error("Invalid time multi-format specifier: ".concat(spec));
3641
3742
  }
3642
3743
 
3643
3744
  const second = interval(SECONDS),
@@ -4034,12 +4135,12 @@
4034
4135
  const reader = formats$1(schema.type || 'json');
4035
4136
  if (!reader) error('Unknown data format type: ' + schema.type);
4036
4137
  data = reader(data, schema);
4037
- if (schema.parse) parse$5(data, schema.parse, timeParser, utcParser);
4138
+ if (schema.parse) parse$6(data, schema.parse, timeParser, utcParser);
4038
4139
  if (has$1(data, 'columns')) delete data.columns;
4039
4140
  return data;
4040
4141
  }
4041
4142
 
4042
- function parse$5(data, types, timeParser, utcParser) {
4143
+ function parse$6(data, types, timeParser, utcParser) {
4043
4144
  if (!data.length) return; // early exit for empty data
4044
4145
 
4045
4146
  const locale = timeFormatDefaultLocale();
@@ -4601,7 +4702,7 @@
4601
4702
  * this flag determines if the operator registers itself as a listener on
4602
4703
  * any upstream operators included in the parameters.
4603
4704
  * @param {boolean} [initonly=false] - A flag indicating if this operator
4604
- * should calculate an update only upon its initiatal evaluation, then
4705
+ * should calculate an update only upon its initial evaluation, then
4605
4706
  * deregister dependencies and suppress all future update invocations.
4606
4707
  * @return {Operator[]} - An array of upstream dependencies.
4607
4708
  */
@@ -5002,7 +5103,7 @@
5002
5103
  return s;
5003
5104
  }
5004
5105
 
5005
- function parse$4(data, format) {
5106
+ function parse$5(data, format) {
5006
5107
  const locale = this.locale();
5007
5108
  return read(data, format, locale.timeParse, locale.utcParse);
5008
5109
  }
@@ -5829,7 +5930,7 @@
5829
5930
 
5830
5931
  df._input = {};
5831
5932
  df._pulse = null;
5832
- df.debug(`Pulse ${stamp}: ${count} operators`);
5933
+ df.debug("Pulse ".concat(stamp, ": ").concat(count, " operators"));
5833
5934
 
5834
5935
  if (error) {
5835
5936
  df._postrun = [];
@@ -6323,7 +6424,7 @@
6323
6424
  changeset,
6324
6425
  // DATA LOADING
6325
6426
  ingest,
6326
- parse: parse$4,
6427
+ parse: parse$5,
6327
6428
  preload,
6328
6429
  request,
6329
6430
  // EVENT HANDLING
@@ -6441,7 +6542,7 @@
6441
6542
  const values = Float64Array.from(numbers$1(array, f)); // don't depend on return value from typed array sort call
6442
6543
  // protects against undefined sort results in Safari (vega/vega-lite#4964)
6443
6544
 
6444
- values.sort(ascending$2);
6545
+ values.sort(ascending$1);
6445
6546
  return p.map(_ => quantileSorted(values, _));
6446
6547
  }
6447
6548
 
@@ -6541,7 +6642,7 @@
6541
6642
  mu[j] = a / n;
6542
6643
  }
6543
6644
 
6544
- mu.sort(ascending$2);
6645
+ mu.sort(ascending$1);
6545
6646
  return [quantile$1(mu, alpha / 2), quantile$1(mu, 1 - alpha / 2)];
6546
6647
  } // Dot density binning for dot plot construction.
6547
6648
  // Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.
@@ -7494,7 +7595,7 @@
7494
7595
  }
7495
7596
 
7496
7597
  const maxiters = 2,
7497
- epsilon$5 = 1e-12; // Adapted from science.js by Jason Davies
7598
+ epsilon$6 = 1e-12; // Adapted from science.js by Jason Davies
7498
7599
  // Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js
7499
7600
  // License: https://github.com/jasondavies/science.js/blob/master/LICENSE
7500
7601
 
@@ -7546,13 +7647,13 @@
7546
7647
  }
7547
7648
 
7548
7649
  const medianResidual = median(residuals);
7549
- if (Math.abs(medianResidual) < epsilon$5) break;
7650
+ if (Math.abs(medianResidual) < epsilon$6) break;
7550
7651
 
7551
7652
  for (let i = 0, arg, w; i < n; ++i) {
7552
7653
  arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations
7553
7654
  // keeping weights tiny but non-zero prevents singularites
7554
7655
 
7555
- robustWeights[i] = arg >= 1 ? epsilon$5 : (w = 1 - arg * arg) * w;
7656
+ robustWeights[i] = arg >= 1 ? epsilon$6 : (w = 1 - arg * arg) * w;
7556
7657
  }
7557
7658
  }
7558
7659
 
@@ -8963,7 +9064,7 @@
8963
9064
  * @return {object} - The output distribution object.
8964
9065
  */
8965
9066
 
8966
- function parse$3(def, data) {
9067
+ function parse$4(def, data) {
8967
9068
  const func = def[FUNCTION];
8968
9069
 
8969
9070
  if (!has$1(Distributions, func)) {
@@ -8978,7 +9079,7 @@
8978
9079
  d.data((def.from || data()).map(def[name]));
8979
9080
  } // if distribution mixture, recurse to parse each definition
8980
9081
  else if (name === DISTRIBUTIONS) {
8981
- d[name](def[name].map(_ => parse$3(_, data)));
9082
+ d[name](def[name].map(_ => parse$4(_, data)));
8982
9083
  } // otherwise, simply set the parameter
8983
9084
  else if (typeof d[name] === FUNCTION) {
8984
9085
  d[name](def[name]);
@@ -9130,7 +9231,7 @@
9130
9231
  const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);
9131
9232
 
9132
9233
  if (!this.value || pulse.changed() || _.modified()) {
9133
- const dist = parse$3(_.distribution, source$1(pulse)),
9234
+ const dist = parse$4(_.distribution, source$1(pulse)),
9134
9235
  minsteps = _.steps || _.minsteps || 25,
9135
9236
  maxsteps = _.steps || _.maxsteps || 200;
9136
9237
  let method = _.method || 'pdf';
@@ -9353,8 +9454,8 @@
9353
9454
 
9354
9455
  if (!Number.isFinite(min) || !Number.isFinite(max)) {
9355
9456
  let name = accessorName(field);
9356
- if (name) name = ` for field "${name}"`;
9357
- pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);
9457
+ if (name) name = " for field \"".concat(name, "\"");
9458
+ pulse.dataflow.warn("Infinite extent".concat(name, ": [").concat(min, ", ").concat(max, "]"));
9358
9459
  min = max = undefined;
9359
9460
  }
9360
9461
 
@@ -10665,7 +10766,7 @@
10665
10766
  list.push(k);
10666
10767
  }
10667
10768
  });
10668
- list.sort(ascending$3);
10769
+ list.sort(ascending$2);
10669
10770
  return limit ? list.slice(0, limit) : list;
10670
10771
  }
10671
10772
  /**
@@ -10882,7 +10983,7 @@
10882
10983
  names = (_.groupby || []).map(accessorName),
10883
10984
  values = [],
10884
10985
  step = _.step || 0.01,
10885
- p = _.probs || range$1$1(step / 2, 1 - EPSILON$2, step),
10986
+ p = _.probs || range$3(step / 2, 1 - EPSILON$2, step),
10886
10987
  n = p.length;
10887
10988
  groups.forEach(g => {
10888
10989
  const q = quantiles(g, p);
@@ -11116,7 +11217,7 @@
11116
11217
  const out = pulse.materialize().fork(pulse.MOD),
11117
11218
  as = _.as || 'data';
11118
11219
  out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;
11119
- this.value = range$1$1(_.start, _.stop, _.step || 1).map(v => {
11220
+ this.value = range$3(_.start, _.stop, _.step || 1).map(v => {
11120
11221
  const t = {};
11121
11222
  t[as] = v;
11122
11223
  return ingest$1(t);
@@ -11216,7 +11317,7 @@
11216
11317
  max = floor.stop || -Infinity,
11217
11318
  flag = pulse.ADD;
11218
11319
 
11219
- if (_.modified() || pulse.modified(accessorFields(field))) {
11320
+ if (_.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(field))) {
11220
11321
  pulse = pulse.reflow(true);
11221
11322
  flag = pulse.SOURCE;
11222
11323
  min = Infinity;
@@ -11751,7 +11852,7 @@
11751
11852
  data = list.data(cmp),
11752
11853
  // use cmp for stable sort
11753
11854
  n = data.length,
11754
- b = range ? bisector$1(sort) : null,
11855
+ b = range ? bisector(sort) : null,
11755
11856
  w = {
11756
11857
  i0: 0,
11757
11858
  i1: 0,
@@ -11835,8 +11936,8 @@
11835
11936
 
11836
11937
  const pi$3 = Math.PI,
11837
11938
  tau$3 = 2 * pi$3,
11838
- epsilon$4 = 1e-6,
11839
- tauEpsilon = tau$3 - epsilon$4;
11939
+ epsilon$5 = 1e-6,
11940
+ tauEpsilon = tau$3 - epsilon$5;
11840
11941
 
11841
11942
  function Path$1() {
11842
11943
  this._x0 = this._y0 = // start of current subpath
@@ -11884,10 +11985,10 @@
11884
11985
  if (this._x1 === null) {
11885
11986
  this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
11886
11987
  } // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
11887
- else if (!(l01_2 > epsilon$4)) ; // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
11988
+ else if (!(l01_2 > epsilon$5)) ; // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
11888
11989
  // Equivalently, is (x1,y1) coincident with (x2,y2)?
11889
11990
  // Or, is the radius zero? Line to (x1,y1).
11890
- else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$4) || !r) {
11991
+ else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$5) || !r) {
11891
11992
  this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
11892
11993
  } // Otherwise, draw an arc!
11893
11994
  else {
@@ -11901,7 +12002,7 @@
11901
12002
  t01 = l / l01,
11902
12003
  t21 = l / l21; // If the start tangent is not coincident with (x0,y0), line to.
11903
12004
 
11904
- if (Math.abs(t01 - 1) > epsilon$4) {
12005
+ if (Math.abs(t01 - 1) > epsilon$5) {
11905
12006
  this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
11906
12007
  }
11907
12008
 
@@ -11922,7 +12023,7 @@
11922
12023
  if (this._x1 === null) {
11923
12024
  this._ += "M" + x0 + "," + y0;
11924
12025
  } // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
11925
- else if (Math.abs(this._x1 - x0) > epsilon$4 || Math.abs(this._y1 - y0) > epsilon$4) {
12026
+ else if (Math.abs(this._x1 - x0) > epsilon$5 || Math.abs(this._y1 - y0) > epsilon$5) {
11926
12027
  this._ += "L" + x0 + "," + y0;
11927
12028
  } // Is this arc empty? We’re done.
11928
12029
 
@@ -11934,7 +12035,7 @@
11934
12035
  if (da > tauEpsilon) {
11935
12036
  this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
11936
12037
  } // Is this arc non-empty? Draw an arc!
11937
- else if (da > epsilon$4) {
12038
+ else if (da > epsilon$5) {
11938
12039
  this._ += "A" + r + "," + r + ",0," + +(da >= pi$3) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
11939
12040
  }
11940
12041
  },
@@ -11952,17 +12053,17 @@
11952
12053
  };
11953
12054
  }
11954
12055
 
11955
- var abs$2 = Math.abs;
11956
- var atan2$1 = Math.atan2;
11957
- var cos$2 = Math.cos;
11958
- var max$1 = Math.max;
11959
- var min$1 = Math.min;
11960
- var sin$2 = Math.sin;
11961
- var sqrt$3 = Math.sqrt;
11962
- var epsilon$3 = 1e-12;
11963
- var pi$2 = Math.PI;
11964
- var halfPi$2 = pi$2 / 2;
11965
- var tau$2 = 2 * pi$2;
12056
+ const abs$2 = Math.abs;
12057
+ const atan2$1 = Math.atan2;
12058
+ const cos$2 = Math.cos;
12059
+ const max$1 = Math.max;
12060
+ const min$1 = Math.min;
12061
+ const sin$2 = Math.sin;
12062
+ const sqrt$3 = Math.sqrt;
12063
+ const epsilon$4 = 1e-12;
12064
+ const pi$2 = Math.PI;
12065
+ const halfPi$2 = pi$2 / 2;
12066
+ const tau$2 = 2 * pi$2;
11966
12067
  function acos$1(x) {
11967
12068
  return x > 1 ? 0 : x < -1 ? pi$2 : Math.acos(x);
11968
12069
  }
@@ -11996,7 +12097,7 @@
11996
12097
  x32 = x3 - x2,
11997
12098
  y32 = y3 - y2,
11998
12099
  t = y32 * x10 - x32 * y10;
11999
- if (t * t < epsilon$3) return;
12100
+ if (t * t < epsilon$4) return;
12000
12101
  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
12001
12102
  return [x0 + t * x10, y0 + t * y10];
12002
12103
  } // Compute perpendicular offset line of length rc.
@@ -12065,12 +12166,12 @@
12065
12166
 
12066
12167
  if (r1 < r0) r = r1, r1 = r0, r0 = r; // Is it a point?
12067
12168
 
12068
- if (!(r1 > epsilon$3)) context.moveTo(0, 0); // Or is it a circle or annulus?
12069
- else if (da > tau$2 - epsilon$3) {
12169
+ if (!(r1 > epsilon$4)) context.moveTo(0, 0); // Or is it a circle or annulus?
12170
+ else if (da > tau$2 - epsilon$4) {
12070
12171
  context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
12071
12172
  context.arc(0, 0, r1, a0, a1, !cw);
12072
12173
 
12073
- if (r0 > epsilon$3) {
12174
+ if (r0 > epsilon$4) {
12074
12175
  context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
12075
12176
  context.arc(0, 0, r0, a1, a0, cw);
12076
12177
  }
@@ -12083,18 +12184,18 @@
12083
12184
  da0 = da,
12084
12185
  da1 = da,
12085
12186
  ap = padAngle.apply(this, arguments) / 2,
12086
- rp = ap > epsilon$3 && (padRadius ? +padRadius.apply(this, arguments) : sqrt$3(r0 * r0 + r1 * r1)),
12187
+ rp = ap > epsilon$4 && (padRadius ? +padRadius.apply(this, arguments) : sqrt$3(r0 * r0 + r1 * r1)),
12087
12188
  rc = min$1(abs$2(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
12088
12189
  rc0 = rc,
12089
12190
  rc1 = rc,
12090
12191
  t0,
12091
12192
  t1; // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
12092
12193
 
12093
- if (rp > epsilon$3) {
12194
+ if (rp > epsilon$4) {
12094
12195
  var p0 = asin$2(rp / r0 * sin$2(ap)),
12095
12196
  p1 = asin$2(rp / r1 * sin$2(ap));
12096
- if ((da0 -= p0 * 2) > epsilon$3) p0 *= cw ? 1 : -1, a00 += p0, a10 -= p0;else da0 = 0, a00 = a10 = (a0 + a1) / 2;
12097
- if ((da1 -= p1 * 2) > epsilon$3) p1 *= cw ? 1 : -1, a01 += p1, a11 -= p1;else da1 = 0, a01 = a11 = (a0 + a1) / 2;
12197
+ if ((da0 -= p0 * 2) > epsilon$4) p0 *= cw ? 1 : -1, a00 += p0, a10 -= p0;else da0 = 0, a00 = a10 = (a0 + a1) / 2;
12198
+ if ((da1 -= p1 * 2) > epsilon$4) p1 *= cw ? 1 : -1, a01 += p1, a11 -= p1;else da1 = 0, a01 = a11 = (a0 + a1) / 2;
12098
12199
  }
12099
12200
 
12100
12201
  var x01 = r1 * cos$2(a01),
@@ -12102,7 +12203,7 @@
12102
12203
  x10 = r0 * cos$2(a10),
12103
12204
  y10 = r0 * sin$2(a10); // Apply rounded corners?
12104
12205
 
12105
- if (rc > epsilon$3) {
12206
+ if (rc > epsilon$4) {
12106
12207
  var x11 = r1 * cos$2(a11),
12107
12208
  y11 = r1 * sin$2(a11),
12108
12209
  x00 = r0 * cos$2(a00),
@@ -12122,8 +12223,8 @@
12122
12223
  } // Is the sector collapsed to a line?
12123
12224
 
12124
12225
 
12125
- if (!(da1 > epsilon$3)) context.moveTo(x01, y01); // Does the sector’s outer ring have rounded corners?
12126
- else if (rc1 > epsilon$3) {
12226
+ if (!(da1 > epsilon$4)) context.moveTo(x01, y01); // Does the sector’s outer ring have rounded corners?
12227
+ else if (rc1 > epsilon$4) {
12127
12228
  t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
12128
12229
  t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
12129
12230
  context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged?
@@ -12138,8 +12239,8 @@
12138
12239
  else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); // Is there no inner ring, and it’s a circular sector?
12139
12240
  // Or perhaps it’s an annular sector collapsed due to padding?
12140
12241
 
12141
- if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10); // Does the sector’s inner ring (or point) have rounded corners?
12142
- else if (rc0 > epsilon$3) {
12242
+ if (!(r0 > epsilon$4) || !(da0 > epsilon$4)) context.lineTo(x10, y10); // Does the sector’s inner ring (or point) have rounded corners?
12243
+ else if (rc0 > epsilon$4) {
12143
12244
  t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
12144
12245
  t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
12145
12246
  context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged?
@@ -12232,7 +12333,7 @@
12232
12333
 
12233
12334
  case 1:
12234
12335
  this._point = 2;
12235
- // proceed
12336
+ // falls through
12236
12337
 
12237
12338
  default:
12238
12339
  this._context.lineTo(x, y);
@@ -12408,20 +12509,21 @@
12408
12509
  }
12409
12510
 
12410
12511
  var circle$1 = {
12411
- draw: function (context, size) {
12412
- var r = Math.sqrt(size / pi$2);
12512
+ draw(context, size) {
12513
+ const r = sqrt$3(size / pi$2);
12413
12514
  context.moveTo(r, 0);
12414
12515
  context.arc(0, 0, r, 0, tau$2);
12415
12516
  }
12517
+
12416
12518
  };
12417
12519
 
12418
- function symbol$2 (type, size) {
12419
- var context = null;
12520
+ function Symbol$1(type, size) {
12521
+ let context = null;
12420
12522
  type = typeof type === "function" ? type : constant$3(type || circle$1);
12421
12523
  size = typeof size === "function" ? size : constant$3(size === undefined ? 64 : +size);
12422
12524
 
12423
12525
  function symbol() {
12424
- var buffer;
12526
+ let buffer;
12425
12527
  if (!context) context = buffer = path$3();
12426
12528
  type.apply(this, arguments).draw(context, +size.apply(this, arguments));
12427
12529
  if (buffer) return context = null, buffer + "" || null;
@@ -12465,7 +12567,7 @@
12465
12567
  switch (this._point) {
12466
12568
  case 3:
12467
12569
  point$5(this, this._x1, this._y1);
12468
- // proceed
12570
+ // falls through
12469
12571
 
12470
12572
  case 2:
12471
12573
  this._context.lineTo(this._x1, this._y1);
@@ -12494,7 +12596,7 @@
12494
12596
 
12495
12597
  this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6);
12496
12598
 
12497
- // proceed
12599
+ // falls through
12498
12600
 
12499
12601
  default:
12500
12602
  point$5(this, x, y);
@@ -12626,7 +12728,7 @@
12626
12728
 
12627
12729
  case 3:
12628
12730
  this._point = 4;
12629
- // proceed
12731
+ // falls through
12630
12732
 
12631
12733
  default:
12632
12734
  point$5(this, x, y);
@@ -12744,7 +12846,7 @@
12744
12846
 
12745
12847
  case 2:
12746
12848
  this._point = 3;
12747
- // proceed
12849
+ // falls through
12748
12850
 
12749
12851
  default:
12750
12852
  point$4(this, x, y);
@@ -12887,7 +12989,7 @@
12887
12989
 
12888
12990
  case 3:
12889
12991
  this._point = 4;
12890
- // proceed
12992
+ // falls through
12891
12993
 
12892
12994
  default:
12893
12995
  point$4(this, x, y);
@@ -12916,14 +13018,14 @@
12916
13018
  x2 = that._x2,
12917
13019
  y2 = that._y2;
12918
13020
 
12919
- if (that._l01_a > epsilon$3) {
13021
+ if (that._l01_a > epsilon$4) {
12920
13022
  var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
12921
13023
  n = 3 * that._l01_a * (that._l01_a + that._l12_a);
12922
13024
  x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
12923
13025
  y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
12924
13026
  }
12925
13027
 
12926
- if (that._l23_a > epsilon$3) {
13028
+ if (that._l23_a > epsilon$4) {
12927
13029
  var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
12928
13030
  m = 3 * that._l23_a * (that._l23_a + that._l12_a);
12929
13031
  x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
@@ -12985,7 +13087,7 @@
12985
13087
 
12986
13088
  case 2:
12987
13089
  this._point = 3;
12988
- // proceed
13090
+ // falls through
12989
13091
 
12990
13092
  default:
12991
13093
  point$3(this, x, y);
@@ -13146,7 +13248,7 @@
13146
13248
 
13147
13249
  case 3:
13148
13250
  this._point = 4;
13149
- // proceed
13251
+ // falls through
13150
13252
 
13151
13253
  default:
13152
13254
  point$3(this, x, y);
@@ -13431,7 +13533,7 @@
13431
13533
 
13432
13534
  case 1:
13433
13535
  this._point = 2;
13434
- // proceed
13536
+ // falls through
13435
13537
 
13436
13538
  default:
13437
13539
  {
@@ -13520,31 +13622,29 @@
13520
13622
 
13521
13623
  const implicit = Symbol("implicit");
13522
13624
  function ordinal() {
13523
- var index = new Map(),
13625
+ var index = new InternMap(),
13524
13626
  domain = [],
13525
13627
  range = [],
13526
13628
  unknown = implicit;
13527
13629
 
13528
13630
  function scale(d) {
13529
- var key = d + "",
13530
- i = index.get(key);
13631
+ let i = index.get(d);
13531
13632
 
13532
- if (!i) {
13633
+ if (i === undefined) {
13533
13634
  if (unknown !== implicit) return unknown;
13534
- index.set(key, i = domain.push(d));
13635
+ index.set(d, i = domain.push(d) - 1);
13535
13636
  }
13536
13637
 
13537
- return range[(i - 1) % range.length];
13638
+ return range[i % range.length];
13538
13639
  }
13539
13640
 
13540
13641
  scale.domain = function (_) {
13541
13642
  if (!arguments.length) return domain.slice();
13542
- domain = [], index = new Map();
13643
+ domain = [], index = new InternMap();
13543
13644
 
13544
13645
  for (const value of _) {
13545
- const key = value + "";
13546
- if (index.has(key)) continue;
13547
- index.set(key, domain.push(value));
13646
+ if (index.has(value)) continue;
13647
+ index.set(value, domain.push(value) - 1);
13548
13648
  }
13549
13649
 
13550
13650
  return scale;
@@ -14027,13 +14127,13 @@
14027
14127
  }));
14028
14128
 
14029
14129
  var A = -0.14861,
14030
- B = +1.78277,
14130
+ B$1 = +1.78277,
14031
14131
  C$1 = -0.29227,
14032
- D = -0.90649,
14132
+ D$1 = -0.90649,
14033
14133
  E = +1.97294,
14034
- ED = E * D,
14035
- EB = E * B,
14036
- BC_DA = B * C$1 - D * A;
14134
+ ED = E * D$1,
14135
+ EB = E * B$1,
14136
+ BC_DA = B$1 * C$1 - D$1 * A;
14037
14137
 
14038
14138
  function cubehelixConvert(o) {
14039
14139
  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
@@ -14043,7 +14143,7 @@
14043
14143
  b = o.b / 255,
14044
14144
  l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
14045
14145
  bl = b - l,
14046
- k = (E * (g - l) - C$1 * bl) / D,
14146
+ k = (E * (g - l) - C$1 * bl) / D$1,
14047
14147
  s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),
14048
14148
  // NaN if l=0 or l=1
14049
14149
  h = s ? Math.atan2(k, bl) * degrees$2 - 120 : NaN;
@@ -14074,7 +14174,7 @@
14074
14174
  a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
14075
14175
  cosh = Math.cos(h),
14076
14176
  sinh = Math.sin(h);
14077
- return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C$1 * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);
14177
+ return new Rgb(255 * (l + a * (A * cosh + B$1 * sinh)), 255 * (l + a * (C$1 * cosh + D$1 * sinh)), 255 * (l + a * (E * cosh)), this.opacity);
14078
14178
  }
14079
14179
  }));
14080
14180
 
@@ -14701,7 +14801,7 @@
14701
14801
  return x;
14702
14802
  }
14703
14803
 
14704
- function normalize(a, b) {
14804
+ function normalize$1(a, b) {
14705
14805
  return (b -= a = +a) ? function (x) {
14706
14806
  return (x - a) / b;
14707
14807
  } : constants(isNaN(b) ? NaN : 0.5);
@@ -14722,7 +14822,7 @@
14722
14822
  d1 = domain[1],
14723
14823
  r0 = range[0],
14724
14824
  r1 = range[1];
14725
- if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
14825
+ if (d1 < d0) d0 = normalize$1(d1, d0), r0 = interpolate(r1, r0);else d0 = normalize$1(d0, d1), r0 = interpolate(r0, r1);
14726
14826
  return function (x) {
14727
14827
  return r0(d0(x));
14728
14828
  };
@@ -14740,7 +14840,7 @@
14740
14840
  }
14741
14841
 
14742
14842
  while (++i < j) {
14743
- d[i] = normalize(domain[i], domain[i + 1]);
14843
+ d[i] = normalize$1(domain[i], domain[i + 1]);
14744
14844
  r[i] = interpolate(range[i], range[i + 1]);
14745
14845
  }
14746
14846
 
@@ -14977,29 +15077,23 @@
14977
15077
  }
14978
15078
 
14979
15079
  function powp(base) {
14980
- return base === 10 ? pow10 : base === Math.E ? Math.exp : function (x) {
14981
- return Math.pow(base, x);
14982
- };
15080
+ return base === 10 ? pow10 : base === Math.E ? Math.exp : x => Math.pow(base, x);
14983
15081
  }
14984
15082
 
14985
15083
  function logp(base) {
14986
- return base === Math.E ? Math.log : base === 10 && Math.log10 || base === 2 && Math.log2 || (base = Math.log(base), function (x) {
14987
- return Math.log(x) / base;
14988
- });
15084
+ return base === Math.E ? Math.log : base === 10 && Math.log10 || base === 2 && Math.log2 || (base = Math.log(base), x => Math.log(x) / base);
14989
15085
  }
14990
15086
 
14991
15087
  function reflect(f) {
14992
- return function (x) {
14993
- return -f(-x);
14994
- };
15088
+ return (x, k) => -f(-x, k);
14995
15089
  }
14996
15090
 
14997
15091
  function loggish(transform) {
14998
- var scale = transform(transformLog, transformExp),
14999
- domain = scale.domain,
15000
- base = 10,
15001
- logs,
15002
- pows;
15092
+ const scale = transform(transformLog, transformExp);
15093
+ const domain = scale.domain;
15094
+ let base = 10;
15095
+ let logs;
15096
+ let pows;
15003
15097
 
15004
15098
  function rescale() {
15005
15099
  logs = logp(base), pows = powp(base);
@@ -15022,32 +15116,31 @@
15022
15116
  return arguments.length ? (domain(_), rescale()) : domain();
15023
15117
  };
15024
15118
 
15025
- scale.ticks = function (count) {
15026
- var d = domain(),
15027
- u = d[0],
15028
- v = d[d.length - 1],
15029
- r;
15030
- if (r = v < u) i = u, u = v, v = i;
15031
- var i = logs(u),
15032
- j = logs(v),
15033
- p,
15034
- k,
15035
- t,
15036
- n = count == null ? 10 : +count,
15037
- z = [];
15119
+ scale.ticks = count => {
15120
+ const d = domain();
15121
+ let u = d[0];
15122
+ let v = d[d.length - 1];
15123
+ const r = v < u;
15124
+ if (r) [u, v] = [v, u];
15125
+ let i = logs(u);
15126
+ let j = logs(v);
15127
+ let k;
15128
+ let t;
15129
+ const n = count == null ? 10 : +count;
15130
+ let z = [];
15038
15131
 
15039
15132
  if (!(base % 1) && j - i < n) {
15040
15133
  i = Math.floor(i), j = Math.ceil(j);
15041
15134
  if (u > 0) for (; i <= j; ++i) {
15042
- for (k = 1, p = pows(i); k < base; ++k) {
15043
- t = p * k;
15135
+ for (k = 1; k < base; ++k) {
15136
+ t = i < 0 ? k / pows(-i) : k * pows(i);
15044
15137
  if (t < u) continue;
15045
15138
  if (t > v) break;
15046
15139
  z.push(t);
15047
15140
  }
15048
15141
  } else for (; i <= j; ++i) {
15049
- for (k = base - 1, p = pows(i); k >= 1; --k) {
15050
- t = p * k;
15142
+ for (k = base - 1; k >= 1; --k) {
15143
+ t = i > 0 ? k / pows(-i) : k * pows(i);
15051
15144
  if (t < u) continue;
15052
15145
  if (t > v) break;
15053
15146
  z.push(t);
@@ -15061,39 +15154,38 @@
15061
15154
  return r ? z.reverse() : z;
15062
15155
  };
15063
15156
 
15064
- scale.tickFormat = function (count, specifier) {
15065
- if (specifier == null) specifier = base === 10 ? ".0e" : ",";
15066
- if (typeof specifier !== "function") specifier = format$3(specifier);
15067
- if (count === Infinity) return specifier;
15157
+ scale.tickFormat = (count, specifier) => {
15068
15158
  if (count == null) count = 10;
15069
- var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
15159
+ if (specifier == null) specifier = base === 10 ? "s" : ",";
15070
15160
 
15071
- return function (d) {
15072
- var i = d / pows(Math.round(logs(d)));
15161
+ if (typeof specifier !== "function") {
15162
+ if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;
15163
+ specifier = format$3(specifier);
15164
+ }
15165
+
15166
+ if (count === Infinity) return specifier;
15167
+ const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
15168
+
15169
+ return d => {
15170
+ let i = d / pows(Math.round(logs(d)));
15073
15171
  if (i * base < base - 0.5) i *= base;
15074
15172
  return i <= k ? specifier(d) : "";
15075
15173
  };
15076
15174
  };
15077
15175
 
15078
- scale.nice = function () {
15176
+ scale.nice = () => {
15079
15177
  return domain(nice(domain(), {
15080
- floor: function (x) {
15081
- return pows(Math.floor(logs(x)));
15082
- },
15083
- ceil: function (x) {
15084
- return pows(Math.ceil(logs(x)));
15085
- }
15178
+ floor: x => pows(Math.floor(logs(x))),
15179
+ ceil: x => pows(Math.ceil(logs(x)))
15086
15180
  }));
15087
15181
  };
15088
15182
 
15089
15183
  return scale;
15090
15184
  }
15091
15185
  function log$2() {
15092
- var scale = loggish(transformer$3()).domain([1, 10]);
15186
+ const scale = loggish(transformer$3()).domain([1, 10]);
15093
15187
 
15094
- scale.copy = function () {
15095
- return copy$2(scale, log$2()).base(scale.base());
15096
- };
15188
+ scale.copy = () => copy$2(scale, log$2()).base(scale.base());
15097
15189
 
15098
15190
  initRange.apply(scale, arguments);
15099
15191
  return scale;
@@ -15204,7 +15296,7 @@
15204
15296
 
15205
15297
  for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
15206
15298
 
15207
- domain.sort(ascending$2);
15299
+ domain.sort(ascending$1);
15208
15300
  return rescale();
15209
15301
  };
15210
15302
 
@@ -15662,7 +15754,7 @@
15662
15754
  bandwidth = Math.round(bandwidth);
15663
15755
  }
15664
15756
 
15665
- const values = range$1$1(n).map(i => start + step * i);
15757
+ const values = range$3(n).map(i => start + step * i);
15666
15758
  return ordinalRange(reverse ? values.reverse() : values);
15667
15759
  }
15668
15760
 
@@ -15897,17 +15989,17 @@
15897
15989
 
15898
15990
  scale$4(Sequential, sequential, [Continuous, Interpolating]); // backwards compat
15899
15991
 
15900
- scale$4(`${Sequential}-${Linear}`, sequential, [Continuous, Interpolating]);
15901
- scale$4(`${Sequential}-${Log}`, sequentialLog, [Continuous, Interpolating, Log]);
15902
- scale$4(`${Sequential}-${Pow}`, sequentialPow, [Continuous, Interpolating]);
15903
- scale$4(`${Sequential}-${Sqrt}`, sequentialSqrt, [Continuous, Interpolating]);
15904
- scale$4(`${Sequential}-${Symlog}`, sequentialSymlog, [Continuous, Interpolating]); // diverging scales
15992
+ scale$4("".concat(Sequential, "-").concat(Linear), sequential, [Continuous, Interpolating]);
15993
+ scale$4("".concat(Sequential, "-").concat(Log), sequentialLog, [Continuous, Interpolating, Log]);
15994
+ scale$4("".concat(Sequential, "-").concat(Pow), sequentialPow, [Continuous, Interpolating]);
15995
+ scale$4("".concat(Sequential, "-").concat(Sqrt), sequentialSqrt, [Continuous, Interpolating]);
15996
+ scale$4("".concat(Sequential, "-").concat(Symlog), sequentialSymlog, [Continuous, Interpolating]); // diverging scales
15905
15997
 
15906
- scale$4(`${Diverging}-${Linear}`, diverging, [Continuous, Interpolating]);
15907
- scale$4(`${Diverging}-${Log}`, divergingLog, [Continuous, Interpolating, Log]);
15908
- scale$4(`${Diverging}-${Pow}`, divergingPow, [Continuous, Interpolating]);
15909
- scale$4(`${Diverging}-${Sqrt}`, divergingSqrt, [Continuous, Interpolating]);
15910
- scale$4(`${Diverging}-${Symlog}`, divergingSymlog, [Continuous, Interpolating]); // discretizing scales
15998
+ scale$4("".concat(Diverging, "-").concat(Linear), diverging, [Continuous, Interpolating]);
15999
+ scale$4("".concat(Diverging, "-").concat(Log), divergingLog, [Continuous, Interpolating, Log]);
16000
+ scale$4("".concat(Diverging, "-").concat(Pow), divergingPow, [Continuous, Interpolating]);
16001
+ scale$4("".concat(Diverging, "-").concat(Sqrt), divergingSqrt, [Continuous, Interpolating]);
16002
+ scale$4("".concat(Diverging, "-").concat(Symlog), divergingSymlog, [Continuous, Interpolating]); // discretizing scales
15911
16003
 
15912
16004
  scale$4(Quantile, quantile, [Discretizing, Quantile]);
15913
16005
  scale$4(Quantize, quantize$1, Discretizing);
@@ -16110,7 +16202,7 @@
16110
16202
 
16111
16203
  const defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);
16112
16204
 
16113
- const ascending$1 = (a, b) => a[1] - b[1];
16205
+ const ascending = (a, b) => a[1] - b[1];
16114
16206
 
16115
16207
  const descending = (a, b) => b[1] - a[1];
16116
16208
  /**
@@ -16161,7 +16253,7 @@
16161
16253
  let range = scale.range(),
16162
16254
  lo = range[0],
16163
16255
  hi = peek$1(range),
16164
- cmp = ascending$1;
16256
+ cmp = ascending;
16165
16257
 
16166
16258
  if (lo > hi) {
16167
16259
  range = hi;
@@ -16363,17 +16455,17 @@
16363
16455
  if (isDiscretizing(scale.type)) {
16364
16456
  const v = labelValues(scale).slice(1).map(fmt),
16365
16457
  n = v.length;
16366
- return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;
16458
+ return "".concat(n, " boundar").concat(n === 1 ? 'y' : 'ies', ": ").concat(v.join(', '));
16367
16459
  } // if scale domain is discrete, list values
16368
16460
  else if (isDiscrete(scale.type)) {
16369
16461
  const d = scale.domain(),
16370
16462
  n = d.length,
16371
16463
  v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');
16372
- return `${n} value${n === 1 ? '' : 's'}: ${v}`;
16464
+ return "".concat(n, " value").concat(n === 1 ? '' : 's', ": ").concat(v);
16373
16465
  } // if scale domain is continuous, describe value range
16374
16466
  else {
16375
16467
  const d = scale.domain();
16376
- return `values from ${fmt(d[0])} to ${fmt(peek$1(d))}`;
16468
+ return "values from ".concat(fmt(d[0]), " to ").concat(fmt(peek$1(d)));
16377
16469
  }
16378
16470
  }
16379
16471
 
@@ -16525,59 +16617,83 @@
16525
16617
  }
16526
16618
 
16527
16619
  return curve;
16528
- } // Path parsing and rendering code adapted from fabric.js -- Thanks!
16529
-
16620
+ }
16530
16621
 
16531
- const cmdlen = {
16622
+ const paramCounts = {
16532
16623
  m: 2,
16533
16624
  l: 2,
16534
16625
  h: 1,
16535
16626
  v: 1,
16627
+ z: 0,
16536
16628
  c: 6,
16537
16629
  s: 4,
16538
16630
  q: 4,
16539
16631
  t: 2,
16540
16632
  a: 7
16541
- },
16542
- regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\.\d+)(\.\d)/g, /(\d)([-+])/g, /\s|,|###/];
16633
+ };
16634
+ const commandPattern = /[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi;
16635
+ const numberPattern = /^[+-]?(([0-9]*\.[0-9]+)|([0-9]+\.)|([0-9]+))([eE][+-]?[0-9]+)?/;
16636
+ const spacePattern = /^((\s+,?\s*)|(,\s*))/;
16637
+ const flagPattern = /^[01]/;
16543
16638
 
16544
- function pathParse(pathstr) {
16545
- const result = [];
16546
- let curr, chunks, parsed, param, cmd, len, i, j, n, m; // First, break path into command sequence
16639
+ function parse$3(path) {
16640
+ const commands = [];
16641
+ const matches = path.match(commandPattern) || [];
16642
+ matches.forEach(str => {
16643
+ let cmd = str[0];
16644
+ const type = cmd.toLowerCase(); // parse parameters
16547
16645
 
16548
- const path = pathstr.slice().replace(regexp[0], '###$1').split(regexp[1]).slice(1); // Next, parse each command in turn
16646
+ const paramCount = paramCounts[type];
16647
+ const params = parseParams(type, paramCount, str.slice(1).trim());
16648
+ const count = params.length; // error checking based on parameter count
16549
16649
 
16550
- for (i = 0, n = path.length; i < n; ++i) {
16551
- curr = path[i];
16552
- chunks = curr.slice(1).trim().replace(regexp[2], '$1###$2').replace(regexp[3], '$1###$2').split(regexp[4]);
16553
- cmd = curr.charAt(0);
16554
- parsed = [cmd];
16650
+ if (count < paramCount || count && count % paramCount !== 0) {
16651
+ throw Error('Invalid SVG path, incorrect parameter count');
16652
+ } // register the command
16555
16653
 
16556
- for (j = 0, m = chunks.length; j < m; ++j) {
16557
- if ((param = +chunks[j]) === param) {
16558
- // not NaN
16559
- parsed.push(param);
16560
- }
16654
+
16655
+ commands.push([cmd, ...params.slice(0, paramCount)]); // exit now if we're done, also handles zero-param 'z'
16656
+
16657
+ if (count === paramCount) {
16658
+ return;
16659
+ } // handle implicit line-to
16660
+
16661
+
16662
+ if (type === 'm') {
16663
+ cmd = cmd === 'M' ? 'L' : 'l';
16664
+ } // repeat command when given extended param list
16665
+
16666
+
16667
+ for (let i = paramCount; i < count; i += paramCount) {
16668
+ commands.push([cmd, ...params.slice(i, i + paramCount)]);
16561
16669
  }
16670
+ });
16671
+ return commands;
16672
+ }
16562
16673
 
16563
- len = cmdlen[cmd.toLowerCase()];
16674
+ function parseParams(type, paramCount, segment) {
16675
+ const params = [];
16564
16676
 
16565
- if (parsed.length - 1 > len) {
16566
- const m = parsed.length;
16567
- j = 1;
16568
- result.push([cmd].concat(parsed.slice(j, j += len))); // handle implicit lineTo (#2803)
16677
+ for (let index = 0; paramCount && index < segment.length;) {
16678
+ for (let i = 0; i < paramCount; ++i) {
16679
+ const pattern = type === 'a' && (i === 3 || i === 4) ? flagPattern : numberPattern;
16680
+ const match = segment.slice(index).match(pattern);
16569
16681
 
16570
- cmd = cmd === 'M' ? 'L' : cmd === 'm' ? 'l' : cmd;
16682
+ if (match === null) {
16683
+ throw Error('Invalid SVG path, incorrect parameter type');
16684
+ }
16571
16685
 
16572
- for (; j < m; j += len) {
16573
- result.push([cmd].concat(parsed.slice(j, j + len)));
16686
+ index += match[0].length;
16687
+ params.push(+match[0]);
16688
+ const ws = segment.slice(index).match(spacePattern);
16689
+
16690
+ if (ws !== null) {
16691
+ index += ws[0].length;
16574
16692
  }
16575
- } else {
16576
- result.push(parsed);
16577
16693
  }
16578
16694
  }
16579
16695
 
16580
- return result;
16696
+ return params;
16581
16697
  }
16582
16698
 
16583
16699
  const DegToRad = Math.PI / 180;
@@ -16724,7 +16840,9 @@
16724
16840
  tempX,
16725
16841
  tempY,
16726
16842
  tempControlX,
16727
- tempControlY;
16843
+ tempControlY,
16844
+ anchorX = 0,
16845
+ anchorY = 0;
16728
16846
  if (l == null) l = 0;
16729
16847
  if (t == null) t = 0;
16730
16848
  if (sX == null) sX = 1;
@@ -16782,6 +16900,8 @@
16782
16900
  // moveTo, relative
16783
16901
  x += current[1];
16784
16902
  y += current[2];
16903
+ anchorX = x;
16904
+ anchorY = y;
16785
16905
  context.moveTo(x + l, y + t);
16786
16906
  break;
16787
16907
 
@@ -16789,6 +16909,8 @@
16789
16909
  // moveTo, absolute
16790
16910
  x = current[1];
16791
16911
  y = current[2];
16912
+ anchorX = x;
16913
+ anchorY = y;
16792
16914
  context.moveTo(x + l, y + t);
16793
16915
  break;
16794
16916
 
@@ -16931,6 +17053,8 @@
16931
17053
 
16932
17054
  case 'z':
16933
17055
  case 'Z':
17056
+ x = anchorX;
17057
+ y = anchorY;
16934
17058
  context.closePath();
16935
17059
  break;
16936
17060
  }
@@ -17096,7 +17220,7 @@
17096
17220
 
17097
17221
  function customSymbol(path) {
17098
17222
  if (!has$1(custom, path)) {
17099
- const parsed = pathParse(path);
17223
+ const parsed = parse$3(path);
17100
17224
  custom[path] = {
17101
17225
  draw: function (context, size) {
17102
17226
  pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);
@@ -17389,7 +17513,7 @@
17389
17513
  areahShape = area$2$1().y(y$2).x1(x$2).x0(xw).defined(def),
17390
17514
  lineShape = line$2$1().x(x$2).y(y$2).defined(def),
17391
17515
  rectShape = vg_rect().x(x$2).y(y$2).width(w).height(h).cornerRadius(tl, tr, br, bl),
17392
- symbolShape = symbol$2().type(type).size(sz),
17516
+ symbolShape = Symbol$1().type(type).size(sz),
17393
17517
  trailShape = vg_trail().x(x$2).y(y$2).defined(def).size(ts);
17394
17518
 
17395
17519
  function hasCornerRadius(item) {
@@ -18712,7 +18836,7 @@
18712
18836
  cache = item.pathCache;
18713
18837
 
18714
18838
  if (!cache || cache.path !== path) {
18715
- (item.pathCache = cache = pathParse(path)).path = path;
18839
+ (item.pathCache = cache = parse$3(path)).path = path;
18716
18840
  }
18717
18841
 
18718
18842
  if (a && context.rotate && context.translate) {
@@ -18853,7 +18977,7 @@
18853
18977
  }
18854
18978
 
18855
18979
  function _measureWidth(text, currentFont) {
18856
- const key = `(${currentFont}) ${text}`;
18980
+ const key = "(".concat(currentFont, ") ").concat(text);
18857
18981
  let width = widthCache.get(key);
18858
18982
 
18859
18983
  if (width === undefined) {
@@ -20230,11 +20354,11 @@
20230
20354
  },
20231
20355
  'title-text': {
20232
20356
  desc: 'title',
20233
- caption: item => `Title text '${titleCaption(item)}'`
20357
+ caption: item => "Title text '".concat(titleCaption(item), "'")
20234
20358
  },
20235
20359
  'title-subtitle': {
20236
20360
  desc: 'subtitle',
20237
- caption: item => `Subtitle text '${titleCaption(item)}'`
20361
+ caption: item => "Subtitle text '".concat(titleCaption(item), "'")
20238
20362
  }
20239
20363
  }; // aria properties generated for mark item encoding channels
20240
20364
 
@@ -20256,7 +20380,7 @@
20256
20380
  const type = item.mark.marktype;
20257
20381
  emit(ARIA_LABEL, item.description);
20258
20382
  emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));
20259
- emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);
20383
+ emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || "".concat(type, " mark"));
20260
20384
  }
20261
20385
  }
20262
20386
 
@@ -20269,7 +20393,7 @@
20269
20393
  function ariaMark(mark) {
20270
20394
  const type = mark.marktype;
20271
20395
  const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);
20272
- return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);
20396
+ return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, "".concat(type, " mark container"), mark.description);
20273
20397
  }
20274
20398
 
20275
20399
  function ariaGuide(mark, opt) {
@@ -20296,19 +20420,19 @@
20296
20420
  locale = ctx.dataflow.locale(),
20297
20421
  type = scale.type,
20298
20422
  xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';
20299
- return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;
20423
+ return "".concat(xy, "-axis") + (title ? " titled '".concat(title, "'") : '') + " for a ".concat(isDiscrete(type) ? 'discrete' : type, " scale") + " with ".concat(domainCaption(locale, scale, item));
20300
20424
  }
20301
20425
 
20302
20426
  function legendCaption(item) {
20303
20427
  const datum = item.datum,
20304
20428
  title = datum.title ? extractTitle(item) : null,
20305
- type = `${datum.type || ''} legend`.trim(),
20429
+ type = "".concat(datum.type || '', " legend").trim(),
20306
20430
  scales = datum.scales,
20307
20431
  props = Object.keys(scales),
20308
20432
  ctx = item.context,
20309
20433
  scale = ctx.scales[scales[props[0]]].value,
20310
20434
  locale = ctx.dataflow.locale();
20311
- return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;
20435
+ return capitalize(type) + (title ? " titled '".concat(title, "'") : '') + " for ".concat(channelCaption(props)) + " with ".concat(domainCaption(locale, scale, item));
20312
20436
  }
20313
20437
 
20314
20438
  function extractTitle(item) {
@@ -20341,21 +20465,25 @@
20341
20465
  clear = () => outer = inner = '',
20342
20466
  push = tag => {
20343
20467
  if (outer) {
20344
- buf += `${outer}>${inner}`;
20468
+ buf += "".concat(outer, ">").concat(inner);
20345
20469
  clear();
20346
20470
  }
20347
20471
 
20348
20472
  stack.push(tag);
20349
20473
  },
20350
20474
  attr = (name, value) => {
20351
- if (value != null) outer += ` ${name}="${attrText(value)}"`;
20475
+ if (value != null) outer += " ".concat(name, "=\"").concat(attrText(value), "\"");
20352
20476
  return m;
20353
20477
  },
20354
20478
  m = {
20355
- open(tag, ...attrs) {
20479
+ open(tag) {
20356
20480
  push(tag);
20357
20481
  outer = '<' + tag;
20358
20482
 
20483
+ for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
20484
+ attrs[_key - 1] = arguments[_key];
20485
+ }
20486
+
20359
20487
  for (const set of attrs) {
20360
20488
  for (const key in set) attr(key, set[key]);
20361
20489
  }
@@ -20367,9 +20495,9 @@
20367
20495
  const tag = stack.pop();
20368
20496
 
20369
20497
  if (outer) {
20370
- buf += outer + (inner ? `>${inner}</${tag}>` : '/>');
20498
+ buf += outer + (inner ? ">".concat(inner, "</").concat(tag, ">") : '/>');
20371
20499
  } else {
20372
- buf += `</${tag}>`;
20500
+ buf += "</".concat(tag, ">");
20373
20501
  }
20374
20502
 
20375
20503
  clear();
@@ -20410,7 +20538,7 @@
20410
20538
  return m.close();
20411
20539
  }
20412
20540
 
20413
- const styles = {
20541
+ const stylesAttr = {
20414
20542
  fill: 'fill',
20415
20543
  fillOpacity: 'fill-opacity',
20416
20544
  stroke: 'stroke',
@@ -20421,7 +20549,9 @@
20421
20549
  strokeDash: 'stroke-dasharray',
20422
20550
  strokeDashOffset: 'stroke-dashoffset',
20423
20551
  strokeMiterLimit: 'stroke-miterlimit',
20424
- opacity: 'opacity',
20552
+ opacity: 'opacity'
20553
+ };
20554
+ const stylesCss = {
20425
20555
  blend: 'mix-blend-mode'
20426
20556
  }; // ensure miter limit default is consistent with canvas (#2498)
20427
20557
 
@@ -20513,10 +20643,10 @@
20513
20643
  setAttributes(this._svg, {
20514
20644
  width: this._width * this._scale,
20515
20645
  height: this._height * this._scale,
20516
- viewBox: `0 0 ${this._width} ${this._height}`
20646
+ viewBox: "0 0 ".concat(this._width, " ").concat(this._height)
20517
20647
  });
20518
20648
 
20519
- this._root.setAttribute('transform', `translate(${this._origin})`);
20649
+ this._root.setAttribute('transform', "translate(".concat(this._origin, ")"));
20520
20650
  }
20521
20651
 
20522
20652
  this._dirty = [];
@@ -20599,7 +20729,7 @@
20599
20729
  * @param {Item} item - The mark item.
20600
20730
  */
20601
20731
  isDirty(item) {
20602
- return this._dirtyAll || !item._svg || item.dirty === this._dirtyID;
20732
+ return this._dirtyAll || !item._svg || !item._svg.ownerSVGElement || item.dirty === this._dirtyID;
20603
20733
  },
20604
20734
 
20605
20735
  /**
@@ -20676,13 +20806,14 @@
20676
20806
  * @param {SVGElement} prev - The previous sibling in the SVG tree.
20677
20807
  */
20678
20808
  mark(el, scene, prev) {
20679
- if (!this.isDirty(scene)) return scene._svg;
20809
+ if (!this.isDirty(scene)) {
20810
+ return scene._svg;
20811
+ }
20812
+
20680
20813
  const svg = this._svg,
20681
20814
  mdef = Marks[scene.marktype],
20682
20815
  events = scene.interactive === false ? 'none' : null,
20683
20816
  isGroup = mdef.tag === 'g';
20684
- let sibling = null,
20685
- i = 0;
20686
20817
  const parent = bind$1(scene, el, prev, 'g', svg);
20687
20818
  parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element
20688
20819
 
@@ -20695,6 +20826,8 @@
20695
20826
  }
20696
20827
 
20697
20828
  setAttribute(parent, 'clip-path', scene.clip ? clip$1$1(this, scene, scene.group) : null);
20829
+ let sibling = null,
20830
+ i = 0;
20698
20831
 
20699
20832
  const process = item => {
20700
20833
  const dirty = this.isDirty(item),
@@ -20751,10 +20884,10 @@
20751
20884
  style(el, item) {
20752
20885
  if (item == null) return;
20753
20886
 
20754
- for (const prop in styles) {
20887
+ for (const prop in stylesAttr) {
20755
20888
  let value = prop === 'font' ? fontFamily(item) : item[prop];
20756
20889
  if (value === values[prop]) continue;
20757
- const name = styles[prop];
20890
+ const name = stylesAttr[prop];
20758
20891
 
20759
20892
  if (value == null) {
20760
20893
  el.removeAttribute(name);
@@ -20768,6 +20901,10 @@
20768
20901
 
20769
20902
  values[prop] = value;
20770
20903
  }
20904
+
20905
+ for (const prop in stylesCss) {
20906
+ setStyle(el, stylesCss[prop], item[prop]);
20907
+ }
20771
20908
  },
20772
20909
 
20773
20910
  /**
@@ -20839,7 +20976,7 @@
20839
20976
  setAttributes(pt, {
20840
20977
  width: 1,
20841
20978
  height: 1,
20842
- fill: `url(${href()}#${grad.id})`
20979
+ fill: "url(".concat(href(), "#").concat(grad.id, ")")
20843
20980
  });
20844
20981
  el = domChild(el, index++, 'radialGradient', svgns);
20845
20982
  setAttributes(el, {
@@ -20897,6 +21034,8 @@
20897
21034
 
20898
21035
 
20899
21036
  function recurse(renderer, el, group) {
21037
+ // child 'g' element is second to last among children (path, g, path)
21038
+ // other children here are foreground and background path elements
20900
21039
  el = el.lastChild.previousSibling;
20901
21040
  let prev,
20902
21041
  idx = 0;
@@ -21141,7 +21280,7 @@
21141
21280
  class: 'marks',
21142
21281
  width: this._width * this._scale,
21143
21282
  height: this._height * this._scale,
21144
- viewBox: `0 0 ${this._width} ${this._height}`
21283
+ viewBox: "0 0 ".concat(this._width, " ").concat(this._height)
21145
21284
  })); // background, if defined
21146
21285
 
21147
21286
  const bg = this._bgcolor;
@@ -21393,6 +21532,7 @@
21393
21532
  }); // Helper function for attr for style presentation attributes
21394
21533
 
21395
21534
  function style(s, item, scene, tag, defs) {
21535
+ let styleList;
21396
21536
  if (item == null) return s;
21397
21537
 
21398
21538
  if (tag === 'bgrect' && scene.interactive === false) {
@@ -21409,7 +21549,7 @@
21409
21549
  }
21410
21550
 
21411
21551
  if (tag === 'image' && item.smooth === false) {
21412
- s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';
21552
+ styleList = ['image-rendering: optimizeSpeed;', 'image-rendering: pixelated;'];
21413
21553
  }
21414
21554
 
21415
21555
  if (tag === 'text') {
@@ -21420,9 +21560,9 @@
21420
21560
  s['font-weight'] = item.fontWeight;
21421
21561
  }
21422
21562
 
21423
- for (const prop in styles) {
21563
+ for (const prop in stylesAttr) {
21424
21564
  let value = item[prop];
21425
- const name = styles[prop];
21565
+ const name = stylesAttr[prop];
21426
21566
  if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ;else if (value != null) {
21427
21567
  if (isGradient(value)) {
21428
21568
  value = gradientRef(value, defs.gradient, '');
@@ -21432,6 +21572,19 @@
21432
21572
  }
21433
21573
  }
21434
21574
 
21575
+ for (const prop in stylesCss) {
21576
+ const value = item[prop];
21577
+
21578
+ if (value != null) {
21579
+ styleList = styleList || [];
21580
+ styleList.push("".concat(stylesCss[prop], ": ").concat(value, ";"));
21581
+ }
21582
+ }
21583
+
21584
+ if (styleList) {
21585
+ s.style = styleList.join(' ');
21586
+ }
21587
+
21435
21588
  return s;
21436
21589
  }
21437
21590
 
@@ -21561,7 +21714,7 @@
21561
21714
  }
21562
21715
 
21563
21716
  function pathEqual(a, b) {
21564
- return sceneEqual(pathParse(a), pathParse(b));
21717
+ return sceneEqual(parse$3(a), parse$3(b));
21565
21718
  }
21566
21719
 
21567
21720
  function objectEqual(a, b) {
@@ -23336,7 +23489,7 @@
23336
23489
  ellipsis = values[items.length];
23337
23490
  items.push(ingest$1({
23338
23491
  index: items.length,
23339
- label: `\u2026${values.length - items.length} entries`,
23492
+ label: "\u2026".concat(values.length - items.length, " entries"),
23340
23493
  value: ellipsis,
23341
23494
  offset: offset,
23342
23495
  size: size(ellipsis, _)
@@ -23581,8 +23734,8 @@
23581
23734
  values = data.map(field),
23582
23735
  n = values.length,
23583
23736
  a = start,
23584
- k = (stop - start) / sum(values),
23585
- index = range$1$1(n),
23737
+ k = (stop - start) / sum$1(values),
23738
+ index = range$3(n),
23586
23739
  i,
23587
23740
  t,
23588
23741
  v;
@@ -23768,7 +23921,7 @@
23768
23921
  if (!step) error('Scale bins parameter missing step property.');
23769
23922
  if (start < lo) start = step * Math.ceil(lo / step);
23770
23923
  if (stop > hi) stop = step * Math.floor(hi / step);
23771
- bins = range$1$1(start, stop + step / 2, step);
23924
+ bins = range$3(start, stop + step / 2, step);
23772
23925
  }
23773
23926
 
23774
23927
  if (bins) {
@@ -23810,7 +23963,7 @@
23810
23963
  if (scale.interpolator) {
23811
23964
  return scale.interpolator(range);
23812
23965
  } else {
23813
- error(`Scale type ${type} does not support interpolating color schemes.`);
23966
+ error("Scale type ".concat(type, " does not support interpolating color schemes."));
23814
23967
  }
23815
23968
  }
23816
23969
  } // given a range array for an interpolating scale, convert to interpolator
@@ -23853,7 +24006,7 @@
23853
24006
  } else {
23854
24007
  name = _.scheme.toLowerCase();
23855
24008
  scheme$1 = scheme(name);
23856
- if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);
24009
+ if (!scheme$1) error("Unrecognized scheme name: ".concat(_.scheme));
23857
24010
  } // determine size for potential discrete range
23858
24011
 
23859
24012
 
@@ -24072,7 +24225,7 @@
24072
24225
  stack: Stack
24073
24226
  });
24074
24227
 
24075
- var epsilon$2 = 1e-6;
24228
+ var epsilon$3 = 1e-6;
24076
24229
  var epsilon2 = 1e-12;
24077
24230
  var pi$1 = Math.PI;
24078
24231
  var halfPi$1 = pi$1 / 2;
@@ -24312,7 +24465,7 @@
24312
24465
  boundsStream$2.point = boundsPoint$1;
24313
24466
  boundsStream$2.lineStart = boundsLineStart;
24314
24467
  boundsStream$2.lineEnd = boundsLineEnd;
24315
- if (areaRingSum$1 < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);else if (deltaSum > epsilon$2) phi1 = 90;else if (deltaSum < -epsilon$2) phi0 = -90;
24468
+ if (areaRingSum$1 < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);else if (deltaSum > epsilon$3) phi1 = 90;else if (deltaSum < -epsilon$3) phi0 = -90;
24316
24469
  range$2[0] = lambda0, range$2[1] = lambda1;
24317
24470
  },
24318
24471
  sphere: function () {
@@ -24408,7 +24561,7 @@
24408
24561
  function boundsRingEnd() {
24409
24562
  boundsRingPoint(lambda00$1, phi00$1);
24410
24563
  areaStream$1.lineEnd();
24411
- if (abs$1(deltaSum) > epsilon$2) lambda0 = -(lambda1 = 180);
24564
+ if (abs$1(deltaSum) > epsilon$3) lambda0 = -(lambda1 = 180);
24412
24565
  range$2[0] = lambda0, range$2[1] = lambda1;
24413
24566
  p0 = null;
24414
24567
  } // Finds the left-right distance between two longitudes.
@@ -24583,7 +24736,7 @@
24583
24736
  if (m < epsilon2) {
24584
24737
  x = X1$1, y = Y1$1, z = Z1$1; // If the feature has zero length, fall back to arithmetic mean of point vectors.
24585
24738
 
24586
- if (W1 < epsilon$2) x = X0$1, y = Y0$1, z = Z0$1;
24739
+ if (W1 < epsilon$3) x = X0$1, y = Y0$1, z = Z0$1;
24587
24740
  m = hypot(x, y, z); // If the feature still has an undefined ccentroid, then return.
24588
24741
 
24589
24742
  if (m < epsilon2) return [NaN, NaN];
@@ -24692,7 +24845,7 @@
24692
24845
  point = cartesian(point), point[0] -= cosRadius;
24693
24846
  cartesianNormalizeInPlace(point);
24694
24847
  var radius = acos(-point[1]);
24695
- return ((-point[2] < 0 ? -radius : radius) + tau$1 - epsilon$2) % tau$1;
24848
+ return ((-point[2] < 0 ? -radius : radius) + tau$1 - epsilon$3) % tau$1;
24696
24849
  }
24697
24850
 
24698
24851
  function clipBuffer () {
@@ -24719,7 +24872,7 @@
24719
24872
  }
24720
24873
 
24721
24874
  function pointEqual (a, b) {
24722
- return abs$1(a[0] - b[0]) < epsilon$2 && abs$1(a[1] - b[1]) < epsilon$2;
24875
+ return abs$1(a[0] - b[0]) < epsilon$3 && abs$1(a[1] - b[1]) < epsilon$3;
24723
24876
  }
24724
24877
 
24725
24878
  function Intersection(point, points, other, entry) {
@@ -24760,7 +24913,7 @@
24760
24913
  } // handle degenerate cases by moving the point
24761
24914
 
24762
24915
 
24763
- p1[0] += 2 * epsilon$2;
24916
+ p1[0] += 2 * epsilon$3;
24764
24917
  }
24765
24918
 
24766
24919
  subject.push(x = new Intersection(p0, segment, null, true));
@@ -24841,7 +24994,7 @@
24841
24994
  }
24842
24995
 
24843
24996
  function longitude(point) {
24844
- if (abs$1(point[0]) <= pi$1) return point[0];else return sign(point[0]) * ((abs$1(point[0]) + pi$1) % tau$1 - pi$1);
24997
+ return abs$1(point[0]) <= pi$1 ? point[0] : sign(point[0]) * ((abs$1(point[0]) + pi$1) % tau$1 - pi$1);
24845
24998
  }
24846
24999
 
24847
25000
  function polygonContains (polygon, point) {
@@ -24852,7 +25005,7 @@
24852
25005
  angle = 0,
24853
25006
  winding = 0;
24854
25007
  var sum = new Adder();
24855
- if (sinPhi === 1) phi = halfPi$1 + epsilon$2;else if (sinPhi === -1) phi = -halfPi$1 - epsilon$2;
25008
+ if (sinPhi === 1) phi = halfPi$1 + epsilon$3;else if (sinPhi === -1) phi = -halfPi$1 - epsilon$3;
24856
25009
 
24857
25010
  for (var i = 0, n = polygon.length; i < n; ++i) {
24858
25011
  if (!(m = (ring = polygon[i]).length)) continue;
@@ -24903,7 +25056,7 @@
24903
25056
  // same side as the South pole.
24904
25057
 
24905
25058
 
24906
- return (angle < -epsilon$2 || angle < epsilon$2 && sum < -epsilon2) ^ winding & 1;
25059
+ return (angle < -epsilon$3 || angle < epsilon$3 && sum < -epsilon2) ^ winding & 1;
24907
25060
  }
24908
25061
 
24909
25062
  function clip$1 (pointVisible, clipLine, interpolate, start) {
@@ -25030,7 +25183,7 @@
25030
25183
 
25031
25184
 
25032
25185
  function compareIntersection(a, b) {
25033
- return ((a = a.x)[0] < 0 ? a[1] - halfPi$1 - epsilon$2 : halfPi$1 - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfPi$1 - epsilon$2 : halfPi$1 - b[1]);
25186
+ return ((a = a.x)[0] < 0 ? a[1] - halfPi$1 - epsilon$3 : halfPi$1 - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfPi$1 - epsilon$3 : halfPi$1 - b[1]);
25034
25187
  }
25035
25188
 
25036
25189
  var clipAntimeridian = clip$1(function () {
@@ -25054,7 +25207,7 @@
25054
25207
  var sign1 = lambda1 > 0 ? pi$1 : -pi$1,
25055
25208
  delta = abs$1(lambda1 - lambda0);
25056
25209
 
25057
- if (abs$1(delta - pi$1) < epsilon$2) {
25210
+ if (abs$1(delta - pi$1) < epsilon$3) {
25058
25211
  // line crosses a pole
25059
25212
  stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$1 : -halfPi$1);
25060
25213
  stream.point(sign0, phi0);
@@ -25065,9 +25218,9 @@
25065
25218
  clean = 0;
25066
25219
  } else if (sign0 !== sign1 && delta >= pi$1) {
25067
25220
  // line crosses antimeridian
25068
- if (abs$1(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies
25221
+ if (abs$1(lambda0 - sign0) < epsilon$3) lambda0 -= sign0 * epsilon$3; // handle degeneracies
25069
25222
 
25070
- if (abs$1(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;
25223
+ if (abs$1(lambda1 - sign1) < epsilon$3) lambda1 -= sign1 * epsilon$3;
25071
25224
  phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
25072
25225
  stream.point(sign0, phi0);
25073
25226
  stream.lineEnd();
@@ -25093,7 +25246,7 @@
25093
25246
  var cosPhi0,
25094
25247
  cosPhi1,
25095
25248
  sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
25096
- return abs$1(sinLambda0Lambda1) > epsilon$2 ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) : (phi0 + phi1) / 2;
25249
+ return abs$1(sinLambda0Lambda1) > epsilon$3 ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) : (phi0 + phi1) / 2;
25097
25250
  }
25098
25251
 
25099
25252
  function clipAntimeridianInterpolate(from, to, direction, stream) {
@@ -25110,7 +25263,7 @@
25110
25263
  stream.point(-pi$1, -phi);
25111
25264
  stream.point(-pi$1, 0);
25112
25265
  stream.point(-pi$1, phi);
25113
- } else if (abs$1(from[0] - to[0]) > epsilon$2) {
25266
+ } else if (abs$1(from[0] - to[0]) > epsilon$3) {
25114
25267
  var lambda = from[0] < to[0] ? pi$1 : -pi$1;
25115
25268
  phi = direction * lambda / 2;
25116
25269
  stream.point(-lambda, phi);
@@ -25125,7 +25278,7 @@
25125
25278
  var cr = cos$1(radius),
25126
25279
  delta = 6 * radians,
25127
25280
  smallRadius = cr > 0,
25128
- notHemisphere = abs$1(cr) > epsilon$2; // TODO optimise for this common case
25281
+ notHemisphere = abs$1(cr) > epsilon$3; // TODO optimise for this common case
25129
25282
 
25130
25283
  function interpolate(from, to, direction, stream) {
25131
25284
  circleStream(stream, radius, delta, direction, from, to);
@@ -25258,11 +25411,11 @@
25258
25411
  z;
25259
25412
  if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
25260
25413
  var delta = lambda1 - lambda0,
25261
- polar = abs$1(delta - pi$1) < epsilon$2,
25262
- meridian = polar || delta < epsilon$2;
25414
+ polar = abs$1(delta - pi$1) < epsilon$3,
25415
+ meridian = polar || delta < epsilon$3;
25263
25416
  if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; // Check that the first point is between a and b.
25264
25417
 
25265
- if (meridian ? polar ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$2 ? phi0 : phi1) : phi0 <= q[1] && q[1] <= phi1 : delta > pi$1 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
25418
+ if (meridian ? polar ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$3 ? phi0 : phi1) : phi0 <= q[1] && q[1] <= phi1 : delta > pi$1 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
25266
25419
  var q1 = cartesianScale(u, (-w + t) / uu);
25267
25420
  cartesianAddInPlace(q1, A);
25268
25421
  return [q, spherical(q1)];
@@ -25370,7 +25523,7 @@
25370
25523
  }
25371
25524
 
25372
25525
  function corner(p, direction) {
25373
- return abs$1(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3 : abs$1(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1 : abs$1(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
25526
+ return abs$1(p[0] - x0) < epsilon$3 ? direction > 0 ? 0 : 3 : abs$1(p[0] - x1) < epsilon$3 ? direction > 0 ? 2 : 1 : abs$1(p[1] - y0) < epsilon$3 ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
25374
25527
  }
25375
25528
 
25376
25529
  function compareIntersection(a, b) {
@@ -25522,7 +25675,7 @@
25522
25675
  }
25523
25676
 
25524
25677
  function graticuleX(y0, y1, dy) {
25525
- var y = range$1$1(y0, y1 - epsilon$2, dy).concat(y1);
25678
+ var y = range$3(y0, y1 - epsilon$3, dy).concat(y1);
25526
25679
  return function (x) {
25527
25680
  return y.map(function (y) {
25528
25681
  return [x, y];
@@ -25531,7 +25684,7 @@
25531
25684
  }
25532
25685
 
25533
25686
  function graticuleY(x0, x1, dx) {
25534
- var x = range$1$1(x0, x1 - epsilon$2, dx).concat(x1);
25687
+ var x = range$3(x0, x1 - epsilon$3, dx).concat(x1);
25535
25688
  return function (y) {
25536
25689
  return x.map(function (x) {
25537
25690
  return [x, y];
@@ -25566,10 +25719,10 @@
25566
25719
  }
25567
25720
 
25568
25721
  function lines() {
25569
- return range$1$1(ceil(X0 / DX) * DX, X1, DX).map(X).concat(range$1$1(ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(range$1$1(ceil(x0 / dx) * dx, x1, dx).filter(function (x) {
25570
- return abs$1(x % DX) > epsilon$2;
25571
- }).map(x)).concat(range$1$1(ceil(y0 / dy) * dy, y1, dy).filter(function (y) {
25572
- return abs$1(y % DY) > epsilon$2;
25722
+ return range$3(ceil(X0 / DX) * DX, X1, DX).map(X).concat(range$3(ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(range$3(ceil(x0 / dx) * dx, x1, dx).filter(function (x) {
25723
+ return abs$1(x % DX) > epsilon$3;
25724
+ }).map(x)).concat(range$3(ceil(y0 / dy) * dy, y1, dy).filter(function (y) {
25725
+ return abs$1(y % DY) > epsilon$3;
25573
25726
  }).map(y));
25574
25727
  }
25575
25728
 
@@ -25639,7 +25792,7 @@
25639
25792
  return graticule;
25640
25793
  };
25641
25794
 
25642
- return graticule.extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]]).extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
25795
+ return graticule.extentMajor([[-180, -90 + epsilon$3], [180, 90 - epsilon$3]]).extentMinor([[-180, -80 - epsilon$3], [180, 80 + epsilon$3]]);
25643
25796
  }
25644
25797
 
25645
25798
  var identity = (x => x);
@@ -26125,7 +26278,7 @@
26125
26278
  c = c0 + c1,
26126
26279
  m = sqrt$1(a * a + b * b + c * c),
26127
26280
  phi2 = asin$1(c /= m),
26128
- lambda2 = abs$1(abs$1(c) - 1) < epsilon$2 || abs$1(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
26281
+ lambda2 = abs$1(abs$1(c) - 1) < epsilon$3 || abs$1(lambda0 - lambda1) < epsilon$3 ? (lambda0 + lambda1) / 2 : atan2(b, a),
26129
26282
  p = project(lambda2, phi2),
26130
26283
  x2 = p[0],
26131
26284
  y2 = p[1],
@@ -26432,7 +26585,7 @@
26432
26585
  var sy0 = sin$1(y0),
26433
26586
  n = (sy0 + sin$1(y1)) / 2; // Are the parallels symmetrical around the Equator?
26434
26587
 
26435
- if (abs$1(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);
26588
+ if (abs$1(n) < epsilon$3) return cylindricalEqualAreaRaw(y0);
26436
26589
  var c = 1 + sy0 * (2 * n - sy0),
26437
26590
  r0 = sqrt$1(c) / n;
26438
26591
 
@@ -26555,8 +26708,8 @@
26555
26708
  x = +_[0],
26556
26709
  y = +_[1];
26557
26710
  lower48Point = lower48.translate(_).clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]).stream(pointStream);
26558
- alaskaPoint = alaska.translate([x - 0.307 * k, y + 0.201 * k]).clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]]).stream(pointStream);
26559
- hawaiiPoint = hawaii.translate([x - 0.205 * k, y + 0.212 * k]).clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]]).stream(pointStream);
26711
+ alaskaPoint = alaska.translate([x - 0.307 * k, y + 0.201 * k]).clipExtent([[x - 0.425 * k + epsilon$3, y + 0.120 * k + epsilon$3], [x - 0.214 * k - epsilon$3, y + 0.234 * k - epsilon$3]]).stream(pointStream);
26712
+ hawaiiPoint = hawaii.translate([x - 0.205 * k, y + 0.212 * k]).clipExtent([[x - 0.214 * k + epsilon$3, y + 0.166 * k + epsilon$3], [x - 0.115 * k - epsilon$3, y + 0.234 * k - epsilon$3]]).stream(pointStream);
26560
26713
  return reset();
26561
26714
  };
26562
26715
 
@@ -26682,9 +26835,9 @@
26682
26835
 
26683
26836
  function project(x, y) {
26684
26837
  if (f > 0) {
26685
- if (y < -halfPi$1 + epsilon$2) y = -halfPi$1 + epsilon$2;
26838
+ if (y < -halfPi$1 + epsilon$3) y = -halfPi$1 + epsilon$3;
26686
26839
  } else {
26687
- if (y > halfPi$1 - epsilon$2) y = halfPi$1 - epsilon$2;
26840
+ if (y > halfPi$1 - epsilon$3) y = halfPi$1 - epsilon$3;
26688
26841
  }
26689
26842
 
26690
26843
  var r = f / pow$1(tany(y), n);
@@ -26717,7 +26870,7 @@
26717
26870
  var cy0 = cos$1(y0),
26718
26871
  n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
26719
26872
  g = cy0 / n + y0;
26720
- if (abs$1(n) < epsilon$2) return equirectangularRaw;
26873
+ if (abs$1(n) < epsilon$3) return equirectangularRaw;
26721
26874
 
26722
26875
  function project(x, y) {
26723
26876
  var gy = g - y,
@@ -26907,7 +27060,7 @@
26907
27060
  var phi2 = phi * phi,
26908
27061
  phi4 = phi2 * phi2;
26909
27062
  phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
26910
- } while (abs$1(delta) > epsilon$2 && --i > 0);
27063
+ } while (abs$1(delta) > epsilon$3 && --i > 0);
26911
27064
 
26912
27065
  return [x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), phi];
26913
27066
  };
@@ -26921,7 +27074,7 @@
26921
27074
  }
26922
27075
  orthographicRaw.invert = azimuthalInvert(asin$1);
26923
27076
  function geoOrthographic () {
26924
- return projection$1(orthographicRaw).scale(249.5).clipAngle(90 + epsilon$2);
27077
+ return projection$1(orthographicRaw).scale(249.5).clipAngle(90 + epsilon$3);
26925
27078
  }
26926
27079
 
26927
27080
  function stereographicRaw(x, y) {
@@ -26963,7 +27116,7 @@
26963
27116
  var abs = Math.abs;
26964
27117
  var cos = Math.cos;
26965
27118
  var sin = Math.sin;
26966
- var epsilon$1 = 1e-6;
27119
+ var epsilon$2 = 1e-6;
26967
27120
  var pi = Math.PI;
26968
27121
  var halfPi = pi / 2;
26969
27122
  var sqrt2 = sqrt(2);
@@ -26979,7 +27132,7 @@
26979
27132
  i = 30,
26980
27133
  delta;
26981
27134
 
26982
- do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi)); while (abs(delta) > epsilon$1 && --i > 0);
27135
+ do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi)); while (abs(delta) > epsilon$2 && --i > 0);
26983
27136
 
26984
27137
  return phi / 2;
26985
27138
  }
@@ -27318,7 +27471,7 @@
27318
27471
  stop = ex[1],
27319
27472
  span = stop - start,
27320
27473
  step = nice ? tickStep(start, stop, k) : span / (k + 1);
27321
- return range$1$1(start + step, stop, step);
27474
+ return range$3(start + step, stop, step);
27322
27475
  };
27323
27476
  }
27324
27477
  /**
@@ -27546,7 +27699,7 @@
27546
27699
  // density in points per square pixel or probability density
27547
27700
 
27548
27701
 
27549
- const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);
27702
+ const s = counts ? Math.pow(2, -2 * k) : 1 / sum$1(values);
27550
27703
 
27551
27704
  for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;
27552
27705
 
@@ -29382,7 +29535,7 @@
29382
29535
  e;
29383
29536
 
29384
29537
  while (t) {
29385
- if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
29538
+ if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
29386
29539
  t = t._next;
29387
29540
  }
29388
29541
 
@@ -30926,7 +31079,8 @@
30926
31079
  var preroot = {
30927
31080
  depth: -1
30928
31081
  },
30929
- ambiguous = {};
31082
+ ambiguous = {},
31083
+ imputed = {};
30930
31084
 
30931
31085
  function defaultId(d) {
30932
31086
  return d.id;
@@ -30938,11 +31092,14 @@
30938
31092
 
30939
31093
  function stratify () {
30940
31094
  var id = defaultId,
30941
- parentId = defaultParentId;
31095
+ parentId = defaultParentId,
31096
+ path;
30942
31097
 
30943
31098
  function stratify(data) {
30944
31099
  var nodes = Array.from(data),
30945
- n = nodes.length,
31100
+ currentId = id,
31101
+ currentParentId = parentId,
31102
+ n,
30946
31103
  d,
30947
31104
  i,
30948
31105
  root,
@@ -30952,15 +31109,34 @@
30952
31109
  nodeKey,
30953
31110
  nodeByKey = new Map();
30954
31111
 
30955
- for (i = 0; i < n; ++i) {
31112
+ if (path != null) {
31113
+ const I = nodes.map((d, i) => normalize(path(d, i, data)));
31114
+ const P = I.map(parentof);
31115
+ const S = new Set(I).add("");
31116
+
31117
+ for (const i of P) {
31118
+ if (!S.has(i)) {
31119
+ S.add(i);
31120
+ I.push(i);
31121
+ P.push(parentof(i));
31122
+ nodes.push(imputed);
31123
+ }
31124
+ }
31125
+
31126
+ currentId = (_, i) => I[i];
31127
+
31128
+ currentParentId = (_, i) => P[i];
31129
+ }
31130
+
31131
+ for (i = 0, n = nodes.length; i < n; ++i) {
30956
31132
  d = nodes[i], node = nodes[i] = new Node$1(d);
30957
31133
 
30958
- if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
31134
+ if ((nodeId = currentId(d, i, data)) != null && (nodeId += "")) {
30959
31135
  nodeKey = node.id = nodeId;
30960
31136
  nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);
30961
31137
  }
30962
31138
 
30963
- if ((nodeId = parentId(d, i, data)) != null && (nodeId += "")) {
31139
+ if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += "")) {
30964
31140
  node.parent = nodeId;
30965
31141
  }
30966
31142
  }
@@ -30980,7 +31156,21 @@
30980
31156
  }
30981
31157
  }
30982
31158
 
30983
- if (!root) throw new Error("no root");
31159
+ if (!root) throw new Error("no root"); // When imputing internal nodes, only introduce roots if needed.
31160
+ // Then replace the imputed marker data with null.
31161
+
31162
+ if (path != null) {
31163
+ while (root.data === imputed && root.children.length === 1) {
31164
+ root = root.children[0], --n;
31165
+ }
31166
+
31167
+ for (let i = nodes.length - 1; i >= 0; --i) {
31168
+ node = nodes[i];
31169
+ if (node.data !== imputed) break;
31170
+ node.data = null;
31171
+ }
31172
+ }
31173
+
30984
31174
  root.parent = preroot;
30985
31175
  root.eachBefore(function (node) {
30986
31176
  node.depth = node.parent.depth + 1;
@@ -30992,14 +31182,54 @@
30992
31182
  }
30993
31183
 
30994
31184
  stratify.id = function (x) {
30995
- return arguments.length ? (id = required(x), stratify) : id;
31185
+ return arguments.length ? (id = optional(x), stratify) : id;
30996
31186
  };
30997
31187
 
30998
31188
  stratify.parentId = function (x) {
30999
- return arguments.length ? (parentId = required(x), stratify) : parentId;
31189
+ return arguments.length ? (parentId = optional(x), stratify) : parentId;
31190
+ };
31191
+
31192
+ stratify.path = function (x) {
31193
+ return arguments.length ? (path = optional(x), stratify) : path;
31000
31194
  };
31001
31195
 
31002
31196
  return stratify;
31197
+ } // To normalize a path, we coerce to a string, strip the trailing slash if any
31198
+ // (as long as the trailing slash is not immediately preceded by another slash),
31199
+ // and add leading slash if missing.
31200
+
31201
+ function normalize(path) {
31202
+ path = "".concat(path);
31203
+ let i = path.length;
31204
+ if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);
31205
+ return path[0] === "/" ? path : "/".concat(path);
31206
+ } // Walk backwards to find the first slash that is not the leading slash, e.g.:
31207
+ // "/foo/bar" ⇥ "/foo", "/foo" ⇥ "/", "/" ↦ "". (The root is special-cased
31208
+ // because the id of the root must be a truthy value.)
31209
+
31210
+
31211
+ function parentof(path) {
31212
+ let i = path.length;
31213
+ if (i < 2) return "";
31214
+
31215
+ while (--i > 1) if (slash(path, i)) break;
31216
+
31217
+ return path.slice(0, i);
31218
+ } // Slashes can be escaped; to determine whether a slash is a path delimiter, we
31219
+ // count the number of preceding backslashes escaping the forward slash: an odd
31220
+ // number indicates an escaped forward slash.
31221
+
31222
+
31223
+ function slash(path, i) {
31224
+ if (path[i] === "/") {
31225
+ let k = 0;
31226
+
31227
+ while (i > 0 && path[--i] === "\\") ++k;
31228
+
31229
+ if ((k & 1) === 0) return true;
31230
+ }
31231
+
31232
+ return false;
31003
31233
  }
31004
31234
 
31005
31235
  function defaultSeparation$1(a, b) {
@@ -32115,10 +32345,7 @@
32115
32345
  treemap: Treemap
32116
32346
  });
32117
32347
 
32118
- const ALPHA_MASK = 0xff000000; // alpha value equivalent to opacity 0.0625
32119
-
32120
- const INSIDE_OPACITY_IN_ALPHA = 0x10000000;
32121
- const INSIDE_OPACITY = 0.0625;
32348
+ const ALPHA_MASK = 0xff000000;
32122
32349
 
32123
32350
  function baseBitmaps($, data) {
32124
32351
  const bitmap = $.bitmap(); // when there is no base mark but data points are to be avoided
@@ -32127,31 +32354,44 @@
32127
32354
  return [bitmap, undefined];
32128
32355
  }
32129
32356
 
32130
- function markBitmaps($, avoidMarks, labelInside, isGroupArea) {
32357
+ function markBitmaps($, baseMark, avoidMarks, labelInside, isGroupArea) {
32131
32358
  // create canvas
32132
32359
  const width = $.width,
32133
32360
  height = $.height,
32134
32361
  border = labelInside || isGroupArea,
32135
- context = domCanvas(width, height).getContext('2d'); // render all marks to be avoided into canvas
32362
+ context = domCanvas(width, height).getContext('2d'),
32363
+ baseMarkContext = domCanvas(width, height).getContext('2d'),
32364
+ strokeContext = border && domCanvas(width, height).getContext('2d'); // render all marks to be avoided into canvas
32365
+
32366
+ avoidMarks.forEach(items => draw(context, items, false));
32367
+ draw(baseMarkContext, baseMark, false);
32136
32368
 
32137
- avoidMarks.forEach(items => draw(context, items, border)); // get canvas buffer, create bitmaps
32369
+ if (border) {
32370
+ draw(strokeContext, baseMark, true);
32371
+ } // get canvas buffer, create bitmaps
32138
32372
 
32139
- const buffer = new Uint32Array(context.getImageData(0, 0, width, height).data.buffer),
32373
+
32374
+ const buffer = getBuffer(context, width, height),
32375
+ baseMarkBuffer = getBuffer(baseMarkContext, width, height),
32376
+ strokeBuffer = border && getBuffer(strokeContext, width, height),
32140
32377
  layer1 = $.bitmap(),
32141
32378
  layer2 = border && $.bitmap(); // populate bitmap layers
32142
32379
 
32143
- let x, y, u, v, alpha;
32380
+ let x, y, u, v, index, alpha, strokeAlpha, baseMarkAlpha;
32144
32381
 
32145
32382
  for (y = 0; y < height; ++y) {
32146
32383
  for (x = 0; x < width; ++x) {
32147
- alpha = buffer[y * width + x] & ALPHA_MASK;
32384
+ index = y * width + x;
32385
+ alpha = buffer[index] & ALPHA_MASK;
32386
+ baseMarkAlpha = baseMarkBuffer[index] & ALPHA_MASK;
32387
+ strokeAlpha = border && strokeBuffer[index] & ALPHA_MASK;
32148
32388
 
32149
- if (alpha) {
32389
+ if (alpha || strokeAlpha || baseMarkAlpha) {
32150
32390
  u = $(x);
32151
32391
  v = $(y);
32152
- if (!isGroupArea) layer1.set(u, v); // update interior bitmap
32392
+ if (!isGroupArea && (alpha || baseMarkAlpha)) layer1.set(u, v); // update interior bitmap
32153
32393
 
32154
- if (border && alpha ^ INSIDE_OPACITY_IN_ALPHA) layer2.set(u, v); // update border bitmap
32394
+ if (border && (alpha || strokeAlpha)) layer2.set(u, v); // update border bitmap
32155
32395
  }
32156
32396
  }
32157
32397
  }
@@ -32159,6 +32399,10 @@
32159
32399
  return [layer1, layer2];
32160
32400
  }
32161
32401
 
32402
+ function getBuffer(context, width, height) {
32403
+ return new Uint32Array(context.getImageData(0, 0, width, height).data.buffer);
32404
+ }
32405
+
32162
32406
  function draw(context, items, interior) {
32163
32407
  if (!items.length) return;
32164
32408
  const type = items[0].mark.marktype;
@@ -32183,15 +32427,12 @@
32183
32427
  function prepare(source) {
32184
32428
  const item = rederive(source, {});
32185
32429
 
32186
- if (item.stroke) {
32187
- item.strokeOpacity = 1;
32188
- }
32189
-
32190
- if (item.fill) {
32191
- item.fillOpacity = INSIDE_OPACITY;
32192
- item.stroke = '#000';
32193
- item.strokeOpacity = 1;
32194
- item.strokeWidth = 2;
32430
+ if (item.stroke && item.strokeOpacity !== 0 || item.fill && item.fillOpacity !== 0) {
32431
+ return { ...item,
32432
+ strokeOpacity: 1,
32433
+ stroke: '#000',
32434
+ fillOpacity: 0
32435
+ };
32195
32436
  }
32196
32437
 
32197
32438
  return item;
@@ -32401,10 +32642,6 @@
32401
32642
  return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;
32402
32643
  }
32403
32644
 
32404
- function _outOfBounds() {
32405
- return false;
32406
- }
32407
-
32408
32645
  function collision($, x, y, textHeight, textWidth, h, bm0, bm1) {
32409
32646
  const w = textWidth * h / (textHeight * 2),
32410
32647
  x1 = $(x - w),
@@ -32414,27 +32651,9 @@
32414
32651
  return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);
32415
32652
  }
32416
32653
 
32417
- function _collision($, x, y, textHeight, textWidth, h, bm0, bm1) {
32418
- const w = textWidth * h / (textHeight * 2);
32419
- let x1 = $(x - w),
32420
- x2 = $(x + w),
32421
- y1 = $(y - (h = h / 2)),
32422
- y2 = $(y + h);
32423
- x1 = x1 > 0 ? x1 : 0;
32424
- y1 = y1 > 0 ? y1 : 0;
32425
- x2 = x2 < $.width ? x2 : $.width - 1;
32426
- y2 = y2 < $.height ? y2 : $.height - 1;
32427
- return bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);
32428
- }
32429
-
32430
- function getTests(infPadding) {
32431
- return infPadding ? [_collision, _outOfBounds] : [collision, outOfBounds];
32432
- }
32433
-
32434
- function placeAreaLabelReducedSearch($, bitmaps, avoidBaseMark, markIndex, infPadding) {
32654
+ function placeAreaLabelReducedSearch($, bitmaps, avoidBaseMark, markIndex) {
32435
32655
  const width = $.width,
32436
32656
  height = $.height,
32437
- [collision, outOfBounds] = getTests(infPadding),
32438
32657
  bm0 = bitmaps[0],
32439
32658
  // where labels have been placed
32440
32659
  bm1 = bitmaps[1]; // area outlines
@@ -32579,10 +32798,9 @@
32579
32798
  const X_DIR = [-1, -1, 1, 1];
32580
32799
  const Y_DIR = [-1, 1, -1, 1];
32581
32800
 
32582
- function placeAreaLabelFloodFill($, bitmaps, avoidBaseMark, markIndex, infPadding) {
32801
+ function placeAreaLabelFloodFill($, bitmaps, avoidBaseMark, markIndex) {
32583
32802
  const width = $.width,
32584
32803
  height = $.height,
32585
- [collision, outOfBounds] = getTests(infPadding),
32586
32804
  bm0 = bitmaps[0],
32587
32805
  // where labels have been placed
32588
32806
  bm1 = bitmaps[1],
@@ -32704,21 +32922,23 @@
32704
32922
  const Aligns = ['right', 'center', 'left'],
32705
32923
  Baselines = ['bottom', 'middle', 'top'];
32706
32924
 
32707
- function placeMarkLabel($, bitmaps, anchors, offsets, infPadding) {
32925
+ function placeMarkLabel($, bitmaps, anchors, offsets) {
32708
32926
  const width = $.width,
32709
32927
  height = $.height,
32710
32928
  bm0 = bitmaps[0],
32711
32929
  bm1 = bitmaps[1],
32712
32930
  n = offsets.length;
32713
32931
  return function (d) {
32932
+ var _d$textWidth;
32933
+
32714
32934
  const boundary = d.boundary,
32715
32935
  textHeight = d.datum.fontSize; // can not be placed if the mark is not visible in the graph bound
32716
32936
 
32717
- if (!infPadding && (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height)) {
32937
+ if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {
32718
32938
  return false;
32719
32939
  }
32720
32940
 
32721
- let textWidth = 0,
32941
+ let textWidth = (_d$textWidth = d.textWidth) !== null && _d$textWidth !== void 0 ? _d$textWidth : 0,
32722
32942
  dx,
32723
32943
  dy,
32724
32944
  isInside,
@@ -32750,12 +32970,6 @@
32750
32970
  _y1 = $(y1);
32751
32971
  _y2 = $(y2);
32752
32972
 
32753
- if (infPadding) {
32754
- _x1 = _x1 < 0 ? 0 : _x1;
32755
- _y1 = _y1 < 0 ? 0 : _y1;
32756
- _y2 = _y2 >= $.height ? $.height - 1 : _y2;
32757
- }
32758
-
32759
32973
  if (!textWidth) {
32760
32974
  // to avoid finding width of text label,
32761
32975
  if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {
@@ -32773,11 +32987,6 @@
32773
32987
  _x1 = $(x1);
32774
32988
  _x2 = $(x2);
32775
32989
 
32776
- if (infPadding) {
32777
- _x1 = _x1 < 0 ? 0 : _x1;
32778
- _x2 = _x2 >= $.width ? $.width - 1 : _x2;
32779
- }
32780
-
32781
32990
  if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {
32782
32991
  // place label if the position is placeable
32783
32992
  d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;
@@ -32795,11 +33004,7 @@
32795
33004
 
32796
33005
 
32797
33006
  function test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {
32798
- return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 ? bm1.getRange(_x1, _y1, _x2, _y2) || !isInMarkBound(x1, y1, x2, y2, boundary) : bm0.getRange(_x1, _y1, _x2, _y2)));
32799
- }
32800
-
32801
- function isInMarkBound(x1, y1, x2, y2, boundary) {
32802
- return boundary[0] <= x1 && x2 <= boundary[2] && boundary[3] <= y1 && y2 <= boundary[5];
33007
+ return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 || bm0).getRange(_x1, _y1, _x2, _y2));
32803
33008
  }
32804
33009
 
32805
33010
  const TOP = 0x0,
@@ -32837,18 +33042,27 @@
32837
33042
  isGroupArea = grouptype === 'area',
32838
33043
  boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),
32839
33044
  infPadding = padding === null || padding === Infinity,
32840
- $ = scaler(size[0], size[1], infPadding ? 0 : padding),
32841
- isNaiveGroupArea = isGroupArea && method === 'naive'; // prepare text mark data for placing
32842
-
32843
- const data = texts.map(d => ({
32844
- datum: d,
32845
- opacity: 0,
32846
- x: undefined,
32847
- y: undefined,
32848
- align: undefined,
32849
- baseline: undefined,
32850
- boundary: boundary(d)
32851
- }));
33045
+ isNaiveGroupArea = isGroupArea && method === 'naive';
33046
+ let maxTextWidth = -1,
33047
+ maxTextHeight = -1; // prepare text mark data for placing
33048
+
33049
+ const data = texts.map(d => {
33050
+ const textWidth = infPadding ? textMetrics.width(d, d.text) : undefined;
33051
+ maxTextWidth = Math.max(maxTextWidth, textWidth);
33052
+ maxTextHeight = Math.max(maxTextHeight, d.fontSize);
33053
+ return {
33054
+ datum: d,
33055
+ opacity: 0,
33056
+ x: undefined,
33057
+ y: undefined,
33058
+ align: undefined,
33059
+ baseline: undefined,
33060
+ boundary: boundary(d),
33061
+ textWidth
33062
+ };
33063
+ });
33064
+ padding = padding === null || padding === Infinity ? Math.max(maxTextWidth, maxTextHeight) + Math.max(...offset) : padding;
33065
+ const $ = scaler(size[0], size[1], padding);
32852
33066
  let bitmaps;
32853
33067
 
32854
33068
  if (!isNaiveGroupArea) {
@@ -32868,16 +33082,13 @@
32868
33082
  // base mark is implicitly avoided if it is a group area
32869
33083
 
32870
33084
 
32871
- if (marktype && (avoidBaseMark || isGroupArea)) {
32872
- avoidMarks = [texts.map(d => d.datum)].concat(avoidMarks);
32873
- } // generate bitmaps for layout calculation
32874
-
33085
+ const baseMark = (marktype && avoidBaseMark || isGroupArea) && texts.map(d => d.datum); // generate bitmaps for layout calculation
32875
33086
 
32876
- bitmaps = avoidMarks.length ? markBitmaps($, avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);
33087
+ bitmaps = avoidMarks.length || baseMark ? markBitmaps($, baseMark || [], avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);
32877
33088
  } // generate label placement function
32878
33089
 
32879
33090
 
32880
- const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex, infPadding) : placeMarkLabel($, bitmaps, anchors, offsets, infPadding); // place all labels
33091
+ const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets); // place all labels
32881
33092
 
32882
33093
  data.forEach(d => d.opacity = +place(d));
32883
33094
  return data;
@@ -32912,7 +33123,7 @@
32912
33123
  * Factory function for function for getting base mark boundary, depending
32913
33124
  * on mark and group type. When mark type is undefined, line or area: boundary
32914
33125
  * is the coordinate of each data point. When base mark is grouped line,
32915
- * boundary is either at the beginning or end of the line depending on the
33126
+ * boundary is either at the start or end of the line depending on the
32916
33127
  * value of lineAnchor. Otherwise, use bounds of base mark.
32917
33128
  */
32918
33129
 
@@ -33326,10 +33537,285 @@
33326
33537
  regression: Regression
33327
33538
  });
33328
33539
 
33540
+ const epsilon$1 = 1.1102230246251565e-16;
33541
+ const splitter = 134217729;
33542
+ const resulterrbound = (3 + 8 * epsilon$1) * epsilon$1; // fast_expansion_sum_zeroelim routine from oritinal code
33543
+
33544
+ function sum(elen, e, flen, f, h) {
33545
+ let Q, Qnew, hh, bvirt;
33546
+ let enow = e[0];
33547
+ let fnow = f[0];
33548
+ let eindex = 0;
33549
+ let findex = 0;
33550
+
33551
+ if (fnow > enow === fnow > -enow) {
33552
+ Q = enow;
33553
+ enow = e[++eindex];
33554
+ } else {
33555
+ Q = fnow;
33556
+ fnow = f[++findex];
33557
+ }
33558
+
33559
+ let hindex = 0;
33560
+
33561
+ if (eindex < elen && findex < flen) {
33562
+ if (fnow > enow === fnow > -enow) {
33563
+ Qnew = enow + Q;
33564
+ hh = Q - (Qnew - enow);
33565
+ enow = e[++eindex];
33566
+ } else {
33567
+ Qnew = fnow + Q;
33568
+ hh = Q - (Qnew - fnow);
33569
+ fnow = f[++findex];
33570
+ }
33571
+
33572
+ Q = Qnew;
33573
+
33574
+ if (hh !== 0) {
33575
+ h[hindex++] = hh;
33576
+ }
33577
+
33578
+ while (eindex < elen && findex < flen) {
33579
+ if (fnow > enow === fnow > -enow) {
33580
+ Qnew = Q + enow;
33581
+ bvirt = Qnew - Q;
33582
+ hh = Q - (Qnew - bvirt) + (enow - bvirt);
33583
+ enow = e[++eindex];
33584
+ } else {
33585
+ Qnew = Q + fnow;
33586
+ bvirt = Qnew - Q;
33587
+ hh = Q - (Qnew - bvirt) + (fnow - bvirt);
33588
+ fnow = f[++findex];
33589
+ }
33590
+
33591
+ Q = Qnew;
33592
+
33593
+ if (hh !== 0) {
33594
+ h[hindex++] = hh;
33595
+ }
33596
+ }
33597
+ }
33598
+
33599
+ while (eindex < elen) {
33600
+ Qnew = Q + enow;
33601
+ bvirt = Qnew - Q;
33602
+ hh = Q - (Qnew - bvirt) + (enow - bvirt);
33603
+ enow = e[++eindex];
33604
+ Q = Qnew;
33605
+
33606
+ if (hh !== 0) {
33607
+ h[hindex++] = hh;
33608
+ }
33609
+ }
33610
+
33611
+ while (findex < flen) {
33612
+ Qnew = Q + fnow;
33613
+ bvirt = Qnew - Q;
33614
+ hh = Q - (Qnew - bvirt) + (fnow - bvirt);
33615
+ fnow = f[++findex];
33616
+ Q = Qnew;
33617
+
33618
+ if (hh !== 0) {
33619
+ h[hindex++] = hh;
33620
+ }
33621
+ }
33622
+
33623
+ if (Q !== 0 || hindex === 0) {
33624
+ h[hindex++] = Q;
33625
+ }
33626
+
33627
+ return hindex;
33628
+ }
33629
+ function estimate(elen, e) {
33630
+ let Q = e[0];
33631
+
33632
+ for (let i = 1; i < elen; i++) Q += e[i];
33633
+
33634
+ return Q;
33635
+ }
33636
+ function vec(n) {
33637
+ return new Float64Array(n);
33638
+ }
33639
+
33640
+ const ccwerrboundA = (3 + 16 * epsilon$1) * epsilon$1;
33641
+ const ccwerrboundB = (2 + 12 * epsilon$1) * epsilon$1;
33642
+ const ccwerrboundC = (9 + 64 * epsilon$1) * epsilon$1 * epsilon$1;
33643
+ const B = vec(4);
33644
+ const C1 = vec(8);
33645
+ const C2 = vec(12);
33646
+ const D = vec(16);
33647
+ const u = vec(4);
33648
+
33649
+ function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {
33650
+ let acxtail, acytail, bcxtail, bcytail;
33651
+
33652
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
33653
+
33654
+ const acx = ax - cx;
33655
+ const bcx = bx - cx;
33656
+ const acy = ay - cy;
33657
+ const bcy = by - cy;
33658
+ s1 = acx * bcy;
33659
+ c = splitter * acx;
33660
+ ahi = c - (c - acx);
33661
+ alo = acx - ahi;
33662
+ c = splitter * bcy;
33663
+ bhi = c - (c - bcy);
33664
+ blo = bcy - bhi;
33665
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
33666
+ t1 = acy * bcx;
33667
+ c = splitter * acy;
33668
+ ahi = c - (c - acy);
33669
+ alo = acy - ahi;
33670
+ c = splitter * bcx;
33671
+ bhi = c - (c - bcx);
33672
+ blo = bcx - bhi;
33673
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
33674
+ _i = s0 - t0;
33675
+ bvirt = s0 - _i;
33676
+ B[0] = s0 - (_i + bvirt) + (bvirt - t0);
33677
+ _j = s1 + _i;
33678
+ bvirt = _j - s1;
33679
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
33680
+ _i = _0 - t1;
33681
+ bvirt = _0 - _i;
33682
+ B[1] = _0 - (_i + bvirt) + (bvirt - t1);
33683
+ u3 = _j + _i;
33684
+ bvirt = u3 - _j;
33685
+ B[2] = _j - (u3 - bvirt) + (_i - bvirt);
33686
+ B[3] = u3;
33687
+ let det = estimate(4, B);
33688
+ let errbound = ccwerrboundB * detsum;
33689
+
33690
+ if (det >= errbound || -det >= errbound) {
33691
+ return det;
33692
+ }
33693
+
33694
+ bvirt = ax - acx;
33695
+ acxtail = ax - (acx + bvirt) + (bvirt - cx);
33696
+ bvirt = bx - bcx;
33697
+ bcxtail = bx - (bcx + bvirt) + (bvirt - cx);
33698
+ bvirt = ay - acy;
33699
+ acytail = ay - (acy + bvirt) + (bvirt - cy);
33700
+ bvirt = by - bcy;
33701
+ bcytail = by - (bcy + bvirt) + (bvirt - cy);
33702
+
33703
+ if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {
33704
+ return det;
33705
+ }
33706
+
33707
+ errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);
33708
+ det += acx * bcytail + bcy * acxtail - (acy * bcxtail + bcx * acytail);
33709
+ if (det >= errbound || -det >= errbound) return det;
33710
+ s1 = acxtail * bcy;
33711
+ c = splitter * acxtail;
33712
+ ahi = c - (c - acxtail);
33713
+ alo = acxtail - ahi;
33714
+ c = splitter * bcy;
33715
+ bhi = c - (c - bcy);
33716
+ blo = bcy - bhi;
33717
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
33718
+ t1 = acytail * bcx;
33719
+ c = splitter * acytail;
33720
+ ahi = c - (c - acytail);
33721
+ alo = acytail - ahi;
33722
+ c = splitter * bcx;
33723
+ bhi = c - (c - bcx);
33724
+ blo = bcx - bhi;
33725
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
33726
+ _i = s0 - t0;
33727
+ bvirt = s0 - _i;
33728
+ u[0] = s0 - (_i + bvirt) + (bvirt - t0);
33729
+ _j = s1 + _i;
33730
+ bvirt = _j - s1;
33731
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
33732
+ _i = _0 - t1;
33733
+ bvirt = _0 - _i;
33734
+ u[1] = _0 - (_i + bvirt) + (bvirt - t1);
33735
+ u3 = _j + _i;
33736
+ bvirt = u3 - _j;
33737
+ u[2] = _j - (u3 - bvirt) + (_i - bvirt);
33738
+ u[3] = u3;
33739
+ const C1len = sum(4, B, 4, u, C1);
33740
+ s1 = acx * bcytail;
33741
+ c = splitter * acx;
33742
+ ahi = c - (c - acx);
33743
+ alo = acx - ahi;
33744
+ c = splitter * bcytail;
33745
+ bhi = c - (c - bcytail);
33746
+ blo = bcytail - bhi;
33747
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
33748
+ t1 = acy * bcxtail;
33749
+ c = splitter * acy;
33750
+ ahi = c - (c - acy);
33751
+ alo = acy - ahi;
33752
+ c = splitter * bcxtail;
33753
+ bhi = c - (c - bcxtail);
33754
+ blo = bcxtail - bhi;
33755
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
33756
+ _i = s0 - t0;
33757
+ bvirt = s0 - _i;
33758
+ u[0] = s0 - (_i + bvirt) + (bvirt - t0);
33759
+ _j = s1 + _i;
33760
+ bvirt = _j - s1;
33761
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
33762
+ _i = _0 - t1;
33763
+ bvirt = _0 - _i;
33764
+ u[1] = _0 - (_i + bvirt) + (bvirt - t1);
33765
+ u3 = _j + _i;
33766
+ bvirt = u3 - _j;
33767
+ u[2] = _j - (u3 - bvirt) + (_i - bvirt);
33768
+ u[3] = u3;
33769
+ const C2len = sum(C1len, C1, 4, u, C2);
33770
+ s1 = acxtail * bcytail;
33771
+ c = splitter * acxtail;
33772
+ ahi = c - (c - acxtail);
33773
+ alo = acxtail - ahi;
33774
+ c = splitter * bcytail;
33775
+ bhi = c - (c - bcytail);
33776
+ blo = bcytail - bhi;
33777
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
33778
+ t1 = acytail * bcxtail;
33779
+ c = splitter * acytail;
33780
+ ahi = c - (c - acytail);
33781
+ alo = acytail - ahi;
33782
+ c = splitter * bcxtail;
33783
+ bhi = c - (c - bcxtail);
33784
+ blo = bcxtail - bhi;
33785
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
33786
+ _i = s0 - t0;
33787
+ bvirt = s0 - _i;
33788
+ u[0] = s0 - (_i + bvirt) + (bvirt - t0);
33789
+ _j = s1 + _i;
33790
+ bvirt = _j - s1;
33791
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
33792
+ _i = _0 - t1;
33793
+ bvirt = _0 - _i;
33794
+ u[1] = _0 - (_i + bvirt) + (bvirt - t1);
33795
+ u3 = _j + _i;
33796
+ bvirt = u3 - _j;
33797
+ u[2] = _j - (u3 - bvirt) + (_i - bvirt);
33798
+ u[3] = u3;
33799
+ const Dlen = sum(C2len, C2, 4, u, D);
33800
+ return D[Dlen - 1];
33801
+ }
33802
+
33803
+ function orient2d(ax, ay, bx, by, cx, cy) {
33804
+ const detleft = (ay - cy) * (bx - cx);
33805
+ const detright = (ax - cx) * (by - cy);
33806
+ const det = detleft - detright;
33807
+ if (detleft === 0 || detright === 0 || detleft > 0 !== detright > 0) return det;
33808
+ const detsum = Math.abs(detleft + detright);
33809
+ if (Math.abs(det) >= ccwerrboundA * detsum) return det;
33810
+ return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);
33811
+ }
33812
+
33329
33813
  const EPSILON = Math.pow(2, -52);
33330
33814
  const EDGE_STACK = new Uint32Array(512);
33331
33815
  class Delaunator {
33332
- static from(points, getX = defaultGetX, getY = defaultGetY) {
33816
+ static from(points) {
33817
+ let getX = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetX;
33818
+ let getY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGetY;
33333
33819
  const n = points.length;
33334
33820
  const coords = new Float64Array(n * 2);
33335
33821
 
@@ -33463,7 +33949,7 @@
33463
33949
  } // swap the order of the seed points for counter-clockwise orientation
33464
33950
 
33465
33951
 
33466
- if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {
33952
+ if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {
33467
33953
  const i = i1;
33468
33954
  const x = i1x;
33469
33955
  const y = i1y;
@@ -33524,7 +34010,7 @@
33524
34010
  let e = start,
33525
34011
  q;
33526
34012
 
33527
- while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {
34013
+ while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {
33528
34014
  e = q;
33529
34015
 
33530
34016
  if (e === start) {
@@ -33546,7 +34032,7 @@
33546
34032
 
33547
34033
  let n = hullNext[e];
33548
34034
 
33549
- while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) {
34035
+ while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {
33550
34036
  t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);
33551
34037
  hullTri[i] = this._legalize(t + 2);
33552
34038
  hullNext[n] = n; // mark as removed
@@ -33557,7 +34043,7 @@
33557
34043
 
33558
34044
 
33559
34045
  if (e === start) {
33560
- while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {
34046
+ while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {
33561
34047
  t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);
33562
34048
 
33563
34049
  this._legalize(t + 2);
@@ -33712,19 +34198,6 @@
33712
34198
  const dx = ax - bx;
33713
34199
  const dy = ay - by;
33714
34200
  return dx * dx + dy * dy;
33715
- } // return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check
33716
-
33717
-
33718
- function orientIfSure(px, py, rx, ry, qx, qy) {
33719
- const l = (ry - py) * (qx - px);
33720
- const r = (rx - px) * (qy - py);
33721
- return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;
33722
- } // a more robust orientation test that's stable in a given triangle (to fix robustness issues)
33723
-
33724
-
33725
- function orient(rx, ry, qx, qy, px, py) {
33726
- const sign = orientIfSure(px, py, rx, ry, qx, qy) || orientIfSure(rx, ry, qx, qy, px, py) || orientIfSure(qx, qy, px, py, rx, ry);
33727
- return sign < 0;
33728
34201
  }
33729
34202
 
33730
34203
  function inCircle(ax, ay, bx, by, cx, cy, px, py) {
@@ -33837,7 +34310,7 @@
33837
34310
  }
33838
34311
 
33839
34312
  moveTo(x, y) {
33840
- this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;
34313
+ this._ += "M".concat(this._x0 = this._x1 = +x, ",").concat(this._y0 = this._y1 = +y);
33841
34314
  }
33842
34315
 
33843
34316
  closePath() {
@@ -33848,7 +34321,7 @@
33848
34321
  }
33849
34322
 
33850
34323
  lineTo(x, y) {
33851
- this._ += `L${this._x1 = +x},${this._y1 = +y}`;
34324
+ this._ += "L".concat(this._x1 = +x, ",").concat(this._y1 = +y);
33852
34325
  }
33853
34326
 
33854
34327
  arc(x, y, r) {
@@ -33856,13 +34329,13 @@
33856
34329
  const x0 = x + r;
33857
34330
  const y0 = y;
33858
34331
  if (r < 0) throw new Error("negative radius");
33859
- if (this._x1 === null) this._ += `M${x0},${y0}`;else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += "L" + x0 + "," + y0;
34332
+ if (this._x1 === null) this._ += "M".concat(x0, ",").concat(y0);else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += "L" + x0 + "," + y0;
33860
34333
  if (!r) return;
33861
- this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;
34334
+ this._ += "A".concat(r, ",").concat(r, ",0,1,1,").concat(x - r, ",").concat(y, "A").concat(r, ",").concat(r, ",0,1,1,").concat(this._x1 = x0, ",").concat(this._y1 = y0);
33862
34335
  }
33863
34336
 
33864
34337
  rect(x, y, w, h) {
33865
- this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;
34338
+ this._ += "M".concat(this._x0 = this._x1 = +x, ",").concat(this._y0 = this._y1 = +y, "h").concat(+w, "v").concat(+h, "h").concat(-w, "Z");
33866
34339
  }
33867
34340
 
33868
34341
  value() {
@@ -33895,7 +34368,8 @@
33895
34368
  }
33896
34369
 
33897
34370
  class Voronoi$1 {
33898
- constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {
34371
+ constructor(delaunay) {
34372
+ let [xmin, ymin, xmax, ymax] = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 960, 500];
33899
34373
  if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error("invalid bounds");
33900
34374
  this.delaunay = delaunay;
33901
34375
  this._circumcenters = new Float64Array(delaunay.points.length * 2);
@@ -33940,20 +34414,26 @@
33940
34414
  const dy = y2 - y1;
33941
34415
  const ex = x3 - x1;
33942
34416
  const ey = y3 - y1;
33943
- const bl = dx * dx + dy * dy;
33944
- const cl = ex * ex + ey * ey;
33945
34417
  const ab = (dx * ey - dy * ex) * 2;
33946
34418
 
33947
- if (!ab) {
34419
+ if (Math.abs(ab) < 1e-9) {
33948
34420
  // degenerate case (collinear diagram)
33949
- x = (x1 + x3) / 2 - 1e8 * ey;
33950
- y = (y1 + y3) / 2 + 1e8 * ex;
33951
- } else if (Math.abs(ab) < 1e-8) {
33952
34421
  // almost equal points (degenerate triangle)
33953
- x = (x1 + x3) / 2;
33954
- y = (y1 + y3) / 2;
34422
+ // the circumcenter is at the infinity, in a
34423
+ // direction that is:
34424
+ // 1. orthogonal to the halfedge.
34425
+ let a = 1e9; // 2. points away from the center; since the list of triangles starts
34426
+ // in the center, the first point of the first triangle
34427
+ // will be our reference
34428
+
34429
+ const r = triangles[0] * 2;
34430
+ a *= Math.sign((points[r] - x1) * ey - (points[r + 1] - y1) * ex);
34431
+ x = (x1 + x3) / 2 - a * ey;
34432
+ y = (y1 + y3) / 2 + a * ex;
33955
34433
  } else {
33956
34434
  const d = 1 / ab;
34435
+ const bl = dx * dx + dy * dy;
34436
+ const cl = ex * ex + ey * ey;
33957
34437
  x = x1 + (ey * bl - dy * cl) * d;
33958
34438
  y = y1 + (dx * cl - ex * bl) * d;
33959
34439
  }
@@ -34162,7 +34642,8 @@
34162
34642
  let c0,
34163
34643
  c1 = this._regioncode(x1, y1);
34164
34644
 
34165
- let e0, e1;
34645
+ let e0,
34646
+ e1 = 0;
34166
34647
 
34167
34648
  for (let j = 0; j < n; j += 2) {
34168
34649
  x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];
@@ -34275,7 +34756,9 @@
34275
34756
  e0 = 0b0101, x = this.xmin, y = this.ymin;
34276
34757
  break;
34277
34758
  // left
34278
- }
34759
+ } // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are
34760
+ // undefined, the conditional statement will be executed.
34761
+
34279
34762
 
34280
34763
  if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {
34281
34764
  P.splice(j, 0, x, y), j += 2;
@@ -34366,7 +34849,10 @@
34366
34849
  }
34367
34850
 
34368
34851
  class Delaunay {
34369
- static from(points, fx = pointX, fy = pointY, that) {
34852
+ static from(points) {
34853
+ let fx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : pointX;
34854
+ let fy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : pointY;
34855
+ let that = arguments.length > 3 ? arguments[3] : undefined;
34370
34856
  return new Delaunay("length" in points ? flatArray(points, fx, fy, that) : Float64Array.from(flatIterable(points, fx, fy, that)));
34371
34857
  }
34372
34858
 
@@ -34436,10 +34922,13 @@
34436
34922
  this.triangles = new Int32Array(3).fill(-1);
34437
34923
  this.halfedges = new Int32Array(3).fill(-1);
34438
34924
  this.triangles[0] = hull[0];
34439
- this.triangles[1] = hull[1];
34440
- this.triangles[2] = hull[1];
34441
34925
  inedges[hull[0]] = 1;
34442
- if (hull.length === 2) inedges[hull[1]] = 0;
34926
+
34927
+ if (hull.length === 2) {
34928
+ inedges[hull[1]] = 0;
34929
+ this.triangles[1] = hull[1];
34930
+ this.triangles[2] = hull[1];
34931
+ }
34443
34932
  }
34444
34933
  }
34445
34934
 
@@ -34485,7 +34974,8 @@
34485
34974
  } while (e !== e0);
34486
34975
  }
34487
34976
 
34488
- find(x, y, i = 0) {
34977
+ find(x, y) {
34978
+ let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
34489
34979
  if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;
34490
34980
  const i0 = i;
34491
34981
  let c;
@@ -34554,7 +35044,9 @@
34554
35044
  return buffer && buffer.value();
34555
35045
  }
34556
35046
 
34557
- renderPoints(context, r = 2) {
35047
+ renderPoints(context, r) {
35048
+ if (r === undefined && (!context || typeof context.moveTo !== "function")) r = context, context = null;
35049
+ r = r == undefined ? 2 : +r;
34558
35050
  const buffer = context == null ? context = new Path() : undefined;
34559
35051
  const {
34560
35052
  points
@@ -36068,6 +36560,8 @@
36068
36560
  resolvefilter: ResolveFilter
36069
36561
  });
36070
36562
 
36563
+ var version = "5.22.1";
36564
+
36071
36565
  const RawCode = 'RawCode';
36072
36566
  const Literal = 'Literal';
36073
36567
  const Property = 'Property';
@@ -36248,11 +36742,20 @@
36248
36742
 
36249
36743
 
36250
36744
  function isIdentifierStart(ch) {
36251
- return ch === 0x24 || ch === 0x5F || ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A || ch === 0x5C || ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));
36745
+ return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)
36746
+ ch >= 0x41 && ch <= 0x5A || // A..Z
36747
+ ch >= 0x61 && ch <= 0x7A || // a..z
36748
+ ch === 0x5C || // \ (backslash)
36749
+ ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));
36252
36750
  }
36253
36751
 
36254
36752
  function isIdentifierPart(ch) {
36255
- return ch === 0x24 || ch === 0x5F || ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A || ch >= 0x30 && ch <= 0x39 || ch === 0x5C || ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));
36753
+ return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)
36754
+ ch >= 0x41 && ch <= 0x5A || // A..Z
36755
+ ch >= 0x61 && ch <= 0x7A || // a..z
36756
+ ch >= 0x30 && ch <= 0x39 || // 0..9
36757
+ ch === 0x5C || // \ (backslash)
36758
+ ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));
36256
36759
  } // 7.6.1.1 Keywords
36257
36760
 
36258
36761
 
@@ -37742,7 +38245,7 @@
37742
38245
  functions = (opt.functions || Functions)(visit),
37743
38246
  globalvar = opt.globalvar,
37744
38247
  fieldvar = opt.fieldvar,
37745
- outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}["${id}"]`;
38248
+ outputGlobal = isFunction(globalvar) ? globalvar : id => "".concat(globalvar, "[\"").concat(id, "\"]");
37746
38249
  let globals = {},
37747
38250
  fields = {},
37748
38251
  memberDepth = 0;
@@ -37827,70 +38330,15 @@
37827
38330
  return codegen;
37828
38331
  }
37829
38332
 
37830
- function ascending(a, b) {
37831
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
37832
- }
37833
-
37834
- function bisector(f) {
37835
- let delta = f;
37836
- let compare = f;
37837
-
37838
- if (f.length === 1) {
37839
- delta = (d, x) => f(d) - x;
37840
-
37841
- compare = ascendingComparator(f);
37842
- }
37843
-
37844
- function left(a, x, lo, hi) {
37845
- if (lo == null) lo = 0;
37846
- if (hi == null) hi = a.length;
37847
-
37848
- while (lo < hi) {
37849
- const mid = lo + hi >>> 1;
37850
- if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;
37851
- }
37852
-
37853
- return lo;
37854
- }
37855
-
37856
- function right(a, x, lo, hi) {
37857
- if (lo == null) lo = 0;
37858
- if (hi == null) hi = a.length;
37859
-
37860
- while (lo < hi) {
37861
- const mid = lo + hi >>> 1;
37862
- if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;
37863
- }
37864
-
37865
- return lo;
37866
- }
37867
-
37868
- function center(a, x, lo, hi) {
37869
- if (lo == null) lo = 0;
37870
- if (hi == null) hi = a.length;
37871
- const i = left(a, x, lo, hi - 1);
37872
- return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
37873
- }
37874
-
37875
- return {
37876
- left,
37877
- center,
37878
- right
37879
- };
37880
- }
37881
-
37882
- function ascendingComparator(f) {
37883
- return (d, x) => ascending(f(d), x);
37884
- }
37885
-
37886
38333
  const Intersect = 'intersect';
37887
38334
  const Union = 'union';
37888
38335
  const VlMulti = 'vlMulti';
37889
38336
  const VlPoint = 'vlPoint';
37890
38337
  const Or = 'or';
37891
38338
  const And = 'and';
37892
- const SELECTION_ID = '_vgsid_',
37893
- TYPE_ENUM = 'E',
38339
+ const SelectionId = '_vgsid_';
38340
+ const $selectionId = field$1(SelectionId);
38341
+ const TYPE_ENUM = 'E',
37894
38342
  TYPE_RANGE_INC = 'R',
37895
38343
  TYPE_RANGE_EXC = 'R-E',
37896
38344
  TYPE_RANGE_LE = 'R-LE',
@@ -37994,8 +38442,7 @@
37994
38442
  return n && intersect;
37995
38443
  }
37996
38444
 
37997
- const selectionId = field$1(SELECTION_ID),
37998
- bisect = bisector(selectionId),
38445
+ const bisect = bisector($selectionId),
37999
38446
  bisectLeft = bisect.left,
38000
38447
  bisectRight = bisect.right;
38001
38448
 
@@ -38004,10 +38451,10 @@
38004
38451
  entries = data ? data.values.value : [],
38005
38452
  unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,
38006
38453
  intersect = op === Intersect,
38007
- value = selectionId(datum),
38454
+ value = $selectionId(datum),
38008
38455
  index = bisectLeft(entries, value);
38009
38456
  if (index === entries.length) return false;
38010
- if (selectionId(entries[index]) !== value) return false;
38457
+ if ($selectionId(entries[index]) !== value) return false;
38011
38458
 
38012
38459
  if (unitIdx && intersect) {
38013
38460
  if (unitIdx.size === 1) return true;
@@ -38019,15 +38466,17 @@
38019
38466
  /**
38020
38467
  * Maps an array of scene graph items to an array of selection tuples.
38021
38468
  * @param {string} name - The name of the dataset representing the selection.
38022
- * @param {string} unit - The name of the unit view.
38469
+ * @param {string} base - The base object that generated tuples extend.
38023
38470
  *
38024
38471
  * @returns {array} An array of selection entries for the given unit.
38025
38472
  */
38026
38473
 
38027
38474
 
38028
38475
  function selectionTuples(array, base) {
38029
- return array.map(x => extend$1({
38476
+ return array.map(x => extend$1(base.fields ? {
38030
38477
  values: base.fields.map(f => (f.getter || (f.getter = field$1(f.field)))(x.datum))
38478
+ } : {
38479
+ [SelectionId]: $selectionId(x.datum)
38031
38480
  }, base));
38032
38481
  }
38033
38482
  /**
@@ -38056,6 +38505,7 @@
38056
38505
  values,
38057
38506
  unit,
38058
38507
  field,
38508
+ value,
38059
38509
  res,
38060
38510
  resUnit,
38061
38511
  type,
@@ -38071,32 +38521,55 @@
38071
38521
  fields = entry.fields;
38072
38522
  values = entry.values;
38073
38523
 
38074
- for (j = 0, m = fields.length; j < m; ++j) {
38075
- field = fields[j];
38076
- res = resolved[field.field] || (resolved[field.field] = {});
38524
+ if (fields && values) {
38525
+ // Intentional selection stores
38526
+ for (j = 0, m = fields.length; j < m; ++j) {
38527
+ field = fields[j];
38528
+ res = resolved[field.field] || (resolved[field.field] = {});
38529
+ resUnit = res[unit] || (res[unit] = []);
38530
+ types[field.field] = type = field.type.charAt(0);
38531
+ union = ops["".concat(type, "_union")];
38532
+ res[unit] = union(resUnit, array$5(values[j]));
38533
+ } // If the same multi-selection is repeated over views and projected over
38534
+ // an encoding, it may operate over different fields making it especially
38535
+ // tricky to reliably resolve it. At best, we can de-dupe identical entries
38536
+ // but doing so may be more computationally expensive than it is worth.
38537
+ // Instead, for now, we simply transform our store representation into
38538
+ // a more human-friendly one.
38539
+
38540
+
38541
+ if (isMulti) {
38542
+ resUnit = multiRes[unit] || (multiRes[unit] = []);
38543
+ resUnit.push(array$5(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));
38544
+ }
38545
+ } else {
38546
+ // Short circuit extensional selectionId stores which hold sorted IDs unique to each unit.
38547
+ field = SelectionId;
38548
+ value = $selectionId(entry);
38549
+ res = resolved[field] || (resolved[field] = {});
38077
38550
  resUnit = res[unit] || (res[unit] = []);
38078
- types[field.field] = type = field.type.charAt(0);
38079
- union = ops[type + '_union'];
38080
- res[unit] = union(resUnit, array$5(values[j]));
38081
- } // If the same multi-selection is repeated over views and projected over
38082
- // an encoding, it may operate over different fields making it especially
38083
- // tricky to reliably resolve it. At best, we can de-dupe identical entries
38084
- // but doing so may be more computationally expensive than it is worth.
38085
- // Instead, for now, we simply transform our store representation into
38086
- // a more human-friendly one.
38087
-
38551
+ resUnit.push(value);
38088
38552
 
38089
- if (isMulti) {
38090
- resUnit = multiRes[unit] || (multiRes[unit] = []);
38091
- resUnit.push(array$5(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));
38553
+ if (isMulti) {
38554
+ resUnit = multiRes[unit] || (multiRes[unit] = []);
38555
+ resUnit.push({
38556
+ [SelectionId]: value
38557
+ });
38558
+ }
38092
38559
  }
38093
38560
  } // Then resolve fields across units as per the op.
38094
38561
 
38095
38562
 
38096
38563
  op = op || Union;
38097
- Object.keys(resolved).forEach(field => {
38098
- resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[types[field] + '_' + op](acc, curr));
38099
- });
38564
+
38565
+ if (resolved[SelectionId]) {
38566
+ resolved[SelectionId] = ops["".concat(SelectionId, "_").concat(op)](...Object.values(resolved[SelectionId]));
38567
+ } else {
38568
+ Object.keys(resolved).forEach(field => {
38569
+ resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops["".concat(types[field], "_").concat(op)](acc, curr));
38570
+ });
38571
+ }
38572
+
38100
38573
  entries = Object.keys(multiRes);
38101
38574
 
38102
38575
  if (isMulti && entries.length) {
@@ -38114,6 +38587,8 @@
38114
38587
  }
38115
38588
 
38116
38589
  var ops = {
38590
+ ["".concat(SelectionId, "_union")]: union,
38591
+ ["".concat(SelectionId, "_intersect")]: intersection,
38117
38592
  E_union: function (base, value) {
38118
38593
  if (!base.length) return value;
38119
38594
  var i = 0,
@@ -38322,9 +38797,9 @@
38322
38797
 
38323
38798
 
38324
38799
  return {
38325
- _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,
38326
- _range: args => `${ref(args[0])}.range()`,
38327
- _scale: args => `${ref(args[0])}(${codegen(args[1])})`
38800
+ _bandwidth: args => "this.__bandwidth(".concat(ref(args[0]), ")"),
38801
+ _range: args => "".concat(ref(args[0]), ".range()"),
38802
+ _scale: args => "".concat(ref(args[0]), "(").concat(codegen(args[1]), ")")
38328
38803
  };
38329
38804
  }
38330
38805
 
@@ -38516,19 +38991,35 @@
38516
38991
  return array(seq) || (isString(seq) ? seq : null);
38517
38992
  }
38518
38993
 
38519
- function join(seq, ...args) {
38994
+ function join(seq) {
38995
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
38996
+ args[_key - 1] = arguments[_key];
38997
+ }
38998
+
38520
38999
  return array(seq).join(...args);
38521
39000
  }
38522
39001
 
38523
- function indexof(seq, ...args) {
39002
+ function indexof(seq) {
39003
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
39004
+ args[_key2 - 1] = arguments[_key2];
39005
+ }
39006
+
38524
39007
  return sequence(seq).indexOf(...args);
38525
39008
  }
38526
39009
 
38527
- function lastindexof(seq, ...args) {
39010
+ function lastindexof(seq) {
39011
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
39012
+ args[_key3 - 1] = arguments[_key3];
39013
+ }
39014
+
38528
39015
  return sequence(seq).lastIndexOf(...args);
38529
39016
  }
38530
39017
 
38531
- function slice(seq, ...args) {
39018
+ function slice(seq) {
39019
+ for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
39020
+ args[_key4 - 1] = arguments[_key4];
39021
+ }
39022
+
38532
39023
  return sequence(seq).slice(...args);
38533
39024
  }
38534
39025
 
@@ -38610,7 +39101,7 @@
38610
39101
  function pathShape(path) {
38611
39102
  let p = null;
38612
39103
  return function (context) {
38613
- return context ? pathRender(context, p = p || pathParse(path)) : path;
39104
+ return context ? pathRender(context, p = p || parse$3(path)) : path;
38614
39105
  };
38615
39106
  }
38616
39107
 
@@ -38673,6 +39164,101 @@
38673
39164
 
38674
39165
  return p;
38675
39166
  }
39167
+ /**
39168
+ * Appends a new point to the lasso
39169
+ *
39170
+ * @param {*} lasso the lasso in pixel space
39171
+ * @param {*} x the x coordinate in pixel space
39172
+ * @param {*} y the y coordinate in pixel space
39173
+ * @param {*} minDist the minimum distance, in pixels, that thenew point needs to be apart from the last point
39174
+ * @returns a new array containing the lasso with the new point
39175
+ */
39176
+
39177
+
39178
+ function lassoAppend(lasso, x, y) {
39179
+ let minDist = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5;
39180
+ const last = lasso[lasso.length - 1]; // Add point to lasso if distance to last point exceed minDist or its the first point
39181
+
39182
+ if (last === undefined || Math.sqrt((last[0] - x) ** 2 + (last[1] - y) ** 2) > minDist) {
39183
+ lasso.push([x, y]);
39184
+ return [...lasso];
39185
+ }
39186
+
39187
+ return lasso;
39188
+ }
39189
+ /**
39190
+ * Generates a svg path command which draws a lasso
39191
+ *
39192
+ * @param {*} lasso the lasso in pixel space in the form [[x,y], [x,y], ...]
39193
+ * @returns the svg path command that draws the lasso
39194
+ */
39195
+
39196
+
39197
+ function lassoPath(lasso) {
39198
+ return (lasso !== null && lasso !== void 0 ? lasso : []).reduce((svg, _ref, i) => {
39199
+ let [x, y] = _ref;
39200
+ return svg += i == 0 ? "M ".concat(x, ",").concat(y, " ") : i === lasso.length - 1 ? ' Z' : "L ".concat(x, ",").concat(y, " ");
39201
+ }, '');
39202
+ }
39203
+ /**
39204
+ * Inverts the lasso from pixel space to an array of vega scenegraph tuples
39205
+ *
39206
+ * @param {*} data the dataset
39207
+ * @param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]
39208
+ * @param {*} unit the unit where the lasso is defined
39209
+ *
39210
+ * @returns an array of vega scenegraph tuples
39211
+ */
39212
+
39213
+
39214
+ function intersectLasso(markname, pixelLasso, unit) {
39215
+ const {
39216
+ x,
39217
+ y,
39218
+ mark
39219
+ } = unit;
39220
+ const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER); // Get bounding box around lasso
39221
+
39222
+ for (const [px, py] of pixelLasso) {
39223
+ if (px < bb.x1) bb.x1 = px;
39224
+ if (px > bb.x2) bb.x2 = px;
39225
+ if (py < bb.y1) bb.y1 = py;
39226
+ if (py > bb.y2) bb.y2 = py;
39227
+ } // Translate bb against unit coordinates
39228
+
39229
+
39230
+ bb.translate(x, y);
39231
+ const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark); // Check every point against the lasso
39232
+
39233
+ return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));
39234
+ }
39235
+ /**
39236
+ * Performs a test if a point is inside a polygon based on the idea from
39237
+ * https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html
39238
+ *
39239
+ * This method will not need the same start/end point since it wraps around the edges of the array
39240
+ *
39241
+ * @param {*} test a point to test against
39242
+ * @param {*} polygon a polygon in the form [[x,y], [x,y], ...]
39243
+ * @returns true if the point lies inside the polygon, false otherwise
39244
+ */
39245
+
39246
+
39247
+ function pointInPolygon(testx, testy, polygon) {
39248
+ let intersections = 0;
39249
+
39250
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
39251
+ const [prevX, prevY] = polygon[j];
39252
+ const [x, y] = polygon[i]; // count intersections
39253
+
39254
+ if (y > testy != prevY > testy && testx < (prevX - x) * (testy - y) / (prevY - y) + x) {
39255
+ intersections++;
39256
+ }
39257
+ } // point is in polygon if intersection count is odd
39258
+
39259
+
39260
+ return intersections & 1;
39261
+ }
38676
39262
 
38677
39263
  const functionContext = {
38678
39264
  random() {
@@ -38711,7 +39297,12 @@
38711
39297
  },
38712
39298
 
38713
39299
  toBoolean,
38714
- toDate,
39300
+
39301
+ toDate(_) {
39302
+ return toDate(_);
39303
+ },
39304
+
39305
+ // suppress extra arguments
38715
39306
  toNumber,
38716
39307
  toString,
38717
39308
  indexof,
@@ -38735,7 +39326,7 @@
38735
39326
  hsl: hsl$2,
38736
39327
  luminance,
38737
39328
  contrast,
38738
- sequence: range$1$1,
39329
+ sequence: range$3,
38739
39330
  format,
38740
39331
  utcFormat,
38741
39332
  utcParse,
@@ -38759,7 +39350,12 @@
38759
39350
  warn,
38760
39351
  info,
38761
39352
  debug,
38762
- extent,
39353
+
39354
+ extent(_) {
39355
+ return extent(_);
39356
+ },
39357
+
39358
+ // suppress extra arguments
38763
39359
  inScope,
38764
39360
  intersect,
38765
39361
  clampRange,
@@ -38780,7 +39376,10 @@
38780
39376
  zoomPow,
38781
39377
  zoomSymlog,
38782
39378
  encode,
38783
- modify
39379
+ modify,
39380
+ lassoAppend,
39381
+ lassoPath,
39382
+ intersectLasso
38784
39383
  };
38785
39384
  const eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],
38786
39385
  // event functions
@@ -38795,7 +39394,7 @@
38795
39394
  forbidden: ['_'],
38796
39395
  allowed: ['datum', 'event', 'item'],
38797
39396
  fieldvar: 'datum',
38798
- globalvar: id => `_[${$(SignalPrefix + id)}]`,
39397
+ globalvar: id => "_[".concat($(SignalPrefix + id), "]"),
38799
39398
  functions: buildFunctions,
38800
39399
  constants: Constants,
38801
39400
  visitors: astVisitors
@@ -38993,10 +39592,7 @@
38993
39592
 
38994
39593
 
38995
39594
  function _compare(u, v, lt, gt) {
38996
- return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}
38997
- : (u > v || v == null) && u != null ? ${gt}
38998
- : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}
38999
- : v !== v && u === u ? ${gt} : `;
39595
+ return "((u = ".concat(u, ") < (v = ").concat(v, ") || u == null) && v != null ? ").concat(lt, "\n : (u > v || v == null) && u != null ? ").concat(gt, "\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ").concat(lt, "\n : v !== v && u === u ? ").concat(gt, " : ");
39000
39596
  }
39001
39597
 
39002
39598
  var expressionCodegen = {
@@ -39019,7 +39615,7 @@
39019
39615
  * Parse an expression used to handle an event-driven operator update.
39020
39616
  */
39021
39617
  handler: (ctx, expr) => {
39022
- const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;
39618
+ const code = "var datum=event.item&&event.item.datum;return ".concat(expr.code, ";");
39023
39619
  return expression(ctx, ['_', 'event'], code);
39024
39620
  },
39025
39621
 
@@ -39035,7 +39631,7 @@
39035
39631
 
39036
39632
  for (const name in channels) {
39037
39633
  const o = 'o[' + $(name) + ']';
39038
- code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;
39634
+ code += "$=".concat(channels[name].code, ";if(").concat(o, "!==$)").concat(o, "=$,m=1;");
39039
39635
  }
39040
39636
 
39041
39637
  code += adjustSpatial(channels, marktype);
@@ -39048,8 +39644,8 @@
39048
39644
  */
39049
39645
  codegen: {
39050
39646
  get(path) {
39051
- const ref = `[${path.map($).join('][')}]`;
39052
- const get = Function('_', `return _${ref};`);
39647
+ const ref = "[".concat(path.map($).join(']['), "]");
39648
+ const get = Function('_', "return _".concat(ref, ";"));
39053
39649
  get.path = ref;
39054
39650
  return get;
39055
39651
  },
@@ -39062,12 +39658,12 @@
39062
39658
  let u, v;
39063
39659
 
39064
39660
  if (f.path) {
39065
- u = `a${f.path}`;
39066
- v = `b${f.path}`;
39661
+ u = "a".concat(f.path);
39662
+ v = "b".concat(f.path);
39067
39663
  } else {
39068
39664
  (t = t || {})['f' + i] = f;
39069
- u = `this.f${i}(a)`;
39070
- v = `this.f${i}(b)`;
39665
+ u = "this.f".concat(i, "(a)");
39666
+ v = "this.f".concat(i, "(b)");
39071
39667
  }
39072
39668
 
39073
39669
  return _compare(u, v, -o, o);
@@ -39844,7 +40440,7 @@
39844
40440
  const rule = view._eventConfig && view._eventConfig[key];
39845
40441
 
39846
40442
  if (rule === false || isObject(rule) && !rule[type]) {
39847
- view.warn(`Blocked ${key} ${type} event listener.`);
40443
+ view.warn("Blocked ".concat(key, " ").concat(type, " event listener."));
39848
40444
  return false;
39849
40445
  }
39850
40446
 
@@ -40330,7 +40926,7 @@
40330
40926
 
40331
40927
  if (el && clear) {
40332
40928
  try {
40333
- el.innerHTML = '';
40929
+ el.textContent = '';
40334
40930
  } catch (e) {
40335
40931
  el = null;
40336
40932
  view.error(e);
@@ -41345,14 +41941,14 @@
41345
41941
  };
41346
41942
  }
41347
41943
 
41348
- const scaleRef = scale => isString(scale) ? $(scale) : scale.signal ? `(${scale.signal})` : field(scale);
41944
+ const scaleRef = scale => isString(scale) ? $(scale) : scale.signal ? "(".concat(scale.signal, ")") : field(scale);
41349
41945
 
41350
41946
  function entry$1(enc) {
41351
41947
  if (enc.gradient != null) {
41352
41948
  return gradient(enc);
41353
41949
  }
41354
41950
 
41355
- let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? $(enc.value) : undefined;
41951
+ let value = enc.signal ? "(".concat(enc.signal, ")") : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? $(enc.value) : undefined;
41356
41952
 
41357
41953
  if (enc.scale != null) {
41358
41954
  value = scale(enc, value);
@@ -41363,25 +41959,25 @@
41363
41959
  }
41364
41960
 
41365
41961
  if (enc.exponent != null) {
41366
- value = `pow(${value},${property(enc.exponent)})`;
41962
+ value = "pow(".concat(value, ",").concat(property(enc.exponent), ")");
41367
41963
  }
41368
41964
 
41369
41965
  if (enc.mult != null) {
41370
- value += `*${property(enc.mult)}`;
41966
+ value += "*".concat(property(enc.mult));
41371
41967
  }
41372
41968
 
41373
41969
  if (enc.offset != null) {
41374
- value += `+${property(enc.offset)}`;
41970
+ value += "+".concat(property(enc.offset));
41375
41971
  }
41376
41972
 
41377
41973
  if (enc.round) {
41378
- value = `round(${value})`;
41974
+ value = "round(".concat(value, ")");
41379
41975
  }
41380
41976
 
41381
41977
  return value;
41382
41978
  }
41383
41979
 
41384
- const _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;
41980
+ const _color = (type, x, y, z) => "(".concat(type, "(").concat([x, y, z].map(entry$1).join(','), ")+'')");
41385
41981
 
41386
41982
  function color(enc) {
41387
41983
  return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;
@@ -41394,7 +41990,7 @@
41394
41990
  while (args.length && peek$1(args) == null) args.pop();
41395
41991
 
41396
41992
  args.unshift(scaleRef(enc.gradient));
41397
- return `gradient(${args.join(',')})`;
41993
+ return "gradient(".concat(args.join(','), ")");
41398
41994
  }
41399
41995
 
41400
41996
  function property(property) {
@@ -41446,17 +42042,17 @@
41446
42042
 
41447
42043
  if (enc.range != null) {
41448
42044
  // pull value from scale range
41449
- value = `lerp(_range(${scale}), ${+enc.range})`;
42045
+ value = "lerp(_range(".concat(scale, "), ").concat(+enc.range, ")");
41450
42046
  } else {
41451
42047
  // run value through scale and/or pull scale bandwidth
41452
- if (value !== undefined) value = `_scale(${scale}, ${value})`;
42048
+ if (value !== undefined) value = "_scale(".concat(scale, ", ").concat(value, ")");
41453
42049
 
41454
42050
  if (enc.band) {
41455
- value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));
42051
+ value = (value ? value + '+' : '') + "_bandwidth(".concat(scale, ")") + (+enc.band === 1 ? '' : '*' + property(enc.band));
41456
42052
 
41457
42053
  if (enc.extra) {
41458
42054
  // include logic to handle extraneous elements
41459
- value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;
42055
+ value = "(datum.extra ? _scale(".concat(scale, ", datum.extra.value) : ").concat(value, ")");
41460
42056
  }
41461
42057
  }
41462
42058
 
@@ -41470,7 +42066,7 @@
41470
42066
  let code = '';
41471
42067
  enc.forEach(rule => {
41472
42068
  const value = entry$1(rule);
41473
- code += rule.test ? `(${rule.test})?${value}:` : value;
42069
+ code += rule.test ? "(".concat(rule.test, ")?").concat(value, ":") : value;
41474
42070
  }); // if no else clause, terminate with null (#1366)
41475
42071
 
41476
42072
  if (peek$1(code) === ':') {
@@ -42229,7 +42825,7 @@
42229
42825
  }
42230
42826
 
42231
42827
  function anchorExpr(s, e, m) {
42232
- return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;
42828
+ return "item.anchor === '".concat(Start, "' ? ").concat(s, " : item.anchor === '").concat(End, "' ? ").concat(e, " : ").concat(m);
42233
42829
  }
42234
42830
 
42235
42831
  const alignExpr$1 = anchorExpr($(Left), $(Right), $(Center));
@@ -42248,15 +42844,15 @@
42248
42844
  } else if (v.signal) {
42249
42845
  // if signal, augment code to interpret values
42250
42846
  band = {
42251
- signal: `(${v.signal}) === 'extent' ? 1 : 0.5`
42847
+ signal: "(".concat(v.signal, ") === 'extent' ? 1 : 0.5")
42252
42848
  };
42253
42849
  extra = {
42254
- signal: `(${v.signal}) === 'extent'`
42850
+ signal: "(".concat(v.signal, ") === 'extent'")
42255
42851
  };
42256
42852
 
42257
42853
  if (!isObject(offset)) {
42258
42854
  offset = {
42259
- signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`
42855
+ signal: "(".concat(v.signal, ") === 'extent' ? 0 : ").concat(offset)
42260
42856
  };
42261
42857
  }
42262
42858
  } else if (v === 'extent') {
@@ -42406,8 +43002,8 @@
42406
43002
  }, userEncode);
42407
43003
  }
42408
43004
 
42409
- const alignExpr = `datum.${Perc}<=0?"${Left}":datum.${Perc}>=1?"${Right}":"${Center}"`,
42410
- baselineExpr = `datum.${Perc}<=0?"${Bottom}":datum.${Perc}>=1?"${Top}":"${Middle}"`;
43005
+ const alignExpr = "datum.".concat(Perc, "<=0?\"").concat(Left, "\":datum.").concat(Perc, ">=1?\"").concat(Right, "\":\"").concat(Center, "\""),
43006
+ baselineExpr = "datum.".concat(Perc, "<=0?\"").concat(Bottom, "\":datum.").concat(Perc, ">=1?\"").concat(Top, "\":\"").concat(Middle, "\"");
42411
43007
 
42412
43008
  function legendGradientLabels(spec, config, userEncode, dataRef) {
42413
43009
  const _ = lookup(spec, config),
@@ -42500,12 +43096,12 @@
42500
43096
  valueRef = {
42501
43097
  data: 'value'
42502
43098
  },
42503
- xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,
43099
+ xSignal = "(".concat(columns, ") ? datum.").concat(Offset, " : datum.").concat(Size),
42504
43100
  yEncode = height ? encoder(height) : {
42505
43101
  field: Size
42506
43102
  },
42507
- index = `datum.${Index}`,
42508
- ncols = `max(1, ${columns})`;
43103
+ index = "datum.".concat(Index),
43104
+ ncols = "max(1, ".concat(columns, ")");
42509
43105
 
42510
43106
  let encode, enter, update, nrows, sort;
42511
43107
  yEncode.mult = 0.5; // -- LEGEND SYMBOLS --
@@ -42634,22 +43230,22 @@
42634
43230
  }; // annotate and sort groups to ensure correct ordering
42635
43231
 
42636
43232
  if (_.isVertical(true)) {
42637
- nrows = `ceil(item.mark.items.length / ${ncols})`;
42638
- update.row.signal = `${index}%${nrows}`;
42639
- update.column.signal = `floor(${index} / ${nrows})`;
43233
+ nrows = "ceil(item.mark.items.length / ".concat(ncols, ")");
43234
+ update.row.signal = "".concat(index, "%").concat(nrows);
43235
+ update.column.signal = "floor(".concat(index, " / ").concat(nrows, ")");
42640
43236
  sort = {
42641
43237
  field: ['row', index]
42642
43238
  };
42643
43239
  } else {
42644
- update.row.signal = `floor(${index} / ${ncols})`;
42645
- update.column.signal = `${index} % ${ncols}`;
43240
+ update.row.signal = "floor(".concat(index, " / ").concat(ncols, ")");
43241
+ update.column.signal = "".concat(index, " % ").concat(ncols);
42646
43242
  sort = {
42647
43243
  field: index
42648
43244
  };
42649
43245
  } // handle zero column case (implies infinite columns)
42650
43246
 
42651
43247
 
42652
- update.column.signal = `(${columns})?${update.column.signal}:${index}`; // facet legend entries into sub-groups
43248
+ update.column.signal = "(".concat(columns, ")?").concat(update.column.signal, ":").concat(index); // facet legend entries into sub-groups
42653
43249
 
42654
43250
  dataRef = {
42655
43251
  facet: {
@@ -42689,14 +43285,14 @@
42689
43285
 
42690
43286
  const isL = 'item.orient === "left"',
42691
43287
  isR = 'item.orient === "right"',
42692
- isLR = `(${isL} || ${isR})`,
42693
- isVG = `datum.vgrad && ${isLR}`,
43288
+ isLR = "(".concat(isL, " || ").concat(isR, ")"),
43289
+ isVG = "datum.vgrad && ".concat(isLR),
42694
43290
  baseline = anchorExpr('"top"', '"bottom"', '"middle"'),
42695
43291
  alignFlip = anchorExpr('"right"', '"left"', '"center"'),
42696
- exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? "left" : ${alignExpr$1}`,
42697
- exprAnchor = `item._anchor || (${isLR} ? "middle" : "start")`,
42698
- exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,
42699
- exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? "bottom" : "top") : ${baseline}) : "top"`;
43292
+ exprAlign = "datum.vgrad && ".concat(isR, " ? (").concat(alignFlip, ") : (").concat(isLR, " && !(datum.vgrad && ").concat(isL, ")) ? \"left\" : ").concat(alignExpr$1),
43293
+ exprAnchor = "item._anchor || (".concat(isLR, " ? \"middle\" : \"start\")"),
43294
+ exprAngle = "".concat(isVG, " ? (").concat(isL, " ? -90 : 90) : 0"),
43295
+ exprBaseline = "".concat(isLR, " ? (datum.vgrad ? (").concat(isR, " ? \"bottom\" : \"top\") : ").concat(baseline, ") : \"top\"");
42700
43296
 
42701
43297
  function legendTitle(spec, config, userEncode, dataRef) {
42702
43298
  const _ = lookup(spec, config);
@@ -43429,7 +44025,7 @@
43429
44025
  if (type === Gradient) {
43430
44026
  children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)]; // adjust default tick count based on the gradient length
43431
44027
 
43432
- params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);
44028
+ params.count = params.count || scope.signalRef("max(2,2*floor((".concat(deref(_.gradientLength()), ")/100))"));
43433
44029
  } // discrete gradient legend
43434
44030
  else if (type === Discrete) {
43435
44031
  children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];
@@ -43513,18 +44109,18 @@
43513
44109
  const size = deref(getChannel('size', spec, marks)),
43514
44110
  strokeWidth = deref(getChannel('strokeWidth', spec, marks)),
43515
44111
  fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));
43516
- return parser(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);
44112
+ return parser("max(ceil(sqrt(".concat(size, ")+").concat(strokeWidth, "),").concat(fontSize, ")"), scope);
43517
44113
  }
43518
44114
 
43519
44115
  function getChannel(name, spec, marks) {
43520
- return spec[name] ? `scale("${spec[name]}",datum)` : getEncoding(name, marks[0].encode);
44116
+ return spec[name] ? "scale(\"".concat(spec[name], "\",datum)") : getEncoding(name, marks[0].encode);
43521
44117
  }
43522
44118
 
43523
44119
  function getFontSize(encode, scope, style) {
43524
44120
  return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);
43525
44121
  }
43526
44122
 
43527
- const angleExpr = `item.orient==="${Left}"?-90:item.orient==="${Right}"?90:0`;
44123
+ const angleExpr = "item.orient===\"".concat(Left, "\"?-90:item.orient===\"").concat(Right, "\"?90:0");
43528
44124
 
43529
44125
  function parseTitle(spec, scope) {
43530
44126
  spec = isString(spec) ? {
@@ -43841,15 +44437,15 @@
43841
44437
  value: b
43842
44438
  };
43843
44439
 
43844
- const ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);
44440
+ const ifXEnc = ($orient, a, b) => ifEnc("".concat($orient, " === '").concat(Top, "' || ").concat($orient, " === '").concat(Bottom, "'"), a, b);
43845
44441
 
43846
- const ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);
44442
+ const ifYEnc = ($orient, a, b) => ifEnc("".concat($orient, " !== '").concat(Top, "' && ").concat($orient, " !== '").concat(Bottom, "'"), a, b);
43847
44443
 
43848
- const ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);
44444
+ const ifLeftTopExpr = ($orient, a, b) => ifExpr("".concat($orient, " === '").concat(Left, "' || ").concat($orient, " === '").concat(Top, "'"), a, b);
43849
44445
 
43850
- const ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);
44446
+ const ifTopExpr = ($orient, a, b) => ifExpr("".concat($orient, " === '").concat(Top, "'"), a, b);
43851
44447
 
43852
- const ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);
44448
+ const ifRightExpr = ($orient, a, b) => ifExpr("".concat($orient, " === '").concat(Right, "'"), a, b);
43853
44449
 
43854
44450
  const ifEnc = (test, a, b) => {
43855
44451
  // ensure inputs are encoder objects (or null)
@@ -43861,7 +44457,7 @@
43861
44457
  a = a ? a.signal || $(a.value) : null;
43862
44458
  b = b ? b.signal || $(b.value) : null;
43863
44459
  return {
43864
- signal: `${test} ? (${a}) : (${b})`
44460
+ signal: "".concat(test, " ? (").concat(a, ") : (").concat(b, ")")
43865
44461
  };
43866
44462
  } else {
43867
44463
  // otherwise generate rule set
@@ -43874,17 +44470,17 @@
43874
44470
  const isSimple = enc => enc == null || Object.keys(enc).length === 1;
43875
44471
 
43876
44472
  const ifExpr = (test, a, b) => ({
43877
- signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`
44473
+ signal: "".concat(test, " ? (").concat(toExpr(a), ") : (").concat(toExpr(b), ")")
43878
44474
  });
43879
44475
 
43880
44476
  const ifOrient = ($orient, t, b, l, r) => ({
43881
- signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'
44477
+ signal: (l != null ? "".concat($orient, " === '").concat(Left, "' ? (").concat(toExpr(l), ") : ") : '') + (b != null ? "".concat($orient, " === '").concat(Bottom, "' ? (").concat(toExpr(b), ") : ") : '') + (r != null ? "".concat($orient, " === '").concat(Right, "' ? (").concat(toExpr(r), ") : ") : '') + (t != null ? "".concat($orient, " === '").concat(Top, "' ? (").concat(toExpr(t), ") : ") : '') + '(null)'
43882
44478
  });
43883
44479
 
43884
44480
  const toExpr = v => isSignal(v) ? v.signal : v == null ? null : $(v);
43885
44481
 
43886
44482
  const mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {
43887
- signal: `(${sign.signal}) * ${value}`
44483
+ signal: "(".concat(sign.signal, ") * ").concat(value)
43888
44484
  } : {
43889
44485
  value: sign * value
43890
44486
  };
@@ -44099,7 +44695,7 @@
44099
44695
  function offsetValue(offset, sign) {
44100
44696
  if (sign === 1) ;else if (!isObject(offset)) {
44101
44697
  offset = isSignal(sign) ? {
44102
- signal: `(${sign.signal}) * (${offset || 0})`
44698
+ signal: "(".concat(sign.signal, ") * (").concat(offset || 0, ")")
44103
44699
  } : sign * (offset || 0);
44104
44700
  } else {
44105
44701
  let entry = offset = extend$1({}, offset);
@@ -44108,7 +44704,7 @@
44108
44704
  if (!isObject(entry.mult)) {
44109
44705
  entry.mult = isSignal(sign) // no offset if sign === 1
44110
44706
  ? {
44111
- signal: `(${entry.mult}) * (${sign.signal})`
44707
+ signal: "(".concat(entry.mult, ") * (").concat(sign.signal, ")")
44112
44708
  } : entry.mult * sign;
44113
44709
  return offset;
44114
44710
  } else {
@@ -44205,7 +44801,7 @@
44205
44801
  const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '"top"', '"bottom"', '"middle"') : {
44206
44802
  value: 'middle'
44207
44803
  });
44208
- const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);
44804
+ const offsetExpr = flushExpr(scale, flush, "-(".concat(flushOffset, ")"), flushOffset, 0);
44209
44805
  flushOn = flushOn && flushOffset;
44210
44806
  const enter = {
44211
44807
  opacity: zero,
@@ -44307,7 +44903,7 @@
44307
44903
  }
44308
44904
  };
44309
44905
  const titlePos = {
44310
- signal: `lerp(range("${spec.scale}"), ${anchorExpr(0, 1, 0.5)})`
44906
+ signal: "lerp(range(\"".concat(spec.scale, "\"), ").concat(anchorExpr(0, 1, 0.5), ")")
44311
44907
  };
44312
44908
  update.x = ifX(orient, titlePos);
44313
44909
  update.y = ifY(orient, titlePos);
@@ -44441,7 +45037,7 @@
44441
45037
  minExtent: _('minExtent'),
44442
45038
  maxExtent: _('maxExtent'),
44443
45039
  range: {
44444
- signal: `abs(span(range("${spec.scale}")))`
45040
+ signal: "abs(span(range(\"".concat(spec.scale, "\")))")
44445
45041
  },
44446
45042
  translate: _('translate'),
44447
45043
  // accessibility support
@@ -45268,8 +45864,6 @@
45268
45864
  // -- Transforms -----
45269
45865
  extend$1(transforms, tx, vtx, encode$1, geo, force, label, tree, reg, voronoi, wordcloud, xf); // -- Exports -----
45270
45866
 
45271
- const version = pkg.version;
45272
-
45273
45867
  exports.Bounds = Bounds;
45274
45868
  exports.CanvasHandler = CanvasHandler;
45275
45869
  exports.CanvasRenderer = CanvasRenderer;
@@ -45314,7 +45908,7 @@
45314
45908
  exports.accessorFields = accessorFields;
45315
45909
  exports.accessorName = accessorName;
45316
45910
  exports.array = array$5;
45317
- exports.ascending = ascending$3;
45911
+ exports.ascending = ascending$2;
45318
45912
  exports.bandwidthNRD = estimateBandwidth;
45319
45913
  exports.bin = bin;
45320
45914
  exports.bootstrapCI = bootstrapCI;
@@ -45404,9 +45998,10 @@
45404
45998
  exports.parse = parse;
45405
45999
  exports.parseExpression = parser$1;
45406
46000
  exports.parseSelector = eventSelector;
46001
+ exports.path = path$3;
45407
46002
  exports.pathCurves = curves;
45408
46003
  exports.pathEqual = pathEqual;
45409
- exports.pathParse = pathParse;
46004
+ exports.pathParse = parse$3;
45410
46005
  exports.pathRectangle = vg_rect;
45411
46006
  exports.pathRender = pathRender;
45412
46007
  exports.pathSymbols = symbols;
@@ -45499,4 +46094,4 @@
45499
46094
 
45500
46095
  Object.defineProperty(exports, '__esModule', { value: true });
45501
46096
 
45502
- })));
46097
+ }));