@vitessce/heatmap 3.3.2 → 3.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-68f84e2a.js";
2
- import { B as BaseDecoder } from "./index-b879347c.js";
2
+ import { B as BaseDecoder } from "./index-edc6cc12.js";
3
3
  import "react";
4
4
  import "@vitessce/vit-s";
5
5
  import "react-dom";
@@ -1371,6 +1371,55 @@ function copyUint8Array(arr) {
1371
1371
  newArr.set(arr);
1372
1372
  return newArr;
1373
1373
  }
1374
+ const defaultPoolSize = typeof navigator !== "undefined" ? navigator.hardwareConcurrency || 4 : 1;
1375
+ class Pool {
1376
+ /**
1377
+ * @constructor
1378
+ * @param {object} Worker The worker class to be used for processing.
1379
+ */
1380
+ constructor(createWorker2) {
1381
+ __publicField(this, "workers");
1382
+ __publicField(this, "idleWorkers");
1383
+ __publicField(this, "waitQueue");
1384
+ this.workers = [];
1385
+ this.idleWorkers = [];
1386
+ this.waitQueue = [];
1387
+ for (let i2 = 0; i2 < defaultPoolSize; ++i2) {
1388
+ const w2 = createWorker2();
1389
+ this.workers.push(w2);
1390
+ this.idleWorkers.push(w2);
1391
+ }
1392
+ }
1393
+ // eslint-disable-next-line class-methods-use-this
1394
+ async process() {
1395
+ throw new Error('Pool needs to implement "process" method');
1396
+ }
1397
+ async waitForWorker() {
1398
+ const idleWorker = this.idleWorkers.pop();
1399
+ if (idleWorker) {
1400
+ return idleWorker;
1401
+ }
1402
+ const waiter = {};
1403
+ const promise = new Promise((resolve) => {
1404
+ waiter.resolve = resolve;
1405
+ });
1406
+ this.waitQueue.push(waiter);
1407
+ return promise;
1408
+ }
1409
+ async finishTask(currentWorker) {
1410
+ const waiter = this.waitQueue.pop();
1411
+ if (waiter && waiter.resolve) {
1412
+ waiter.resolve(currentWorker);
1413
+ } else {
1414
+ this.idleWorkers.push(currentWorker);
1415
+ }
1416
+ }
1417
+ destroy() {
1418
+ for (let i2 = 0; i2 < this.workers.length; ++i2) {
1419
+ this.workers[i2].terminate();
1420
+ }
1421
+ }
1422
+ }
1374
1423
  let getRandomValues$1;
1375
1424
  const rnds8$1 = new Uint8Array(16);
1376
1425
  function rng$1() {
@@ -5474,14 +5523,14 @@ class ZodString extends ZodType {
5474
5523
  return min;
5475
5524
  }
5476
5525
  get maxLength() {
5477
- let max = null;
5526
+ let max2 = null;
5478
5527
  for (const ch of this._def.checks) {
5479
5528
  if (ch.kind === "max") {
5480
- if (max === null || ch.value < max)
5481
- max = ch.value;
5529
+ if (max2 === null || ch.value < max2)
5530
+ max2 = ch.value;
5482
5531
  }
5483
5532
  }
5484
- return max;
5533
+ return max2;
5485
5534
  }
5486
5535
  }
5487
5536
  ZodString.create = (params) => {
@@ -5696,20 +5745,20 @@ class ZodNumber extends ZodType {
5696
5745
  return min;
5697
5746
  }
5698
5747
  get maxValue() {
5699
- let max = null;
5748
+ let max2 = null;
5700
5749
  for (const ch of this._def.checks) {
5701
5750
  if (ch.kind === "max") {
5702
- if (max === null || ch.value < max)
5703
- max = ch.value;
5751
+ if (max2 === null || ch.value < max2)
5752
+ max2 = ch.value;
5704
5753
  }
5705
5754
  }
5706
- return max;
5755
+ return max2;
5707
5756
  }
5708
5757
  get isInt() {
5709
5758
  return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util$4.isInteger(ch.value));
5710
5759
  }
5711
5760
  get isFinite() {
5712
- let max = null, min = null;
5761
+ let max2 = null, min = null;
5713
5762
  for (const ch of this._def.checks) {
5714
5763
  if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") {
5715
5764
  return true;
@@ -5717,11 +5766,11 @@ class ZodNumber extends ZodType {
5717
5766
  if (min === null || ch.value > min)
5718
5767
  min = ch.value;
5719
5768
  } else if (ch.kind === "max") {
5720
- if (max === null || ch.value < max)
5721
- max = ch.value;
5769
+ if (max2 === null || ch.value < max2)
5770
+ max2 = ch.value;
5722
5771
  }
5723
5772
  }
5724
- return Number.isFinite(min) && Number.isFinite(max);
5773
+ return Number.isFinite(min) && Number.isFinite(max2);
5725
5774
  }
5726
5775
  }
5727
5776
  ZodNumber.create = (params) => {
@@ -5879,14 +5928,14 @@ class ZodBigInt extends ZodType {
5879
5928
  return min;
5880
5929
  }
5881
5930
  get maxValue() {
5882
- let max = null;
5931
+ let max2 = null;
5883
5932
  for (const ch of this._def.checks) {
5884
5933
  if (ch.kind === "max") {
5885
- if (max === null || ch.value < max)
5886
- max = ch.value;
5934
+ if (max2 === null || ch.value < max2)
5935
+ max2 = ch.value;
5887
5936
  }
5888
5937
  }
5889
- return max;
5938
+ return max2;
5890
5939
  }
5891
5940
  }
5892
5941
  ZodBigInt.create = (params) => {
@@ -6014,14 +6063,14 @@ class ZodDate extends ZodType {
6014
6063
  return min != null ? new Date(min) : null;
6015
6064
  }
6016
6065
  get maxDate() {
6017
- let max = null;
6066
+ let max2 = null;
6018
6067
  for (const ch of this._def.checks) {
6019
6068
  if (ch.kind === "max") {
6020
- if (max === null || ch.value < max)
6021
- max = ch.value;
6069
+ if (max2 === null || ch.value < max2)
6070
+ max2 = ch.value;
6022
6071
  }
6023
6072
  }
6024
- return max != null ? new Date(max) : null;
6073
+ return max2 != null ? new Date(max2) : null;
6025
6074
  }
6026
6075
  }
