@vitessce/all 3.8.8 → 3.8.10

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.
@@ -4369,28 +4369,7 @@ var symbolTag$7 = "[object Symbol]";
4369
4369
  function isSymbol$5(value2) {
4370
4370
  return typeof value2 == "symbol" || isObjectLike$c(value2) && baseGetTag$8(value2) == symbolTag$7;
4371
4371
  }
4372
- function arrayMap$3(array2, iteratee) {
4373
- var index2 = -1, length2 = array2 == null ? 0 : array2.length, result = Array(length2);
4374
- while (++index2 < length2) {
4375
- result[index2] = iteratee(array2[index2], index2, array2);
4376
- }
4377
- return result;
4378
- }
4379
4372
  var isArray$f = Array.isArray;
4380
- var symbolProto$5 = Symbol$7 ? Symbol$7.prototype : void 0, symbolToString$1 = symbolProto$5 ? symbolProto$5.toString : void 0;
4381
- function baseToString$3(value2) {
4382
- if (typeof value2 == "string") {
4383
- return value2;
4384
- }
4385
- if (isArray$f(value2)) {
4386
- return arrayMap$3(value2, baseToString$3) + "";
4387
- }
4388
- if (isSymbol$5(value2)) {
4389
- return symbolToString$1 ? symbolToString$1.call(value2) : "";
4390
- }
4391
- var result = value2 + "";
4392
- return result == "0" && 1 / value2 == -Infinity ? "-0" : result;
4393
- }
4394
4373
  var reWhitespace$1 = /\s/;
4395
4374
  function trimmedEndIndex$2(string2) {
4396
4375
  var index2 = string2.length;
@@ -4773,17 +4752,6 @@ function baseKeys$2(object2) {
4773
4752
  function keys$9(object2) {
4774
4753
  return isArrayLike$7(object2) ? arrayLikeKeys$3(object2) : baseKeys$2(object2);
4775
4754
  }
4776
- var reIsDeepProp$1 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp$1 = /^\w*$/;
4777
- function isKey$4(value2, object2) {
4778
- if (isArray$f(value2)) {
4779
- return false;
4780
- }
4781
- var type2 = typeof value2;
4782
- if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value2 == null || isSymbol$5(value2)) {
4783
- return true;
4784
- }
4785
- return reIsPlainProp$1.test(value2) || !reIsDeepProp$1.test(value2) || object2 != null && value2 in Object(object2);
4786
- }
4787
4755
  var nativeCreate$5 = getNative$8(Object, "create");
4788
4756
  function hashClear$2() {
4789
4757
  this.__data__ = nativeCreate$5 ? nativeCreate$5(null) : {};
@@ -4937,75 +4905,6 @@ MapCache$4.prototype["delete"] = mapCacheDelete$2;
4937
4905
  MapCache$4.prototype.get = mapCacheGet$2;
4938
4906
  MapCache$4.prototype.has = mapCacheHas$2;
4939
4907
  MapCache$4.prototype.set = mapCacheSet$2;
4940
- var FUNC_ERROR_TEXT$3 = "Expected a function";
4941
- function memoize$7(func, resolver2) {
4942
- if (typeof func != "function" || resolver2 != null && typeof resolver2 != "function") {
4943
- throw new TypeError(FUNC_ERROR_TEXT$3);
4944
- }
4945
- var memoized = function() {
4946
- var args = arguments, key2 = resolver2 ? resolver2.apply(this, args) : args[0], cache2 = memoized.cache;
4947
- if (cache2.has(key2)) {
4948
- return cache2.get(key2);
4949
- }
4950
- var result = func.apply(this, args);
4951
- memoized.cache = cache2.set(key2, result) || cache2;
4952
- return result;
4953
- };
4954
- memoized.cache = new (memoize$7.Cache || MapCache$4)();
4955
- return memoized;
4956
- }
4957
- memoize$7.Cache = MapCache$4;
4958
- var MAX_MEMOIZE_SIZE$1 = 500;
4959
- function memoizeCapped$2(func) {
4960
- var result = memoize$7(func, function(key2) {
4961
- if (cache2.size === MAX_MEMOIZE_SIZE$1) {
4962
- cache2.clear();
4963
- }
4964
- return key2;
4965
- });
4966
- var cache2 = result.cache;
4967
- return result;
4968
- }
4969
- var rePropName$1 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
4970
- var reEscapeChar$1 = /\\(\\)?/g;
4971
- var stringToPath$2 = memoizeCapped$2(function(string2) {
4972
- var result = [];
4973
- if (string2.charCodeAt(0) === 46) {
4974
- result.push("");
4975
- }
4976
- string2.replace(rePropName$1, function(match2, number2, quote, subString) {
4977
- result.push(quote ? subString.replace(reEscapeChar$1, "$1") : number2 || match2);
4978
- });
4979
- return result;
4980
- });
4981
- function toString$6(value2) {
4982
- return value2 == null ? "" : baseToString$3(value2);
4983
- }
4984
- function castPath$3(value2, object2) {
4985
- if (isArray$f(value2)) {
4986
- return value2;
4987
- }
4988
- return isKey$4(value2, object2) ? [value2] : stringToPath$2(toString$6(value2));
4989
- }
4990
- function toKey$5(value2) {
4991
- if (typeof value2 == "string" || isSymbol$5(value2)) {
4992
- return value2;
4993
- }
4994
- var result = value2 + "";
4995
- return result == "0" && 1 / value2 == -Infinity ? "-0" : result;
4996
- }
4997
- function baseGet$3(object2, path2) {
4998
- path2 = castPath$3(path2, object2);
4999
- var index2 = 0, length2 = path2.length;
5000
- while (object2 != null && index2 < length2) {
5001
- object2 = object2[toKey$5(path2[index2++])];
5002
- }
5003
- return index2 && index2 == length2 ? object2 : void 0;
5004
- }
5005
- function get$g(object2, path2, defaultValue2) {
5006
- var result = object2 == null ? void 0 : baseGet$3(object2, path2);
5007
- return result === void 0 ? defaultValue2 : result;
5008
- }
5009
4908
  function arrayPush$3(array2, values3) {
5010
4909
  var index2 = -1, length2 = values3.length, offset2 = array2.length;
5011
4910
  while (++index2 < length2) {
@@ -5340,9 +5239,9 @@ function arraySome$2(array2, predicate) {
5340
5239
  function cacheHas$2(cache2, key2) {
5341
5240
  return cache2.has(key2);
5342
5241
  }
5343
- var COMPARE_PARTIAL_FLAG$b = 1, COMPARE_UNORDERED_FLAG$7 = 2;
5242
+ var COMPARE_PARTIAL_FLAG$9 = 1, COMPARE_UNORDERED_FLAG$5 = 2;
5344
5243
  function equalArrays$3(array2, other, bitmask, customizer, equalFunc, stack2) {
5345
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG$b, arrLength = array2.length, othLength = other.length;
5244
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG$9, arrLength = array2.length, othLength = other.length;
5346
5245
  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
5347
5246
  return false;
5348
5247
  }
@@ -5351,7 +5250,7 @@ function equalArrays$3(array2, other, bitmask, customizer, equalFunc, stack2) {
5351
5250
  if (arrStacked && othStacked) {
5352
5251
  return arrStacked == other && othStacked == array2;
5353
5252
  }
5354
- var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$7 ? new SetCache$2() : void 0;
5253
+ var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$5 ? new SetCache$2() : void 0;
5355
5254
  stack2.set(array2, other);
5356
5255
  stack2.set(other, array2);
5357
5256
  while (++index2 < arrLength) {
@@ -5398,7 +5297,7 @@ function setToArray$2(set2) {
5398
5297
  });
5399
5298
  return result;
5400
5299
  }
5401
- var COMPARE_PARTIAL_FLAG$a = 1, COMPARE_UNORDERED_FLAG$6 = 2;
5300
+ var COMPARE_PARTIAL_FLAG$8 = 1, COMPARE_UNORDERED_FLAG$4 = 2;
5402
5301
  var boolTag$4 = "[object Boolean]", dateTag$4 = "[object Date]", errorTag$3 = "[object Error]", mapTag$6 = "[object Map]", numberTag$4 = "[object Number]", regexpTag$4 = "[object RegExp]", setTag$6 = "[object Set]", stringTag$5 = "[object String]", symbolTag$4 = "[object Symbol]";
5403
5302
  var arrayBufferTag$4 = "[object ArrayBuffer]", dataViewTag$5 = "[object DataView]";
5404
5303
  var symbolProto$3 = Symbol$7 ? Symbol$7.prototype : void 0, symbolValueOf$2 = symbolProto$3 ? symbolProto$3.valueOf : void 0;
@@ -5427,7 +5326,7 @@ function equalByTag$2(object2, other, tag2, bitmask, customizer, equalFunc, stac
5427
5326
  case mapTag$6:
5428
5327
  var convert2 = mapToArray$2;
5429
5328
  case setTag$6:
5430
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG$a;
5329
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG$8;
5431
5330
  convert2 || (convert2 = setToArray$2);
5432
5331
  if (object2.size != other.size && !isPartial) {
5433
5332
  return false;
@@ -5436,7 +5335,7 @@ function equalByTag$2(object2, other, tag2, bitmask, customizer, equalFunc, stac
5436
5335
  if (stacked) {
5437
5336
  return stacked == other;
5438
5337
  }
5439
- bitmask |= COMPARE_UNORDERED_FLAG$6;
5338
+ bitmask |= COMPARE_UNORDERED_FLAG$4;
5440
5339
  stack2.set(object2, other);
5441
5340
  var result = equalArrays$3(convert2(object2), convert2(other), bitmask, customizer, equalFunc, stack2);
5442
5341
  stack2["delete"](object2);
@@ -5448,11 +5347,11 @@ function equalByTag$2(object2, other, tag2, bitmask, customizer, equalFunc, stac
5448
5347
  }
5449
5348
  return false;
5450
5349
  }
5451
- var COMPARE_PARTIAL_FLAG$9 = 1;
5350
+ var COMPARE_PARTIAL_FLAG$7 = 1;
5452
5351
  var objectProto$h = Object.prototype;
5453
5352
  var hasOwnProperty$g = objectProto$h.hasOwnProperty;
5454
5353
  function equalObjects$2(object2, other, bitmask, customizer, equalFunc, stack2) {
5455
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG$9, objProps = getAllKeys$4(object2), objLength = objProps.length, othProps = getAllKeys$4(other), othLength = othProps.length;
5354
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG$7, objProps = getAllKeys$4(object2), objLength = objProps.length, othProps = getAllKeys$4(other), othLength = othProps.length;
5456
5355
  if (objLength != othLength && !isPartial) {
5457
5356
  return false;
5458
5357
  }
@@ -5494,7 +5393,7 @@ function equalObjects$2(object2, other, bitmask, customizer, equalFunc, stack2)
5494
5393
  stack2["delete"](other);
5495
5394
  return result;
5496
5395
  }
5497
- var COMPARE_PARTIAL_FLAG$8 = 1;
5396
+ var COMPARE_PARTIAL_FLAG$6 = 1;
5498
5397
  var argsTag$4 = "[object Arguments]", arrayTag$3 = "[object Array]", objectTag$5 = "[object Object]";
5499
5398
  var objectProto$g = Object.prototype;
5500
5399
  var hasOwnProperty$f = objectProto$g.hasOwnProperty;
@@ -5514,7 +5413,7 @@ function baseIsEqualDeep$2(object2, other, bitmask, customizer, equalFunc, stack
5514
5413
  stack2 || (stack2 = new Stack$6());
5515
5414
  return objIsArr || isTypedArray$5(object2) ? equalArrays$3(object2, other, bitmask, customizer, equalFunc, stack2) : equalByTag$2(object2, other, objTag, bitmask, customizer, equalFunc, stack2);
5516
5415
  }
5517
- if (!(bitmask & COMPARE_PARTIAL_FLAG$8)) {
5416
+ if (!(bitmask & COMPARE_PARTIAL_FLAG$6)) {
5518
5417
  var objIsWrapped = objIsObj && hasOwnProperty$f.call(object2, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$f.call(other, "__wrapped__");
5519
5418
  if (objIsWrapped || othIsWrapped) {
5520
5419
  var objUnwrapped = objIsWrapped ? object2.value() : object2, othUnwrapped = othIsWrapped ? other.value() : other;
@@ -5537,155 +5436,6 @@ function baseIsEqual$3(value2, other, bitmask, customizer, stack2) {
5537
5436
  }
5538
5437
  return baseIsEqualDeep$2(value2, other, bitmask, customizer, baseIsEqual$3, stack2);
5539
5438
  }
5540
- var COMPARE_PARTIAL_FLAG$7 = 1, COMPARE_UNORDERED_FLAG$5 = 2;
5541
- function baseIsMatch$2(object2, source2, matchData, customizer) {
5542
- var index2 = matchData.length, length2 = index2;
5543
- if (object2 == null) {
5544
- return !length2;
5545
- }
5546
- object2 = Object(object2);
5547
- while (index2--) {
5548
- var data2 = matchData[index2];
5549
- if (data2[2] ? data2[1] !== object2[data2[0]] : !(data2[0] in object2)) {
5550
- return false;
5551
- }
5552
- }
5553
- while (++index2 < length2) {
5554
- data2 = matchData[index2];
5555
- var key2 = data2[0], objValue = object2[key2], srcValue = data2[1];
5556
- if (data2[2]) {
5557
- if (objValue === void 0 && !(key2 in object2)) {
5558
- return false;
5559
- }
5560
- } else {
5561
- var stack2 = new Stack$6();
5562
- var result;
5563
- if (!(result === void 0 ? baseIsEqual$3(srcValue, objValue, COMPARE_PARTIAL_FLAG$7 | COMPARE_UNORDERED_FLAG$5, customizer, stack2) : result)) {
5564
- return false;
5565
- }
5566
- }
5567
- }
5568
- return true;
5569
- }
5570
- function isStrictComparable$3(value2) {
5571
- return value2 === value2 && !isObject$f(value2);
5572
- }
5573
- function getMatchData$2(object2) {
5574
- var result = keys$9(object2), length2 = result.length;
5575
- while (length2--) {
5576
- var key2 = result[length2], value2 = object2[key2];
5577
- result[length2] = [key2, value2, isStrictComparable$3(value2)];
5578
- }
5579
- return result;
5580
- }
5581
- function matchesStrictComparable$3(key2, srcValue) {
5582
- return function(object2) {
5583
- if (object2 == null) {
5584
- return false;
5585
- }
5586
- return object2[key2] === srcValue && (srcValue !== void 0 || key2 in Object(object2));
5587
- };
5588
- }
5589
- function baseMatches$2(source2) {
5590
- var matchData = getMatchData$2(source2);
5591
- if (matchData.length == 1 && matchData[0][2]) {
5592
- return matchesStrictComparable$3(matchData[0][0], matchData[0][1]);
5593
- }
5594
- return function(object2) {
5595
- return object2 === source2 || baseIsMatch$2(object2, source2, matchData);
5596
- };
5597
- }
5598
- function baseHasIn$2(object2, key2) {
5599
- return object2 != null && key2 in Object(object2);
5600
- }
5601
- function hasPath$2(object2, path2, hasFunc) {
5602
- path2 = castPath$3(path2, object2);
5603
- var index2 = -1, length2 = path2.length, result = false;
5604
- while (++index2 < length2) {
5605
- var key2 = toKey$5(path2[index2]);
5606
- if (!(result = object2 != null && hasFunc(object2, key2))) {
5607
- break;
5608
- }
5609
- object2 = object2[key2];
5610
- }
5611
- if (result || ++index2 != length2) {
5612
- return result;
5613
- }
5614
- length2 = object2 == null ? 0 : object2.length;
5615
- return !!length2 && isLength$4(length2) && isIndex$5(key2, length2) && (isArray$f(object2) || isArguments$4(object2));
5616
- }
5617
- function hasIn$2(object2, path2) {
5618
- return object2 != null && hasPath$2(object2, path2, baseHasIn$2);
5619
- }
5620
- var COMPARE_PARTIAL_FLAG$6 = 1, COMPARE_UNORDERED_FLAG$4 = 2;
5621
- function baseMatchesProperty$2(path2, srcValue) {
5622
- if (isKey$4(path2) && isStrictComparable$3(srcValue)) {
5623
- return matchesStrictComparable$3(toKey$5(path2), srcValue);
5624
- }
5625
- return function(object2) {
5626
- var objValue = get$g(object2, path2);
5627
- return objValue === void 0 && objValue === srcValue ? hasIn$2(object2, path2) : baseIsEqual$3(srcValue, objValue, COMPARE_PARTIAL_FLAG$6 | COMPARE_UNORDERED_FLAG$4);
5628
- };
5629
- }
5630
- function baseProperty$2(key2) {
5631
- return function(object2) {
5632
- return object2 == null ? void 0 : object2[key2];
5633
- };
5634
- }
5635
- function basePropertyDeep$2(path2) {
5636
- return function(object2) {
5637
- return baseGet$3(object2, path2);
5638
- };
5639
- }
5640
- function property$3(path2) {
5641
- return isKey$4(path2) ? baseProperty$2(toKey$5(path2)) : basePropertyDeep$2(path2);
5642
- }
5643
- function baseIteratee$2(value2) {
5644
- if (typeof value2 == "function") {
5645
- return value2;
5646
- }
5647
- if (value2 == null) {
5648
- return identity$h;
5649
- }
5650
- if (typeof value2 == "object") {
5651
- return isArray$f(value2) ? baseMatchesProperty$2(value2[0], value2[1]) : baseMatches$2(value2);
5652
- }
5653
- return property$3(value2);
5654
- }
5655
- function createBaseFor$2(fromRight) {
5656
- return function(object2, iteratee, keysFunc) {
5657
- var index2 = -1, iterable = Object(object2), props = keysFunc(object2), length2 = props.length;
5658
- while (length2--) {
5659
- var key2 = props[++index2];
5660
- if (iteratee(iterable[key2], key2, iterable) === false) {
5661
- break;
5662
- }
5663
- }
5664
- return object2;
5665
- };
5666
- }
5667
- var baseFor$3 = createBaseFor$2();
5668
- function baseForOwn$3(object2, iteratee) {
5669
- return object2 && baseFor$3(object2, iteratee, keys$9);
5670
- }
5671
- function createBaseEach$2(eachFunc, fromRight) {
5672
- return function(collection, iteratee) {
5673
- if (collection == null) {
5674
- return collection;
5675
- }
5676
- if (!isArrayLike$7(collection)) {
5677
- return eachFunc(collection, iteratee);
5678
- }
5679
- var length2 = collection.length, index2 = -1, iterable = Object(collection);
5680
- while (++index2 < length2) {
5681
- if (iteratee(iterable[index2], index2, iterable) === false) {
5682
- break;
5683
- }
5684
- }
5685
- return collection;
5686
- };
5687
- }
5688
- var baseEach$3 = createBaseEach$2(baseForOwn$3);
5689
5439
  var now$5 = function() {
5690
5440
  return root$d.Date.now();
5691
5441
  };
@@ -5807,27 +5557,6 @@ function baseDifference(array2, values3, iteratee, comparator2) {
5807
5557
  var difference$1 = baseRest$2(function(array2, values3) {
5808
5558
  return isArrayLikeObject$2(array2) ? baseDifference(array2, baseFlatten(values3, 1, isArrayLikeObject$2)) : [];
5809
5559
  });
5810
- function arrayEvery(array2, predicate) {
5811
- var index2 = -1, length2 = array2 == null ? 0 : array2.length;
5812
- while (++index2 < length2) {
5813
- if (!predicate(array2[index2], index2, array2)) {
5814
- return false;
5815
- }
5816
- }
5817
- return true;
5818
- }
5819
- function baseEvery(collection, predicate) {
5820
- var result = true;
5821
- baseEach$3(collection, function(value2, index2, collection2) {
5822
- result = !!predicate(value2, index2, collection2);
5823
- return result;
5824
- });
5825
- return result;
5826
- }
5827
- function every$1(collection, predicate, guard) {
5828
- var func = isArray$f(collection) ? arrayEvery : baseEvery;
5829
- return func(collection, baseIteratee$2(predicate));
5830
- }
5831
5560
  function isEqual$3(value2, other) {
5832
5561
  return baseIsEqual$3(value2, other);
5833
5562
  }
@@ -5869,7 +5598,7 @@ function createRange(fromRight) {
5869
5598
  return baseRange(start2, end2, step);
5870
5599
  };
5871
5600
  }
5872
- var range$f = createRange();
5601
+ var range$e = createRange();
5873
5602
  function sum$7(array2) {
5874
5603
  return array2 && array2.length ? baseSum(array2, identity$h) : 0;
5875
5604
  }
@@ -6490,6 +6219,59 @@ class Pool {
6490
6219
  }
6491
6220
  }
6492
6221
  }
6222
+ function aggregateFeatureArrays(arrays, strategy) {
6223
+ if (!arrays || arrays.length === 0)
6224
+ return null;
6225
+ let targetArray;
6226
+ if (strategy === "first" || typeof strategy === "number" && strategy === 0) {
6227
+ targetArray = arrays[0];
6228
+ } else if (strategy === "last") {
6229
+ targetArray = arrays[arrays.length - 1];
6230
+ } else if (typeof strategy === "number") {
6231
+ if (strategy >= 0 && strategy < arrays.length) {
6232
+ targetArray = arrays[strategy];
6233
+ } else {
6234
+ throw new Error(`Array index out of bounds: ${strategy}`);
6235
+ }
6236
+ }
6237
+ if (targetArray) {
6238
+ return targetArray;
6239
+ }
6240
+ const numArrays = arrays.length;
6241
+ const firstArrayLength = arrays[0].length;
6242
+ if (arrays.some((arr) => arr.length !== firstArrayLength)) {
6243
+ throw new Error("All arrays must have the same length for aggregation.");
6244
+ }
6245
+ if (strategy === "sum" || strategy === "mean") {
6246
+ const resultArray = new Float64Array(firstArrayLength);
6247
+ for (let i2 = 0; i2 < numArrays; i2++) {
6248
+ const arr = arrays[i2];
6249
+ for (let j = 0; j < firstArrayLength; j++) {
6250
+ resultArray[j] += arr[j];
6251
+ }
6252
+ }
6253
+ if (strategy === "mean") {
6254
+ for (let i2 = 0; i2 < firstArrayLength; i2++) {
6255
+ resultArray[i2] /= numArrays;
6256
+ }
6257
+ }
6258
+ return resultArray;
6259
+ }
6260
+ if (strategy === "difference") {
6261
+ if (numArrays !== 2) {
6262
+ console.warn("Difference strategy requires exactly 2 arrays.");
6263
+ return arrays[0];
6264
+ }
6265
+ const arr0 = arrays[0];
6266
+ const arr1 = arrays[1];
6267
+ const resultArray = new Float64Array(firstArrayLength);
6268
+ for (let i2 = 0; i2 < firstArrayLength; i2++) {
6269
+ resultArray[i2] = arr0[i2] - arr1[i2];
6270
+ }
6271
+ return resultArray;
6272
+ }
6273
+ throw new Error(`Unknown aggregation strategy: ${strategy}`);
6274
+ }
6493
6275
  configSchema1_0_0.shape.coordinationSpace.unwrap();
6494
6276
  configSchema1_0_0.shape.layout.element.shape.coordinationScopes.unwrap();
6495
6277
  function upgradeReplaceViewProp(prefix2, view, coordinationSpace) {
@@ -7897,10 +7679,10 @@ function requireLrucache() {
7897
7679
  lrucache = LRUCache3;
7898
7680
  return lrucache;
7899
7681
  }
7900
- var range$e;
7682
+ var range$d;
7901
7683
  var hasRequiredRange$1;
7902
7684
  function requireRange$1() {
7903
- if (hasRequiredRange$1) return range$e;
7685
+ if (hasRequiredRange$1) return range$d;
7904
7686
  hasRequiredRange$1 = 1;
7905
7687
  const SPACE_CHARACTERS = /\s+/g;
7906
7688
  class Range2 {
@@ -8041,7 +7823,7 @@ function requireRange$1() {
8041
7823
  return false;
8042
7824
  }
8043
7825
  }
8044
- range$e = Range2;
7826
+ range$d = Range2;
8045
7827
  const LRU = requireLrucache();
8046
7828
  const cache2 = new LRU();
8047
7829
  const parseOptions2 = requireParseOptions();
@@ -8271,7 +8053,7 @@ function requireRange$1() {
8271
8053
  }
8272
8054
  return true;
8273
8055
  };
8274
- return range$e;
8056
+ return range$d;
8275
8057
  }
8276
8058
  var comparator$2;
8277
8059
  var hasRequiredComparator$1;
@@ -47149,7 +46931,7 @@ function escapeRegExp(value2) {
47149
46931
  return value2.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
47150
46932
  }
47151
46933
  const clamp$6 = (value2, min2, max2) => Math.max(min2, Math.min(max2, value2));
47152
- function range$d(from2, to) {
46934
+ function range$c(from2, to) {
47153
46935
  return Array.from({
47154
46936
  length: to - from2
47155
46937
  }).map((_, i2) => from2 + i2);
@@ -51547,7 +51329,7 @@ const useGridVirtualScroller = () => {
51547
51329
  const rowModels = params2.rows ?? currentPage.rows;
51548
51330
  const firstRowToRender = baseRenderContext.firstRowIndex;
51549
51331
  const lastRowToRender = Math.min(baseRenderContext.lastRowIndex, rowModels.length);
51550
- const rowIndexes = params2.rows ? range$d(0, params2.rows.length) : range$d(firstRowToRender, lastRowToRender);
51332
+ const rowIndexes = params2.rows ? range$c(0, params2.rows.length) : range$c(firstRowToRender, lastRowToRender);
51551
51333
  let virtualRowIndex = -1;
51552
51334
  if (!isPinnedSection && focusedVirtualCell) {
51553
51335
  if (focusedVirtualCell.rowIndex < firstRowToRender) {
@@ -73034,7 +72816,7 @@ let powers = 0;
73034
72816
  const boolean = increment$1();
73035
72817
  const booleanish = increment$1();
73036
72818
  const overloadedBoolean = increment$1();
73037
- const number$b = increment$1();
72819
+ const number$a = increment$1();
73038
72820
  const spaceSeparated = increment$1();
73039
72821
  const commaSeparated = increment$1();
73040
72822
  const commaOrSpaceSeparated = increment$1();
@@ -73047,7 +72829,7 @@ const types = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePropert
73047
72829
  booleanish,
73048
72830
  commaOrSpaceSeparated,
73049
72831
  commaSeparated,
73050
- number: number$b,
72832
+ number: number$a,
73051
72833
  overloadedBoolean,
73052
72834
  spaceSeparated
73053
72835
  }, Symbol.toStringTag, { value: "Module" }));
@@ -73146,9 +72928,9 @@ const aria$1 = create$c({
73146
72928
  ariaAutoComplete: null,
73147
72929
  ariaBusy: booleanish,
73148
72930
  ariaChecked: booleanish,
73149
- ariaColCount: number$b,
73150
- ariaColIndex: number$b,
73151
- ariaColSpan: number$b,
72931
+ ariaColCount: number$a,
72932
+ ariaColIndex: number$a,
72933
+ ariaColSpan: number$a,
73152
72934
  ariaControls: spaceSeparated,
73153
72935
  ariaCurrent: null,
73154
72936
  ariaDescribedBy: spaceSeparated,
@@ -73165,7 +72947,7 @@ const aria$1 = create$c({
73165
72947
  ariaKeyShortcuts: null,
73166
72948
  ariaLabel: null,
73167
72949
  ariaLabelledBy: spaceSeparated,
73168
- ariaLevel: number$b,
72950
+ ariaLevel: number$a,
73169
72951
  ariaLive: null,
73170
72952
  ariaModal: booleanish,
73171
72953
  ariaMultiLine: booleanish,
@@ -73173,21 +72955,21 @@ const aria$1 = create$c({
73173
72955
  ariaOrientation: null,
73174
72956
  ariaOwns: spaceSeparated,
73175
72957
  ariaPlaceholder: null,
73176
- ariaPosInSet: number$b,
72958
+ ariaPosInSet: number$a,
73177
72959
  ariaPressed: booleanish,
73178
72960
  ariaReadOnly: booleanish,
73179
72961
  ariaRelevant: null,
73180
72962
  ariaRequired: booleanish,
73181
72963
  ariaRoleDescription: spaceSeparated,
73182
- ariaRowCount: number$b,
73183
- ariaRowIndex: number$b,
73184
- ariaRowSpan: number$b,
72964
+ ariaRowCount: number$a,
72965
+ ariaRowIndex: number$a,
72966
+ ariaRowSpan: number$a,
73185
72967
  ariaSelected: booleanish,
73186
- ariaSetSize: number$b,
72968
+ ariaSetSize: number$a,
73187
72969
  ariaSort: null,
73188
- ariaValueMax: number$b,
73189
- ariaValueMin: number$b,
73190
- ariaValueNow: number$b,
72970
+ ariaValueMax: number$a,
72971
+ ariaValueMin: number$a,
72972
+ ariaValueNow: number$a,
73191
72973
  ariaValueText: null,
73192
72974
  role: null
73193
72975
  }
@@ -73226,13 +73008,13 @@ const html$2 = create$c({
73226
73008
  checked: boolean,
73227
73009
  cite: null,
73228
73010
  className: spaceSeparated,
73229
- cols: number$b,
73011
+ cols: number$a,
73230
73012
  colSpan: null,
73231
73013
  content: null,
73232
73014
  contentEditable: booleanish,
73233
73015
  controls: boolean,
73234
73016
  controlsList: spaceSeparated,
73235
- coords: number$b | commaSeparated,
73017
+ coords: number$a | commaSeparated,
73236
73018
  crossOrigin: null,
73237
73019
  data: null,
73238
73020
  dateTime: null,
@@ -73254,9 +73036,9 @@ const html$2 = create$c({
73254
73036
  formNoValidate: boolean,
73255
73037
  formTarget: null,
73256
73038
  headers: spaceSeparated,
73257
- height: number$b,
73039
+ height: number$a,
73258
73040
  hidden: boolean,
73259
- high: number$b,
73041
+ high: number$a,
73260
73042
  href: null,
73261
73043
  hrefLang: null,
73262
73044
  htmlFor: spaceSeparated,
@@ -73281,14 +73063,14 @@ const html$2 = create$c({
73281
73063
  list: null,
73282
73064
  loading: null,
73283
73065
  loop: boolean,
73284
- low: number$b,
73066
+ low: number$a,
73285
73067
  manifest: null,
73286
73068
  max: null,
73287
- maxLength: number$b,
73069
+ maxLength: number$a,
73288
73070
  media: null,
73289
73071
  method: null,
73290
73072
  min: null,
73291
- minLength: number$b,
73073
+ minLength: number$a,
73292
73074
  multiple: boolean,
73293
73075
  muted: boolean,
73294
73076
  name: null,
@@ -73384,7 +73166,7 @@ const html$2 = create$c({
73384
73166
  onWaiting: null,
73385
73167
  onWheel: null,
73386
73168
  open: boolean,
73387
- optimum: number$b,
73169
+ optimum: number$a,
73388
73170
  pattern: null,
73389
73171
  ping: spaceSeparated,
73390
73172
  placeholder: null,
@@ -73399,8 +73181,8 @@ const html$2 = create$c({
73399
73181
  rel: spaceSeparated,
73400
73182
  required: boolean,
73401
73183
  reversed: boolean,
73402
- rows: number$b,
73403
- rowSpan: number$b,
73184
+ rows: number$a,
73185
+ rowSpan: number$a,
73404
73186
  sandbox: spaceSeparated,
73405
73187
  scope: null,
73406
73188
  scoped: boolean,
@@ -73410,19 +73192,19 @@ const html$2 = create$c({
73410
73192
  shadowRootDelegatesFocus: boolean,
73411
73193
  shadowRootMode: null,
73412
73194
  shape: null,
73413
- size: number$b,
73195
+ size: number$a,
73414
73196
  sizes: null,
73415
73197
  slot: null,
73416
- span: number$b,
73198
+ span: number$a,
73417
73199
  spellCheck: booleanish,
73418
73200
  src: null,
73419
73201
  srcDoc: null,
73420
73202
  srcLang: null,
73421
73203
  srcSet: null,
73422
- start: number$b,
73204
+ start: number$a,
73423
73205
  step: null,
73424
73206
  style: null,
73425
- tabIndex: number$b,
73207
+ tabIndex: number$a,
73426
73208
  target: null,
73427
73209
  title: null,
73428
73210
  translate: null,
@@ -73430,7 +73212,7 @@ const html$2 = create$c({
73430
73212
  typeMustMatch: boolean,
73431
73213
  useMap: null,
73432
73214
  value: booleanish,
73433
- width: number$b,
73215
+ width: number$a,
73434
73216
  wrap: null,
73435
73217
  writingSuggestions: null,
73436
73218
  // Legacy.
@@ -73447,11 +73229,11 @@ const html$2 = create$c({
73447
73229
  // `<body>`. Use CSS `background-image` instead
73448
73230
  bgColor: null,
73449
73231
  // `<body>` and table elements. Use CSS `background-color` instead
73450
- border: number$b,
73232
+ border: number$a,
73451
73233
  // `<table>`. Use CSS `border-width` instead,
73452
73234
  borderColor: null,
73453
73235
  // `<table>`. Use CSS `border-color` instead,
73454
- bottomMargin: number$b,
73236
+ bottomMargin: number$a,
73455
73237
  // `<body>`
73456
73238
  cellPadding: null,
73457
73239
  // `<table>`
@@ -73485,9 +73267,9 @@ const html$2 = create$c({
73485
73267
  // `<table>`
73486
73268
  frameBorder: null,
73487
73269
  // `<iframe>`. Use CSS `border` instead
73488
- hSpace: number$b,
73270
+ hSpace: number$a,
73489
73271
  // `<img>` and `<object>`
73490
- leftMargin: number$b,
73272
+ leftMargin: number$a,
73491
73273
  // `<body>`
73492
73274
  link: null,
73493
73275
  // `<body>`. Use CSS `a:link {color: *}` instead
@@ -73495,9 +73277,9 @@ const html$2 = create$c({
73495
73277
  // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`
73496
73278
  lowSrc: null,
73497
73279
  // `<img>`. Use a `<picture>`
73498
- marginHeight: number$b,
73280
+ marginHeight: number$a,
73499
73281
  // `<body>`
73500
- marginWidth: number$b,
73282
+ marginWidth: number$a,
73501
73283
  // `<body>`
73502
73284
  noResize: boolean,
73503
73285
  // `<frame>`
@@ -73515,7 +73297,7 @@ const html$2 = create$c({
73515
73297
  // `<isindex>`
73516
73298
  rev: null,
73517
73299
  // `<link>`
73518
- rightMargin: number$b,
73300
+ rightMargin: number$a,
73519
73301
  // `<body>`
73520
73302
  rules: null,
73521
73303
  // `<table>`
@@ -73529,7 +73311,7 @@ const html$2 = create$c({
73529
73311
  // `<table>`
73530
73312
  text: null,
73531
73313
  // `<body>`. Use CSS `color` instead
73532
- topMargin: number$b,
73314
+ topMargin: number$a,
73533
73315
  // `<body>`
73534
73316
  valueType: null,
73535
73317
  // `<param>`
@@ -73539,7 +73321,7 @@ const html$2 = create$c({
73539
73321
  // Several. Use CSS `vertical-align` instead
73540
73322
  vLink: null,
73541
73323
  // `<body>`. Use CSS `a:visited {color}` instead
73542
- vSpace: number$b,
73324
+ vSpace: number$a,
73543
73325
  // `<img>` and `<object>`
73544
73326
  // Non-standard Properties.
73545
73327
  allowTransparency: null,
@@ -73549,7 +73331,7 @@ const html$2 = create$c({
73549
73331
  disableRemotePlayback: boolean,
73550
73332
  prefix: null,
73551
73333
  property: null,
73552
- results: number$b,
73334
+ results: number$a,
73553
73335
  security: null,
73554
73336
  unselectable: null
73555
73337
  }
@@ -73734,27 +73516,27 @@ const svg$1 = create$c({
73734
73516
  transform: caseSensitiveTransform,
73735
73517
  properties: {
73736
73518
  about: commaOrSpaceSeparated,
73737
- accentHeight: number$b,
73519
+ accentHeight: number$a,
73738
73520
  accumulate: null,
73739
73521
  additive: null,
73740
73522
  alignmentBaseline: null,
73741
- alphabetic: number$b,
73742
- amplitude: number$b,
73523
+ alphabetic: number$a,
73524
+ amplitude: number$a,
73743
73525
  arabicForm: null,
73744
- ascent: number$b,
73526
+ ascent: number$a,
73745
73527
  attributeName: null,
73746
73528
  attributeType: null,
73747
- azimuth: number$b,
73529
+ azimuth: number$a,
73748
73530
  bandwidth: null,
73749
73531
  baselineShift: null,
73750
73532
  baseFrequency: null,
73751
73533
  baseProfile: null,
73752
73534
  bbox: null,
73753
73535
  begin: null,
73754
- bias: number$b,
73536
+ bias: number$a,
73755
73537
  by: null,
73756
73538
  calcMode: null,
73757
- capHeight: number$b,
73539
+ capHeight: number$a,
73758
73540
  className: spaceSeparated,
73759
73541
  clip: null,
73760
73542
  clipPath: null,
@@ -73775,26 +73557,26 @@ const svg$1 = create$c({
73775
73557
  d: null,
73776
73558
  dataType: null,
73777
73559
  defaultAction: null,
73778
- descent: number$b,
73779
- diffuseConstant: number$b,
73560
+ descent: number$a,
73561
+ diffuseConstant: number$a,
73780
73562
  direction: null,
73781
73563
  display: null,
73782
73564
  dur: null,
73783
- divisor: number$b,
73565
+ divisor: number$a,
73784
73566
  dominantBaseline: null,
73785
73567
  download: boolean,
73786
73568
  dx: null,
73787
73569
  dy: null,
73788
73570
  edgeMode: null,
73789
73571
  editable: null,
73790
- elevation: number$b,
73572
+ elevation: number$a,
73791
73573
  enableBackground: null,
73792
73574
  end: null,
73793
73575
  event: null,
73794
- exponent: number$b,
73576
+ exponent: number$a,
73795
73577
  externalResourcesRequired: null,
73796
73578
  fill: null,
73797
- fillOpacity: number$b,
73579
+ fillOpacity: number$a,
73798
73580
  fillRule: null,
73799
73581
  filter: null,
73800
73582
  filterRes: null,
@@ -73824,27 +73606,27 @@ const svg$1 = create$c({
73824
73606
  gradientTransform: null,
73825
73607
  gradientUnits: null,
73826
73608
  handler: null,
73827
- hanging: number$b,
73609
+ hanging: number$a,
73828
73610
  hatchContentUnits: null,
73829
73611
  hatchUnits: null,
73830
73612
  height: null,
73831
73613
  href: null,
73832
73614
  hrefLang: null,
73833
- horizAdvX: number$b,
73834
- horizOriginX: number$b,
73835
- horizOriginY: number$b,
73615
+ horizAdvX: number$a,
73616
+ horizOriginX: number$a,
73617
+ horizOriginY: number$a,
73836
73618
  id: null,
73837
- ideographic: number$b,
73619
+ ideographic: number$a,
73838
73620
  imageRendering: null,
73839
73621
  initialVisibility: null,
73840
73622
  in: null,
73841
73623
  in2: null,
73842
- intercept: number$b,
73843
- k: number$b,
73844
- k1: number$b,
73845
- k2: number$b,
73846
- k3: number$b,
73847
- k4: number$b,
73624
+ intercept: number$a,
73625
+ k: number$a,
73626
+ k1: number$a,
73627
+ k2: number$a,
73628
+ k3: number$a,
73629
+ k4: number$a,
73848
73630
  kernelMatrix: commaOrSpaceSeparated,
73849
73631
  kernelUnitLength: null,
73850
73632
  keyPoints: null,
@@ -73858,7 +73640,7 @@ const svg$1 = create$c({
73858
73640
  lengthAdjust: null,
73859
73641
  letterSpacing: null,
73860
73642
  lightingColor: null,
73861
- limitingConeAngle: number$b,
73643
+ limitingConeAngle: number$a,
73862
73644
  local: null,
73863
73645
  markerEnd: null,
73864
73646
  markerMid: null,
@@ -73874,7 +73656,7 @@ const svg$1 = create$c({
73874
73656
  media: null,
73875
73657
  mediaCharacterEncoding: null,
73876
73658
  mediaContentEncodings: null,
73877
- mediaSize: number$b,
73659
+ mediaSize: number$a,
73878
73660
  mediaTime: null,
73879
73661
  method: null,
73880
73662
  min: null,
@@ -73980,12 +73762,12 @@ const svg$1 = create$c({
73980
73762
  origin: null,
73981
73763
  overflow: null,
73982
73764
  overlay: null,
73983
- overlinePosition: number$b,
73984
- overlineThickness: number$b,
73765
+ overlinePosition: number$a,
73766
+ overlineThickness: number$a,
73985
73767
  paintOrder: null,
73986
73768
  panose1: null,
73987
73769
  path: null,
73988
- pathLength: number$b,
73770
+ pathLength: number$a,
73989
73771
  patternContentUnits: null,
73990
73772
  patternTransform: null,
73991
73773
  patternUnits: null,
@@ -73995,9 +73777,9 @@ const svg$1 = create$c({
73995
73777
  playbackOrder: null,
73996
73778
  pointerEvents: null,
73997
73779
  points: null,
73998
- pointsAtX: number$b,
73999
- pointsAtY: number$b,
74000
- pointsAtZ: number$b,
73780
+ pointsAtX: number$a,
73781
+ pointsAtY: number$a,
73782
+ pointsAtZ: number$a,
74001
73783
  preserveAlpha: null,
74002
73784
  preserveAspectRatio: null,
74003
73785
  primitiveUnits: null,
@@ -74029,8 +73811,8 @@ const svg$1 = create$c({
74029
73811
  side: null,
74030
73812
  slope: null,
74031
73813
  snapshotTime: null,
74032
- specularConstant: number$b,
74033
- specularExponent: number$b,
73814
+ specularConstant: number$a,
73815
+ specularExponent: number$a,
74034
73816
  spreadMethod: null,
74035
73817
  spacing: null,
74036
73818
  startOffset: null,
@@ -74040,30 +73822,30 @@ const svg$1 = create$c({
74040
73822
  stitchTiles: null,
74041
73823
  stopColor: null,
74042
73824
  stopOpacity: null,
74043
- strikethroughPosition: number$b,
74044
- strikethroughThickness: number$b,
73825
+ strikethroughPosition: number$a,
73826
+ strikethroughThickness: number$a,
74045
73827
  string: null,
74046
73828
  stroke: null,
74047
73829
  strokeDashArray: commaOrSpaceSeparated,
74048
73830
  strokeDashOffset: null,
74049
73831
  strokeLineCap: null,
74050
73832
  strokeLineJoin: null,
74051
- strokeMiterLimit: number$b,
74052
- strokeOpacity: number$b,
73833
+ strokeMiterLimit: number$a,
73834
+ strokeOpacity: number$a,
74053
73835
  strokeWidth: null,
74054
73836
  style: null,
74055
- surfaceScale: number$b,
73837
+ surfaceScale: number$a,
74056
73838
  syncBehavior: null,
74057
73839
  syncBehaviorDefault: null,
74058
73840
  syncMaster: null,
74059
73841
  syncTolerance: null,
74060
73842
  syncToleranceDefault: null,
74061
73843
  systemLanguage: commaOrSpaceSeparated,
74062
- tabIndex: number$b,
73844
+ tabIndex: number$a,
74063
73845
  tableValues: null,
74064
73846
  target: null,
74065
- targetX: number$b,
74066
- targetY: number$b,
73847
+ targetX: number$a,
73848
+ targetY: number$a,
74067
73849
  textAnchor: null,
74068
73850
  textDecoration: null,
74069
73851
  textRendering: null,
@@ -74078,22 +73860,22 @@ const svg$1 = create$c({
74078
73860
  transformOrigin: null,
74079
73861
  u1: null,
74080
73862
  u2: null,
74081
- underlinePosition: number$b,
74082
- underlineThickness: number$b,
73863
+ underlinePosition: number$a,
73864
+ underlineThickness: number$a,
74083
73865
  unicode: null,
74084
73866
  unicodeBidi: null,
74085
73867
  unicodeRange: null,
74086
- unitsPerEm: number$b,
73868
+ unitsPerEm: number$a,
74087
73869
  values: null,
74088
- vAlphabetic: number$b,
74089
- vMathematical: number$b,
73870
+ vAlphabetic: number$a,
73871
+ vMathematical: number$a,
74090
73872
  vectorEffect: null,
74091
- vHanging: number$b,
74092
- vIdeographic: number$b,
73873
+ vHanging: number$a,
73874
+ vIdeographic: number$a,
74093
73875
  version: null,
74094
- vertAdvY: number$b,
74095
- vertOriginX: number$b,
74096
- vertOriginY: number$b,
73876
+ vertAdvY: number$a,
73877
+ vertOriginX: number$a,
73878
+ vertOriginY: number$a,
74097
73879
  viewBox: null,
74098
73880
  viewTarget: null,
74099
73881
  visibility: null,
@@ -74105,7 +73887,7 @@ const svg$1 = create$c({
74105
73887
  x1: null,
74106
73888
  x2: null,
74107
73889
  xChannelSelector: null,
74108
- xHeight: number$b,
73890
+ xHeight: number$a,
74109
73891
  y: null,
74110
73892
  y1: null,
74111
73893
  y2: null,
@@ -85046,7 +84828,7 @@ function treeToExpectedCheckedLevel(currTree, checkedPaths) {
85046
84828
  currTree.tree.forEach((lzn) => {
85047
84829
  const levelZeroPath = [lzn.name];
85048
84830
  const height2 = nodeToHeight(lzn);
85049
- range$f(height2).forEach((i2) => {
84831
+ range$e(height2).forEach((i2) => {
85050
84832
  const levelIndex = i2 + 1;
85051
84833
  const levelNodePaths = nodeToLevelDescendantNamePaths(lzn, levelIndex, [], true);
85052
84834
  if (isEqual$3(levelNodePaths, checkedPaths)) {
@@ -85119,7 +84901,7 @@ function treeToMembershipMap(currTree) {
85119
84901
  if (currTree) {
85120
84902
  currTree.tree.forEach((lzn) => {
85121
84903
  const height2 = nodeToHeight(lzn);
85122
- range$f(height2).forEach((i2) => {
84904
+ range$e(height2).forEach((i2) => {
85123
84905
  const levelIndex = i2 + 1;
85124
84906
  const levelNodePaths = nodeToLevelDescendantNamePaths(lzn, levelIndex, [], true);
85125
84907
  levelNodePaths.forEach((setNamePath) => {
@@ -102825,7 +102607,7 @@ function LevelsButtons(props) {
102825
102607
  }
102826
102608
  }
102827
102609
  const { classes: classes2 } = useStyles$t();
102828
- return jsxRuntimeExports.jsx("div", { className: classes2.levelButtonsContainer, children: range$f(1, height2 + 1).map((i2) => {
102610
+ return jsxRuntimeExports.jsx("div", { className: classes2.levelButtonsContainer, children: range$e(1, height2 + 1).map((i2) => {
102829
102611
  const isChecked = isEqual$3(path2, checkedLevelPath) && i2 === checkedLevelIndex;
102830
102612
  return jsxRuntimeExports.jsx("div", { children: jsxRuntimeExports.jsx(HelpTooltip, { title: getLevelTooltipText(i2), children: jsxRuntimeExports.jsx("input", { className: clsx(classes2.levelRadioButton, { [classes2.levelRadioButtonChecked]: isChecked && !hasColorEncoding }), type: "checkbox", value: i2, checked: isChecked && hasColorEncoding, onChange: onCheck }) }) }, i2);
102831
102613
  }) });
@@ -103431,10 +103213,10 @@ function ObsSetsManagerSubscriber(props) {
103431
103213
  ]);
103432
103214
  return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, helpText, errors, children: manager2 });
103433
103215
  }
103434
- function ascending$9(a2, b2) {
103216
+ function ascending$8(a2, b2) {
103435
103217
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
103436
103218
  }
103437
- function bisector$4(f2) {
103219
+ function bisector$3(f2) {
103438
103220
  let delta = f2;
103439
103221
  let compare2 = f2;
103440
103222
  if (f2.length === 1) {
@@ -103470,14 +103252,14 @@ function bisector$4(f2) {
103470
103252
  return { left: left2, center: center2, right: right2 };
103471
103253
  }
103472
103254
  function ascendingComparator$1(f2) {
103473
- return (d, x2) => ascending$9(f2(d), x2);
103255
+ return (d, x2) => ascending$8(f2(d), x2);
103474
103256
  }
103475
- function number$a(x2) {
103257
+ function number$9(x2) {
103476
103258
  return x2 === null ? NaN : +x2;
103477
103259
  }
103478
- const ascendingBisect$2 = bisector$4(ascending$9);
103479
- const bisectRight$3 = ascendingBisect$2.right;
103480
- bisector$4(number$a).center;
103260
+ const ascendingBisect$1 = bisector$3(ascending$8);
103261
+ const bisectRight$2 = ascendingBisect$1.right;
103262
+ bisector$3(number$9).center;
103481
103263
  function count$2(values3, valueof) {
103482
103264
  let count2 = 0;
103483
103265
  {
@@ -103696,7 +103478,7 @@ function bin$2() {
103696
103478
  for (i2 = 0; i2 < n3; ++i2) {
103697
103479
  x2 = values3[i2];
103698
103480
  if (x02 <= x2 && x2 <= x12) {
103699
- bins2[bisectRight$3(tz, x2, 0, m2)].push(data2[i2]);
103481
+ bins2[bisectRight$2(tz, x2, 0, m2)].push(data2[i2]);
103700
103482
  }
103701
103483
  }
103702
103484
  return bins2;
@@ -103734,7 +103516,7 @@ function min$4(values3, valueof) {
103734
103516
  }
103735
103517
  return min2;
103736
103518
  }
103737
- function quantileSorted$1(values3, p, valueof = number$a) {
103519
+ function quantileSorted$1(values3, p, valueof = number$9) {
103738
103520
  if (!(n3 = values3.length)) return;
103739
103521
  if ((p = +p) <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
103740
103522
  if (p >= 1) return +valueof(values3[n3 - 1], n3 - 1, values3);
@@ -142929,7 +142711,7 @@ const defaultGetValue = (points2) => points2.length;
142929
142711
  const MAX_32_BIT_FLOAT = 3402823466e29;
142930
142712
  const defaultGetPoints = (bin2) => bin2.points;
142931
142713
  const defaultGetIndex = (bin2) => bin2.index;
142932
- const ascending$8 = (a2, b2) => a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
142714
+ const ascending$7 = (a2, b2) => a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
142933
142715
  const defaultProps$w = {
142934
142716
  getValue: defaultGetValue,
142935
142717
  getPoints: defaultGetPoints,
@@ -143013,7 +142795,7 @@ class BinSorter {
143013
142795
  }
143014
142796
  getValueRange(percentileRange) {
143015
142797
  if (!this.sortedBins) {
143016
- this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$8(a2.value, b2.value));
142798
+ this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$7(a2.value, b2.value));
143017
142799
  }
143018
142800
  if (!this.sortedBins.length) {
143019
142801
  return [];
@@ -143029,7 +142811,7 @@ class BinSorter {
143029
142811
  }
143030
142812
  getValueDomainByScale(scale2, [lower2 = 0, upper = 100] = []) {
143031
142813
  if (!this.sortedBins) {
143032
- this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$8(a2.value, b2.value));
142814
+ this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$7(a2.value, b2.value));
143033
142815
  }
143034
142816
  if (!this.sortedBins.length) {
143035
142817
  return [];
@@ -182804,7 +182586,7 @@ function cartesianNormalizeInPlace$1(d) {
182804
182586
  var l2 = sqrt$5(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
182805
182587
  d[0] /= l2, d[1] /= l2, d[2] /= l2;
182806
182588
  }
182807
- var lambda0$3, phi0$1, lambda1$1, phi1$1, lambda2$1, lambda00$4, phi00$4, p0$1, deltaSum$1 = adder(), ranges$1, range$c;
182589
+ var lambda0$3, phi0$1, lambda1$1, phi1$1, lambda2$1, lambda00$4, phi00$4, p0$1, deltaSum$1 = adder(), ranges$1, range$b;
182808
182590
  var boundsStream$3 = {
182809
182591
  point: boundsPoint$3,
182810
182592
  lineStart: boundsLineStart$1,
@@ -182824,11 +182606,11 @@ var boundsStream$3 = {
182824
182606
  if (areaRingSum$3 < 0) lambda0$3 = -(lambda1$1 = 180), phi0$1 = -(phi1$1 = 90);
182825
182607
  else if (deltaSum$1 > epsilon$8) phi1$1 = 90;
182826
182608
  else if (deltaSum$1 < -epsilon$8) phi0$1 = -90;
182827
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
182609
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
182828
182610
  }
182829
182611
  };
182830
182612
  function boundsPoint$3(lambda, phi2) {
182831
- ranges$1.push(range$c = [lambda0$3 = lambda, lambda1$1 = lambda]);
182613
+ ranges$1.push(range$b = [lambda0$3 = lambda, lambda1$1 = lambda]);
182832
182614
  if (phi2 < phi0$1) phi0$1 = phi2;
182833
182615
  if (phi2 > phi1$1) phi1$1 = phi2;
182834
182616
  }
@@ -182868,7 +182650,7 @@ function linePoint$1(lambda, phi2) {
182868
182650
  }
182869
182651
  }
182870
182652
  } else {
182871
- ranges$1.push(range$c = [lambda0$3 = lambda, lambda1$1 = lambda]);
182653
+ ranges$1.push(range$b = [lambda0$3 = lambda, lambda1$1 = lambda]);
182872
182654
  }
182873
182655
  if (phi2 < phi0$1) phi0$1 = phi2;
182874
182656
  if (phi2 > phi1$1) phi1$1 = phi2;
@@ -182878,7 +182660,7 @@ function boundsLineStart$1() {
182878
182660
  boundsStream$3.point = linePoint$1;
182879
182661
  }
182880
182662
  function boundsLineEnd$1() {
182881
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
182663
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
182882
182664
  boundsStream$3.point = boundsPoint$3;
182883
182665
  p0$1 = null;
182884
182666
  }
@@ -182899,7 +182681,7 @@ function boundsRingEnd$1() {
182899
182681
  boundsRingPoint$1(lambda00$4, phi00$4);
182900
182682
  areaStream$3.lineEnd();
182901
182683
  if (abs$5(deltaSum$1) > epsilon$8) lambda0$3 = -(lambda1$1 = 180);
182902
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
182684
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
182903
182685
  p0$1 = null;
182904
182686
  }
182905
182687
  function angle$1(lambda02, lambda12) {
@@ -182932,7 +182714,7 @@ function bounds$2(feature2) {
182932
182714
  if ((delta = angle$1(a2[1], b2[0])) > deltaMax) deltaMax = delta, lambda0$3 = b2[0], lambda1$1 = a2[1];
182933
182715
  }
182934
182716
  }
182935
- ranges$1 = range$c = null;
182717
+ ranges$1 = range$b = null;
182936
182718
  return lambda0$3 === Infinity || phi0$1 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda0$3, phi0$1], [lambda1$1, phi1$1]];
182937
182719
  }
182938
182720
  var W0$1, W1$1, X0$3, Y0$3, Z0$3, X1$3, Y1$3, Z1$3, X2$4, Y2$4, Z2$3, lambda00$3, phi00$3, x0$9, y0$9, z0$1;
@@ -183278,10 +183060,10 @@ function link$1(array2) {
183278
183060
  a2.n = b2 = array2[0];
183279
183061
  b2.p = a2;
183280
183062
  }
183281
- function ascending$7(a2, b2) {
183063
+ function ascending$6(a2, b2) {
183282
183064
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
183283
183065
  }
183284
- function bisector$3(compare2) {
183066
+ function bisector$2(compare2) {
183285
183067
  if (compare2.length === 1) compare2 = ascendingComparator(compare2);
183286
183068
  return {
183287
183069
  left: function(a2, x2, lo, hi) {
@@ -183308,11 +183090,11 @@ function bisector$3(compare2) {
183308
183090
  }
183309
183091
  function ascendingComparator(f2) {
183310
183092
  return function(d, x2) {
183311
- return ascending$7(f2(d), x2);
183093
+ return ascending$6(f2(d), x2);
183312
183094
  };
183313
183095
  }
183314
- bisector$3(ascending$7);
183315
- function range$b(start2, stop3, step) {
183096
+ bisector$2(ascending$6);
183097
+ function range$a(start2, stop3, step) {
183316
183098
  start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
183317
183099
  var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
183318
183100
  while (++i2 < n3) {
@@ -183594,7 +183376,7 @@ function contains$2(object2, point2) {
183594
183376
  return (object2 && containsObjectType.hasOwnProperty(object2.type) ? containsObjectType[object2.type] : containsGeometry)(object2, point2);
183595
183377
  }
183596
183378
  function graticuleX$1(y02, y12, dy) {
183597
- var y2 = range$b(y02, y12 - epsilon$8, dy).concat(y12);
183379
+ var y2 = range$a(y02, y12 - epsilon$8, dy).concat(y12);
183598
183380
  return function(x2) {
183599
183381
  return y2.map(function(y22) {
183600
183382
  return [x2, y22];
@@ -183602,7 +183384,7 @@ function graticuleX$1(y02, y12, dy) {
183602
183384
  };
183603
183385
  }
183604
183386
  function graticuleY$1(x02, x12, dx) {
183605
- var x2 = range$b(x02, x12 - epsilon$8, dx).concat(x12);
183387
+ var x2 = range$a(x02, x12 - epsilon$8, dx).concat(x12);
183606
183388
  return function(y2) {
183607
183389
  return x2.map(function(x22) {
183608
183390
  return [x22, y2];
@@ -183615,9 +183397,9 @@ function graticule$1() {
183615
183397
  return { type: "MultiLineString", coordinates: lines() };
183616
183398
  }
183617
183399
  function lines() {
183618
- return range$b(ceil$3(X02 / DX) * DX, X12, DX).map(X3).concat(range$b(ceil$3(Y02 / DY) * DY, Y12, DY).map(Y3)).concat(range$b(ceil$3(x02 / dx) * dx, x12, dx).filter(function(x22) {
183400
+ return range$a(ceil$3(X02 / DX) * DX, X12, DX).map(X3).concat(range$a(ceil$3(Y02 / DY) * DY, Y12, DY).map(Y3)).concat(range$a(ceil$3(x02 / dx) * dx, x12, dx).filter(function(x22) {
183619
183401
  return abs$5(x22 % DX) > epsilon$8;
183620
- }).map(x2)).concat(range$b(ceil$3(y02 / dy) * dy, y12, dy).filter(function(y22) {
183402
+ }).map(x2)).concat(range$a(ceil$3(y02 / dy) * dy, y12, dy).filter(function(y22) {
183621
183403
  return abs$5(y22 % DY) > epsilon$8;
183622
183404
  }).map(y2));
183623
183405
  }
@@ -209323,22 +209105,22 @@ async function getDecoder(fileDirectory) {
209323
209105
  const Decoder = await importFn();
209324
209106
  return new Decoder(fileDirectory);
209325
209107
  }
209326
- addDecoder([void 0, 1], () => import("./raw-CBSzyAnJ.js").then((m2) => m2.default));
209327
- addDecoder(5, () => import("./lzw-r1g3fWt6.js").then((m2) => m2.default));
209108
+ addDecoder([void 0, 1], () => import("./raw-DP5Af32W.js").then((m2) => m2.default));
209109
+ addDecoder(5, () => import("./lzw-D4L-VfX8.js").then((m2) => m2.default));
209328
209110
  addDecoder(6, () => {
209329
209111
  throw new Error("old style JPEG compression is not supported.");
209330
209112
  });
209331
- addDecoder(7, () => import("./jpeg-BaWcE9pr.js").then((m2) => m2.default));
209332
- addDecoder([8, 32946], () => import("./deflate-BBtqPvhK.js").then((m2) => m2.default));
209333
- addDecoder(32773, () => import("./packbits-BP3_1WZ_.js").then((m2) => m2.default));
209113
+ addDecoder(7, () => import("./jpeg-Bz6F-bB0.js").then((m2) => m2.default));
209114
+ addDecoder([8, 32946], () => import("./deflate-BHuVu6ka.js").then((m2) => m2.default));
209115
+ addDecoder(32773, () => import("./packbits-CLckyTrz.js").then((m2) => m2.default));
209334
209116
  addDecoder(
209335
209117
  34887,
209336
- () => import("./lerc-r2v3xhFU.js").then(async (m2) => {
209118
+ () => import("./lerc-C0S_lxM2.js").then(async (m2) => {
209337
209119
  await m2.zstd.init();
209338
209120
  return m2;
209339
209121
  }).then((m2) => m2.default)
209340
209122
  );
209341
- addDecoder(50001, () => import("./webimage-d9adH7MC.js").then((m2) => m2.default));
209123
+ addDecoder(50001, () => import("./webimage-Y7ICR65G.js").then((m2) => m2.default));
209342
209124
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
209343
209125
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
209344
209126
  }
@@ -212379,7 +212161,7 @@ const Z_FIXED = 4;
212379
212161
  const Z_BINARY = 0;
212380
212162
  const Z_TEXT = 1;
212381
212163
  const Z_UNKNOWN = 2;
212382
- function zero$6(buf) {
212164
+ function zero$5(buf) {
212383
212165
  let len2 = buf.length;
212384
212166
  while (--len2 >= 0) {
212385
212167
  buf[len2] = 0;
@@ -212418,17 +212200,17 @@ const extra_blbits = (
212418
212200
  const bl_order = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
212419
212201
  const DIST_CODE_LEN = 512;
212420
212202
  const static_ltree = new Array((L_CODES + 2) * 2);
212421
- zero$6(static_ltree);
212203
+ zero$5(static_ltree);
212422
212204
  const static_dtree = new Array(D_CODES * 2);
212423
- zero$6(static_dtree);
212205
+ zero$5(static_dtree);
212424
212206
  const _dist_code = new Array(DIST_CODE_LEN);
212425
- zero$6(_dist_code);
212207
+ zero$5(_dist_code);
212426
212208
  const _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
212427
- zero$6(_length_code);
212209
+ zero$5(_length_code);
212428
212210
  const base_length = new Array(LENGTH_CODES);
212429
- zero$6(base_length);
212211
+ zero$5(base_length);
212430
212212
  const base_dist = new Array(D_CODES);
212431
- zero$6(base_dist);
212213
+ zero$5(base_dist);
212432
212214
  function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
212433
212215
  this.static_tree = static_tree;
212434
212216
  this.extra_bits = extra_bits;
@@ -220294,7 +220076,7 @@ const channels = {
220294
220076
  },
220295
220077
  fs: fs$2
220296
220078
  };
220297
- function range$a(len2) {
220079
+ function range$9(len2) {
220298
220080
  return [...Array(len2).keys()];
220299
220081
  }
220300
220082
  function padWithDefault$2(arr, defaultValue2, padWidth) {
@@ -221394,7 +221176,7 @@ const ScaleBarLayer = class extends CompositeLayer {
221394
221176
  sizeScale: 2 ** -zoom2,
221395
221177
  characterSet: [
221396
221178
  ...displayUnit.split(""),
221397
- ...range$a(10).map((i2) => String(i2)),
221179
+ ...range$9(10).map((i2) => String(i2)),
221398
221180
  ".",
221399
221181
  "e",
221400
221182
  "+"
@@ -222833,7 +222615,7 @@ class BitmaskLayer2 extends XRLayer {
222833
222615
  } = this.state;
222834
222616
  if (textures && model) {
222835
222617
  const scaleFactor = 1 / 2 ** (maxZoom - zoom2);
222836
- const colors2 = Object.fromEntries(range$f(MAX_CHANNELS).map((i2) => [`color${i2}`, getColor(channelColors[i2])]));
222618
+ const colors2 = Object.fromEntries(range$e(MAX_CHANNELS).map((i2) => [`color${i2}`, getColor(channelColors[i2])]));
222837
222619
  model.setUniforms(Object.assign({}, uniforms, {
222838
222620
  ...colors2,
222839
222621
  // Bitmask image channel data textures
@@ -226022,7 +225804,7 @@ class ContourLayerWithText extends ContourLayer {
226022
225804
  let minCirclePointI;
226023
225805
  let minPolygonPoint;
226024
225806
  const numVertices = maxAreaPolygon.geometry.coordinates[0].length;
226025
- const polygonVertices = numVertices > MAX_NUM_VERTICES ? range$f(MAX_NUM_VERTICES).map((i2) => maxAreaPolygon.geometry.coordinates[0][Math.floor(i2 * numVertices / MAX_NUM_VERTICES)]) : [...maxAreaPolygon.geometry.coordinates[0]];
225807
+ const polygonVertices = numVertices > MAX_NUM_VERTICES ? range$e(MAX_NUM_VERTICES).map((i2) => maxAreaPolygon.geometry.coordinates[0][Math.floor(i2 * numVertices / MAX_NUM_VERTICES)]) : [...maxAreaPolygon.geometry.coordinates[0]];
226026
225808
  circlePolygon.geometry.coordinates[0].forEach((circleCoord, circlePointI) => {
226027
225809
  const circlePoint = point$9(circleCoord);
226028
225810
  polygonVertices.forEach((polyCoord) => {
@@ -226442,7 +226224,7 @@ function createQuadTree(obsEmbedding, getCellCoords) {
226442
226224
  if (!obsEmbedding) {
226443
226225
  return null;
226444
226226
  }
226445
- const tree2 = quadtree$1().x((i2) => getCellCoords(i2)[0]).y((i2) => getCellCoords(i2)[1]).addAll(range$f(obsEmbedding.shape[1]));
226227
+ const tree2 = quadtree$1().x((i2) => getCellCoords(i2)[0]).y((i2) => getCellCoords(i2)[1]).addAll(range$e(obsEmbedding.shape[1]));
226446
226228
  return tree2;
226447
226229
  }
226448
226230
  function constant$6(v) {
@@ -226550,8 +226332,14 @@ function forceCollideRects() {
226550
226332
  };
226551
226333
  return force2;
226552
226334
  }
226553
- function getPointSizeDevicePixels(devicePixelRatio2, zoom2, xRange, yRange, width2, height2) {
226554
- const pointSize = 5e-4;
226335
+ const BASE_POINT_SIZE = 5;
226336
+ const LARGE_DATASET_CELL_COUNT = 1e4;
226337
+ const SMALL_DATASET_CELL_COUNT = 100;
226338
+ function getInitialPointSize(numCells = LARGE_DATASET_CELL_COUNT) {
226339
+ return BASE_POINT_SIZE / clamp$8(numCells, SMALL_DATASET_CELL_COUNT, LARGE_DATASET_CELL_COUNT);
226340
+ }
226341
+ function getPointSizeDevicePixels(devicePixelRatio2, zoom2, xRange, yRange, width2, height2, numCells) {
226342
+ const pointSize = getInitialPointSize(numCells);
226555
226343
  const pointScreenSizeMax = 10;
226556
226344
  const pointScreenSizeMin = 1 / devicePixelRatio2;
226557
226345
  const scaleFactor = 2 ** zoom2;
@@ -227747,7 +227535,7 @@ function selection_order() {
227747
227535
  return this;
227748
227536
  }
227749
227537
  function selection_sort(compare2) {
227750
- if (!compare2) compare2 = ascending$6;
227538
+ if (!compare2) compare2 = ascending$5;
227751
227539
  function compareNode(a2, b2) {
227752
227540
  return a2 && b2 ? compare2(a2.__data__, b2.__data__) : !a2 - !b2;
227753
227541
  }
@@ -227761,7 +227549,7 @@ function selection_sort(compare2) {
227761
227549
  }
227762
227550
  return new Selection(sortgroups, this._parents).order();
227763
227551
  }
227764
- function ascending$6(a2, b2) {
227552
+ function ascending$5(a2, b2) {
227765
227553
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
227766
227554
  }
227767
227555
  function selection_call() {
@@ -228170,20 +227958,20 @@ Selection.prototype = {
228170
227958
  function select$1(selector2) {
228171
227959
  return typeof selector2 === "string" ? new Selection([[document.querySelector(selector2)]], [document.documentElement]) : new Selection([[selector2]], root$2);
228172
227960
  }
228173
- function ascending$5(a2, b2) {
227961
+ function ascending$4(a2, b2) {
228174
227962
  return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
228175
227963
  }
228176
- function descending$2(a2, b2) {
227964
+ function descending$1(a2, b2) {
228177
227965
  return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
228178
227966
  }
228179
- function bisector$2(f2) {
227967
+ function bisector$1(f2) {
228180
227968
  let compare12, compare2, delta;
228181
227969
  if (f2.length !== 2) {
228182
- compare12 = ascending$5;
228183
- compare2 = (d, x2) => ascending$5(f2(d), x2);
227970
+ compare12 = ascending$4;
227971
+ compare2 = (d, x2) => ascending$4(f2(d), x2);
228184
227972
  delta = (d, x2) => f2(d) - x2;
228185
227973
  } else {
228186
- compare12 = f2 === ascending$5 || f2 === descending$2 ? f2 : zero$5;
227974
+ compare12 = f2 === ascending$4 || f2 === descending$1 ? f2 : zero$4;
228187
227975
  compare2 = f2;
228188
227976
  delta = f2;
228189
227977
  }
@@ -228215,10 +228003,10 @@ function bisector$2(f2) {
228215
228003
  }
228216
228004
  return { left: left2, center: center2, right: right2 };
228217
228005
  }
228218
- function zero$5() {
228006
+ function zero$4() {
228219
228007
  return 0;
228220
228008
  }
228221
- function number$9(x2) {
228009
+ function number$8(x2) {
228222
228010
  return x2 === null ? NaN : +x2;
228223
228011
  }
228224
228012
  function* numbers$4(values3, valueof) {
@@ -228237,10 +228025,10 @@ function* numbers$4(values3, valueof) {
228237
228025
  }
228238
228026
  }
228239
228027
  }
228240
- const ascendingBisect$1 = bisector$2(ascending$5);
228241
- const bisectRight$2 = ascendingBisect$1.right;
228242
- const bisectLeft$1 = ascendingBisect$1.left;
228243
- bisector$2(number$9).center;
228028
+ const ascendingBisect = bisector$1(ascending$4);
228029
+ const bisectRight$1 = ascendingBisect.right;
228030
+ const bisectLeft$1 = ascendingBisect.left;
228031
+ bisector$1(number$8).center;
228244
228032
  function variance(values3, valueof) {
228245
228033
  let count2 = 0;
228246
228034
  let delta;
@@ -228311,8 +228099,8 @@ class Adder {
228311
228099
  function permute(source2, keys2) {
228312
228100
  return Array.from(keys2, (key2) => source2[key2]);
228313
228101
  }
228314
- function compareDefined(compare2 = ascending$5) {
228315
- if (compare2 === ascending$5) return ascendingDefined;
228102
+ function compareDefined(compare2 = ascending$4) {
228103
+ if (compare2 === ascending$4) return ascendingDefined;
228316
228104
  if (typeof compare2 !== "function") throw new TypeError("compare is not a function");
228317
228105
  return (a2, b2) => {
228318
228106
  const x2 = compare2(a2, b2);
@@ -228323,40 +228111,51 @@ function compareDefined(compare2 = ascending$5) {
228323
228111
  function ascendingDefined(a2, b2) {
228324
228112
  return (a2 == null || !(a2 >= a2)) - (b2 == null || !(b2 >= b2)) || (a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
228325
228113
  }
228326
- var e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2);
228114
+ const e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2);
228115
+ function tickSpec(start2, stop3, count2) {
228116
+ const step = (stop3 - start2) / Math.max(0, count2), power = Math.floor(Math.log10(step)), error2 = step / Math.pow(10, power), factor = error2 >= e10 ? 10 : error2 >= e5 ? 5 : error2 >= e2 ? 2 : 1;
228117
+ let i1, i2, inc;
228118
+ if (power < 0) {
228119
+ inc = Math.pow(10, -power) / factor;
228120
+ i1 = Math.round(start2 * inc);
228121
+ i2 = Math.round(stop3 * inc);
228122
+ if (i1 / inc < start2) ++i1;
228123
+ if (i2 / inc > stop3) --i2;
228124
+ inc = -inc;
228125
+ } else {
228126
+ inc = Math.pow(10, power) * factor;
228127
+ i1 = Math.round(start2 / inc);
228128
+ i2 = Math.round(stop3 / inc);
228129
+ if (i1 * inc < start2) ++i1;
228130
+ if (i2 * inc > stop3) --i2;
228131
+ }
228132
+ if (i2 < i1 && 0.5 <= count2 && count2 < 2) return tickSpec(start2, stop3, count2 * 2);
228133
+ return [i1, i2, inc];
228134
+ }
228327
228135
  function ticks(start2, stop3, count2) {
228328
- var reverse2, i2 = -1, n3, ticks2, step;
228329
228136
  stop3 = +stop3, start2 = +start2, count2 = +count2;
228330
- if (start2 === stop3 && count2 > 0) return [start2];
228331
- if (reverse2 = stop3 < start2) n3 = start2, start2 = stop3, stop3 = n3;
228332
- if ((step = tickIncrement(start2, stop3, count2)) === 0 || !isFinite(step)) return [];
228333
- if (step > 0) {
228334
- let r0 = Math.round(start2 / step), r1 = Math.round(stop3 / step);
228335
- if (r0 * step < start2) ++r0;
228336
- if (r1 * step > stop3) --r1;
228337
- ticks2 = new Array(n3 = r1 - r0 + 1);
228338
- while (++i2 < n3) ticks2[i2] = (r0 + i2) * step;
228137
+ if (!(count2 > 0)) return [];
228138
+ if (start2 === stop3) return [start2];
228139
+ const reverse2 = stop3 < start2, [i1, i2, inc] = reverse2 ? tickSpec(stop3, start2, count2) : tickSpec(start2, stop3, count2);
228140
+ if (!(i2 >= i1)) return [];
228141
+ const n3 = i2 - i1 + 1, ticks2 = new Array(n3);
228142
+ if (reverse2) {
228143
+ if (inc < 0) for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i2 - i3) / -inc;
228144
+ else for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i2 - i3) * inc;
228339
228145
  } else {
228340
- step = -step;
228341
- let r0 = Math.round(start2 * step), r1 = Math.round(stop3 * step);
228342
- if (r0 / step < start2) ++r0;
228343
- if (r1 / step > stop3) --r1;
228344
- ticks2 = new Array(n3 = r1 - r0 + 1);
228345
- while (++i2 < n3) ticks2[i2] = (r0 + i2) / step;
228146
+ if (inc < 0) for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i1 + i3) / -inc;
228147
+ else for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i1 + i3) * inc;
228346
228148
  }
228347
- if (reverse2) ticks2.reverse();
228348
228149
  return ticks2;
228349
228150
  }
228350
228151
  function tickIncrement(start2, stop3, count2) {
228351
- var step = (stop3 - start2) / Math.max(0, count2), power = Math.floor(Math.log(step) / Math.LN10), error2 = step / Math.pow(10, power);
228352
- return power >= 0 ? (error2 >= e10 ? 10 : error2 >= e5 ? 5 : error2 >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error2 >= e10 ? 10 : error2 >= e5 ? 5 : error2 >= e2 ? 2 : 1);
228152
+ stop3 = +stop3, start2 = +start2, count2 = +count2;
228153
+ return tickSpec(start2, stop3, count2)[2];
228353
228154
  }
228354
228155
  function tickStep(start2, stop3, count2) {
228355
- var step0 = Math.abs(stop3 - start2) / Math.max(0, count2), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error2 = step0 / step1;
228356
- if (error2 >= e10) step1 *= 10;
228357
- else if (error2 >= e5) step1 *= 5;
228358
- else if (error2 >= e2) step1 *= 2;
228359
- return stop3 < start2 ? -step1 : step1;
228156
+ stop3 = +stop3, start2 = +start2, count2 = +count2;
228157
+ const reverse2 = stop3 < start2, inc = reverse2 ? tickIncrement(stop3, start2, count2) : tickIncrement(start2, stop3, count2);
228158
+ return (reverse2 ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
228360
228159
  }
228361
228160
  function max$3(values3, valueof) {
228362
228161
  let max2;
@@ -228394,7 +228193,11 @@ function min$3(values3, valueof) {
228394
228193
  }
228395
228194
  return min2;
228396
228195
  }
228397
- function quickselect(array2, k, left2 = 0, right2 = array2.length - 1, compare2) {
228196
+ function quickselect(array2, k, left2 = 0, right2 = Infinity, compare2) {
228197
+ k = Math.floor(k);
228198
+ left2 = Math.floor(Math.max(0, left2));
228199
+ right2 = Math.floor(Math.min(array2.length - 1, right2));
228200
+ if (!(left2 <= k && k <= right2)) return array2;
228398
228201
  compare2 = compare2 === void 0 ? ascendingDefined : compareDefined(compare2);
228399
228202
  while (right2 > left2) {
228400
228203
  if (right2 - left2 > 600) {
@@ -228431,15 +228234,15 @@ function swap$1(array2, i2, j) {
228431
228234
  }
228432
228235
  function quantile$1(values3, p, valueof) {
228433
228236
  values3 = Float64Array.from(numbers$4(values3, valueof));
228434
- if (!(n3 = values3.length)) return;
228435
- if ((p = +p) <= 0 || n3 < 2) return min$3(values3);
228237
+ if (!(n3 = values3.length) || isNaN(p = +p)) return;
228238
+ if (p <= 0 || n3 < 2) return min$3(values3);
228436
228239
  if (p >= 1) return max$3(values3);
228437
228240
  var n3, i2 = (n3 - 1) * p, i0 = Math.floor(i2), value0 = max$3(quickselect(values3, i0).subarray(0, i0 + 1)), value1 = min$3(values3.subarray(i0 + 1));
228438
228241
  return value0 + (value1 - value0) * (i2 - i0);
228439
228242
  }
228440
- function quantileSorted(values3, p, valueof = number$9) {
228441
- if (!(n3 = values3.length)) return;
228442
- if ((p = +p) <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
228243
+ function quantileSorted(values3, p, valueof = number$8) {
228244
+ if (!(n3 = values3.length) || isNaN(p = +p)) return;
228245
+ if (p <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
228443
228246
  if (p >= 1) return +valueof(values3[n3 - 1], n3 - 1, values3);
228444
228247
  var n3, i2 = (n3 - 1) * p, i0 = Math.floor(i2), value0 = +valueof(values3[i0], i0, values3), value1 = +valueof(values3[i0 + 1], i0 + 1, values3);
228445
228248
  return value0 + (value1 - value0) * (i2 - i0);
@@ -228474,7 +228277,7 @@ function* flatten$2(arrays) {
228474
228277
  function merge$3(arrays) {
228475
228278
  return Array.from(flatten$2(arrays));
228476
228279
  }
228477
- function range$9(start2, stop3, step) {
228280
+ function range$8(start2, stop3, step) {
228478
228281
  start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
228479
228282
  var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
228480
228283
  while (++i2 < n3) {
@@ -229145,7 +228948,7 @@ function object$1(a2, b2) {
229145
228948
  };
229146
228949
  }
229147
228950
  var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, reB = new RegExp(reA.source, "g");
229148
- function zero$4(b2) {
228951
+ function zero$3(b2) {
229149
228952
  return function() {
229150
228953
  return b2;
229151
228954
  };
@@ -229178,7 +228981,7 @@ function string(a2, b2) {
229178
228981
  if (s2[i2]) s2[i2] += bs;
229179
228982
  else s2[++i2] = bs;
229180
228983
  }
229181
- return s2.length < 2 ? q[0] ? one$2(q[0].x) : zero$4(b2) : (b2 = q.length, function(t4) {
228984
+ return s2.length < 2 ? q[0] ? one$2(q[0].x) : zero$3(b2) : (b2 = q.length, function(t4) {
229182
228985
  for (var i22 = 0, o2; i22 < b2; ++i22) s2[(o2 = q[i22]).i] = o2.x(t4);
229183
228986
  return s2.join("");
229184
228987
  });
@@ -229444,7 +229247,7 @@ function constants$1(x2) {
229444
229247
  return x2;
229445
229248
  };
229446
229249
  }
229447
- function number$8(x2) {
229250
+ function number$7(x2) {
229448
229251
  return +x2;
229449
229252
  }
229450
229253
  var unit$1 = [0, 1];
@@ -229482,7 +229285,7 @@ function polymap(domain2, range2, interpolate2) {
229482
229285
  r3[i2] = interpolate2(range2[i2], range2[i2 + 1]);
229483
229286
  }
229484
229287
  return function(x2) {
229485
- var i22 = bisectRight$2(domain2, x2, 1, j) - 1;
229288
+ var i22 = bisectRight$1(domain2, x2, 1, j) - 1;
229486
229289
  return r3[i22](d[i22](x2));
229487
229290
  };
229488
229291
  }
@@ -229505,7 +229308,7 @@ function transformer$3() {
229505
229308
  return clamp2(untransform((input || (input = piecewise2(range2, domain2.map(transform3), interpolateNumber)))(y2)));
229506
229309
  };
229507
229310
  scale2.domain = function(_) {
229508
- return arguments.length ? (domain2 = Array.from(_, number$8), rescale()) : domain2.slice();
229311
+ return arguments.length ? (domain2 = Array.from(_, number$7), rescale()) : domain2.slice();
229509
229312
  };
229510
229313
  scale2.range = function(_) {
229511
229314
  return arguments.length ? (range2 = Array.from(_), rescale()) : range2.slice();
@@ -229825,7 +229628,7 @@ function identity$6(domain2) {
229825
229628
  }
229826
229629
  scale2.invert = scale2;
229827
229630
  scale2.domain = scale2.range = function(_) {
229828
- return arguments.length ? (domain2 = Array.from(_, number$8), scale2) : domain2.slice();
229631
+ return arguments.length ? (domain2 = Array.from(_, number$7), scale2) : domain2.slice();
229829
229632
  };
229830
229633
  scale2.unknown = function(_) {
229831
229634
  return arguments.length ? (unknown = _, scale2) : unknown;
@@ -229833,7 +229636,7 @@ function identity$6(domain2) {
229833
229636
  scale2.copy = function() {
229834
229637
  return identity$6(domain2).unknown(unknown);
229835
229638
  };
229836
- domain2 = arguments.length ? Array.from(domain2, number$8) : [0, 1];
229639
+ domain2 = arguments.length ? Array.from(domain2, number$7) : [0, 1];
229837
229640
  return linearish(scale2);
229838
229641
  }
229839
229642
  function nice$1(domain2, interval2) {
@@ -230023,7 +229826,7 @@ function quantile() {
230023
229826
  return scale2;
230024
229827
  }
230025
229828
  function scale2(x2) {
230026
- return x2 == null || isNaN(x2 = +x2) ? unknown : range2[bisectRight$2(thresholds, x2)];
229829
+ return x2 == null || isNaN(x2 = +x2) ? unknown : range2[bisectRight$1(thresholds, x2)];
230027
229830
  }
230028
229831
  scale2.invertExtent = function(y2) {
230029
229832
  var i2 = range2.indexOf(y2);
@@ -230036,7 +229839,7 @@ function quantile() {
230036
229839
  if (!arguments.length) return domain2.slice();
230037
229840
  domain2 = [];
230038
229841
  for (let d of _) if (d != null && !isNaN(d = +d)) domain2.push(d);
230039
- domain2.sort(ascending$5);
229842
+ domain2.sort(ascending$4);
230040
229843
  return rescale();
230041
229844
  };
230042
229845
  scale2.range = function(_) {
@@ -230056,7 +229859,7 @@ function quantile() {
230056
229859
  function quantize$2() {
230057
229860
  var x02 = 0, x12 = 1, n3 = 1, domain2 = [0.5], range2 = [0, 1], unknown;
230058
229861
  function scale2(x2) {
230059
- return x2 != null && x2 <= x2 ? range2[bisectRight$2(domain2, x2, 0, n3)] : unknown;
229862
+ return x2 != null && x2 <= x2 ? range2[bisectRight$1(domain2, x2, 0, n3)] : unknown;
230060
229863
  }
230061
229864
  function rescale() {
230062
229865
  var i2 = -1;
@@ -230088,7 +229891,7 @@ function quantize$2() {
230088
229891
  function threshold() {
230089
229892
  var domain2 = [0.5], range2 = [0, 1], unknown, n3 = 1;
230090
229893
  function scale2(x2) {
230091
- return x2 != null && x2 <= x2 ? range2[bisectRight$2(domain2, x2, 0, n3)] : unknown;
229894
+ return x2 != null && x2 <= x2 ? range2[bisectRight$1(domain2, x2, 0, n3)] : unknown;
230092
229895
  }
230093
229896
  scale2.domain = function(_) {
230094
229897
  return arguments.length ? (domain2 = Array.from(_), n3 = Math.min(domain2.length, range2.length - 1), scale2) : domain2.slice();
@@ -230402,7 +230205,7 @@ function ticker(year2, month2, week2, day2, hour2, minute2) {
230402
230205
  }
230403
230206
  function tickInterval(start2, stop3, count2) {
230404
230207
  const target2 = Math.abs(stop3 - start2) / count2;
230405
- const i2 = bisector$2(([, , step2]) => step2).right(tickIntervals, target2);
230208
+ const i2 = bisector$1(([, , step2]) => step2).right(tickIntervals, target2);
230406
230209
  if (i2 === tickIntervals.length) return year2.every(tickStep(start2 / durationYear$1, stop3 / durationYear$1, count2));
230407
230210
  if (i2 === 0) return millisecond.every(Math.max(tickStep(start2, stop3, count2), 1));
230408
230211
  const [t4, step] = tickIntervals[target2 / tickIntervals[i2 - 1][2] < tickIntervals[i2][2] / target2 ? i2 - 1 : i2];
@@ -230974,7 +230777,7 @@ function defaultLocale$1(definition2) {
230974
230777
  function date(t4) {
230975
230778
  return new Date(t4);
230976
230779
  }
230977
- function number$7(t4) {
230780
+ function number$6(t4) {
230978
230781
  return t4 instanceof Date ? +t4 : +/* @__PURE__ */ new Date(+t4);
230979
230782
  }
230980
230783
  function calendar(ticks2, tickInterval, year2, month2, week2, day2, hour2, minute2, second2, format2) {
@@ -230987,7 +230790,7 @@ function calendar(ticks2, tickInterval, year2, month2, week2, day2, hour2, minut
230987
230790
  return new Date(invert2(y2));
230988
230791
  };
230989
230792
  scale2.domain = function(_) {
230990
- return arguments.length ? domain2(Array.from(_, number$7)) : domain2().map(date);
230793
+ return arguments.length ? domain2(Array.from(_, number$6)) : domain2().map(date);
230991
230794
  };
230992
230795
  scale2.ticks = function(interval2) {
230993
230796
  var d = domain2();
@@ -231147,7 +230950,7 @@ function translateX(x2) {
231147
230950
  function translateY(y2) {
231148
230951
  return "translate(0," + y2 + ")";
231149
230952
  }
231150
- function number$6(scale2) {
230953
+ function number$5(scale2) {
231151
230954
  return (d) => +scale2(d);
231152
230955
  }
231153
230956
  function center(scale2, offset2) {
@@ -231161,7 +230964,7 @@ function entering() {
231161
230964
  function axis(orient2, scale2) {
231162
230965
  var tickArguments = [], tickValues2 = null, tickFormat2 = null, tickSizeInner = 6, tickSizeOuter = 6, tickPadding = 3, offset2 = typeof window !== "undefined" && window.devicePixelRatio > 1 ? 0 : 0.5, k = orient2 === top || orient2 === left ? -1 : 1, x2 = orient2 === left || orient2 === right ? "x" : "y", transform3 = orient2 === top || orient2 === bottom ? translateX : translateY;
231163
230966
  function axis2(context2) {
231164
- var values3 = tickValues2 == null ? scale2.ticks ? scale2.ticks.apply(scale2, tickArguments) : scale2.domain() : tickValues2, format2 = tickFormat2 == null ? scale2.tickFormat ? scale2.tickFormat.apply(scale2, tickArguments) : identity$5 : tickFormat2, spacing2 = Math.max(tickSizeInner, 0) + tickPadding, range2 = scale2.range(), range0 = +range2[0] + offset2, range1 = +range2[range2.length - 1] + offset2, position2 = (scale2.bandwidth ? center : number$6)(scale2.copy(), offset2), selection = context2.selection ? context2.selection() : context2, path2 = selection.selectAll(".domain").data([null]), tick2 = selection.selectAll(".tick").data(values3, scale2).order(), tickExit = tick2.exit(), tickEnter = tick2.enter().append("g").attr("class", "tick"), line2 = tick2.select("line"), text2 = tick2.select("text");
230967
+ var values3 = tickValues2 == null ? scale2.ticks ? scale2.ticks.apply(scale2, tickArguments) : scale2.domain() : tickValues2, format2 = tickFormat2 == null ? scale2.tickFormat ? scale2.tickFormat.apply(scale2, tickArguments) : identity$5 : tickFormat2, spacing2 = Math.max(tickSizeInner, 0) + tickPadding, range2 = scale2.range(), range0 = +range2[0] + offset2, range1 = +range2[range2.length - 1] + offset2, position2 = (scale2.bandwidth ? center : number$5)(scale2.copy(), offset2), selection = context2.selection ? context2.selection() : context2, path2 = selection.selectAll(".domain").data([null]), tick2 = selection.selectAll(".tick").data(values3, scale2).order(), tickExit = tick2.exit(), tickEnter = tick2.enter().append("g").attr("class", "tick"), line2 = tick2.select("line"), text2 = tick2.select("text");
231165
230968
  path2 = path2.merge(path2.enter().insert("path", ".tick").attr("class", "domain").attr("stroke", "currentColor"));
231166
230969
  tick2 = tick2.merge(tickEnter);
231167
230970
  line2 = line2.merge(tickEnter.append("line").attr("stroke", "currentColor").attr(x2 + "2", k * tickSizeInner));
@@ -231294,6 +231097,9 @@ function ramp(color2, n3 = 256) {
231294
231097
  canvas.width = n3;
231295
231098
  canvas.height = 1;
231296
231099
  const context2 = canvas.getContext("2d");
231100
+ if (!context2) {
231101
+ throw new Error("Could not get 2d context from canvas");
231102
+ }
231297
231103
  for (let i2 = 0; i2 < n3; ++i2) {
231298
231104
  context2.fillStyle = color2(i2 / (n3 - 1));
231299
231105
  context2.fillRect(i2, 0, 1, 1);
@@ -231312,6 +231118,8 @@ function getXlinkHref(cmap) {
231312
231118
  }
231313
231119
  const useStyles$p = makeStyles()(() => ({
231314
231120
  legend: {
231121
+ position: "relative",
231122
+ // Needed for absolute positioning of slider overlay
231315
231123
  top: "2px",
231316
231124
  right: "2px",
231317
231125
  fontSize: "10px !important",
@@ -231343,6 +231151,74 @@ const useStyles$p = makeStyles()(() => ({
231343
231151
  },
231344
231152
  legendInvisible: {
231345
231153
  display: "none"
231154
+ },
231155
+ sliderContainer: {
231156
+ position: "absolute",
231157
+ // Position at the colormap location: top offset = titleHeight
231158
+ top: "10px",
231159
+ // titleHeight
231160
+ left: "2px",
231161
+ // Account for parent padding
231162
+ width: "calc(100% - 4px)",
231163
+ // Account for left and right padding
231164
+ height: "8px",
231165
+ // rectHeight
231166
+ "&:hover $sliderThumb": {
231167
+ opacity: 1
231168
+ }
231169
+ },
231170
+ sliderRoot: {
231171
+ position: "absolute",
231172
+ top: 0,
231173
+ left: 0,
231174
+ width: "100%",
231175
+ height: "8px",
231176
+ // rectHeight
231177
+ padding: 0,
231178
+ "& .MuiSlider-rail": {
231179
+ display: "none"
231180
+ },
231181
+ "& .MuiSlider-track": {
231182
+ display: "none"
231183
+ },
231184
+ "& .MuiSlider-valueLabel": {
231185
+ fontSize: "9px",
231186
+ padding: "2px 4px",
231187
+ backgroundColor: "rgb(0, 0, 0)",
231188
+ borderRadius: "2px"
231189
+ }
231190
+ },
231191
+ sliderThumb: {
231192
+ width: "4px",
231193
+ height: "12px",
231194
+ borderRadius: "2px",
231195
+ backgroundColor: "white",
231196
+ border: "1px solid black",
231197
+ opacity: 0,
231198
+ transition: "opacity 0.15s ease-in-out",
231199
+ "&:hover, &.Mui-focusVisible": {
231200
+ boxShadow: "0 0 0 4px rgba(0, 0, 0, 0.16)",
231201
+ opacity: 1
231202
+ },
231203
+ "&.Mui-active": {
231204
+ boxShadow: "0 0 0 6px rgba(0, 0, 0, 0.16)",
231205
+ opacity: 1
231206
+ }
231207
+ },
231208
+ colormapImage: {
231209
+ position: "absolute",
231210
+ top: "2px",
231211
+ height: "6px",
231212
+ // rectHeight
231213
+ pointerEvents: "none"
231214
+ },
231215
+ grayTrack: {
231216
+ position: "absolute",
231217
+ top: "2px",
231218
+ height: "6px",
231219
+ // rectHeight
231220
+ backgroundColor: "rgba(128, 128, 128, 0.5)",
231221
+ pointerEvents: "none"
231346
231222
  }
231347
231223
  }));
231348
231224
  const titleHeight = 10;
@@ -231352,21 +231228,23 @@ const rectMarginX = 2;
231352
231228
  function combineExtents(extents, featureAggregationStrategy) {
231353
231229
  if (Array.isArray(extents)) {
231354
231230
  if (Array.isArray(extents?.[0])) {
231231
+ const extentsArray = extents;
231355
231232
  if (featureAggregationStrategy === "first") {
231356
- return extents[0];
231233
+ return extentsArray[0];
231357
231234
  }
231358
231235
  if (featureAggregationStrategy === "last") {
231359
- return extents.at(-1);
231236
+ return extentsArray.at(-1) || null;
231360
231237
  }
231361
231238
  if (typeof featureAggregationStrategy === "number") {
231362
231239
  const i2 = featureAggregationStrategy;
231363
- return extents[i2];
231240
+ return extentsArray[i2];
231364
231241
  }
231365
231242
  if (featureAggregationStrategy === "sum") {
231366
- return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
231243
+ return extentsArray.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
231367
231244
  }
231368
231245
  if (featureAggregationStrategy === "mean") {
231369
- return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]).map((v) => v / extents.length);
231246
+ const sum2 = extentsArray.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
231247
+ return [sum2[0] / extentsArray.length, sum2[1] / extentsArray.length];
231370
231248
  }
231371
231249
  } else {
231372
231250
  return extents;
@@ -231380,7 +231258,7 @@ function combineMissings(missings, featureAggregationStrategy) {
231380
231258
  return missings[0];
231381
231259
  }
231382
231260
  if (featureAggregationStrategy === "last") {
231383
- return missings.at(-1);
231261
+ return missings.at(-1) || null;
231384
231262
  }
231385
231263
  if (typeof featureAggregationStrategy === "number") {
231386
231264
  const i2 = featureAggregationStrategy;
@@ -231396,52 +231274,127 @@ function combineMissings(missings, featureAggregationStrategy) {
231396
231274
  return null;
231397
231275
  }
231398
231276
  function Legend(props) {
231399
- const { visible: visibleProp, positionRelative = false, highContrast = false, obsType, featureValueType, considerSelections = true, obsColorEncoding, featureSelection, featureLabelsMap, featureValueColormap, featureValueColormapRange, spatialChannelColor, spatialLayerColor, obsSetSelection, obsSetColor, featureAggregationStrategy, extent: extent2, missing, width: width2 = 100, height: height2 = 36, maxHeight: maxHeight2 = null, theme, showObsLabel = false, pointsVisible = true, contoursVisible = false, contoursFilled, contourPercentiles, contourThresholds } = props;
231400
- const svgRef = useRef();
231277
+ const {
231278
+ visible: visibleProp,
231279
+ positionRelative = false,
231280
+ highContrast = false,
231281
+ obsType,
231282
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
231283
+ featureType: _featureType = void 0,
231284
+ // Unused but accepted for API compatibility
231285
+ featureValueType,
231286
+ considerSelections = true,
231287
+ obsColorEncoding,
231288
+ featureSelection,
231289
+ featureLabelsMap,
231290
+ featureValueColormap,
231291
+ featureValueColormapRange,
231292
+ setFeatureValueColormapRange,
231293
+ spatialChannelColor,
231294
+ spatialLayerColor,
231295
+ obsSetSelection,
231296
+ obsSetColor,
231297
+ featureAggregationStrategy,
231298
+ extent: extent2,
231299
+ missing,
231300
+ width: width2 = 100,
231301
+ height: height2 = 36,
231302
+ maxHeight: maxHeight2 = null,
231303
+ theme,
231304
+ showObsLabel = false,
231305
+ pointsVisible = true,
231306
+ contoursVisible = false,
231307
+ contoursFilled,
231308
+ contourPercentiles,
231309
+ contourThresholds
231310
+ } = props;
231311
+ const svgRef = useRef(null);
231401
231312
  const { classes: classes2 } = useStyles$p();
231313
+ const [localRange, setLocalRange] = useState(featureValueColormapRange);
231314
+ useEffect(() => {
231315
+ setLocalRange(featureValueColormapRange);
231316
+ }, [featureValueColormapRange]);
231317
+ const debouncedSetRange = useMemo$1(() => setFeatureValueColormapRange ? debounce$5((value2) => {
231318
+ setFeatureValueColormapRange(value2);
231319
+ }, 5, { leading: false, trailing: true }) : null, [setFeatureValueColormapRange]);
231320
+ useEffect(() => () => {
231321
+ if (debouncedSetRange) {
231322
+ debouncedSetRange.cancel();
231323
+ }
231324
+ }, [debouncedSetRange]);
231325
+ const handleSliderChange = useCallback((_event, newValue) => {
231326
+ const rangeValue = newValue;
231327
+ setLocalRange(rangeValue);
231328
+ if (debouncedSetRange) {
231329
+ debouncedSetRange(rangeValue);
231330
+ }
231331
+ }, [debouncedSetRange]);
231402
231332
  const isDarkTheme = theme === "dark";
231403
231333
  const isStaticColor = obsColorEncoding === "spatialChannelColor" || obsColorEncoding === "spatialLayerColor";
231404
231334
  const isSetColor = obsColorEncoding === "cellSetSelection";
231405
- const layerColor = Array.isArray(spatialLayerColor) && spatialLayerColor.length === 3 ? spatialLayerColor : getDefaultColor(theme);
231406
- const channelColor = Array.isArray(spatialChannelColor) && spatialChannelColor.length === 3 ? spatialChannelColor : getDefaultColor(theme);
231335
+ const layerColor = Array.isArray(spatialLayerColor) && spatialLayerColor.length === 3 ? spatialLayerColor : getDefaultColor(theme ?? "light");
231336
+ const channelColor = Array.isArray(spatialChannelColor) && spatialChannelColor.length === 3 ? spatialChannelColor : getDefaultColor(theme ?? "light");
231407
231337
  const staticColor = obsColorEncoding === "spatialChannelColor" ? channelColor : layerColor;
231408
- const visible = visibleProp && (!considerSelections || obsColorEncoding === "geneSelection" && featureSelection && Array.isArray(featureSelection) && featureSelection.length >= 1 || isSetColor && obsSetSelection?.length > 0 && obsSetColor?.length > 0 || isStaticColor);
231338
+ const visible = visibleProp && (!considerSelections || ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "") && featureSelection && Array.isArray(featureSelection) && featureSelection.length >= 1 || isSetColor && (obsSetSelection?.length ?? 0) > 0 && (obsSetColor?.length ?? 0) > 0 || isStaticColor);
231409
231339
  const levelZeroNames = useMemo$1(() => Array.from(new Set(obsSetSelection?.map((setPath) => setPath[0]) || [])), [obsSetSelection]);
231410
- const dynamicHeight = isSetColor && obsSetSelection ? levelZeroNames.length * titleHeight + obsSetSelection?.length * (rectHeight + rectMarginY) : height2 + (!pointsVisible && contoursVisible ? 25 : 0);
231340
+ const dynamicHeight = isSetColor && obsSetSelection ? levelZeroNames.length * titleHeight + (obsSetSelection?.length ?? 0) * (rectHeight + rectMarginY) : height2 + (!pointsVisible && contoursVisible ? 25 : 0);
231411
231341
  const availHeight = maxHeight2 !== null ? Math.max(0, maxHeight2 - 4) : Infinity;
231412
231342
  const needsScroll = Number.isFinite(availHeight) && dynamicHeight > availHeight + 1;
231413
231343
  useEffect(() => {
231414
231344
  const domElement = svgRef.current;
231345
+ if (!domElement)
231346
+ return;
231415
231347
  const foregroundColor = highContrast ? "black" : isDarkTheme ? "white" : "black";
231416
231348
  const svg2 = select$1(domElement);
231417
231349
  svg2.selectAll("g").remove();
231418
231350
  svg2.attr("width", width2).attr("height", dynamicHeight);
231419
231351
  const g2 = svg2.append("g").attr("width", width2).attr("height", dynamicHeight);
231420
- if (!considerSelections || obsColorEncoding === "geneSelection") {
231421
- const [xMin, xMax] = combineExtents(extent2, featureAggregationStrategy) || [0, 1];
231352
+ const showInteractiveSlider2 = setFeatureValueColormapRange && ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "") && pointsVisible && featureValueColormap;
231353
+ if (!considerSelections || ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "")) {
231354
+ const combinedExtent = combineExtents(extent2 ?? null, featureAggregationStrategy ?? null) || [0, 1];
231355
+ const [xMin, xMax] = combinedExtent;
231422
231356
  if (featureValueColormap && pointsVisible) {
231423
- const xlinkHref = getXlinkHref(featureValueColormap);
231424
- g2.append("image").attr("x", 0).attr("y", titleHeight).attr("width", width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref);
231425
- const [rMin, rMax] = featureValueColormapRange;
231357
+ const xlinkHref2 = getXlinkHref(featureValueColormap);
231358
+ const currentRange = showInteractiveSlider2 ? localRange : featureValueColormapRange;
231359
+ const [rMin, rMax] = currentRange || [0, 1];
231360
+ if (showInteractiveSlider2) ;
231361
+ else if (setFeatureValueColormapRange) {
231362
+ g2.append("image").attr("x", rMin * width2).attr("y", titleHeight).attr("width", (rMax - rMin) * width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref2);
231363
+ } else {
231364
+ g2.append("image").attr("x", 0).attr("y", titleHeight).attr("width", width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref2);
231365
+ }
231426
231366
  const scaledDataExtent = [
231427
231367
  xMin + (xMax - xMin) * rMin,
231428
231368
  xMax - (xMax - xMin) * (1 - rMax)
231429
231369
  ];
231430
- const x2 = linear$1().domain(scaledDataExtent).range([0.5, width2 - 0.5]);
231431
- const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(x2).tickValues(scaledDataExtent));
231432
- axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
231433
- axisTicks2.selectAll("text").style("fill", foregroundColor);
231434
- axisTicks2.selectAll("text").attr("text-anchor", (d, i2) => i2 === 0 ? "start" : "end");
231435
- } else if (contoursVisible) {
231370
+ let x2;
231371
+ if (setFeatureValueColormapRange || showInteractiveSlider2) {
231372
+ x2 = linear$1().domain(scaledDataExtent).range([rMin * width2, rMax * width2]);
231373
+ } else {
231374
+ x2 = linear$1().domain(scaledDataExtent).range([0, width2]);
231375
+ }
231376
+ if (showInteractiveSlider2) {
231377
+ const xGlobal = linear$1().domain([xMin, xMax]).range([0, width2 - 4]);
231378
+ const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(xGlobal).tickValues([xMin, xMax]));
231379
+ axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
231380
+ axisTicks2.selectAll("text").style("fill", foregroundColor);
231381
+ axisTicks2.selectAll("text").attr("text-anchor", (_d2, i2) => i2 === 0 ? "start" : "end");
231382
+ } else {
231383
+ const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(x2).tickValues(scaledDataExtent));
231384
+ axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
231385
+ axisTicks2.selectAll("text").style("fill", foregroundColor);
231386
+ axisTicks2.selectAll("text").attr("text-anchor", (_d2, i2) => i2 === 0 ? "start" : "end");
231387
+ }
231388
+ } else if (contoursVisible && contourPercentiles) {
231436
231389
  const tSize = 12;
231437
231390
  const xPercentile = linear$1().domain([0, 1]).range([tSize / 2, width2 - tSize / 2 - 2]);
231438
- const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight + 15})`).style("font-size", "9px").call(axisBottom(xPercentile).tickValues(contourPercentiles).tickFormat(format$8(".0%")).tickSizeOuter(0));
231391
+ const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight + 15})`).style("font-size", "9px").call(axisBottom(xPercentile).tickValues(contourPercentiles).tickFormat((d) => format$8(".0%")(d)).tickSizeOuter(0));
231439
231392
  axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
231440
231393
  axisTicks2.selectAll("text").style("fill", foregroundColor);
231441
231394
  const NEIGHBOR_THRESHOLD = 18;
231442
- const contourPercentages = contourPercentiles.map((x2) => x2 * 100);
231395
+ const contourPercentages = contourPercentiles.map((p) => p * 100);
231443
231396
  if (contourPercentages?.[1] - contourPercentages?.[0] <= NEIGHBOR_THRESHOLD || contourPercentages?.[2] - contourPercentages?.[1] <= NEIGHBOR_THRESHOLD) {
231444
- axisTicks2.selectAll("text").attr("transform", (d, i2) => `translate(0,${i2 === 0 || i2 === contourPercentiles.length - 1 ? 0 : 10})`);
231397
+ axisTicks2.selectAll("text").attr("transform", (_d2, i2) => `translate(0,${i2 === 0 || i2 === contourPercentiles.length - 1 ? 0 : 10})`);
231445
231398
  }
231446
231399
  const triangleGroupG = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight + 4})`);
231447
231400
  contourPercentiles.forEach((p, i2) => {
@@ -231451,7 +231404,7 @@ function Legend(props) {
231451
231404
  const thresholdGroupG = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`);
231452
231405
  const thresholdFormatter = format$8(".0f");
231453
231406
  contourPercentiles.forEach((p, i2) => {
231454
- const contourThreshold = xMin + (xMax - xMin) * (contourThresholds?.[i2] / 255);
231407
+ const contourThreshold = xMin + (xMax - xMin) * ((contourThresholds?.[i2] ?? 0) / 255);
231455
231408
  const thresholdG = thresholdGroupG.append("g").attr("transform", `translate(${xPercentile(p)},0)`).style("font-size", "7px");
231456
231409
  thresholdG.append("text").text(thresholdFormatter(contourThreshold)).style("fill", foregroundColor).attr("text-anchor", "middle");
231457
231410
  });
@@ -231474,9 +231427,9 @@ function Legend(props) {
231474
231427
  g2.append("text").attr("text-anchor", "start").attr("dominant-baseline", "hanging").attr("x", 0).attr("y", y2).text(levelZeroName).style("font-size", "9px").style("fill", foregroundColor);
231475
231428
  y2 += titleHeight;
231476
231429
  setPaths.forEach((setPath) => {
231477
- const setColor2 = obsSetColor?.find((d) => isEqual$3(d.path, setPath))?.color || getDefaultColor(theme);
231430
+ const setColor2 = obsSetColor?.find((d) => isEqual$3(d.path, setPath))?.color || getDefaultColor(theme ?? "light");
231478
231431
  g2.append("rect").attr("x", 0).attr("y", y2).attr("width", rectHeight).attr("height", rectHeight).attr("fill", `rgb(${setColor2[0]},${setColor2[1]},${setColor2[2]})`);
231479
- g2.append("text").attr("text-anchor", "start").attr("dominant-baseline", "hanging").attr("x", rectHeight + rectMarginX).attr("y", y2).text(setPath.at(-1)).style("font-size", "9px").style("fill", foregroundColor);
231432
+ g2.append("text").attr("text-anchor", "start").attr("dominant-baseline", "hanging").attr("x", rectHeight + rectMarginX).attr("y", y2).text(setPath.at(-1) ?? "").style("font-size", "9px").style("fill", foregroundColor);
231480
231433
  y2 += rectHeight + rectMarginY;
231481
231434
  });
231482
231435
  });
@@ -231497,17 +231450,17 @@ function Legend(props) {
231497
231450
  } else {
231498
231451
  featureSelectionLabelRawStr = featureSelectionLabelRaw?.[0];
231499
231452
  }
231500
- const combinedMissing = combineMissings(missing, featureAggregationStrategy);
231453
+ const combinedMissing = combineMissings(missing ?? null, featureAggregationStrategy ?? null);
231501
231454
  const featureSelectionLabel = combinedMissing ? `${featureSelectionLabelRawStr} (${Math.round(combinedMissing * 100)}% NaN)` : featureSelectionLabelRawStr;
231502
- const obsLabel = capitalize$3(obsType);
231503
- const featureLabel = considerSelections ? featureSelectionLabel || capitalize$3(featureValueType) : capitalize$3(featureValueType);
231455
+ const obsLabel = capitalize$3(obsType ?? null);
231456
+ const featureLabel = considerSelections ? featureSelectionLabel || capitalize$3(featureValueType ?? null) : capitalize$3(featureValueType ?? null);
231504
231457
  const mainLabel = showObsLabel ? obsLabel : featureLabel;
231505
231458
  const subLabel = showObsLabel ? featureLabel : null;
231506
231459
  const hasSubLabel = subLabel !== null;
231507
231460
  if (!isSetColor) {
231508
- g2.append("text").attr("text-anchor", hasSubLabel ? "start" : "end").attr("dominant-baseline", "hanging").attr("x", hasSubLabel ? 0 : width2).attr("y", 0).text(mainLabel).style("font-size", "10px").style("fill", foregroundColor);
231461
+ g2.append("text").attr("text-anchor", hasSubLabel ? "start" : "end").attr("dominant-baseline", "hanging").attr("x", hasSubLabel ? 0 : width2 - 4).attr("y", 0).text(mainLabel ?? "").style("font-size", "10px").style("fill", foregroundColor);
231509
231462
  if (hasSubLabel) {
231510
- g2.append("text").attr("text-anchor", "end").attr("dominant-baseline", "hanging").attr("x", width2).attr("y", titleHeight).text(subLabel).style("font-size", "9px").style("fill", foregroundColor);
231463
+ g2.append("text").attr("text-anchor", "end").attr("dominant-baseline", "hanging").attr("x", width2).attr("y", titleHeight + rectHeight).text(subLabel ?? "").style("font-size", "9px").style("fill", foregroundColor);
231511
231464
  }
231512
231465
  }
231513
231466
  }, [
@@ -231515,6 +231468,7 @@ function Legend(props) {
231515
231468
  height2,
231516
231469
  featureValueColormap,
231517
231470
  featureValueColormapRange,
231471
+ localRange,
231518
231472
  considerSelections,
231519
231473
  obsType,
231520
231474
  obsColorEncoding,
@@ -231533,20 +231487,63 @@ function Legend(props) {
231533
231487
  contoursFilled,
231534
231488
  contoursVisible,
231535
231489
  pointsVisible,
231536
- featureAggregationStrategy
231490
+ featureAggregationStrategy,
231491
+ setFeatureValueColormapRange,
231492
+ dynamicHeight,
231493
+ highContrast,
231494
+ isStaticColor,
231495
+ missing,
231496
+ showObsLabel,
231497
+ staticColor
231537
231498
  ]);
231538
- return jsxRuntimeExports.jsx("div", { className: clsx(classes2.legend, {
231499
+ const showInteractiveSlider = setFeatureValueColormapRange && ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "") && pointsVisible && featureValueColormap;
231500
+ const globalExtent = useMemo$1(() => {
231501
+ const combined = combineExtents(extent2 ?? null, featureAggregationStrategy ?? null);
231502
+ return combined || [0, 1];
231503
+ }, [extent2, featureAggregationStrategy]);
231504
+ const formatSliderValue = useCallback((value2) => {
231505
+ const [xMin, xMax] = globalExtent;
231506
+ const dataValue = xMin + (xMax - xMin) * value2;
231507
+ const range2 = xMax - xMin;
231508
+ if (range2 < 0.01) {
231509
+ return dataValue.toExponential(2);
231510
+ }
231511
+ if (range2 < 1) {
231512
+ return dataValue.toFixed(3);
231513
+ }
231514
+ if (range2 < 100) {
231515
+ return dataValue.toFixed(1);
231516
+ }
231517
+ return Math.round(dataValue).toString();
231518
+ }, [globalExtent]);
231519
+ const xlinkHref = featureValueColormap ? getXlinkHref(featureValueColormap) : null;
231520
+ const currentLocalRange = localRange || [0, 1];
231521
+ return jsxRuntimeExports.jsxs("div", { className: clsx(classes2.legend, {
231539
231522
  [classes2.legendRelative]: positionRelative,
231540
231523
  [classes2.legendAbsolute]: !positionRelative,
231541
231524
  [classes2.legendHighContrast]: highContrast,
231542
231525
  [classes2.legendLowContrast]: !highContrast,
231543
231526
  [classes2.legendInvisible]: !visible
231544
231527
  }), style: {
231545
- ...needsScroll ? { maxHeight: `${Math.floor(availHeight)}px`, overflowY: "auto" } : { maxHeight: void 0, overflowY: "visible" }
231546
- }, children: jsxRuntimeExports.jsx("svg", { ref: svgRef, style: {
231528
+ ...needsScroll ? { maxHeight: `${Math.floor(availHeight)}px`, overflowY: "auto" } : { maxHeight: void 0, overflowY: "visible" },
231529
+ width: `${width2}px`
231530
+ }, children: [jsxRuntimeExports.jsx("svg", { ref: svgRef, style: {
231547
231531
  width: `${width2}px`,
231548
231532
  height: `${dynamicHeight}px`
231549
- } }) });
231533
+ } }), showInteractiveSlider && xlinkHref && jsxRuntimeExports.jsxs("div", { className: classes2.sliderContainer, children: [currentLocalRange[0] > 0 && jsxRuntimeExports.jsx("div", { className: classes2.grayTrack, style: {
231534
+ left: 0,
231535
+ width: `${currentLocalRange[0] * 100}%`
231536
+ } }), currentLocalRange[1] < 1 && jsxRuntimeExports.jsx("div", { className: classes2.grayTrack, style: {
231537
+ left: `${currentLocalRange[1] * 100}%`,
231538
+ width: `${(1 - currentLocalRange[1]) * 100}%`
231539
+ } }), jsxRuntimeExports.jsx("img", { src: xlinkHref, alt: "Colormap gradient", className: classes2.colormapImage, style: {
231540
+ left: `${currentLocalRange[0] * 100}%`,
231541
+ width: `${(currentLocalRange[1] - currentLocalRange[0]) * 100}%`
231542
+ } }), jsxRuntimeExports.jsx(Slider, { className: classes2.sliderRoot, value: currentLocalRange, onChange: handleSliderChange, min: 0, max: 1, step: 0.01, disableSwap: true, valueLabelDisplay: "auto", valueLabelFormat: formatSliderValue, "aria-label": "Colormap range", getAriaLabel: (index2) => index2 === 0 ? "Colormap minimum" : "Colormap maximum", getAriaValueText: (value2) => formatSliderValue(value2), slotProps: {
231543
+ thumb: {
231544
+ className: classes2.sliderThumb
231545
+ }
231546
+ } })] })] });
231550
231547
  }
231551
231548
  const useStyles$o = makeStyles()(() => ({
231552
231549
  multiLegend: {
@@ -231579,8 +231576,12 @@ function MultiLegend(props) {
231579
231576
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
231580
231577
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].reverse(), [pointLayerScopes]);
231581
231578
  return jsxRuntimeExports.jsxs("div", { className: classes2.multiLegend, children: [pointLayerScopes ? reversedPointLayerScopes.flatMap((layerScope) => {
231582
- const layerCoordination = pointLayerCoordination[0][layerScope];
231583
- const { spatialLayerVisible, obsColorEncoding, obsType, featureType, featureValueType, spatialLayerColor, legendVisible } = layerCoordination;
231579
+ const layerCoordination = pointLayerCoordination?.[0]?.[layerScope];
231580
+ const layerSetters = pointLayerCoordination?.[1]?.[layerScope];
231581
+ if (!layerCoordination)
231582
+ return null;
231583
+ const { spatialLayerVisible, obsColorEncoding, obsType, featureType, featureValueType, featureSelection, featureValueColormap, featureValueColormapRange, spatialLayerColor, legendVisible } = layerCoordination;
231584
+ const { setFeatureValueColormapRange } = layerSetters || {};
231584
231585
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
231585
231586
  const height2 = isStaticColor ? 20 : 36;
231586
231587
  return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, {
@@ -231595,30 +231596,39 @@ function MultiLegend(props) {
231595
231596
  featureValueType,
231596
231597
  obsColorEncoding,
231597
231598
  spatialLayerColor,
231598
- featureSelection: null,
231599
+ featureSelection,
231599
231600
  // featureLabelsMap={featureLabelsMap} // TODO
231600
- featureValueColormap: "viridis",
231601
- featureValueColormapRange: [0, 1],
231601
+ featureValueColormap: featureValueColormap || "viridis",
231602
+ featureValueColormapRange: featureValueColormapRange || [0, 1],
231603
+ setFeatureValueColormapRange,
231602
231604
  extent: null,
231603
231605
  height: height2
231604
231606
  }, layerScope) : null;
231605
231607
  }) : null, spotLayerScopes ? reversedSpotLayerScopes.flatMap((layerScope) => {
231606
- const layerCoordination = spotLayerCoordination[0][layerScope];
231608
+ const layerCoordination = spotLayerCoordination?.[0][layerScope];
231609
+ const layerSetters = spotLayerCoordination?.[1]?.[layerScope];
231610
+ if (!layerCoordination)
231611
+ return null;
231607
231612
  const { spatialLayerVisible, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, spatialLayerColor, legendVisible, obsSetSelection, obsSetColor } = layerCoordination;
231613
+ const { setFeatureValueColormapRange } = layerSetters || {};
231608
231614
  const expressionExtents = spotMultiExpressionExtents?.[layerScope];
231609
231615
  const firstExpressionExtent = expressionExtents?.[0];
231610
231616
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
231611
231617
  const height2 = isStaticColor ? 20 : 36;
231612
231618
  const featureLabelsMap = spotMultiFeatureLabels?.[layerScope]?.featureLabelsMap;
231613
- return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, { maxHeight: maxHeight2, positionRelative: true, highContrast: true, showObsLabel: true, visible: spatialLayerVisible, theme, obsType, featureType, featureValueType, obsColorEncoding, spatialLayerColor, featureSelection, featureAggregationStrategy, featureLabelsMap, featureValueColormap, featureValueColormapRange, extent: firstExpressionExtent, height: height2, obsSetSelection, obsSetColor }, layerScope) : null;
231619
+ return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, { maxHeight: maxHeight2, positionRelative: true, highContrast: true, showObsLabel: true, visible: spatialLayerVisible, theme, obsType, featureType, featureValueType, obsColorEncoding, spatialLayerColor, featureSelection, featureAggregationStrategy, featureLabelsMap, featureValueColormap, featureValueColormapRange, setFeatureValueColormapRange, extent: firstExpressionExtent, height: height2, obsSetSelection, obsSetColor }, layerScope) : null;
231614
231620
  }) : null, segmentationLayerScopes ? reversedSegmentationLayerScopes.flatMap((layerScope) => {
231615
- const layerCoordination = segmentationLayerCoordination[0][layerScope];
231616
- const channelScopes = segmentationChannelScopesByLayer[layerScope];
231617
- const channelCoordination = segmentationChannelCoordination[0][layerScope];
231621
+ const layerCoordination = segmentationLayerCoordination?.[0][layerScope];
231622
+ const channelScopes = segmentationChannelScopesByLayer?.[layerScope];
231623
+ const channelCoordination = segmentationChannelCoordination?.[0][layerScope];
231624
+ const channelSetters = segmentationChannelCoordination?.[1]?.[layerScope];
231625
+ if (!layerCoordination)
231626
+ return null;
231618
231627
  const { spatialLayerVisible } = layerCoordination;
231619
231628
  const reversedChannelScopes = [...channelScopes || []].reverse();
231620
231629
  return channelCoordination && channelScopes ? reversedChannelScopes.map((cScope) => {
231621
231630
  const { spatialChannelVisible, spatialChannelColor, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, legendVisible, obsSetSelection, obsSetColor } = channelCoordination[cScope];
231631
+ const { setFeatureValueColormapRange } = channelSetters?.[cScope] || {};
231622
231632
  const expressionExtents = segmentationMultiExpressionExtents?.[layerScope]?.[cScope];
231623
231633
  const firstExpressionExtent = expressionExtents?.[0];
231624
231634
  const isStaticColor = obsColorEncoding === "spatialChannelColor";
@@ -231639,6 +231649,7 @@ function MultiLegend(props) {
231639
231649
  // featureLabelsMap={featureLabelsMap} // TODO
231640
231650
  featureValueColormap,
231641
231651
  featureValueColormapRange,
231652
+ setFeatureValueColormapRange,
231642
231653
  extent: firstExpressionExtent,
231643
231654
  height: height2,
231644
231655
  spatialChannelColor,
@@ -231688,7 +231699,7 @@ function ChannelNamesLegend(props) {
231688
231699
  const imageWrapperInstance = images?.[layerScope]?.image?.instance;
231689
231700
  const channelNames = imageWrapperInstance?.getChannelNames();
231690
231701
  const channelIndex = imageWrapperInstance?.getChannelIndex(spatialTargetC);
231691
- const channelName = channelNames?.[channelIndex];
231702
+ const channelName = channelIndex !== void 0 ? channelNames?.[channelIndex] : void 0;
231692
231703
  return spatialLayerVisible && spatialChannelVisible && spatialChannelLabelsVisible ? jsxRuntimeExports.jsx(Typography, { variant: "h6", className: classes2.channelNameText, style: {
231693
231704
  color: rgbColor,
231694
231705
  fontSize: `${spatialChannelLabelSize}px`
@@ -231847,7 +231858,7 @@ function EmbeddingScatterplotSubscriber(props) {
231847
231858
  }, [obsEmbedding]);
231848
231859
  useEffect(() => {
231849
231860
  if (xRange && yRange && width2 && height2) {
231850
- const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2);
231861
+ const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2, numCells);
231851
231862
  setDynamicCellRadius(pointSizeDevicePixels);
231852
231863
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
231853
231864
  setDynamicCellOpacity(nextCellOpacityScale);
@@ -231886,7 +231897,14 @@ function EmbeddingScatterplotSubscriber(props) {
231886
231897
  const getCellIsSelected = useCallback((object2, { index: index2 }) => (cellSelectionSet || /* @__PURE__ */ new Set([])).has(obsEmbeddingIndex[index2]) ? 1 : 0, [cellSelectionSet, obsEmbeddingIndex]);
231887
231898
  const cellRadius = cellRadiusMode === "manual" ? cellRadiusFixed : dynamicCellRadius;
231888
231899
  const cellOpacity = cellOpacityMode === "manual" ? cellOpacityFixed : dynamicCellOpacity;
231889
- const { normData: uint8ExpressionData, extents: expressionExtents, missing: expressionMissing } = useUint8FeatureSelection(expressionData);
231900
+ const aggregatedExpressionData = useMemo$1(() => {
231901
+ if (featureAggregationStrategyToUse != null && expressionData && expressionData.length > 1) {
231902
+ const aggregated = aggregateFeatureArrays(expressionData, featureAggregationStrategyToUse);
231903
+ return [aggregated];
231904
+ }
231905
+ return expressionData;
231906
+ }, [expressionData, featureAggregationStrategyToUse]);
231907
+ const { normData: uint8ExpressionData, extents: expressionExtents, missing: expressionMissing } = useUint8FeatureSelection(aggregatedExpressionData);
231890
231908
  const getExpressionValue = useExpressionValueGetter({
231891
231909
  instanceObsIndex: obsEmbeddingIndex,
231892
231910
  matrixObsIndex,
@@ -232048,6 +232066,7 @@ function EmbeddingScatterplotSubscriber(props) {
232048
232066
  featureLabelsMap,
232049
232067
  featureValueColormap: geneExpressionColormap,
232050
232068
  featureValueColormapRange: geneExpressionColormapRange,
232069
+ setFeatureValueColormapRange: setGeneExpressionColormapRange,
232051
232070
  obsSetSelection: cellSetSelection,
232052
232071
  extent: expressionExtents,
232053
232072
  missing: expressionMissing,
@@ -232275,7 +232294,7 @@ function GatingSubscriber(props) {
232275
232294
  }, [obsXY]);
232276
232295
  useEffect(() => {
232277
232296
  if (xRange && yRange) {
232278
- const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2);
232297
+ const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2, numCells);
232279
232298
  setDynamicCellRadius(pointSizeDevicePixels);
232280
232299
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
232281
232300
  setDynamicCellOpacity(nextCellOpacityScale);
@@ -246941,7 +246960,7 @@ var equalScalar = /* @__PURE__ */ createEqualScalar({
246941
246960
  config: config$2,
246942
246961
  typed
246943
246962
  });
246944
- var number$5 = /* @__PURE__ */ createNumber({
246963
+ var number$4 = /* @__PURE__ */ createNumber({
246945
246964
  typed
246946
246965
  });
246947
246966
  var multiplyScalar = /* @__PURE__ */ createMultiplyScalar({
@@ -247058,7 +247077,7 @@ var pow$4 = /* @__PURE__ */ createPow({
247058
247077
  identity: identity$4,
247059
247078
  matrix,
247060
247079
  multiply,
247061
- number: number$5,
247080
+ number: number$4,
247062
247081
  typed
247063
247082
  });
247064
247083
  var bignumber = /* @__PURE__ */ createBignumber({
@@ -247068,7 +247087,7 @@ var bignumber = /* @__PURE__ */ createBignumber({
247068
247087
  var numeric$1 = /* @__PURE__ */ createNumeric({
247069
247088
  bignumber,
247070
247089
  fraction,
247071
- number: number$5
247090
+ number: number$4
247072
247091
  });
247073
247092
  var subtract = /* @__PURE__ */ createSubtract({
247074
247093
  DenseMatrix,
@@ -247162,7 +247181,7 @@ var Unit = /* @__PURE__ */ createUnitClass({
247162
247181
  format: format$4,
247163
247182
  isNumeric: isNumeric$1,
247164
247183
  multiplyScalar,
247165
- number: number$5,
247184
+ number: number$4,
247166
247185
  pow: pow$4,
247167
247186
  round,
247168
247187
  subtract
@@ -248793,7 +248812,7 @@ let Array$2 = class Array2 extends (_a$5 = Location$1, _a$5) {
248793
248812
  return is_dtype$1(this.dtype, query);
248794
248813
  }
248795
248814
  };
248796
- function* range$8(start2, stop3, step = 1) {
248815
+ function* range$7(start2, stop3, step = 1) {
248797
248816
  if (stop3 === void 0) {
248798
248817
  stop3 = start2;
248799
248818
  start2 = 0;
@@ -248937,7 +248956,7 @@ let SliceDimIndexer$1 = class SliceDimIndexer {
248937
248956
  *[Symbol.iterator]() {
248938
248957
  const dim_chunk_ix_from = Math.floor(this.start / this.dim_chunk_len);
248939
248958
  const dim_chunk_ix_to = Math.ceil(this.stop / this.dim_chunk_len);
248940
- for (const dim_chunk_ix of range$8(dim_chunk_ix_from, dim_chunk_ix_to)) {
248959
+ for (const dim_chunk_ix of range$7(dim_chunk_ix_from, dim_chunk_ix_to)) {
248941
248960
  const dim_offset = dim_chunk_ix * this.dim_chunk_len;
248942
248961
  const dim_limit = Math.min(this.dim_len, (dim_chunk_ix + 1) * this.dim_chunk_len);
248943
248962
  const dim_chunk_len = dim_limit - dim_offset;
@@ -250302,7 +250321,7 @@ function parseV1(spec, renderString) {
250302
250321
  function* iterDims(dimensions) {
250303
250322
  const keys2 = Object.keys(dimensions);
250304
250323
  const iterables = Object.values(dimensions).map(
250305
- (i2) => Array.isArray(i2) ? i2 : [...range$7(i2)]
250324
+ (i2) => Array.isArray(i2) ? i2 : [...range$6(i2)]
250306
250325
  );
250307
250326
  for (const values3 of product$1(...iterables)) {
250308
250327
  yield Object.fromEntries(keys2.map((key2, i2) => [key2, values3[i2]]));
@@ -250331,7 +250350,7 @@ function* product$1(...iterables) {
250331
250350
  results[i2] = iterators[i2].next();
250332
250351
  }
250333
250352
  }
250334
- function* range$7({ stop: stop3, start: start2 = 0, step = 1 }) {
250353
+ function* range$6({ stop: stop3, start: start2 = 0, step = 1 }) {
250335
250354
  for (let i2 = start2; i2 < stop3; i2 += step) {
250336
250355
  yield i2;
250337
250356
  }
@@ -251769,6 +251788,7 @@ function SpatialSubscriber$1(props) {
251769
251788
  featureLabelsMap,
251770
251789
  featureValueColormap: geneExpressionColormap,
251771
251790
  featureValueColormapRange: geneExpressionColormapRange,
251791
+ setFeatureValueColormapRange: setGeneExpressionColormapRange,
251772
251792
  extent: expressionExtents?.[0]
251773
251793
  })] });
251774
251794
  }
@@ -253147,12 +253167,12 @@ class ErrorBoundary extends React__default.Component {
253147
253167
  }
253148
253168
  }
253149
253169
  const LazySpatialThree = React__default.lazy(async () => {
253150
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CgBhVc6k.js");
253170
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-C07z-9Ag.js");
253151
253171
  return { default: SpatialWrapper2 };
253152
253172
  });
253153
253173
  const SpatialThreeAdapter = React__default.forwardRef((props, ref2) => jsxRuntimeExports.jsx("div", { ref: ref2, style: { width: "100%", height: "100%" }, children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(Suspense, { fallback: jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: jsxRuntimeExports.jsx(LazySpatialThree, { ...props }) }) }) }));
253154
253174
  const LazySpatialAccelerated = React__default.lazy(async () => {
253155
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CswI4QIv.js");
253175
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-sdWGixZi.js");
253156
253176
  return { default: SpatialWrapper2 };
253157
253177
  });
253158
253178
  const SpatialAcceleratedAdapter = React__default.forwardRef((props, ref2) => jsxRuntimeExports.jsx("div", { ref: ref2, style: { width: "100%", height: "100%" }, children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(Suspense, { fallback: jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: jsxRuntimeExports.jsx(LazySpatialAccelerated, { ...props }) }) }) }));
@@ -254030,7 +254050,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
254030
254050
  }
254031
254051
  const curr = backlog[backlog.length - 1];
254032
254052
  if (dataRef.current && dataRef.current.buffer.byteLength && expressionRowLookUp.size > 0 && !shouldUsePaddedImplementation(dataRef.current.length)) {
254033
- const promises = range$f(yTiles).map((i2) => range$f(xTiles).map(async (j) => workerPool.process({
254053
+ const promises = range$e(yTiles).map((i2) => range$e(xTiles).map(async (j) => workerPool.process({
254034
254054
  curr,
254035
254055
  tileI: i2,
254036
254056
  tileJ: j,
@@ -254139,7 +254159,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
254139
254159
  });
254140
254160
  };
254141
254161
  const cellOrdering = transpose2 ? axisTopLabels : axisLeftLabels;
254142
- const layers3 = range$f(yTiles * xTiles).map((index2) => getLayer2(Math.floor(index2 / xTiles), index2 % xTiles));
254162
+ const layers3 = range$e(yTiles * xTiles).map((index2) => getLayer2(Math.floor(index2 / xTiles), index2 % xTiles));
254143
254163
  return layers3;
254144
254164
  }
254145
254165
  function getLayer(i2, j, tile) {
@@ -254291,10 +254311,10 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
254291
254311
  const cellOrdering = transpose2 ? axisTopLabels : axisLeftLabels;
254292
254312
  const colorBarTileWidthPx = transpose2 ? TILE_SIZE : 1;
254293
254313
  const colorBarTileHeightPx = transpose2 ? 1 : TILE_SIZE;
254294
- const result = range$f(numCellColorTracks).map((track) => {
254295
- const trackResult = range$f(transpose2 ? xTiles : yTiles).map((i2) => {
254314
+ const result = range$e(numCellColorTracks).map((track) => {
254315
+ const trackResult = range$e(transpose2 ? xTiles : yTiles).map((i2) => {
254296
254316
  const tileData = new Uint8ClampedArray(TILE_SIZE * 1 * 4);
254297
- range$f(TILE_SIZE).forEach((tileY) => {
254317
+ range$e(TILE_SIZE).forEach((tileY) => {
254298
254318
  rowI = i2 * TILE_SIZE + tileY;
254299
254319
  if (rowI < cellOrdering.length) {
254300
254320
  cellId = cellOrdering[rowI];
@@ -254424,7 +254444,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
254424
254444
  }
254425
254445
  }
254426
254446
  const cellColorsViews = useMemo$1(() => {
254427
- const result = range$f(numCellColorTracks).map((track) => {
254447
+ const result = range$e(numCellColorTracks).map((track) => {
254428
254448
  let view;
254429
254449
  if (transpose2) {
254430
254450
  view = new OrthographicView({
@@ -254650,7 +254670,7 @@ function HeatmapSubscriber(props) {
254650
254670
  setTargetY(target2[1]);
254651
254671
  }, colormapRange: geneExpressionColormapRange, setColormapRange: setGeneExpressionColormapRange, height: height2, width: width2, theme, uuid: uuid2, uint8ObsFeatureMatrix: uint8ObsFeatureMatrix?.data, cellColors, colormap: geneExpressionColormap, setIsRendering, setCellHighlight, setGeneHighlight, featureLabelsMap, obsIndex, featureIndex, setTrackHighlight, setComponentHover: () => {
254652
254672
  setComponentHover(uuid2);
254653
- }, updateViewInfo: setComponentViewInfo, observationsTitle, variablesTitle, variablesDashes: false, observationsDashes: false, cellColorLabels, useDevicePixels: true, onHeatmapClick, setColorEncoding: setHoveredColorEncoding }), tooltipsVisible && jsxRuntimeExports.jsx(HeatmapTooltipSubscriber, { parentUuid: uuid2, width: width2, height: height2, transpose: transpose2, getObsInfo: getObsInfo2, getFeatureInfo, obsHighlight: cellHighlight, featureHighlight: geneHighlight, featureType, featureLabelsMap }), jsxRuntimeExports.jsx(Legend, { visible: true, theme, featureType, featureValueType, obsColorEncoding: "geneExpression", considerSelections: false, featureSelection: geneSelection, obsSetSelection: cellSetSelection, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, extent: obsFeatureMatrixExtent })] });
254673
+ }, updateViewInfo: setComponentViewInfo, observationsTitle, variablesTitle, variablesDashes: false, observationsDashes: false, cellColorLabels, useDevicePixels: true, onHeatmapClick, setColorEncoding: setHoveredColorEncoding }), tooltipsVisible && jsxRuntimeExports.jsx(HeatmapTooltipSubscriber, { parentUuid: uuid2, width: width2, height: height2, transpose: transpose2, getObsInfo: getObsInfo2, getFeatureInfo, obsHighlight: cellHighlight, featureHighlight: geneHighlight, featureType, featureLabelsMap }), jsxRuntimeExports.jsx(Legend, { visible: true, theme, featureType, featureValueType, obsColorEncoding: "geneExpression", considerSelections: false, featureSelection: geneSelection, obsSetSelection: cellSetSelection, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, setFeatureValueColormapRange: setGeneExpressionColormapRange, extent: obsFeatureMatrixExtent })] });
254654
254674
  }
254655
254675
  function _classCallCheck(a2, n3) {
254656
254676
  if (!(a2 instanceof n3)) throw new TypeError("Cannot call a class as a function");
@@ -261313,22 +261333,18 @@ function FeatureList(props) {
261313
261333
  const { width: width2, height: height2, hasColorEncoding, geneList = [], featureLabelsMap, geneSelection = [], geneFilter = null, setGeneSelection, enableMultiSelect, showFeatureTable, featureListSort, featureListSortKey, hasFeatureLabels, primaryColumnName } = props;
261314
261334
  const { classes: classes2 } = useStyles$l();
261315
261335
  const [searchTerm, setSearchTerm] = useState("");
261316
- const [searchResults, setSearchResults] = useState(geneList);
261317
261336
  const selectableTableSortKey = featureListSortKey === "featureIndex" ? "key" : "name";
261318
- useEffect(() => {
261319
- const results = geneList.filter((gene) => gene.toLowerCase().includes(searchTerm.toLowerCase()) || featureLabelsMap?.get(gene)?.toLowerCase().includes(searchTerm.toLowerCase()) || featureLabelsMap?.get(cleanFeatureId(gene))?.toLowerCase().includes(searchTerm.toLowerCase()));
261320
- setSearchResults(results);
261321
- }, [searchTerm, geneList, featureLabelsMap]);
261337
+ const searchResults = useMemo$1(() => geneList.filter((gene) => gene.toLowerCase().includes(searchTerm.toLowerCase()) || featureLabelsMap?.get(gene)?.toLowerCase().includes(searchTerm.toLowerCase()) || featureLabelsMap?.get(cleanFeatureId(gene))?.toLowerCase().includes(searchTerm.toLowerCase())), [geneList, searchTerm, featureLabelsMap]);
261322
261338
  function onChange(selection) {
261323
261339
  if (setGeneSelection && selection) {
261324
- if (Array.isArray(selection)) {
261325
- if (selection.length > 0 && every$1(selection, (s2) => s2.key)) {
261326
- setGeneSelection(selection.map((s2) => s2.key));
261327
- } else {
261328
- setGeneSelection(null);
261329
- }
261330
- } else if (selection.key) {
261331
- setGeneSelection([selection.key]);
261340
+ const selectedHiddenKeys = (geneSelection || []).filter((key2) => !searchResults.includes(key2));
261341
+ const selectionArray = Array.isArray(selection) ? selection : [selection];
261342
+ const selectedVisibleKeys = selectionArray.map((s2) => s2.key).filter((key2) => searchResults.includes(key2));
261343
+ const newSelection = [...selectedHiddenKeys, ...selectedVisibleKeys].filter(Boolean);
261344
+ if (newSelection.length > 0) {
261345
+ setGeneSelection(newSelection);
261346
+ } else {
261347
+ setGeneSelection(null);
261332
261348
  }
261333
261349
  }
261334
261350
  }
@@ -261846,7 +261862,7 @@ function LayerOptions({ colormap, opacity: opacity2, handleColormapChange, handl
261846
261862
  const domainSelectorId = $bdb11010cef70236$export$f680877a34711e37();
261847
261863
  const opacitySliderId = $bdb11010cef70236$export$f680877a34711e37();
261848
261864
  const zeroTransparentId = $bdb11010cef70236$export$f680877a34711e37();
261849
- return jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "column", sx: { width: "100%" }, children: [hasZStack && !disable3d && hasViewableResolutions && jsxRuntimeExports.jsx(VolumeDropdown, { loader: loader2, handleSliderChange, handleDomainChange, channels: channels2, handleMultiPropertyChange, resolution, disable3d, setRasterLayerCallback, setAreAllChannelsLoading, setViewState, spatialHeight, spatialWidth, use3d, modelMatrix: modelMatrix2 }), hasDimensionsAndChannels && !use3d && globalControlLabels.map((field2) => shape2[labels2.indexOf(field2)] > 1 && jsxRuntimeExports.jsx(LayerOption, { name: field2, inputId: `${field2}-${globalSelectionSliderId}`, children: jsxRuntimeExports.jsx(GlobalSelectionSlider, { field: field2, inputId: `${field2}-${globalSelectionSliderId}`, value: globalLabelValues[field2], handleChange: handleGlobalChannelsSelectionChange, possibleValues: range$f(shape2[labels2.indexOf(field2)]) }) }, field2)), !disableChannelsIfRgbDetected ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [shouldShowColormap && jsxRuntimeExports.jsx(Grid$1, { children: jsxRuntimeExports.jsx(LayerOption, { name: "Colormap", inputId: colormapSelectId, children: jsxRuntimeExports.jsx(ColormapSelect, { value: colormap || "", inputId: colormapSelectId, handleChange: handleColormapChange }) }) }), shouldShowDomain && jsxRuntimeExports.jsx(Grid$1, { children: jsxRuntimeExports.jsx(LayerOption, { name: "Domain", inputId: domainSelectorId, children: jsxRuntimeExports.jsx(SliderDomainSelector, { value: domainType || DEFAULT_RASTER_DOMAIN_TYPE, inputId: domainSelectorId, handleChange: (value2) => {
261865
+ return jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "column", sx: { width: "100%" }, children: [hasZStack && !disable3d && hasViewableResolutions && jsxRuntimeExports.jsx(VolumeDropdown, { loader: loader2, handleSliderChange, handleDomainChange, channels: channels2, handleMultiPropertyChange, resolution, disable3d, setRasterLayerCallback, setAreAllChannelsLoading, setViewState, spatialHeight, spatialWidth, use3d, modelMatrix: modelMatrix2 }), hasDimensionsAndChannels && !use3d && globalControlLabels.map((field2) => shape2[labels2.indexOf(field2)] > 1 && jsxRuntimeExports.jsx(LayerOption, { name: field2, inputId: `${field2}-${globalSelectionSliderId}`, children: jsxRuntimeExports.jsx(GlobalSelectionSlider, { field: field2, inputId: `${field2}-${globalSelectionSliderId}`, value: globalLabelValues[field2], handleChange: handleGlobalChannelsSelectionChange, possibleValues: range$e(shape2[labels2.indexOf(field2)]) }) }, field2)), !disableChannelsIfRgbDetected ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [shouldShowColormap && jsxRuntimeExports.jsx(Grid$1, { children: jsxRuntimeExports.jsx(LayerOption, { name: "Colormap", inputId: colormapSelectId, children: jsxRuntimeExports.jsx(ColormapSelect, { value: colormap || "", inputId: colormapSelectId, handleChange: handleColormapChange }) }) }), shouldShowDomain && jsxRuntimeExports.jsx(Grid$1, { children: jsxRuntimeExports.jsx(LayerOption, { name: "Domain", inputId: domainSelectorId, children: jsxRuntimeExports.jsx(SliderDomainSelector, { value: domainType || DEFAULT_RASTER_DOMAIN_TYPE, inputId: domainSelectorId, handleChange: (value2) => {
261850
261866
  handleDomainChange(value2);
261851
261867
  } }) }) })] }) : null, !use3d && jsxRuntimeExports.jsx(Grid$1, { children: jsxRuntimeExports.jsx(LayerOption, { name: "Opacity", inputId: opacitySliderId, children: jsxRuntimeExports.jsx(OpacitySlider, { value: opacity2, handleChange: handleOpacityChange, inputId: opacitySliderId }) }) }), shouldShowTransparentColor && !use3d && jsxRuntimeExports.jsx(Grid$1, { children: jsxRuntimeExports.jsx(LayerOption, { name: "Zero Transparent", inputId: zeroTransparentId, children: jsxRuntimeExports.jsx(TransparentColorCheckbox, { value: transparentColor, handleChange: handleTransparentColorChange, inputId: zeroTransparentId }) }) })] });
261852
261868
  }
@@ -265692,7 +265708,7 @@ async function open(location, options = {}) {
265692
265708
  }
265693
265709
  open.v2 = open_v2;
265694
265710
  open.v3 = open_v3;
265695
- function* range$6(start2, stop3, step = 1) {
265711
+ function* range$5(start2, stop3, step = 1) {
265696
265712
  if (stop3 === void 0) {
265697
265713
  stop3 = start2;
265698
265714
  start2 = 0;
@@ -265836,7 +265852,7 @@ class SliceDimIndexer2 {
265836
265852
  *[Symbol.iterator]() {
265837
265853
  const dim_chunk_ix_from = Math.floor(this.start / this.dim_chunk_len);
265838
265854
  const dim_chunk_ix_to = Math.ceil(this.stop / this.dim_chunk_len);
265839
- for (const dim_chunk_ix of range$6(dim_chunk_ix_from, dim_chunk_ix_to)) {
265855
+ for (const dim_chunk_ix of range$5(dim_chunk_ix_from, dim_chunk_ix_to)) {
265840
265856
  const dim_offset = dim_chunk_ix * this.dim_chunk_len;
265841
265857
  const dim_limit = Math.min(this.dim_len, (dim_chunk_ix + 1) * this.dim_chunk_len);
265842
265858
  const dim_chunk_len = dim_limit - dim_offset;
@@ -266292,7 +266308,7 @@ function HiglassGlobalStyles(props) {
266292
266308
  }
266293
266309
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
266294
266310
  const LazyHiGlassComponent = React__default.lazy(async () => {
266295
- const { HiGlassComponent } = await import("./higlass-CBYKVvZ1.js");
266311
+ const { HiGlassComponent } = await import("./higlass-BWjoRZ_l.js");
266296
266312
  return { default: HiGlassComponent };
266297
266313
  });
266298
266314
  const HG_SIZE = 800;
@@ -269239,7 +269255,7 @@ function NeuroglancerGlobalStyles(props) {
269239
269255
  const { classes: classes2 } = props;
269240
269256
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
269241
269257
  }
269242
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-CQ8kS1mc.js"));
269258
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-D662gKgy.js"));
269243
269259
  function createWorker() {
269244
269260
  return new WorkerFactory();
269245
269261
  }
@@ -299508,68 +299524,6 @@ function toSet$1(_) {
299508
299524
  for (let i2 = 0; i2 < n3; ++i2) s2[_[i2]] = true;
299509
299525
  return s2;
299510
299526
  }
299511
- function ascending$4(a2, b2) {
299512
- return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
299513
- }
299514
- function descending$1(a2, b2) {
299515
- return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
299516
- }
299517
- function bisector$1(f2) {
299518
- let compare12, compare2, delta;
299519
- if (f2.length !== 2) {
299520
- compare12 = ascending$4;
299521
- compare2 = (d, x2) => ascending$4(f2(d), x2);
299522
- delta = (d, x2) => f2(d) - x2;
299523
- } else {
299524
- compare12 = f2 === ascending$4 || f2 === descending$1 ? f2 : zero$3;
299525
- compare2 = f2;
299526
- delta = f2;
299527
- }
299528
- function left2(a2, x2, lo = 0, hi = a2.length) {
299529
- if (lo < hi) {
299530
- if (compare12(x2, x2) !== 0) return hi;
299531
- do {
299532
- const mid = lo + hi >>> 1;
299533
- if (compare2(a2[mid], x2) < 0) lo = mid + 1;
299534
- else hi = mid;
299535
- } while (lo < hi);
299536
- }
299537
- return lo;
299538
- }
299539
- function right2(a2, x2, lo = 0, hi = a2.length) {
299540
- if (lo < hi) {
299541
- if (compare12(x2, x2) !== 0) return hi;
299542
- do {
299543
- const mid = lo + hi >>> 1;
299544
- if (compare2(a2[mid], x2) <= 0) lo = mid + 1;
299545
- else hi = mid;
299546
- } while (lo < hi);
299547
- }
299548
- return lo;
299549
- }
299550
- function center2(a2, x2, lo = 0, hi = a2.length) {
299551
- const i2 = left2(a2, x2, lo, hi - 1);
299552
- return i2 > lo && delta(a2[i2 - 1], x2) > -delta(a2[i2], x2) ? i2 - 1 : i2;
299553
- }
299554
- return { left: left2, center: center2, right: right2 };
299555
- }
299556
- function zero$3() {
299557
- return 0;
299558
- }
299559
- function number$4(x2) {
299560
- return x2 === null ? NaN : +x2;
299561
- }
299562
- const ascendingBisect = bisector$1(ascending$4);
299563
- const bisectRight$1 = ascendingBisect.right;
299564
- bisector$1(number$4).center;
299565
- function range$5(start2, stop3, step) {
299566
- start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
299567
- var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
299568
- while (++i2 < n3) {
299569
- range2[i2] = start2 + i2 * step;
299570
- }
299571
- return range2;
299572
- }
299573
299527
  function colors$2(specifier) {
299574
299528
  var n3 = specifier.length / 6 | 0, colors2 = new Array(n3), i2 = 0;
299575
299529
  while (i2 < n3) colors2[i2] = "#" + specifier.slice(i2 * 6, ++i2 * 6);
@@ -299759,7 +299713,7 @@ function band$1() {
299759
299713
  start2 = Math.round(start2);
299760
299714
  bandwidth2 = Math.round(bandwidth2);
299761
299715
  }
299762
- const values3 = range$5(n3).map((i2) => start2 + step * i2);
299716
+ const values3 = range$8(n3).map((i2) => start2 + step * i2);
299763
299717
  return ordinalRange(reverse2 ? values3.reverse() : values3);
299764
299718
  }
299765
299719
  scale2.domain = function(_) {
@@ -301523,7 +301477,7 @@ const useStyles$3 = makeStyles()(() => ({
301523
301477
  }
301524
301478
  }));
301525
301479
  function summarize(iterable, keepZeros) {
301526
- const values3 = iterable.filter((d) => keepZeros).sort(ascending$9);
301480
+ const values3 = iterable.filter((d) => keepZeros).sort(ascending$8);
301527
301481
  const minVal = values3[0];
301528
301482
  const maxVal = values3[values3.length - 1];
301529
301483
  const q1 = quantileSorted$1(values3, 0.25);
@@ -303134,7 +303088,7 @@ const Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS], Second
303134
303088
  const intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];
303135
303089
  function bin$1(opt) {
303136
303090
  const ext = opt.extent, max2 = opt.maxbins || 40, target2 = Math.abs(span(ext)) / max2;
303137
- let i2 = bisector$2((i3) => i3[2]).right(intervals, target2), units, step;
303091
+ let i2 = bisector$1((i3) => i3[2]).right(intervals, target2), units, step;
303138
303092
  if (i2 === intervals.length) {
303139
303093
  units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max2);
303140
303094
  } else if (i2) {
@@ -305072,7 +305026,7 @@ function* numbers$1(values3, valueof) {
305072
305026
  }
305073
305027
  function quantiles(array2, p, f2) {
305074
305028
  const values3 = Float64Array.from(numbers$1(array2, f2));
305075
- values3.sort(ascending$5);
305029
+ values3.sort(ascending$4);
305076
305030
  return p.map((_) => quantileSorted(values3, _));
305077
305031
  }
305078
305032
  function quartiles(array2, f2) {
@@ -305131,7 +305085,7 @@ function bootstrapCI(array2, samples, alpha2, f2) {
305131
305085
  }
305132
305086
  mu[j] = a2 / n3;
305133
305087
  }
305134
- mu.sort(ascending$5);
305088
+ mu.sort(ascending$4);
305135
305089
  return [quantile$1(mu, alpha2 / 2), quantile$1(mu, 1 - alpha2 / 2)];
305136
305090
  }
305137
305091
  function dotbin(array2, step, smooth, f2) {
@@ -308104,7 +308058,7 @@ inherits(Quantile$1, Transform2, {
308104
308058
  out.source = this.value;
308105
308059
  return out;
308106
308060
  }
308107
- const source2 = pulse2.materialize(pulse2.SOURCE).source, groups = partition$1$1(source2, _.groupby, _.field), names = (_.groupby || []).map(accessorName), values3 = [], step = _.step || 0.01, p = _.probs || range$9(step / 2, 1 - EPSILON$2, step), n3 = p.length;
308061
+ const source2 = pulse2.materialize(pulse2.SOURCE).source, groups = partition$1$1(source2, _.groupby, _.field), names = (_.groupby || []).map(accessorName), values3 = [], step = _.step || 0.01, p = _.probs || range$8(step / 2, 1 - EPSILON$2, step), n3 = p.length;
308108
308062
  groups.forEach((g2) => {
308109
308063
  const q = quantiles(g2, p);
308110
308064
  for (let i2 = 0; i2 < n3; ++i2) {
@@ -308263,7 +308217,7 @@ inherits(Sequence, Transform2, {
308263
308217
  if (this.value && !_.modified()) return;
308264
308218
  const out = pulse2.materialize().fork(pulse2.MOD), as = _.as || "data";
308265
308219
  out.rem = this.value ? pulse2.rem.concat(this.value) : pulse2.rem;
308266
- this.value = range$9(_.start, _.stop, _.step || 1).map((v) => {
308220
+ this.value = range$8(_.start, _.stop, _.step || 1).map((v) => {
308267
308221
  const t4 = {};
308268
308222
  t4[as] = v;
308269
308223
  return ingest$1(t4);
@@ -308723,7 +308677,7 @@ inherits(Window, Transform2, {
308723
308677
  }
308724
308678
  });
308725
308679
  function processPartition(list2, state, cmp2, _) {
308726
- const sort2 = _.sort, range2 = sort2 && !_.ignorePeers, frame2 = _.frame || [null, 0], data2 = list2.data(cmp2), n3 = data2.length, b2 = range2 ? bisector$2(sort2) : null, w2 = {
308680
+ const sort2 = _.sort, range2 = sort2 && !_.ignorePeers, frame2 = _.frame || [null, 0], data2 = list2.data(cmp2), n3 = data2.length, b2 = range2 ? bisector$1(sort2) : null, w2 = {
308727
308681
  i0: 0,
308728
308682
  i1: 0,
308729
308683
  p0: 0,
@@ -308881,7 +308835,7 @@ function band() {
308881
308835
  start2 = Math.round(start2);
308882
308836
  bandwidth2 = Math.round(bandwidth2);
308883
308837
  }
308884
- const values3 = range$9(n3).map((i2) => start2 + step * i2);
308838
+ const values3 = range$8(n3).map((i2) => start2 + step * i2);
308885
308839
  return ordinalRange(reverse2 ? values3.reverse() : values3);
308886
308840
  }
308887
308841
  scale2.domain = function(_) {
@@ -308963,8 +308917,8 @@ function band() {
308963
308917
  hi = t4;
308964
308918
  }
308965
308919
  if (hi < values3[0] || lo > range$12[1 - reverse2]) return;
308966
- a2 = Math.max(0, bisectRight$2(values3, lo) - 1);
308967
- b2 = lo === hi ? a2 : bisectRight$2(values3, hi) - 1;
308920
+ a2 = Math.max(0, bisectRight$1(values3, lo) - 1);
308921
+ b2 = lo === hi ? a2 : bisectRight$1(values3, hi) - 1;
308968
308922
  if (lo - values3[a2] > bandwidth2 + 1e-10) ++a2;
308969
308923
  if (reverse2) {
308970
308924
  t4 = a2;
@@ -309002,7 +308956,7 @@ const slice$2 = Array.prototype.slice;
309002
308956
  function scaleBinOrdinal() {
309003
308957
  let domain2 = [], range2 = [];
309004
308958
  function scale2(x2) {
309005
- return x2 == null || x2 !== x2 ? void 0 : range2[(bisectRight$2(domain2, x2) - 1) % range2.length];
308959
+ return x2 == null || x2 !== x2 ? void 0 : range2[(bisectRight$1(domain2, x2) - 1) % range2.length];
309006
308960
  }
309007
308961
  scale2.domain = function(_) {
309008
308962
  if (arguments.length) {
@@ -314725,7 +314679,7 @@ Pie.Definition = {
314725
314679
  };
314726
314680
  inherits(Pie, Transform2, {
314727
314681
  transform(_, pulse2) {
314728
- var as = _.as || ["startAngle", "endAngle"], startAngle = as[0], endAngle = as[1], field2 = _.field || one$1, start2 = _.startAngle || 0, stop3 = _.endAngle != null ? _.endAngle : 2 * Math.PI, data2 = pulse2.source, values3 = data2.map(field2), n3 = values3.length, a2 = start2, k = (stop3 - start2) / sum$2(values3), index2 = range$9(n3), i2, t4, v;
314682
+ var as = _.as || ["startAngle", "endAngle"], startAngle = as[0], endAngle = as[1], field2 = _.field || one$1, start2 = _.startAngle || 0, stop3 = _.endAngle != null ? _.endAngle : 2 * Math.PI, data2 = pulse2.source, values3 = data2.map(field2), n3 = values3.length, a2 = start2, k = (stop3 - start2) / sum$2(values3), index2 = range$8(n3), i2, t4, v;
314729
314683
  if (_.sort) {
314730
314684
  index2.sort((a3, b2) => values3[a3] - values3[b2]);
314731
314685
  }
@@ -314843,7 +314797,7 @@ function configureBins(scale2, _, count2) {
314843
314797
  if (!step) error("Scale bins parameter missing step property.");
314844
314798
  if (start2 < lo) start2 = step * Math.ceil(lo / step);
314845
314799
  if (stop3 > hi) stop3 = step * Math.floor(hi / step);
314846
- bins2 = range$9(start2, stop3 + step / 2, step);
314800
+ bins2 = range$8(start2, stop3 + step / 2, step);
314847
314801
  }
314848
314802
  if (bins2) {
314849
314803
  scale2.bins = bins2;
@@ -316064,7 +316018,7 @@ function clipRectangle(x02, y02, x12, y12) {
316064
316018
  };
316065
316019
  }
316066
316020
  function graticuleX(y02, y12, dy) {
316067
- var y2 = range$9(y02, y12 - epsilon$3, dy).concat(y12);
316021
+ var y2 = range$8(y02, y12 - epsilon$3, dy).concat(y12);
316068
316022
  return function(x2) {
316069
316023
  return y2.map(function(y22) {
316070
316024
  return [x2, y22];
@@ -316072,7 +316026,7 @@ function graticuleX(y02, y12, dy) {
316072
316026
  };
316073
316027
  }
316074
316028
  function graticuleY(x02, x12, dx) {
316075
- var x2 = range$9(x02, x12 - epsilon$3, dx).concat(x12);
316029
+ var x2 = range$8(x02, x12 - epsilon$3, dx).concat(x12);
316076
316030
  return function(y2) {
316077
316031
  return x2.map(function(x22) {
316078
316032
  return [x22, y2];
@@ -316085,9 +316039,9 @@ function graticule() {
316085
316039
  return { type: "MultiLineString", coordinates: lines() };
316086
316040
  }
316087
316041
  function lines() {
316088
- return range$9(ceil(X02 / DX) * DX, X12, DX).map(X3).concat(range$9(ceil(Y02 / DY) * DY, Y12, DY).map(Y3)).concat(range$9(ceil(x02 / dx) * dx, x12, dx).filter(function(x22) {
316042
+ return range$8(ceil(X02 / DX) * DX, X12, DX).map(X3).concat(range$8(ceil(Y02 / DY) * DY, Y12, DY).map(Y3)).concat(range$8(ceil(x02 / dx) * dx, x12, dx).filter(function(x22) {
316089
316043
  return abs$1(x22 % DX) > epsilon$3;
316090
- }).map(x2)).concat(range$9(ceil(y02 / dy) * dy, y12, dy).filter(function(y22) {
316044
+ }).map(x2)).concat(range$8(ceil(y02 / dy) * dy, y12, dy).filter(function(y22) {
316091
316045
  return abs$1(y22 % DY) > epsilon$3;
316092
316046
  }).map(y2));
316093
316047
  }
@@ -317362,7 +317316,7 @@ function within(p, q, r3) {
317362
317316
  function quantize$1(k, nice2, zero2) {
317363
317317
  return function(values3) {
317364
317318
  var ex = extent(values3), start2 = zero2 ? Math.min(ex[0], 0) : ex[0], stop3 = ex[1], span2 = stop3 - start2, step = nice2 ? tickStep(start2, stop3, k) : span2 / (k + 1);
317365
- return range$9(start2 + step, stop3, step);
317319
+ return range$8(start2 + step, stop3, step);
317366
317320
  };
317367
317321
  }
317368
317322
  function Isocontour(params2) {
@@ -323302,7 +323256,7 @@ function SortedIndex() {
323302
323256
  array2 = value2;
323303
323257
  n3 = size2;
323304
323258
  }
323305
- return [bisectLeft$1(array2, range2[0], 0, n3), bisectRight$2(array2, range2[1], 0, n3)];
323259
+ return [bisectLeft$1(array2, range2[0], 0, n3), bisectRight$1(array2, range2[1], 0, n3)];
323306
323260
  }
323307
323261
  return {
323308
323262
  insert: insert2,
@@ -325667,7 +325621,7 @@ const functionContext = {
325667
325621
  hsl: hsl$2,
325668
325622
  luminance,
325669
325623
  contrast,
325670
- sequence: range$9,
325624
+ sequence: range$8,
325671
325625
  format: format$1,
325672
325626
  utcFormat,
325673
325627
  utcParse,
@@ -352937,7 +352891,7 @@ function FeatureBarPlot(props) {
352937
352891
  const xTitle = `${capitalize$3(obsType)}`;
352938
352892
  const autoMarginBottom = marginBottom || 30 + Math.sqrt(maxCharactersForLabel / 2) * 30;
352939
352893
  const foregroundColor = theme === "dark" ? "lightgray" : "black";
352940
- data2.sort((a2, b2) => ascending$9(a2[FEATURE_KEY], b2[FEATURE_KEY]));
352894
+ data2.sort((a2, b2) => ascending$8(a2[FEATURE_KEY], b2[FEATURE_KEY]));
352941
352895
  const svg2 = select$1(domElement);
352942
352896
  svg2.selectAll("g").remove();
352943
352897
  svg2.attr("width", width2).attr("height", height2);
@@ -354281,13 +354235,7 @@ class SpatialDataAutoConfig extends AbstractAutoConfig {
354281
354235
  };
354282
354236
  }
354283
354237
  if (relPath.match(/^(shapes)\/([^/]*)$/)) {
354284
- options.obsSpots = {
354285
- path: relPath,
354286
- coordinateSystem: firstCoordinateSystem
354287
- };
354288
- }
354289
- if (relPath.match(/^(points)\/([^/]*)$/)) {
354290
- options.obsPoints = {
354238
+ options.obsSegmentations = {
354291
354239
  path: relPath,
354292
354240
  coordinateSystem: firstCoordinateSystem
354293
354241
  };
@@ -354301,21 +354249,6 @@ class SpatialDataAutoConfig extends AbstractAutoConfig {
354301
354249
  // region: null,
354302
354250
  };
354303
354251
  }
354304
- const hasObs = tableEls.find((el) => el.path === `${path2}/obs`);
354305
- if (hasObs) {
354306
- const columnOrder = hasObs.attrs?.["column-order"];
354307
- options.obsSets = {
354308
- // region: null,
354309
- tablePath: relPath,
354310
- obsSets: columnOrder.map((c2) => ({
354311
- // TODO: determine whether this column is string/categorical.
354312
- // TODO: determine whether this column contains too many
354313
- // categories to make sense to consider a cell set.
354314
- path: `${hasObs.path.substring(1)}/${c2}`,
354315
- name: c2
354316
- }))
354317
- };
354318
- }
354319
354252
  }
354320
354253
  });
354321
354254
  return options;
@@ -354878,7 +354811,7 @@ class ClustersJsonAsObsFeatureMatrixLoader extends JsonLoader {
354878
354811
  const normalize2 = (d) => Math.floor((d - min2) / (max2 - min2) * 255);
354879
354812
  return col.map(normalize2);
354880
354813
  });
354881
- const tNormalizedMatrix = range$f(shape2[0]).map((i2) => range$f(shape2[1]).map((j) => normalizedMatrix[j][i2]));
354814
+ const tNormalizedMatrix = range$e(shape2[0]).map((i2) => range$e(shape2[1]).map((j) => normalizedMatrix[j][i2]));
354882
354815
  const normalizedFlatMatrix = tNormalizedMatrix.flat();
354883
354816
  const obsFeatureMatrix = { data: Uint8Array.from(normalizedFlatMatrix) };
354884
354817
  this.cachedResult = { obsIndex, featureIndex, obsFeatureMatrix };
@@ -354929,12 +354862,12 @@ class MoleculesJsonAsObsLabelsLoader extends JsonLoader {
354929
354862
  if (this.cachedResult) {
354930
354863
  return this.cachedResult;
354931
354864
  }
354932
- const obsIndex = range$f(sum$7(Object.values(data2).map((v) => v.length))).map((i2) => String(i2));
354865
+ const obsIndex = range$e(sum$7(Object.values(data2).map((v) => v.length))).map((i2) => String(i2));
354933
354866
  let obsLabels = [];
354934
354867
  Object.entries(data2).forEach(([gene, locations]) => {
354935
354868
  obsLabels = [
354936
354869
  ...obsLabels,
354937
- ...range$f(locations.length).map(() => gene)
354870
+ ...range$e(locations.length).map(() => gene)
354938
354871
  ];
354939
354872
  });
354940
354873
  this.cachedResult = { obsIndex, obsLabels };
@@ -354957,7 +354890,7 @@ class MoleculesJsonAsObsLocationsLoader extends JsonLoader {
354957
354890
  return this.cachedResult;
354958
354891
  }
354959
354892
  const moleculesValues = Object.values(data2);
354960
- const obsIndex = range$f(sum$7(moleculesValues.map((v) => v.length))).map((i2) => String(i2));
354893
+ const obsIndex = range$e(sum$7(moleculesValues.map((v) => v.length))).map((i2) => String(i2));
354961
354894
  const obsLocationsX = new Float32Array(obsIndex.length);
354962
354895
  const obsLocationsY = new Float32Array(obsIndex.length);
354963
354896
  let startAt = 0;