6027
6076
  ZodDate.create = (params) => {
@@ -10380,7 +10429,7 @@ var toComparators_1 = toComparators$1;
10380
10429
  const SemVer$4 = semver;
10381
10430
  const Range$7 = requireRange();
10382
10431
  const maxSatisfying$1 = (versions, range2, options) => {
10383
- let max = null;
10432
+ let max2 = null;
10384
10433
  let maxSV = null;
10385
10434
  let rangeObj = null;
10386
10435
  try {
@@ -10390,13 +10439,13 @@ const maxSatisfying$1 = (versions, range2, options) => {
10390
10439
  }
10391
10440
  versions.forEach((v) => {
10392
10441
  if (rangeObj.test(v)) {
10393
- if (!max || maxSV.compare(v) === -1) {
10394
- max = v;
10395
- maxSV = new SemVer$4(max, options);
10442
+ if (!max2 || maxSV.compare(v) === -1) {
10443
+ max2 = v;
10444
+ maxSV = new SemVer$4(max2, options);
10396
10445
  }
10397
10446
  }
10398
10447
  });
10399
- return max;
10448
+ return max2;
10400
10449
  };
10401
10450
  var maxSatisfying_1 = maxSatisfying$1;
10402
10451
  const SemVer$3 = semver;
@@ -10581,17 +10630,17 @@ var simplify = (versions, range2, options) => {
10581
10630
  set2.push([first, null]);
10582
10631
  }
10583
10632
  const ranges2 = [];
10584
- for (const [min, max] of set2) {
10585
- if (min === max) {
10633
+ for (const [min, max2] of set2) {
10634
+ if (min === max2) {
10586
10635
  ranges2.push(min);
10587
- } else if (!max && min === v[0]) {
10636
+ } else if (!max2 && min === v[0]) {
10588
10637
  ranges2.push("*");
10589
- } else if (!max) {
10638
+ } else if (!max2) {
10590
10639
  ranges2.push(`>=${min}`);
10591
10640
  } else if (min === v[0]) {
10592
- ranges2.push(`<=${max}`);
10641
+ ranges2.push(`<=${max2}`);
10593
10642
  } else {
10594
- ranges2.push(`${min} - ${max}`);
10643
+ ranges2.push(`${min} - ${max2}`);
10595
10644
  }
10596
10645
  }
10597
10646
  const simplified = ranges2.join(" || ");
@@ -10885,7 +10934,9 @@ const FileType$1 = {
10885
10934
  OBS_SEGMENTATIONS_JSON: "obsSegmentations.json",
10886
10935
  OBS_SETS_CSV: "obsSets.csv",
10887
10936
  OBS_SETS_JSON: "obsSets.json",
10937
+ // OME-Zarr
10888
10938
  IMAGE_OME_ZARR: "image.ome-zarr",
10939
+ OBS_SEGMENTATIONS_OME_ZARR: "obsSegmentations.ome-zarr",
10889
10940
  // AnnData
10890
10941
  OBS_FEATURE_MATRIX_ANNDATA_ZARR: "obsFeatureMatrix.anndata.zarr",
10891
10942
  OBS_SETS_ANNDATA_ZARR: "obsSets.anndata.zarr",
@@ -11369,7 +11420,9 @@ const COMPONENT_COORDINATION_TYPES = {
11369
11420
  CoordinationType$1.SPATIAL_SEGMENTATION_FILLED,
11370
11421
  CoordinationType$1.SPATIAL_SEGMENTATION_STROKE_WIDTH,
11371
11422
  CoordinationType$1.IMAGE_CHANNEL,
11423
+ CoordinationType$1.IMAGE_LAYER,
11372
11424
  CoordinationType$1.SEGMENTATION_CHANNEL,
11425
+ CoordinationType$1.SEGMENTATION_LAYER,
11373
11426
  CoordinationType$1.SPATIAL_CHANNEL_VISIBLE,
11374
11427
  CoordinationType$1.SPATIAL_CHANNEL_OPACITY,
11375
11428
  CoordinationType$1.SPATIAL_CHANNEL_WINDOW,
@@ -11387,6 +11440,9 @@ const COMPONENT_COORDINATION_TYPES = {
11387
11440
  CoordinationType$1.SPATIAL_SPOT_STROKE_WIDTH,
11388
11441
  CoordinationType$1.SPATIAL_LAYER_COLOR,
11389
11442
  CoordinationType$1.OBS_COLOR_ENCODING,
11443
+ CoordinationType$1.FEATURE_VALUE_COLORMAP,
11444
+ CoordinationType$1.FEATURE_VALUE_COLORMAP_RANGE,
11445
+ CoordinationType$1.FEATURE_SELECTION,
11390
11446
  CoordinationType$1.TOOLTIPS_VISIBLE,
11391
11447
  CoordinationType$1.TOOLTIP_CROSSHAIRS_VISIBLE,
11392
11448
  CoordinationType$1.LEGEND_VISIBLE,
@@ -11703,30 +11759,39 @@ const omeCoordinateTransformations = z.array(z.union([
11703
11759
  scale: z.array(z.number())
11704
11760
  })
11705
11761
  ]));
11706
- z.object({
11762
+ const imageOmeTiffSchema = z.object({
11707
11763
  offsetsUrl: z.string().optional(),
11708
11764
  coordinateTransformations: omeCoordinateTransformations.optional()
11709
11765
  });
11766
+ imageOmeTiffSchema.extend({
11767
+ obsTypesFromChannelNames: z.boolean().optional()
11768
+ });
11710
11769
  const imageOmeZarrSchema = z.object({
11711
11770
  coordinateTransformations: omeCoordinateTransformations.optional()
11712
11771
  });
11713
11772
  imageOmeZarrSchema.extend({
11773
+ obsTypesFromChannelNames: z.boolean().optional()
11774
+ });
11775
+ const imageSpatialdataSchema = imageOmeZarrSchema.extend({
11714
11776
  path: z.string()
11715
11777
  });
11716
- z.object({
11778
+ const obsSegmentationsSpatialdataSchema = z.object({
11779
+ // TODO: should this also extend the imageOmeZarrSchema?
11780
+ // TODO: should this be renamed labelsSpatialdataSchema?
11781
+ // TODO: support obsTypesFromChannelNames?
11717
11782
  path: z.string()
11718
11783
  });
11719
11784
  z.object({
11720
11785
  path: z.string()
11721
11786
  });
11722
- z.object({
11787
+ const obsSpotsSpatialdataSchema = z.object({
11723
11788
  path: z.string(),
11724
11789
  tablePath: z.string().optional().describe("The path to a table which annotates the spots. If available but not specified, the spot identifiers may not be aligned with associated tabular data as expected.")
11725
11790
  });
11726
- annDataObsFeatureMatrix.extend({
11791
+ const obsFeatureMatrixSpatialdataSchema = annDataObsFeatureMatrix.extend({
11727
11792
  region: z.string().describe("The name of a region to use to filter instances (i.e., rows) in the table").optional()
11728
11793
  });
11729
- z.object({
11794
+ const obsSetsSpatialdataSchema = z.object({
11730
11795
  region: z.string().describe("The name of a region to use to filter instances (i.e., rows) in the table").optional(),
11731
11796
  tablePath: z.string().optional().describe("The path to a table which contains the index for the set values."),
11732
11797
  obsSets: annDataObsSets
@@ -11789,6 +11854,19 @@ z.object({
11789
11854
  z.array(annDataConvenienceObsEmbeddingItem)
11790
11855
  ])
11791
11856
  }).partial();
11857
+ z.object({
11858
+ // TODO: should `image` be a special schema
11859
+ // to allow specifying fileUid (like for embeddingType)?
11860
+ image: imageSpatialdataSchema,
11861
+ // TODO: should this be a special schema
11862
+ // to allow specifying fileUid (like for embeddingType)?
11863
+ labels: obsSegmentationsSpatialdataSchema,
11864
+ obsFeatureMatrix: obsFeatureMatrixSpatialdataSchema,
11865
+ obsSpots: obsSpotsSpatialdataSchema,
11866
+ // TODO: obsPoints
11867
+ // TODO: obsLocations
11868
+ obsSets: obsSetsSpatialdataSchema
11869
+ }).partial();
11792
11870
  z.object({
11793
11871
  obsLabelsTypes: z.array(z.string()).optional(),
11794
11872
  embeddingTypes: z.array(z.string()).optional()
@@ -12162,14 +12240,14 @@ var tinycolor = { exports: {} };
12162
12240
  r2 = bound01(r2, 255);
12163
12241
  g2 = bound01(g2, 255);
12164
12242
  b = bound01(b, 255);
12165
- var max = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
12166
- var h, s2, l2 = (max + min) / 2;
12167
- if (max == min) {
12243
+ var max2 = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
12244
+ var h, s2, l2 = (max2 + min) / 2;
12245
+ if (max2 == min) {
12168
12246
  h = s2 = 0;
12169
12247
  } else {
12170
- var d = max - min;
12171
- s2 = l2 > 0.5 ? d / (2 - max - min) : d / (max + min);
12172
- switch (max) {
12248
+ var d = max2 - min;
12249
+ s2 = l2 > 0.5 ? d / (2 - max2 - min) : d / (max2 + min);
12250
+ switch (max2) {
12173
12251
  case r2:
12174
12252
  h = (g2 - b) / d + (g2 < b ? 6 : 0);
12175
12253
  break;
@@ -12217,14 +12295,14 @@ var tinycolor = { exports: {} };
12217
12295
  r2 = bound01(r2, 255);
12218
12296
  g2 = bound01(g2, 255);
12219
12297
  b = bound01(b, 255);
12220
- var max = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
12221
- var h, s2, v = max;
12222
- var d = max - min;
12223
- s2 = max === 0 ? 0 : d / max;
12224
- if (max == min) {
12298
+ var max2 = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
12299
+ var h, s2, v = max2;
12300
+ var d = max2 - min;
12301
+ s2 = max2 === 0 ? 0 : d / max2;
12302
+ if (max2 == min) {
12225
12303
  h = 0;
12226
12304
  } else {
12227
- switch (max) {
12305
+ switch (max2) {
12228
12306
  case r2:
12229
12307
  h = (g2 - b) / d + (g2 < b ? 6 : 0);
12230
12308
  break;
@@ -12621,19 +12699,19 @@ var tinycolor = { exports: {} };
12621
12699
  }
12622
12700
  return a2;
12623
12701
  }
12624
- function bound01(n2, max) {
12702
+ function bound01(n2, max2) {
12625
12703
  if (isOnePointZero(n2)) {
12626
12704
  n2 = "100%";
12627
12705
  }
12628
12706
  var processPercent = isPercentage(n2);
12629
- n2 = mathMin(max, mathMax(0, parseFloat(n2)));
12707
+ n2 = mathMin(max2, mathMax(0, parseFloat(n2)));
12630
12708
  if (processPercent) {
12631
- n2 = parseInt(n2 * max, 10) / 100;
12709
+ n2 = parseInt(n2 * max2, 10) / 100;
12632
12710
  }
12633
- if (Math2.abs(n2 - max) < 1e-6) {
12711
+ if (Math2.abs(n2 - max2) < 1e-6) {
12634
12712
  return 1;
12635
12713
  }
12636
- return n2 % max / parseFloat(max);
12714
+ return n2 % max2 / parseFloat(max2);
12637
12715
  }
12638
12716
  function clamp01(val) {
12639
12717
  return mathMin(1, mathMax(0, val));
@@ -13791,10 +13869,10 @@ var json2csv_umd = { exports: {} };
13791
13869
  };
13792
13870
  Buffer3.prototype.inspect = function inspect2() {
13793
13871
  var str = "";
13794
- var max = INSPECT_MAX_BYTES;
13872
+ var max2 = INSPECT_MAX_BYTES;
13795
13873
  if (this.length > 0) {
13796
- str = this.toString("hex", 0, max).match(/.{2}/g).join(" ");
13797
- if (this.length > max)
13874
+ str = this.toString("hex", 0, max2).match(/.{2}/g).join(" ");
13875
+ if (this.length > max2)
13798
13876
  str += " ... ";
13799
13877
  }
13800
13878
  return "<Buffer " + str + ">";
@@ -14360,10 +14438,10 @@ var json2csv_umd = { exports: {} };
14360
14438
  checkOffset(offset5, 8, this.length);
14361
14439
  return read(this, offset5, false, 52, 8);
14362
14440
  };
14363
- function checkInt(buf, value, offset5, ext, max, min) {
14441
+ function checkInt(buf, value, offset5, ext, max2, min) {
14364
14442
  if (!internalIsBuffer(buf))
14365
14443
  throw new TypeError('"buffer" argument must be a Buffer instance');
14366
- if (value > max || value < min)
14444
+ if (value > max2 || value < min)
14367
14445
  throw new RangeError('"value" argument is out of bounds');
14368
14446
  if (offset5 + ext > buf.length)
14369
14447
  throw new RangeError("Index out of range");
@@ -14588,7 +14666,7 @@ var json2csv_umd = { exports: {} };
14588
14666
  }
14589
14667
  return offset5 + 4;
14590
14668
  };
14591
- function checkIEEE754(buf, value, offset5, ext, max, min) {
14669
+ function checkIEEE754(buf, value, offset5, ext, max2, min) {
14592
14670
  if (offset5 + ext > buf.length)
14593
14671
  throw new RangeError("Index out of range");
14594
14672
  if (offset5 < 0)
@@ -18435,62 +18513,19 @@ interpolateSequentialMulti(schemePlasma);
18435
18513
  function getCellColors(params) {
18436
18514
  const { cellSets, cellSetSelection, cellSetColor, obsIndex, theme } = params;
18437
18515
  if (cellSetSelection && cellSets) {
18438
- return treeToCellColorsBySetNames(cellSets, cellSetSelection, cellSetColor, theme);
18516
+ return treeToCellColorsBySetNames(
18517
+ cellSets,
18518
+ cellSetSelection,
18519
+ cellSetColor,
18520
+ theme
18521
+ /* as string */
18522
+ );
18439
18523
  }
18440
18524
  if (obsIndex && theme) {
18441
18525
  return new Map(obsIndex.map((o2) => [o2, getDefaultColor(theme)]));
18442
18526
  }
18443
18527
  return /* @__PURE__ */ new Map();
18444
18528
  }
18445
- const defaultPoolSize = typeof navigator !== "undefined" ? navigator.hardwareConcurrency || 4 : 1;
18446
- class Pool {
18447
- /**
18448
- * @constructor
18449
- * @param {object} Worker The worker class to be used for processing.
18450
- */
18451
- constructor(createWorker2) {
18452
- __publicField(this, "workers");
18453
- __publicField(this, "idleWorkers");
18454
- __publicField(this, "waitQueue");
18455
- this.workers = [];
18456
- this.idleWorkers = [];
18457
- this.waitQueue = [];
18458
- for (let i2 = 0; i2 < defaultPoolSize; ++i2) {
18459
- const w2 = createWorker2();
18460
- this.workers.push(w2);
18461
- this.idleWorkers.push(w2);
18462
- }
18463
- }
18464
- // eslint-disable-next-line class-methods-use-this
18465
- async process() {
18466
- throw new Error('Pool needs to implement "process" method');
18467
- }
18468
- async waitForWorker() {
18469
- const idleWorker = this.idleWorkers.pop();
18470
- if (idleWorker) {
18471
- return idleWorker;
18472
- }
18473
- const waiter = {};
18474
- const promise = new Promise((resolve) => {
18475
- waiter.resolve = resolve;
18476
- });
18477
- this.waitQueue.push(waiter);
18478
- return promise;
18479
- }
18480
- async finishTask(currentWorker) {
18481
- const waiter = this.waitQueue.pop();
18482
- if (waiter && waiter.resolve) {
18483
- waiter.resolve(currentWorker);
18484
- } else {
18485
- this.idleWorkers.push(currentWorker);
18486
- }
18487
- }
18488
- destroy() {
18489
- for (let i2 = 0; i2 < this.workers.length; ++i2) {
18490
- this.workers[i2].terminate();
18491
- }
18492
- }
18493
- }
18494
18529
  function r$1(e3) {
18495
18530
  var t2, f2, n2 = "";
18496
18531
  if ("string" == typeof e3 || "number" == typeof e3)
@@ -19724,13 +19759,13 @@ var refType = PropTypes.oneOfType([PropTypes.func, PropTypes.object]);
19724
19759
  const refType$1 = refType;
19725
19760
  function clamp$3(value) {
19726
19761
  var min = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
19727
- var max = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1;
19762
+ var max2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1;
19728
19763
  {
19729
- if (value < min || value > max) {
19730
- console.error("Material-UI: The value provided ".concat(value, " is out of range [").concat(min, ", ").concat(max, "]."));
19764
+ if (value < min || value > max2) {
19765
+ console.error("Material-UI: The value provided ".concat(value, " is out of range [").concat(min, ", ").concat(max2, "]."));
19731
19766
  }
19732
19767
  }
19733
- return Math.min(Math.max(min, value), max);
19768
+ return Math.min(Math.max(min, value), max2);
19734
19769
  }
19735
19770
  function hexToRgb(color2) {
19736
19771
  color2 = color2.substr(1);
@@ -27398,8 +27433,8 @@ const ValueLabel$1 = withStyles2(styles$4, {
27398
27433
  function asc(a2, b) {
27399
27434
  return a2 - b;
27400
27435
  }
27401
- function clamp$2(value, min, max) {
27402
- return Math.min(Math.max(min, value), max);
27436
+ function clamp$2(value, min, max2) {
27437
+ return Math.min(Math.max(min, value), max2);
27403
27438
  }
27404
27439
  function findClosest(values2, currentValue) {
27405
27440
  var _values$reduce = values2.reduce(function(acc, value, index2) {
@@ -27432,11 +27467,11 @@ function trackFinger(event, touchId) {
27432
27467
  y: event.clientY
27433
27468
  };
27434
27469
  }
27435
- function valueToPercent(value, min, max) {
27436
- return (value - min) * 100 / (max - min);
27470
+ function valueToPercent(value, min, max2) {
27471
+ return (value - min) * 100 / (max2 - min);
27437
27472
  }
27438
- function percentToValue(percent2, min, max) {
27439
- return (max - min) * percent2 + min;
27473
+ function percentToValue(percent2, min, max2) {
27474
+ return (max2 - min) * percent2 + min;
27440
27475
  }
27441
27476
  function getDecimalPrecision(num) {
27442
27477
  if (Math.abs(num) < 1) {
@@ -27724,7 +27759,7 @@ var styles$3 = function styles7(theme) {
27724
27759
  };
27725
27760
  };
27726
27761
  var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27727
- var ariaLabel = props2["aria-label"], ariaLabelledby = props2["aria-labelledby"], ariaValuetext = props2["aria-valuetext"], classes = props2.classes, className = props2.className, _props$color = props2.color, color2 = _props$color === void 0 ? "primary" : _props$color, _props$component = props2.component, Component2 = _props$component === void 0 ? "span" : _props$component, defaultValue2 = props2.defaultValue, _props$disabled = props2.disabled, disabled = _props$disabled === void 0 ? false : _props$disabled, getAriaLabel = props2.getAriaLabel, getAriaValueText = props2.getAriaValueText, _props$marks = props2.marks, marksProp = _props$marks === void 0 ? false : _props$marks, _props$max = props2.max, max = _props$max === void 0 ? 100 : _props$max, _props$min = props2.min, min = _props$min === void 0 ? 0 : _props$min, name2 = props2.name, onChange = props2.onChange, onChangeCommitted = props2.onChangeCommitted, onMouseDown = props2.onMouseDown, _props$orientation = props2.orientation, orientation = _props$orientation === void 0 ? "horizontal" : _props$orientation, _props$scale = props2.scale, scale2 = _props$scale === void 0 ? Identity : _props$scale, _props$step = props2.step, step = _props$step === void 0 ? 1 : _props$step, _props$ThumbComponent = props2.ThumbComponent, ThumbComponent = _props$ThumbComponent === void 0 ? "span" : _props$ThumbComponent, _props$track = props2.track, track = _props$track === void 0 ? "normal" : _props$track, valueProp = props2.value, _props$ValueLabelComp = props2.ValueLabelComponent, ValueLabelComponent = _props$ValueLabelComp === void 0 ? ValueLabel$1 : _props$ValueLabelComp, _props$valueLabelDisp = props2.valueLabelDisplay, valueLabelDisplay = _props$valueLabelDisp === void 0 ? "off" : _props$valueLabelDisp, _props$valueLabelForm = props2.valueLabelFormat, valueLabelFormat = _props$valueLabelForm === void 0 ? Identity : _props$valueLabelForm, other = _objectWithoutProperties(props2, ["aria-label", "aria-labelledby", "aria-valuetext", "classes", "className", "color", "component", "defaultValue", "disabled", "getAriaLabel", "getAriaValueText", "marks", "max", "min", "name", "onChange", "onChangeCommitted", "onMouseDown", "orientation", "scale", "step", "ThumbComponent", "track", "value", "ValueLabelComponent", "valueLabelDisplay", "valueLabelFormat"]);
27762
+ var ariaLabel = props2["aria-label"], ariaLabelledby = props2["aria-labelledby"], ariaValuetext = props2["aria-valuetext"], classes = props2.classes, className = props2.className, _props$color = props2.color, color2 = _props$color === void 0 ? "primary" : _props$color, _props$component = props2.component, Component2 = _props$component === void 0 ? "span" : _props$component, defaultValue2 = props2.defaultValue, _props$disabled = props2.disabled, disabled = _props$disabled === void 0 ? false : _props$disabled, getAriaLabel = props2.getAriaLabel, getAriaValueText = props2.getAriaValueText, _props$marks = props2.marks, marksProp = _props$marks === void 0 ? false : _props$marks, _props$max = props2.max, max2 = _props$max === void 0 ? 100 : _props$max, _props$min = props2.min, min = _props$min === void 0 ? 0 : _props$min, name2 = props2.name, onChange = props2.onChange, onChangeCommitted = props2.onChangeCommitted, onMouseDown = props2.onMouseDown, _props$orientation = props2.orientation, orientation = _props$orientation === void 0 ? "horizontal" : _props$orientation, _props$scale = props2.scale, scale2 = _props$scale === void 0 ? Identity : _props$scale, _props$step = props2.step, step = _props$step === void 0 ? 1 : _props$step, _props$ThumbComponent = props2.ThumbComponent, ThumbComponent = _props$ThumbComponent === void 0 ? "span" : _props$ThumbComponent, _props$track = props2.track, track = _props$track === void 0 ? "normal" : _props$track, valueProp = props2.value, _props$ValueLabelComp = props2.ValueLabelComponent, ValueLabelComponent = _props$ValueLabelComp === void 0 ? ValueLabel$1 : _props$ValueLabelComp, _props$valueLabelDisp = props2.valueLabelDisplay, valueLabelDisplay = _props$valueLabelDisp === void 0 ? "off" : _props$valueLabelDisp, _props$valueLabelForm = props2.valueLabelFormat, valueLabelFormat = _props$valueLabelForm === void 0 ? Identity : _props$valueLabelForm, other = _objectWithoutProperties(props2, ["aria-label", "aria-labelledby", "aria-valuetext", "classes", "className", "color", "component", "defaultValue", "disabled", "getAriaLabel", "getAriaValueText", "marks", "max", "min", "name", "onChange", "onChangeCommitted", "onMouseDown", "orientation", "scale", "step", "ThumbComponent", "track", "value", "ValueLabelComponent", "valueLabelDisplay", "valueLabelFormat"]);
27728
27763
  var theme = useTheme();
27729
27764
  var touchId = React.useRef();
27730
27765
  var _React$useState = React.useState(-1), active = _React$useState[0], setActive = _React$useState[1];
@@ -27737,9 +27772,9 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27737
27772
  var range2 = Array.isArray(valueDerived);
27738
27773
  var values2 = range2 ? valueDerived.slice().sort(asc) : [valueDerived];
27739
27774
  values2 = values2.map(function(value) {
27740
- return clamp$2(value, min, max);
27775
+ return clamp$2(value, min, max2);
27741
27776
  });
27742
- var marks = marksProp === true && step !== null ? _toConsumableArray$j(Array(Math.floor((max - min) / step) + 1)).map(function(_, index2) {
27777
+ var marks = marksProp === true && step !== null ? _toConsumableArray$j(Array(Math.floor((max2 - min) / step) + 1)).map(function(_, index2) {
27743
27778
  return {
27744
27779
  value: min + step * index2
27745
27780
  };
@@ -27774,7 +27809,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27774
27809
  var handleKeyDown2 = useEventCallback(function(event) {
27775
27810
  var index2 = Number(event.currentTarget.getAttribute("data-index"));
27776
27811
  var value = values2[index2];
27777
- var tenPercents = (max - min) / 10;
27812
+ var tenPercents = (max2 - min) / 10;
27778
27813
  var marksValues = marks.map(function(mark) {
27779
27814
  return mark.value;
27780
27815
  });
@@ -27787,7 +27822,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27787
27822
  newValue = min;
27788
27823
  break;
27789
27824
  case "End":
27790
- newValue = max;
27825
+ newValue = max2;
27791
27826
  break;
27792
27827
  case "PageUp":
27793
27828
  if (step) {
@@ -27822,7 +27857,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27822
27857
  if (step) {
27823
27858
  newValue = roundValueToStep(newValue, step, min);
27824
27859
  }
27825
- newValue = clamp$2(newValue, min, max);
27860
+ newValue = clamp$2(newValue, min, max2);
27826
27861
  if (range2) {
27827
27862
  var previousValue = newValue;
27828
27863
  newValue = setValueIndex({
@@ -27864,7 +27899,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27864
27899
  percent2 = 1 - percent2;
27865
27900
  }
27866
27901
  var newValue;
27867
- newValue = percentToValue(percent2, min, max);
27902
+ newValue = percentToValue(percent2, min, max2);
27868
27903
  if (step) {
27869
27904
  newValue = roundValueToStep(newValue, step, min);
27870
27905
  } else {
@@ -27874,7 +27909,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
27874
27909
  var closestIndex = findClosest(marksValues, newValue);
27875
27910
  newValue = marksValues[closestIndex];
27876
27911
  }
27877
- newValue = clamp$2(newValue, min, max);
27912
+ newValue = clamp$2(newValue, min, max2);
27878
27913
  var activeIndex = 0;
27879
27914
  if (range2) {
27880
27915
  if (!move) {
@@ -28003,8 +28038,8 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
28003
28038
  doc.addEventListener("mousemove", handleTouchMove);
28004
28039
  doc.addEventListener("mouseup", handleTouchEnd);
28005
28040
  });
28006
- var trackOffset = valueToPercent(range2 ? values2[0] : min, min, max);
28007
- var trackLeap = valueToPercent(values2[values2.length - 1], min, max) - trackOffset;
28041
+ var trackOffset = valueToPercent(range2 ? values2[0] : min, min, max2);
28042
+ var trackLeap = valueToPercent(values2[values2.length - 1], min, max2) - trackOffset;
28008
28043
  var trackStyle = _extends$1({}, axisProps[axis2].offset(trackOffset), axisProps[axis2].leap(trackLeap));
28009
28044
  return /* @__PURE__ */ React.createElement(Component2, _extends$1({
28010
28045
  ref: handleRef,
@@ -28022,7 +28057,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
28022
28057
  name: name2,
28023
28058
  type: "hidden"
28024
28059
  }), marks.map(function(mark, index2) {
28025
- var percent2 = valueToPercent(mark.value, min, max);
28060
+ var percent2 = valueToPercent(mark.value, min, max2);
28026
28061
  var style2 = axisProps[axis2].offset(percent2);
28027
28062
  var markActive;
28028
28063
  if (track === false) {
@@ -28043,7 +28078,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
28043
28078
  className: clsx(classes.markLabel, markActive && classes.markLabelActive)
28044
28079
  }, mark.label) : null);
28045
28080
  }), values2.map(function(value, index2) {
28046
- var percent2 = valueToPercent(value, min, max);
28081
+ var percent2 = valueToPercent(value, min, max2);
28047
28082
  var style2 = axisProps[axis2].offset(percent2);
28048
28083
  return /* @__PURE__ */ React.createElement(ValueLabelComponent, {
28049
28084
  key: index2,
@@ -28063,7 +28098,7 @@ var Slider = /* @__PURE__ */ React.forwardRef(function Slider2(props2, ref) {
28063
28098
  "aria-label": getAriaLabel ? getAriaLabel(index2) : ariaLabel,
28064
28099
  "aria-labelledby": ariaLabelledby,
28065
28100
  "aria-orientation": orientation,
28066
- "aria-valuemax": scale2(max),
28101
+ "aria-valuemax": scale2(max2),
28067
28102
  "aria-valuemin": scale2(min),
28068
28103
  "aria-valuenow": scale2(value),
28069
28104
  "aria-valuetext": getAriaValueText ? getAriaValueText(scale2(value), index2) : ariaValuetext,
@@ -29297,18 +29332,18 @@ bisector$1(number$2).center;
29297
29332
  const bisect = bisectRight;
29298
29333
  function extent$1(values2, valueof) {
29299
29334
  let min;
29300
- let max;
29335
+ let max2;
29301
29336
  if (valueof === void 0) {
29302
29337
  for (const value of values2) {
29303
29338
  if (value != null) {
29304
29339
  if (min === void 0) {
29305
29340
  if (value >= value)
29306
- min = max = value;
29341
+ min = max2 = value;
29307
29342
  } else {
29308
29343
  if (min > value)
29309
29344
  min = value;
29310
- if (max < value)
29311
- max = value;
29345
+ if (max2 < value)
29346
+ max2 = value;
29312
29347
  }
29313
29348
  }
29314
29349
  }
@@ -29318,17 +29353,17 @@ function extent$1(values2, valueof) {
29318
29353
  if ((value = valueof(value, ++index2, values2)) != null) {
29319
29354
  if (min === void 0) {
29320
29355
  if (value >= value)
29321
- min = max = value;
29356
+ min = max2 = value;
29322
29357
  } else {
29323
29358
  if (min > value)
29324
29359
  min = value;
29325
- if (max < value)
29326
- max = value;
29360
+ if (max2 < value)
29361
+ max2 = value;
29327
29362
  }
29328
29363
  }
29329
29364
  }
29330
29365
  }
29331
- return [min, max];
29366
+ return [min, max2];
29332
29367
  }
29333
29368
  var e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2);
29334
29369
  function ticks(start, stop, count2) {
@@ -29378,6 +29413,24 @@ function tickStep(start, stop, count2) {
29378
29413
  step1 *= 2;
29379
29414
  return stop < start ? -step1 : step1;
29380
29415
  }
29416
+ function max(values2, valueof) {
29417
+ let max2;
29418
+ if (valueof === void 0) {
29419
+ for (const value of values2) {
29420
+ if (value != null && (max2 < value || max2 === void 0 && value >= value)) {
29421
+ max2 = value;
29422
+ }
29423
+ }
29424
+ } else {
29425
+ let index2 = -1;
29426
+ for (let value of values2) {
29427
+ if ((value = valueof(value, ++index2, values2)) != null && (max2 < value || max2 === void 0 && value >= value)) {
29428
+ max2 = value;
29429
+ }
29430
+ }
29431
+ }
29432
+ return max2;
29433
+ }
29381
29434
  function initRange(domain, range2) {
29382
29435
  switch (arguments.length) {
29383
29436
  case 0:
@@ -29683,15 +29736,15 @@ function hslConvert(o2) {
29683
29736
  if (o2 instanceof Hsl)
29684
29737
  return o2;
29685
29738
  o2 = o2.rgb();
29686
- var r2 = o2.r / 255, g2 = o2.g / 255, b = o2.b / 255, min = Math.min(r2, g2, b), max = Math.max(r2, g2, b), h = NaN, s2 = max - min, l2 = (max + min) / 2;
29739
+ var r2 = o2.r / 255, g2 = o2.g / 255, b = o2.b / 255, min = Math.min(r2, g2, b), max2 = Math.max(r2, g2, b), h = NaN, s2 = max2 - min, l2 = (max2 + min) / 2;
29687
29740
  if (s2) {
29688
- if (r2 === max)
29741
+ if (r2 === max2)
29689
29742
  h = (g2 - b) / s2 + (g2 < b) * 6;
29690
- else if (g2 === max)
29743
+ else if (g2 === max2)
29691
29744
  h = (b - r2) / s2 + 2;
29692
29745
  else
29693
29746
  h = (r2 - g2) / s2 + 4;
29694
- s2 /= l2 < 0.5 ? max + min : 2 - max - min;
29747
+ s2 /= l2 < 0.5 ? max2 + min : 2 - max2 - min;
29695
29748
  h *= 60;
29696
29749
  } else {
29697
29750
  s2 = l2 > 0 && l2 < 1 ? 0 : h;
@@ -30239,9 +30292,9 @@ function precisionFixed(step) {
30239
30292
  function precisionPrefix(step, value) {
30240
30293
  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
30241
30294
  }
30242
- function precisionRound(step, max) {
30243
- step = Math.abs(step), max = Math.abs(max) - step;
30244
- return Math.max(0, exponent(max) - exponent(step)) + 1;
30295
+ function precisionRound(step, max2) {
30296
+ step = Math.abs(step), max2 = Math.abs(max2) - step;
30297
+ return Math.max(0, exponent(max2) - exponent(step)) + 1;
30245
30298
  }
30246
30299
  function tickFormat(start, stop, count2, specifier) {
30247
30300
  var step = tickStep(start, stop, count2), precision;
@@ -41395,8 +41448,8 @@ function acos$1(radians2, result) {
41395
41448
  function atan$1(radians2, result) {
41396
41449
  return map(radians2, (angle2) => Math.atan(angle2), result);
41397
41450
  }
41398
- function clamp$1(value, min, max) {
41399
- return map(value, (value2) => Math.max(min, Math.min(max, value2)));
41451
+ function clamp$1(value, min, max2) {
41452
+ return map(value, (value2) => Math.max(min, Math.min(max2, value2)));
41400
41453
  }
41401
41454
  function lerp$5(a2, b, t2) {
41402
41455
  if (isArray$1(a2)) {
@@ -41683,9 +41736,9 @@ class MathArray extends _extendableBuiltin(Array) {
41683
41736
  divideScalar(a2) {
41684
41737
  return this.multiplyByScalar(1 / a2);
41685
41738
  }
41686
- clampScalar(min, max) {
41739
+ clampScalar(min, max2) {
41687
41740
  for (let i2 = 0; i2 < this.ELEMENTS; ++i2) {
41688
- this[i2] = Math.min(Math.max(this[i2], min), max);
41741
+ this[i2] = Math.min(Math.max(this[i2], min), max2);
41689
41742
  }
41690
41743
  return this.check();
41691
41744
  }
@@ -47818,8 +47871,8 @@ function mod$1(value, divisor) {
47818
47871
  function lerp(start, end, step) {
47819
47872
  return step * end + (1 - step) * start;
47820
47873
  }
47821
- function clamp(x2, min, max) {
47822
- return x2 < min ? min : x2 > max ? max : x2;
47874
+ function clamp(x2, min, max2) {
47875
+ return x2 < min ? min : x2 > max2 ? max2 : x2;
47823
47876
  }
47824
47877
  function ieLog2(x2) {
47825
47878
  return Math.log(x2) * Math.LOG2E;
@@ -57540,17 +57593,17 @@ class DataColumn {
57540
57593
  const len2 = numInstances * size;
57541
57594
  if (value && len2 && value.length >= len2) {
57542
57595
  const min = new Array(size).fill(Infinity);
57543
- const max = new Array(size).fill(-Infinity);
57596
+ const max2 = new Array(size).fill(-Infinity);
57544
57597
  for (let i2 = 0; i2 < len2; ) {
57545
57598
  for (let j = 0; j < size; j++) {
57546
57599
  const v = value[i2++];
57547
57600
  if (v < min[j])
57548
57601
  min[j] = v;
57549
- if (v > max[j])
57550
- max[j] = v;
57602
+ if (v > max2[j])
57603
+ max2[j] = v;
57551
57604
  }
57552
57605
  }
57553
- result = [min, max];
57606
+ result = [min, max2];
57554
57607
  }
57555
57608
  }
57556
57609
  this.state.bounds = result;
@@ -83631,10 +83684,10 @@ class GroupNode extends ScenegraphNode {
83631
83684
  if (!bounds2) {
83632
83685
  return;
83633
83686
  }
83634
- const [min, max] = bounds2;
83635
- const center2 = new Vector3(min).add(max).divide([2, 2, 2]);
83687
+ const [min, max2] = bounds2;
83688
+ const center2 = new Vector3(min).add(max2).divide([2, 2, 2]);
83636
83689
  worldMatrix.transformAsPoint(center2, center2);
83637
- const halfSize = new Vector3(max).subtract(min).divide([2, 2, 2]);
83690
+ const halfSize = new Vector3(max2).subtract(min).divide([2, 2, 2]);
83638
83691
  worldMatrix.transformAsVector(halfSize, halfSize);
83639
83692
  for (let v = 0; v < 8; v++) {
83640
83693
  const position = new Vector3(v & 1 ? -1 : 1, v & 2 ? -1 : 1, v & 4 ? -1 : 1).multiply(halfSize).add(center2);
@@ -92583,7 +92636,7 @@ class Tile {
92583
92636
  const { errors } = this;
92584
92637
  let numVertices = 0;
92585
92638
  let numTriangles = 0;
92586
- const max = size - 1;
92639
+ const max2 = size - 1;
92587
92640
  indices.fill(0);
92588
92641
  function countElements(ax, ay, bx, by, cx, cy) {
92589
92642
  const mx = ax + bx >> 1;
@@ -92598,8 +92651,8 @@ class Tile {
92598
92651
  numTriangles++;
92599
92652
  }
92600
92653
  }
92601
- countElements(0, 0, max, max, max, 0);
92602
- countElements(max, max, 0, 0, 0, max);
92654
+ countElements(0, 0, max2, max2, max2, 0);
92655
+ countElements(max2, max2, 0, 0, 0, max2);
92603
92656
  const vertices = new Uint16Array(numVertices * 2);
92604
92657
  const triangles = new Uint32Array(numTriangles * 3);
92605
92658
  let triIndex = 0;
@@ -92624,8 +92677,8 @@ class Tile {
92624
92677
  triangles[triIndex++] = c;
92625
92678
  }
92626
92679
  }
92627
- processTriangle(0, 0, max, max, max, 0);
92628
- processTriangle(max, max, 0, 0, 0, max);
92680
+ processTriangle(0, 0, max2, max2, max2, 0);
92681
+ processTriangle(max2, max2, 0, 0, 0, max2);
92629
92682
  return { vertices, triangles };
92630
92683
  }
92631
92684
  }
@@ -132610,16 +132663,16 @@ function addDecoder(cases, importFn) {
132610
132663
  }
132611
132664
  cases.forEach((c) => registry$1.set(c, importFn));
132612
132665
  }
132613
- addDecoder([void 0, 1], () => import("./raw-486d710b.js").then((m) => m.default));
132614
- addDecoder(5, () => import("./lzw-4bad7337.js").then((m) => m.default));
132666
+ addDecoder([void 0, 1], () => import("./raw-1b039310.js").then((m) => m.default));
132667
+ addDecoder(5, () => import("./lzw-5206f32d.js").then((m) => m.default));
132615
132668
  addDecoder(6, () => {
132616
132669
  throw new Error("old style JPEG compression is not supported.");
132617
132670
  });
132618
- addDecoder(7, () => import("./jpeg-f4efd5d2.js").then((m) => m.default));
132619
- addDecoder([8, 32946], () => import("./deflate-75a89dc6.js").then((m) => m.default));
132620
- addDecoder(32773, () => import("./packbits-2b4a014a.js").then((m) => m.default));
132621
- addDecoder(34887, () => import("./lerc-24acd19a.js").then((m) => m.default));
132622
- addDecoder(50001, () => import("./webimage-5effa8da.js").then((m) => m.default));
132671
+ addDecoder(7, () => import("./jpeg-a2f977d0.js").then((m) => m.default));
132672
+ addDecoder([8, 32946], () => import("./deflate-05e3ee40.js").then((m) => m.default));
132673
+ addDecoder(32773, () => import("./packbits-5812e06c.js").then((m) => m.default));
132674
+ addDecoder(34887, () => import("./lerc-0d65f0a5.js").then((m) => m.default));
132675
+ addDecoder(50001, () => import("./webimage-199d4de9.js").then((m) => m.default));
132623
132676
  function decodeRowAcc(row, stride) {
132624
132677
  let length2 = row.length - stride;
132625
132678
  let offset5 = 0;
@@ -136168,9 +136221,9 @@ const buf2binstring = (buf, len2) => {
136168
136221
  }
136169
136222
  return result;
136170
136223
  };
136171
- var buf2string = (buf, max) => {
136224
+ var buf2string = (buf, max2) => {
136172
136225
  let i2, out;
136173
- const len2 = max || buf.length;
136226
+ const len2 = max2 || buf.length;
136174
136227
  const utf16buf = new Array(len2 * 2);
136175
136228
  for (out = 0, i2 = 0; i2 < len2; ) {
136176
136229
  let c = buf[i2++];
@@ -136203,22 +136256,22 @@ var buf2string = (buf, max) => {
136203
136256
  }
136204
136257
  return buf2binstring(utf16buf, out);
136205
136258
  };
136206
- var utf8border = (buf, max) => {
136207
- max = max || buf.length;
136208
- if (max > buf.length) {
136209
- max = buf.length;
136259
+ var utf8border = (buf, max2) => {
136260
+ max2 = max2 || buf.length;
136261
+ if (max2 > buf.length) {
136262
+ max2 = buf.length;
136210
136263
  }
136211
- let pos = max - 1;
136264
+ let pos = max2 - 1;
136212
136265
  while (pos >= 0 && (buf[pos] & 192) === 128) {
136213
136266
  pos--;
136214
136267
  }
136215
136268
  if (pos < 0) {
136216
- return max;
136269
+ return max2;
136217
136270
  }
136218
136271
  if (pos === 0) {
136219
- return max;
136272
+ return max2;
136220
136273
  }
136221
- return pos + _utf8len[buf[pos]] > max ? pos : max;
136274
+ return pos + _utf8len[buf[pos]] > max2 ? pos : max2;
136222
136275
  };
136223
136276
  var strings = {
136224
136277
  string2buf,
@@ -136768,7 +136821,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
136768
136821
  const bits = opts2.bits;
136769
136822
  let len2 = 0;
136770
136823
  let sym = 0;
136771
- let min = 0, max = 0;
136824
+ let min = 0, max2 = 0;
136772
136825
  let root2 = 0;
136773
136826
  let curr = 0;
136774
136827
  let drop = 0;
@@ -136795,21 +136848,21 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
136795
136848
  count2[lens2[lens_index + sym]]++;
136796
136849
  }
136797
136850
  root2 = bits;
136798
- for (max = MAXBITS; max >= 1; max--) {
136799
- if (count2[max] !== 0) {
136851
+ for (max2 = MAXBITS; max2 >= 1; max2--) {
136852
+ if (count2[max2] !== 0) {
136800
136853
  break;
136801
136854
  }
136802
136855
  }
136803
- if (root2 > max) {
136804
- root2 = max;
136856
+ if (root2 > max2) {
136857
+ root2 = max2;
136805
136858
  }
136806
- if (max === 0) {
136859
+ if (max2 === 0) {
136807
136860
  table[table_index++] = 1 << 24 | 64 << 16 | 0;
136808
136861
  table[table_index++] = 1 << 24 | 64 << 16 | 0;
136809
136862
  opts2.bits = 1;
136810
136863
  return 0;
136811
136864
  }
136812
- for (min = 1; min < max; min++) {
136865
+ for (min = 1; min < max2; min++) {
136813
136866
  if (count2[min] !== 0) {
136814
136867
  break;
136815
136868
  }
@@ -136825,7 +136878,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
136825
136878
  return -1;
136826
136879
  }
136827
136880
  }
136828
- if (left2 > 0 && (type === CODES || max !== 1)) {
136881
+ if (left2 > 0 && (type === CODES || max2 !== 1)) {
136829
136882
  return -1;
136830
136883
  }
136831
136884
  offs[1] = 0;
@@ -136894,7 +136947,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
136894
136947
  }
136895
136948
  sym++;
136896
136949
  if (--count2[len2] === 0) {
136897
- if (len2 === max) {
136950
+ if (len2 === max2) {
136898
136951
  break;
136899
136952
  }
136900
136953
  len2 = lens2[lens_index + work[sym]];
@@ -136906,7 +136959,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
136906
136959
  next += min;
136907
136960
  curr = len2 - drop;
136908
136961
  left2 = 1 << curr;
136909
- while (curr + drop < max) {
136962
+ while (curr + drop < max2) {
136910
136963
  left2 -= count2[curr + drop];
136911
136964
  if (left2 <= 0) {
136912
136965
  break;
@@ -143640,21 +143693,21 @@ void main() {
143640
143693
  }
143641
143694
  `;
143642
143695
  function normalize(arr) {
143643
- const [min, max] = extent$1(arr);
143644
- const ratio = 255 / (max - min);
143696
+ const [min, max2] = extent$1(arr);
143697
+ const ratio = 255 / (max2 - min);
143645
143698
  const data = new Uint8Array(arr.map((i2) => Math.floor((i2 - min) * ratio)));
143646
143699
  return data;
143647
143700
  }
143648
- function multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSetColorMode, texSize) {
143701
+ function multiSetsToTextureData(multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode, texSize) {
143649
143702
  let totalValuesLength = 0;
143650
143703
  let totalColorsLength = 0;
143651
143704
  channelIsSetColorMode.forEach((isSetColorMode, channelIndex) => {
143652
- var _a2, _b, _c, _d, _e;
143705
+ var _a2, _b, _c, _d;
143653
143706
  if (isSetColorMode) {
143654
- totalValuesLength += ((_b = (_a2 = setColorValues[channelIndex]) == null ? void 0 : _a2.obsIndex) == null ? void 0 : _b.length) || 0;
143655
- totalColorsLength += (((_d = (_c = setColorValues[channelIndex]) == null ? void 0 : _c.setColors) == null ? void 0 : _d.length) || 0) * 3;
143707
+ totalColorsLength += (((_b = (_a2 = setColorValues[channelIndex]) == null ? void 0 : _a2.setColors) == null ? void 0 : _b.length) || 0) * 3;
143708
+ totalValuesLength += ((_c = setColorValues[channelIndex]) == null ? void 0 : _c.obsIndex) ? max(setColorValues[channelIndex].obsIndex.map((d) => parseInt(d))) : 0;
143656
143709
  } else {
143657
- totalValuesLength += ((_e = multiFeatureValues[channelIndex]) == null ? void 0 : _e.length) || 0;
143710
+ totalValuesLength += multiMatrixObsIndex[channelIndex] ? max(multiMatrixObsIndex[channelIndex].map((d) => parseInt(d))) : ((_d = multiFeatureValues[channelIndex]) == null ? void 0 : _d.length) || 0;
143658
143711
  }
143659
143712
  });
143660
143713
  const valueTexHeight = Math.max(2, Math.ceil(totalValuesLength / texSize));
@@ -143672,12 +143725,20 @@ function multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSet
143672
143725
  let indexOffset = 0;
143673
143726
  let colorOffset = 0;
143674
143727
  channelIsSetColorMode.forEach((isSetColorMode, channelIndex) => {
143728
+ const matrixObsIndex = multiMatrixObsIndex[channelIndex];
143729
+ const bitmaskValueIsIndex = matrixObsIndex === null;
143675
143730
  if (isSetColorMode) {
143676
143731
  const { setColorIndices, setColors, obsIndex } = setColorValues[channelIndex] || {};
143677
143732
  if (setColorIndices && setColors && obsIndex) {
143678
143733
  for (let i2 = 0; i2 < obsIndex.length; i2++) {
143679
- const colorIndex = setColorIndices.get(String(i2 + 1));
143680
- totalData[indexOffset + i2] = colorIndex === void 0 ? 0 : colorIndex + 1;
143734
+ let obsId = String(i2 + 1);
143735
+ let obsI = i2;
143736
+ if (!bitmaskValueIsIndex) {
143737
+ obsId = obsIndex[i2];
143738
+ obsI = parseInt(obsId) - 1;
143739
+ }
143740
+ const colorIndex = setColorIndices.get(obsId);
143741
+ totalData[indexOffset + obsI] = colorIndex === void 0 ? 0 : colorIndex + 1;
143681
143742
  }
143682
143743
  for (let i2 = 0; i2 < setColors.length; i2++) {
143683
143744
  const { color: [r2, g2, b] } = setColors[i2];
@@ -143692,7 +143753,16 @@ function multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSet
143692
143753
  colorOffset += (setColors == null ? void 0 : setColors.length) || 0;
143693
143754
  } else {
143694
143755
  const featureArr = multiFeatureValues[channelIndex];
143695
- totalData.set(normalize(featureArr), indexOffset);
143756
+ const normalizedFeatureArr = normalize(featureArr);
143757
+ if (!bitmaskValueIsIndex && matrixObsIndex) {
143758
+ for (let i2 = 0; i2 < matrixObsIndex.length; i2++) {
143759
+ const obsId = matrixObsIndex[i2];
143760
+ const obsI = parseInt(obsId) - 1;
143761
+ totalData[indexOffset + obsI] = normalizedFeatureArr[i2];
143762
+ }
143763
+ } else {
143764
+ totalData.set(normalizedFeatureArr, indexOffset);
143765
+ }
143696
143766
  indicesOffsets.push(indexOffset);
143697
143767
  indexOffset += featureArr.length;
143698
143768
  colorsOffsets.push(colorOffset);
@@ -143719,6 +143789,17 @@ function padWithDefault(arr, defaultValue2, padWidth) {
143719
143789
  function getColor(arr) {
143720
143790
  return arr ? arr.map((v) => v / 255) : [0, 0, 0];
143721
143791
  }
143792
+ function isEqualShallow(prevArr, nextArr) {
143793
+ if (prevArr === nextArr) {
143794
+ return true;
143795
+ }
143796
+ if (Array.isArray(prevArr) && Array.isArray(nextArr)) {
143797
+ if (prevArr.length === nextArr.length) {
143798
+ return !prevArr.some((v, i2) => v !== nextArr[i2] && (!Array.isArray(v) && !Array.isArray(nextArr[i2]) || (v.length > 0 || nextArr[i2].length > 0)));
143799
+ }
143800
+ }
143801
+ return prevArr === nextArr;
143802
+ }
143722
143803
  const defaultProps = {
143723
143804
  channelStrokeWidths: { type: "array", value: null, compare: true },
143724
143805
  channelsFilled: { type: "array", value: null, compare: true },
@@ -143728,6 +143809,7 @@ const defaultProps = {
143728
143809
  colormap: { type: "string", value: GLSL_COLORMAP_DEFAULT, compare: true },
143729
143810
  expressionData: { type: "object", value: null, compare: true },
143730
143811
  multiFeatureValues: { type: "array", value: null, compare: true },
143812
+ multiMatrixObsIndex: { type: "array", value: null, compare: true },
143731
143813
  setColorValues: { type: "array", value: null, compare: true },
143732
143814
  channelFeatureValueColormaps: { type: "array", value: null, compare: true },
143733
143815
  channelFeatureValueColormapRanges: { type: "array", value: null, compare: true },
@@ -143774,9 +143856,9 @@ class BitmaskLayer2 extends XRLayer {
143774
143856
  }
143775
143857
  updateState({ props: props2, oldProps, changeFlags }) {
143776
143858
  super.updateState({ props: props2, oldProps, changeFlags });
143777
- if (props2.multiFeatureValues !== oldProps.multiFeatureValues || props2.setColorValues !== oldProps.setColorValues || props2.channelIsSetColorMode !== oldProps.channelIsSetColorMode) {
143778
- const { multiFeatureValues, setColorValues, channelIsSetColorMode } = this.props;
143779
- const [valueTex, colorTex, valueTexOffsets, colorTexOffsets, valueTexHeight, colorTexHeight] = this.multiSetsToTexture(multiFeatureValues, setColorValues, channelIsSetColorMode);
143859
+ if (!isEqualShallow(props2.multiFeatureValues, oldProps.multiFeatureValues) || !isEqualShallow(props2.multiMatrixObsIndex, oldProps.multiMatrixObsIndex) || !isEqualShallow(props2.setColorValues, oldProps.setColorValues) || !isEqualShallow(props2.channelIsSetColorMode, oldProps.channelIsSetColorMode)) {
143860
+ const { multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode } = this.props;
143861
+ const [valueTex, colorTex, valueTexOffsets, colorTexOffsets, valueTexHeight, colorTexHeight] = this.multiSetsToTexture(multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode);
143780
143862
  this.setState({
143781
143863
  valueTex,
143782
143864
  colorTex,
@@ -143928,9 +144010,9 @@ class BitmaskLayer2 extends XRLayer {
143928
144010
  type: GL$1.FLOAT
143929
144011
  });
143930
144012
  }
143931
- multiSetsToTexture(multiFeatureValues, setColorValues, channelIsSetColorMode) {
144013
+ multiSetsToTexture(multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode) {
143932
144014
  const isWebGL2On = isWebGL2$1(this.context.gl);
143933
- const [totalData, valueTexHeight, indicesOffsets, totalColors, colorTexHeight, colorsOffsets] = multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSetColorMode, MULTI_FEATURE_TEX_SIZE);
144015
+ const [totalData, valueTexHeight, indicesOffsets, totalColors, colorTexHeight, colorsOffsets] = multiSetsToTextureData(multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode, MULTI_FEATURE_TEX_SIZE);
143934
144016
  return [
143935
144017
  // Color indices texture
143936
144018
  new Texture2D(this.context.gl, {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a, H } from "./index-b879347c.js";
1
+ import { a, H } from "./index-edc6cc12.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-b879347c.js";
1
+ import { B as BaseDecoder } from "./index-edc6cc12.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-68f84e2a.js";
2
- import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-b879347c.js";
2
+ import { g as getDefaultExportFromCjs, B as BaseDecoder } from "./index-edc6cc12.js";
3
3
  import "react";
4
4
  import "@vitessce/vit-s";
5
5
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-b879347c.js";
1
+ import { B as BaseDecoder } from "./index-edc6cc12.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-b879347c.js";
1
+ import { B as BaseDecoder } from "./index-edc6cc12.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-b879347c.js";
1
+ import { B as BaseDecoder } from "./index-edc6cc12.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-b879347c.js";
1
+ import { B as BaseDecoder } from "./index-edc6cc12.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useState, useCallback, useMemo, } from 'react';
3
3
  import { TitleInfo, useDeckCanvasSize, useGetObsMembership, useGetObsInfo, useReady, useUrls, useObsSetsData, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useMultiObsLabels, useFeatureLabelsData, useCoordination, useLoaders, useSetComponentHover, useSetComponentViewInfo, } from '@vitessce/vit-s';
4
- import { pluralize as plur, capitalize, commaNumber, getCellColors } from '@vitessce/utils';
5
- import { mergeObsSets, findLongestCommonPath } from '@vitessce/sets-utils';
4
+ import { pluralize as plur, capitalize, commaNumber } from '@vitessce/utils';
5
+ import { mergeObsSets, findLongestCommonPath, getCellColors } from '@vitessce/sets-utils';
6
6
  import { COMPONENT_COORDINATION_TYPES, ViewType } from '@vitessce/constants-internal';
7
7
  import { Legend } from '@vitessce/legend';
8
8
  import Heatmap from './Heatmap.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/heatmap",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "author": "Gehlenborg Lab",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -20,14 +20,14 @@
20
20
  "lodash-es": "^4.17.21",
21
21
  "uuid": "^9.0.0",
22
22
  "react-aria": "^3.28.0",
23
- "@vitessce/gl": "3.3.2",
24
- "@vitessce/sets-utils": "3.3.2",
25
- "@vitessce/legend": "3.3.2",
26
- "@vitessce/tooltip": "3.3.2",
27
- "@vitessce/vit-s": "3.3.2",
28
- "@vitessce/utils": "3.3.2",
29
- "@vitessce/workers": "3.3.2",
30
- "@vitessce/constants-internal": "3.3.2"
23
+ "@vitessce/constants-internal": "3.3.4",
24
+ "@vitessce/gl": "3.3.4",
25
+ "@vitessce/legend": "3.3.4",
26
+ "@vitessce/tooltip": "3.3.4",
27
+ "@vitessce/sets-utils": "3.3.4",
28
+ "@vitessce/utils": "3.3.4",
29
+ "@vitessce/vit-s": "3.3.4",
30
+ "@vitessce/workers": "3.3.4"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@testing-library/jest-dom": "^5.16.4",
@@ -16,8 +16,8 @@ import {
16
16
  useCoordination, useLoaders,
17
17
  useSetComponentHover, useSetComponentViewInfo,
18
18
  } from '@vitessce/vit-s';
19
- import { pluralize as plur, capitalize, commaNumber, getCellColors } from '@vitessce/utils';
20
- import { mergeObsSets, findLongestCommonPath } from '@vitessce/sets-utils';
19
+ import { pluralize as plur, capitalize, commaNumber } from '@vitessce/utils';
20
+ import { mergeObsSets, findLongestCommonPath, getCellColors } from '@vitessce/sets-utils';
21
21
  import { COMPONENT_COORDINATION_TYPES, ViewType } from '@vitessce/constants-internal';
22
22
  import { Legend } from '@vitessce/legend';
23
23
  import Heatmap from './Heatmap.js';