@vitessce/launcher 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.
@@ -6201,28 +6201,7 @@ var symbolTag$7 = "[object Symbol]";
6201
6201
  function isSymbol$5(value2) {
6202
6202
  return typeof value2 == "symbol" || isObjectLike$c(value2) && baseGetTag$8(value2) == symbolTag$7;
6203
6203
  }
6204
- function arrayMap$3(array2, iteratee) {
6205
- var index2 = -1, length2 = array2 == null ? 0 : array2.length, result = Array(length2);
6206
- while (++index2 < length2) {
6207
- result[index2] = iteratee(array2[index2], index2, array2);
6208
- }
6209
- return result;
6210
- }
6211
6204
  var isArray$f = Array.isArray;
6212
- var symbolProto$5 = Symbol$7 ? Symbol$7.prototype : void 0, symbolToString$1 = symbolProto$5 ? symbolProto$5.toString : void 0;
6213
- function baseToString$3(value2) {
6214
- if (typeof value2 == "string") {
6215
- return value2;
6216
- }
6217
- if (isArray$f(value2)) {
6218
- return arrayMap$3(value2, baseToString$3) + "";
6219
- }
6220
- if (isSymbol$5(value2)) {
6221
- return symbolToString$1 ? symbolToString$1.call(value2) : "";
6222
- }
6223
- var result = value2 + "";
6224
- return result == "0" && 1 / value2 == -Infinity ? "-0" : result;
6225
- }
6226
6205
  var reWhitespace$1 = /\s/;
6227
6206
  function trimmedEndIndex$2(string2) {
6228
6207
  var index2 = string2.length;
@@ -6605,17 +6584,6 @@ function baseKeys$2(object2) {
6605
6584
  function keys$9(object2) {
6606
6585
  return isArrayLike$7(object2) ? arrayLikeKeys$3(object2) : baseKeys$2(object2);
6607
6586
  }
6608
- var reIsDeepProp$1 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp$1 = /^\w*$/;
6609
- function isKey$4(value2, object2) {
6610
- if (isArray$f(value2)) {
6611
- return false;
6612
- }
6613
- var type2 = typeof value2;
6614
- if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value2 == null || isSymbol$5(value2)) {
6615
- return true;
6616
- }
6617
- return reIsPlainProp$1.test(value2) || !reIsDeepProp$1.test(value2) || object2 != null && value2 in Object(object2);
6618
- }
6619
6587
  var nativeCreate$5 = getNative$8(Object, "create");
6620
6588
  function hashClear$2() {
6621
6589
  this.__data__ = nativeCreate$5 ? nativeCreate$5(null) : {};
@@ -6769,75 +6737,6 @@ MapCache$4.prototype["delete"] = mapCacheDelete$2;
6769
6737
  MapCache$4.prototype.get = mapCacheGet$2;
6770
6738
  MapCache$4.prototype.has = mapCacheHas$2;
6771
6739
  MapCache$4.prototype.set = mapCacheSet$2;
6772
- var FUNC_ERROR_TEXT$3 = "Expected a function";
6773
- function memoize$7(func, resolver2) {
6774
- if (typeof func != "function" || resolver2 != null && typeof resolver2 != "function") {
6775
- throw new TypeError(FUNC_ERROR_TEXT$3);
6776
- }
6777
- var memoized = function() {
6778
- var args = arguments, key2 = resolver2 ? resolver2.apply(this, args) : args[0], cache2 = memoized.cache;
6779
- if (cache2.has(key2)) {
6780
- return cache2.get(key2);
6781
- }
6782
- var result = func.apply(this, args);
6783
- memoized.cache = cache2.set(key2, result) || cache2;
6784
- return result;
6785
- };
6786
- memoized.cache = new (memoize$7.Cache || MapCache$4)();
6787
- return memoized;
6788
- }
6789
- memoize$7.Cache = MapCache$4;
6790
- var MAX_MEMOIZE_SIZE$1 = 500;
6791
- function memoizeCapped$2(func) {
6792
- var result = memoize$7(func, function(key2) {
6793
- if (cache2.size === MAX_MEMOIZE_SIZE$1) {
6794
- cache2.clear();
6795
- }
6796
- return key2;
6797
- });
6798
- var cache2 = result.cache;
6799
- return result;
6800
- }
6801
- var rePropName$1 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
6802
- var reEscapeChar$1 = /\\(\\)?/g;
6803
- var stringToPath$2 = memoizeCapped$2(function(string2) {
6804
- var result = [];
6805
- if (string2.charCodeAt(0) === 46) {
6806
- result.push("");
6807
- }
6808
- string2.replace(rePropName$1, function(match2, number2, quote, subString) {
6809
- result.push(quote ? subString.replace(reEscapeChar$1, "$1") : number2 || match2);
6810
- });
6811
- return result;
6812
- });
6813
- function toString$6(value2) {
6814
- return value2 == null ? "" : baseToString$3(value2);
6815
- }
6816
- function castPath$3(value2, object2) {
6817
- if (isArray$f(value2)) {
6818
- return value2;
6819
- }
6820
- return isKey$4(value2, object2) ? [value2] : stringToPath$2(toString$6(value2));
6821
- }
6822
- function toKey$5(value2) {
6823
- if (typeof value2 == "string" || isSymbol$5(value2)) {
6824
- return value2;
6825
- }
6826
- var result = value2 + "";
6827
- return result == "0" && 1 / value2 == -Infinity ? "-0" : result;
6828
- }
6829
- function baseGet$3(object2, path2) {
6830
- path2 = castPath$3(path2, object2);
6831
- var index2 = 0, length2 = path2.length;
6832
- while (object2 != null && index2 < length2) {
6833
- object2 = object2[toKey$5(path2[index2++])];
6834
- }
6835
- return index2 && index2 == length2 ? object2 : void 0;
6836
- }
6837
- function get$g(object2, path2, defaultValue2) {
6838
- var result = object2 == null ? void 0 : baseGet$3(object2, path2);
6839
- return result === void 0 ? defaultValue2 : result;
6840
- }
6841
6740
  function arrayPush$3(array2, values3) {
6842
6741
  var index2 = -1, length2 = values3.length, offset2 = array2.length;
6843
6742
  while (++index2 < length2) {
@@ -7172,9 +7071,9 @@ function arraySome$2(array2, predicate) {
7172
7071
  function cacheHas$2(cache2, key2) {
7173
7072
  return cache2.has(key2);
7174
7073
  }
7175
- var COMPARE_PARTIAL_FLAG$b = 1, COMPARE_UNORDERED_FLAG$7 = 2;
7074
+ var COMPARE_PARTIAL_FLAG$9 = 1, COMPARE_UNORDERED_FLAG$5 = 2;
7176
7075
  function equalArrays$3(array2, other, bitmask, customizer, equalFunc, stack2) {
7177
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG$b, arrLength = array2.length, othLength = other.length;
7076
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG$9, arrLength = array2.length, othLength = other.length;
7178
7077
  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
7179
7078
  return false;
7180
7079
  }
@@ -7183,7 +7082,7 @@ function equalArrays$3(array2, other, bitmask, customizer, equalFunc, stack2) {
7183
7082
  if (arrStacked && othStacked) {
7184
7083
  return arrStacked == other && othStacked == array2;
7185
7084
  }
7186
- var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$7 ? new SetCache$2() : void 0;
7085
+ var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$5 ? new SetCache$2() : void 0;
7187
7086
  stack2.set(array2, other);
7188
7087
  stack2.set(other, array2);
7189
7088
  while (++index2 < arrLength) {
@@ -7230,7 +7129,7 @@ function setToArray$2(set2) {
7230
7129
  });
7231
7130
  return result;
7232
7131
  }
7233
- var COMPARE_PARTIAL_FLAG$a = 1, COMPARE_UNORDERED_FLAG$6 = 2;
7132
+ var COMPARE_PARTIAL_FLAG$8 = 1, COMPARE_UNORDERED_FLAG$4 = 2;
7234
7133
  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]";
7235
7134
  var arrayBufferTag$4 = "[object ArrayBuffer]", dataViewTag$5 = "[object DataView]";
7236
7135
  var symbolProto$3 = Symbol$7 ? Symbol$7.prototype : void 0, symbolValueOf$2 = symbolProto$3 ? symbolProto$3.valueOf : void 0;
@@ -7259,7 +7158,7 @@ function equalByTag$2(object2, other, tag2, bitmask, customizer, equalFunc, stac
7259
7158
  case mapTag$6:
7260
7159
  var convert2 = mapToArray$2;
7261
7160
  case setTag$6:
7262
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG$a;
7161
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG$8;
7263
7162
  convert2 || (convert2 = setToArray$2);
7264
7163
  if (object2.size != other.size && !isPartial) {
7265
7164
  return false;
@@ -7268,7 +7167,7 @@ function equalByTag$2(object2, other, tag2, bitmask, customizer, equalFunc, stac
7268
7167
  if (stacked) {
7269
7168
  return stacked == other;
7270
7169
  }
7271
- bitmask |= COMPARE_UNORDERED_FLAG$6;
7170
+ bitmask |= COMPARE_UNORDERED_FLAG$4;
7272
7171
  stack2.set(object2, other);
7273
7172
  var result = equalArrays$3(convert2(object2), convert2(other), bitmask, customizer, equalFunc, stack2);
7274
7173
  stack2["delete"](object2);
@@ -7280,11 +7179,11 @@ function equalByTag$2(object2, other, tag2, bitmask, customizer, equalFunc, stac
7280
7179
  }
7281
7180
  return false;
7282
7181
  }
7283
- var COMPARE_PARTIAL_FLAG$9 = 1;
7182
+ var COMPARE_PARTIAL_FLAG$7 = 1;
7284
7183
  var objectProto$h = Object.prototype;
7285
7184
  var hasOwnProperty$g = objectProto$h.hasOwnProperty;
7286
7185
  function equalObjects$2(object2, other, bitmask, customizer, equalFunc, stack2) {
7287
- var isPartial = bitmask & COMPARE_PARTIAL_FLAG$9, objProps = getAllKeys$4(object2), objLength = objProps.length, othProps = getAllKeys$4(other), othLength = othProps.length;
7186
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG$7, objProps = getAllKeys$4(object2), objLength = objProps.length, othProps = getAllKeys$4(other), othLength = othProps.length;
7288
7187
  if (objLength != othLength && !isPartial) {
7289
7188
  return false;
7290
7189
  }
@@ -7326,7 +7225,7 @@ function equalObjects$2(object2, other, bitmask, customizer, equalFunc, stack2)
7326
7225
  stack2["delete"](other);
7327
7226
  return result;
7328
7227
  }
7329
- var COMPARE_PARTIAL_FLAG$8 = 1;
7228
+ var COMPARE_PARTIAL_FLAG$6 = 1;
7330
7229
  var argsTag$4 = "[object Arguments]", arrayTag$3 = "[object Array]", objectTag$5 = "[object Object]";
7331
7230
  var objectProto$g = Object.prototype;
7332
7231
  var hasOwnProperty$f = objectProto$g.hasOwnProperty;
@@ -7346,7 +7245,7 @@ function baseIsEqualDeep$2(object2, other, bitmask, customizer, equalFunc, stack
7346
7245
  stack2 || (stack2 = new Stack$6());
7347
7246
  return objIsArr || isTypedArray$5(object2) ? equalArrays$3(object2, other, bitmask, customizer, equalFunc, stack2) : equalByTag$2(object2, other, objTag, bitmask, customizer, equalFunc, stack2);
7348
7247
  }
7349
- if (!(bitmask & COMPARE_PARTIAL_FLAG$8)) {
7248
+ if (!(bitmask & COMPARE_PARTIAL_FLAG$6)) {
7350
7249
  var objIsWrapped = objIsObj && hasOwnProperty$f.call(object2, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$f.call(other, "__wrapped__");
7351
7250
  if (objIsWrapped || othIsWrapped) {
7352
7251
  var objUnwrapped = objIsWrapped ? object2.value() : object2, othUnwrapped = othIsWrapped ? other.value() : other;
@@ -7369,155 +7268,6 @@ function baseIsEqual$3(value2, other, bitmask, customizer, stack2) {
7369
7268
  }
7370
7269
  return baseIsEqualDeep$2(value2, other, bitmask, customizer, baseIsEqual$3, stack2);
7371
7270
  }
7372
- var COMPARE_PARTIAL_FLAG$7 = 1, COMPARE_UNORDERED_FLAG$5 = 2;
7373
- function baseIsMatch$2(object2, source2, matchData, customizer) {
7374
- var index2 = matchData.length, length2 = index2;
7375
- if (object2 == null) {
7376
- return !length2;
7377
- }
7378
- object2 = Object(object2);
7379
- while (index2--) {
7380
- var data2 = matchData[index2];
7381
- if (data2[2] ? data2[1] !== object2[data2[0]] : !(data2[0] in object2)) {
7382
- return false;
7383
- }
7384
- }
7385
- while (++index2 < length2) {
7386
- data2 = matchData[index2];
7387
- var key2 = data2[0], objValue = object2[key2], srcValue = data2[1];
7388
- if (data2[2]) {
7389
- if (objValue === void 0 && !(key2 in object2)) {
7390
- return false;
7391
- }
7392
- } else {
7393
- var stack2 = new Stack$6();
7394
- var result;
7395
- if (!(result === void 0 ? baseIsEqual$3(srcValue, objValue, COMPARE_PARTIAL_FLAG$7 | COMPARE_UNORDERED_FLAG$5, customizer, stack2) : result)) {
7396
- return false;
7397
- }
7398
- }
7399
- }
7400
- return true;
7401
- }
7402
- function isStrictComparable$3(value2) {
7403
- return value2 === value2 && !isObject$f(value2);
7404
- }
7405
- function getMatchData$2(object2) {
7406
- var result = keys$9(object2), length2 = result.length;
7407
- while (length2--) {
7408
- var key2 = result[length2], value2 = object2[key2];
7409
- result[length2] = [key2, value2, isStrictComparable$3(value2)];
7410
- }
7411
- return result;
7412
- }
7413
- function matchesStrictComparable$3(key2, srcValue) {
7414
- return function(object2) {
7415
- if (object2 == null) {
7416
- return false;
7417
- }
7418
- return object2[key2] === srcValue && (srcValue !== void 0 || key2 in Object(object2));
7419
- };
7420
- }
7421
- function baseMatches$2(source2) {
7422
- var matchData = getMatchData$2(source2);
7423
- if (matchData.length == 1 && matchData[0][2]) {
7424
- return matchesStrictComparable$3(matchData[0][0], matchData[0][1]);
7425
- }
7426
- return function(object2) {
7427
- return object2 === source2 || baseIsMatch$2(object2, source2, matchData);
7428
- };
7429
- }
7430
- function baseHasIn$2(object2, key2) {
7431
- return object2 != null && key2 in Object(object2);
7432
- }
7433
- function hasPath$2(object2, path2, hasFunc) {
7434
- path2 = castPath$3(path2, object2);
7435
- var index2 = -1, length2 = path2.length, result = false;
7436
- while (++index2 < length2) {
7437
- var key2 = toKey$5(path2[index2]);
7438
- if (!(result = object2 != null && hasFunc(object2, key2))) {
7439
- break;
7440
- }
7441
- object2 = object2[key2];
7442
- }
7443
- if (result || ++index2 != length2) {
7444
- return result;
7445
- }
7446
- length2 = object2 == null ? 0 : object2.length;
7447
- return !!length2 && isLength$4(length2) && isIndex$5(key2, length2) && (isArray$f(object2) || isArguments$4(object2));
7448
- }
7449
- function hasIn$2(object2, path2) {
7450
- return object2 != null && hasPath$2(object2, path2, baseHasIn$2);
7451
- }
7452
- var COMPARE_PARTIAL_FLAG$6 = 1, COMPARE_UNORDERED_FLAG$4 = 2;
7453
- function baseMatchesProperty$2(path2, srcValue) {
7454
- if (isKey$4(path2) && isStrictComparable$3(srcValue)) {
7455
- return matchesStrictComparable$3(toKey$5(path2), srcValue);
7456
- }
7457
- return function(object2) {
7458
- var objValue = get$g(object2, path2);
7459
- return objValue === void 0 && objValue === srcValue ? hasIn$2(object2, path2) : baseIsEqual$3(srcValue, objValue, COMPARE_PARTIAL_FLAG$6 | COMPARE_UNORDERED_FLAG$4);
7460
- };
7461
- }
7462
- function baseProperty$2(key2) {
7463
- return function(object2) {
7464
- return object2 == null ? void 0 : object2[key2];
7465
- };
7466
- }
7467
- function basePropertyDeep$2(path2) {
7468
- return function(object2) {
7469
- return baseGet$3(object2, path2);
7470
- };
7471
- }
7472
- function property$3(path2) {
7473
- return isKey$4(path2) ? baseProperty$2(toKey$5(path2)) : basePropertyDeep$2(path2);
7474
- }
7475
- function baseIteratee$2(value2) {
7476
- if (typeof value2 == "function") {
7477
- return value2;
7478
- }
7479
- if (value2 == null) {
7480
- return identity$h;
7481
- }
7482
- if (typeof value2 == "object") {
7483
- return isArray$f(value2) ? baseMatchesProperty$2(value2[0], value2[1]) : baseMatches$2(value2);
7484
- }
7485
- return property$3(value2);
7486
- }
7487
- function createBaseFor$2(fromRight) {
7488
- return function(object2, iteratee, keysFunc) {
7489
- var index2 = -1, iterable = Object(object2), props = keysFunc(object2), length2 = props.length;
7490
- while (length2--) {
7491
- var key2 = props[++index2];
7492
- if (iteratee(iterable[key2], key2, iterable) === false) {
7493
- break;
7494
- }
7495
- }
7496
- return object2;
7497
- };
7498
- }
7499
- var baseFor$3 = createBaseFor$2();
7500
- function baseForOwn$3(object2, iteratee) {
7501
- return object2 && baseFor$3(object2, iteratee, keys$9);
7502
- }
7503
- function createBaseEach$2(eachFunc, fromRight) {
7504
- return function(collection, iteratee) {
7505
- if (collection == null) {
7506
- return collection;
7507
- }
7508
- if (!isArrayLike$7(collection)) {
7509
- return eachFunc(collection, iteratee);
7510
- }
7511
- var length2 = collection.length, index2 = -1, iterable = Object(collection);
7512
- while (++index2 < length2) {
7513
- if (iteratee(iterable[index2], index2, iterable) === false) {
7514
- break;
7515
- }
7516
- }
7517
- return collection;
7518
- };
7519
- }
7520
- var baseEach$3 = createBaseEach$2(baseForOwn$3);
7521
7271
  var now$5 = function() {
7522
7272
  return root$d.Date.now();
7523
7273
  };
@@ -7639,27 +7389,6 @@ function baseDifference(array2, values3, iteratee, comparator2) {
7639
7389
  var difference$1 = baseRest$2(function(array2, values3) {
7640
7390
  return isArrayLikeObject$2(array2) ? baseDifference(array2, baseFlatten(values3, 1, isArrayLikeObject$2)) : [];
7641
7391
  });
7642
- function arrayEvery(array2, predicate) {
7643
- var index2 = -1, length2 = array2 == null ? 0 : array2.length;
7644
- while (++index2 < length2) {
7645
- if (!predicate(array2[index2], index2, array2)) {
7646
- return false;
7647
- }
7648
- }
7649
- return true;
7650
- }
7651
- function baseEvery(collection, predicate) {
7652
- var result = true;
7653
- baseEach$3(collection, function(value2, index2, collection2) {
7654
- result = !!predicate(value2, index2, collection2);
7655
- return result;
7656
- });
7657
- return result;
7658
- }
7659
- function every$1(collection, predicate, guard) {
7660
- var func = isArray$f(collection) ? arrayEvery : baseEvery;
7661
- return func(collection, baseIteratee$2(predicate));
7662
- }
7663
7392
  function isEqual$3(value2, other) {
7664
7393
  return baseIsEqual$3(value2, other);
7665
7394
  }
@@ -7701,7 +7430,7 @@ function createRange(fromRight) {
7701
7430
  return baseRange(start2, end2, step);
7702
7431
  };
7703
7432
  }
7704
- var range$f = createRange();
7433
+ var range$e = createRange();
7705
7434
  function sum$7(array2) {
7706
7435
  return array2 && array2.length ? baseSum(array2, identity$h) : 0;
7707
7436
  }
@@ -8333,6 +8062,59 @@ class Pool {
8333
8062
  }
8334
8063
  }
8335
8064
  }
8065
+ function aggregateFeatureArrays(arrays, strategy) {
8066
+ if (!arrays || arrays.length === 0)
8067
+ return null;
8068
+ let targetArray;
8069
+ if (strategy === "first" || typeof strategy === "number" && strategy === 0) {
8070
+ targetArray = arrays[0];
8071
+ } else if (strategy === "last") {
8072
+ targetArray = arrays[arrays.length - 1];
8073
+ } else if (typeof strategy === "number") {
8074
+ if (strategy >= 0 && strategy < arrays.length) {
8075
+ targetArray = arrays[strategy];
8076
+ } else {
8077
+ throw new Error(`Array index out of bounds: ${strategy}`);
8078
+ }
8079
+ }
8080
+ if (targetArray) {
8081
+ return targetArray;
8082
+ }
8083
+ const numArrays = arrays.length;
8084
+ const firstArrayLength = arrays[0].length;
8085
+ if (arrays.some((arr) => arr.length !== firstArrayLength)) {
8086
+ throw new Error("All arrays must have the same length for aggregation.");
8087
+ }
8088
+ if (strategy === "sum" || strategy === "mean") {
8089
+ const resultArray = new Float64Array(firstArrayLength);
8090
+ for (let i2 = 0; i2 < numArrays; i2++) {
8091
+ const arr = arrays[i2];
8092
+ for (let j = 0; j < firstArrayLength; j++) {
8093
+ resultArray[j] += arr[j];
8094
+ }
8095
+ }
8096
+ if (strategy === "mean") {
8097
+ for (let i2 = 0; i2 < firstArrayLength; i2++) {
8098
+ resultArray[i2] /= numArrays;
8099
+ }
8100
+ }
8101
+ return resultArray;
8102
+ }
8103
+ if (strategy === "difference") {
8104
+ if (numArrays !== 2) {
8105
+ console.warn("Difference strategy requires exactly 2 arrays.");
8106
+ return arrays[0];
8107
+ }
8108
+ const arr0 = arrays[0];
8109
+ const arr1 = arrays[1];
8110
+ const resultArray = new Float64Array(firstArrayLength);
8111
+ for (let i2 = 0; i2 < firstArrayLength; i2++) {
8112
+ resultArray[i2] = arr0[i2] - arr1[i2];
8113
+ }
8114
+ return resultArray;
8115
+ }
8116
+ throw new Error(`Unknown aggregation strategy: ${strategy}`);
8117
+ }
8336
8118
  configSchema1_0_0.shape.coordinationSpace.unwrap();
8337
8119
  configSchema1_0_0.shape.layout.element.shape.coordinationScopes.unwrap();
8338
8120
  function upgradeReplaceViewProp(prefix2, view, coordinationSpace) {
@@ -9740,10 +9522,10 @@ function requireLrucache() {
9740
9522
  lrucache = LRUCache3;
9741
9523
  return lrucache;
9742
9524
  }
9743
- var range$e;
9525
+ var range$d;
9744
9526
  var hasRequiredRange$1;
9745
9527
  function requireRange$1() {
9746
- if (hasRequiredRange$1) return range$e;
9528
+ if (hasRequiredRange$1) return range$d;
9747
9529
  hasRequiredRange$1 = 1;
9748
9530
  const SPACE_CHARACTERS = /\s+/g;
9749
9531
  class Range2 {
@@ -9884,7 +9666,7 @@ function requireRange$1() {
9884
9666
  return false;
9885
9667
  }
9886
9668
  }
9887
- range$e = Range2;
9669
+ range$d = Range2;
9888
9670
  const LRU = requireLrucache();
9889
9671
  const cache2 = new LRU();
9890
9672
  const parseOptions2 = requireParseOptions();
@@ -10114,7 +9896,7 @@ function requireRange$1() {
10114
9896
  }
10115
9897
  return true;
10116
9898
  };
10117
- return range$e;
9899
+ return range$d;
10118
9900
  }
10119
9901
  var comparator$2;
10120
9902
  var hasRequiredComparator$1;
@@ -48617,7 +48399,7 @@ function escapeRegExp(value2) {
48617
48399
  return value2.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
48618
48400
  }
48619
48401
  const clamp$6 = (value2, min2, max2) => Math.max(min2, Math.min(max2, value2));
48620
- function range$d(from2, to) {
48402
+ function range$c(from2, to) {
48621
48403
  return Array.from({
48622
48404
  length: to - from2
48623
48405
  }).map((_, i2) => from2 + i2);
@@ -53015,7 +52797,7 @@ const useGridVirtualScroller = () => {
53015
52797
  const rowModels = params2.rows ?? currentPage.rows;
53016
52798
  const firstRowToRender = baseRenderContext.firstRowIndex;
53017
52799
  const lastRowToRender = Math.min(baseRenderContext.lastRowIndex, rowModels.length);
53018
- const rowIndexes = params2.rows ? range$d(0, params2.rows.length) : range$d(firstRowToRender, lastRowToRender);
52800
+ const rowIndexes = params2.rows ? range$c(0, params2.rows.length) : range$c(firstRowToRender, lastRowToRender);
53019
52801
  let virtualRowIndex = -1;
53020
52802
  if (!isPinnedSection && focusedVirtualCell) {
53021
52803
  if (focusedVirtualCell.rowIndex < firstRowToRender) {
@@ -74502,7 +74284,7 @@ let powers = 0;
74502
74284
  const boolean = increment$1();
74503
74285
  const booleanish = increment$1();
74504
74286
  const overloadedBoolean = increment$1();
74505
- const number$b = increment$1();
74287
+ const number$a = increment$1();
74506
74288
  const spaceSeparated = increment$1();
74507
74289
  const commaSeparated = increment$1();
74508
74290
  const commaOrSpaceSeparated = increment$1();
@@ -74515,7 +74297,7 @@ const types = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePropert
74515
74297
  booleanish,
74516
74298
  commaOrSpaceSeparated,
74517
74299
  commaSeparated,
74518
- number: number$b,
74300
+ number: number$a,
74519
74301
  overloadedBoolean,
74520
74302
  spaceSeparated
74521
74303
  }, Symbol.toStringTag, { value: "Module" }));
@@ -74614,9 +74396,9 @@ const aria$1 = create$c({
74614
74396
  ariaAutoComplete: null,
74615
74397
  ariaBusy: booleanish,
74616
74398
  ariaChecked: booleanish,
74617
- ariaColCount: number$b,
74618
- ariaColIndex: number$b,
74619
- ariaColSpan: number$b,
74399
+ ariaColCount: number$a,
74400
+ ariaColIndex: number$a,
74401
+ ariaColSpan: number$a,
74620
74402
  ariaControls: spaceSeparated,
74621
74403
  ariaCurrent: null,
74622
74404
  ariaDescribedBy: spaceSeparated,
@@ -74633,7 +74415,7 @@ const aria$1 = create$c({
74633
74415
  ariaKeyShortcuts: null,
74634
74416
  ariaLabel: null,
74635
74417
  ariaLabelledBy: spaceSeparated,
74636
- ariaLevel: number$b,
74418
+ ariaLevel: number$a,
74637
74419
  ariaLive: null,
74638
74420
  ariaModal: booleanish,
74639
74421
  ariaMultiLine: booleanish,
@@ -74641,21 +74423,21 @@ const aria$1 = create$c({
74641
74423
  ariaOrientation: null,
74642
74424
  ariaOwns: spaceSeparated,
74643
74425
  ariaPlaceholder: null,
74644
- ariaPosInSet: number$b,
74426
+ ariaPosInSet: number$a,
74645
74427
  ariaPressed: booleanish,
74646
74428
  ariaReadOnly: booleanish,
74647
74429
  ariaRelevant: null,
74648
74430
  ariaRequired: booleanish,
74649
74431
  ariaRoleDescription: spaceSeparated,
74650
- ariaRowCount: number$b,
74651
- ariaRowIndex: number$b,
74652
- ariaRowSpan: number$b,
74432
+ ariaRowCount: number$a,
74433
+ ariaRowIndex: number$a,
74434
+ ariaRowSpan: number$a,
74653
74435
  ariaSelected: booleanish,
74654
- ariaSetSize: number$b,
74436
+ ariaSetSize: number$a,
74655
74437
  ariaSort: null,
74656
- ariaValueMax: number$b,
74657
- ariaValueMin: number$b,
74658
- ariaValueNow: number$b,
74438
+ ariaValueMax: number$a,
74439
+ ariaValueMin: number$a,
74440
+ ariaValueNow: number$a,
74659
74441
  ariaValueText: null,
74660
74442
  role: null
74661
74443
  }
@@ -74694,13 +74476,13 @@ const html$2 = create$c({
74694
74476
  checked: boolean,
74695
74477
  cite: null,
74696
74478
  className: spaceSeparated,
74697
- cols: number$b,
74479
+ cols: number$a,
74698
74480
  colSpan: null,
74699
74481
  content: null,
74700
74482
  contentEditable: booleanish,
74701
74483
  controls: boolean,
74702
74484
  controlsList: spaceSeparated,
74703
- coords: number$b | commaSeparated,
74485
+ coords: number$a | commaSeparated,
74704
74486
  crossOrigin: null,
74705
74487
  data: null,
74706
74488
  dateTime: null,
@@ -74722,9 +74504,9 @@ const html$2 = create$c({
74722
74504
  formNoValidate: boolean,
74723
74505
  formTarget: null,
74724
74506
  headers: spaceSeparated,
74725
- height: number$b,
74507
+ height: number$a,
74726
74508
  hidden: boolean,
74727
- high: number$b,
74509
+ high: number$a,
74728
74510
  href: null,
74729
74511
  hrefLang: null,
74730
74512
  htmlFor: spaceSeparated,
@@ -74749,14 +74531,14 @@ const html$2 = create$c({
74749
74531
  list: null,
74750
74532
  loading: null,
74751
74533
  loop: boolean,
74752
- low: number$b,
74534
+ low: number$a,
74753
74535
  manifest: null,
74754
74536
  max: null,
74755
- maxLength: number$b,
74537
+ maxLength: number$a,
74756
74538
  media: null,
74757
74539
  method: null,
74758
74540
  min: null,
74759
- minLength: number$b,
74541
+ minLength: number$a,
74760
74542
  multiple: boolean,
74761
74543
  muted: boolean,
74762
74544
  name: null,
@@ -74852,7 +74634,7 @@ const html$2 = create$c({
74852
74634
  onWaiting: null,
74853
74635
  onWheel: null,
74854
74636
  open: boolean,
74855
- optimum: number$b,
74637
+ optimum: number$a,
74856
74638
  pattern: null,
74857
74639
  ping: spaceSeparated,
74858
74640
  placeholder: null,
@@ -74867,8 +74649,8 @@ const html$2 = create$c({
74867
74649
  rel: spaceSeparated,
74868
74650
  required: boolean,
74869
74651
  reversed: boolean,
74870
- rows: number$b,
74871
- rowSpan: number$b,
74652
+ rows: number$a,
74653
+ rowSpan: number$a,
74872
74654
  sandbox: spaceSeparated,
74873
74655
  scope: null,
74874
74656
  scoped: boolean,
@@ -74878,19 +74660,19 @@ const html$2 = create$c({
74878
74660
  shadowRootDelegatesFocus: boolean,
74879
74661
  shadowRootMode: null,
74880
74662
  shape: null,
74881
- size: number$b,
74663
+ size: number$a,
74882
74664
  sizes: null,
74883
74665
  slot: null,
74884
- span: number$b,
74666
+ span: number$a,
74885
74667
  spellCheck: booleanish,
74886
74668
  src: null,
74887
74669
  srcDoc: null,
74888
74670
  srcLang: null,
74889
74671
  srcSet: null,
74890
- start: number$b,
74672
+ start: number$a,
74891
74673
  step: null,
74892
74674
  style: null,
74893
- tabIndex: number$b,
74675
+ tabIndex: number$a,
74894
74676
  target: null,
74895
74677
  title: null,
74896
74678
  translate: null,
@@ -74898,7 +74680,7 @@ const html$2 = create$c({
74898
74680
  typeMustMatch: boolean,
74899
74681
  useMap: null,
74900
74682
  value: booleanish,
74901
- width: number$b,
74683
+ width: number$a,
74902
74684
  wrap: null,
74903
74685
  writingSuggestions: null,
74904
74686
  // Legacy.
@@ -74915,11 +74697,11 @@ const html$2 = create$c({
74915
74697
  // `<body>`. Use CSS `background-image` instead
74916
74698
  bgColor: null,
74917
74699
  // `<body>` and table elements. Use CSS `background-color` instead
74918
- border: number$b,
74700
+ border: number$a,
74919
74701
  // `<table>`. Use CSS `border-width` instead,
74920
74702
  borderColor: null,
74921
74703
  // `<table>`. Use CSS `border-color` instead,
74922
- bottomMargin: number$b,
74704
+ bottomMargin: number$a,
74923
74705
  // `<body>`
74924
74706
  cellPadding: null,
74925
74707
  // `<table>`
@@ -74953,9 +74735,9 @@ const html$2 = create$c({
74953
74735
  // `<table>`
74954
74736
  frameBorder: null,
74955
74737
  // `<iframe>`. Use CSS `border` instead
74956
- hSpace: number$b,
74738
+ hSpace: number$a,
74957
74739
  // `<img>` and `<object>`
74958
- leftMargin: number$b,
74740
+ leftMargin: number$a,
74959
74741
  // `<body>`
74960
74742
  link: null,
74961
74743
  // `<body>`. Use CSS `a:link {color: *}` instead
@@ -74963,9 +74745,9 @@ const html$2 = create$c({
74963
74745
  // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`
74964
74746
  lowSrc: null,
74965
74747
  // `<img>`. Use a `<picture>`
74966
- marginHeight: number$b,
74748
+ marginHeight: number$a,
74967
74749
  // `<body>`
74968
- marginWidth: number$b,
74750
+ marginWidth: number$a,
74969
74751
  // `<body>`
74970
74752
  noResize: boolean,
74971
74753
  // `<frame>`
@@ -74983,7 +74765,7 @@ const html$2 = create$c({
74983
74765
  // `<isindex>`
74984
74766
  rev: null,
74985
74767
  // `<link>`
74986
- rightMargin: number$b,
74768
+ rightMargin: number$a,
74987
74769
  // `<body>`
74988
74770
  rules: null,
74989
74771
  // `<table>`
@@ -74997,7 +74779,7 @@ const html$2 = create$c({
74997
74779
  // `<table>`
74998
74780
  text: null,
74999
74781
  // `<body>`. Use CSS `color` instead
75000
- topMargin: number$b,
74782
+ topMargin: number$a,
75001
74783
  // `<body>`
75002
74784
  valueType: null,
75003
74785
  // `<param>`
@@ -75007,7 +74789,7 @@ const html$2 = create$c({
75007
74789
  // Several. Use CSS `vertical-align` instead
75008
74790
  vLink: null,
75009
74791
  // `<body>`. Use CSS `a:visited {color}` instead
75010
- vSpace: number$b,
74792
+ vSpace: number$a,
75011
74793
  // `<img>` and `<object>`
75012
74794
  // Non-standard Properties.
75013
74795
  allowTransparency: null,
@@ -75017,7 +74799,7 @@ const html$2 = create$c({
75017
74799
  disableRemotePlayback: boolean,
75018
74800
  prefix: null,
75019
74801
  property: null,
75020
- results: number$b,
74802
+ results: number$a,
75021
74803
  security: null,
75022
74804
  unselectable: null
75023
74805
  }
@@ -75202,27 +74984,27 @@ const svg$1 = create$c({
75202
74984
  transform: caseSensitiveTransform,
75203
74985
  properties: {
75204
74986
  about: commaOrSpaceSeparated,
75205
- accentHeight: number$b,
74987
+ accentHeight: number$a,
75206
74988
  accumulate: null,
75207
74989
  additive: null,
75208
74990
  alignmentBaseline: null,
75209
- alphabetic: number$b,
75210
- amplitude: number$b,
74991
+ alphabetic: number$a,
74992
+ amplitude: number$a,
75211
74993
  arabicForm: null,
75212
- ascent: number$b,
74994
+ ascent: number$a,
75213
74995
  attributeName: null,
75214
74996
  attributeType: null,
75215
- azimuth: number$b,
74997
+ azimuth: number$a,
75216
74998
  bandwidth: null,
75217
74999
  baselineShift: null,
75218
75000
  baseFrequency: null,
75219
75001
  baseProfile: null,
75220
75002
  bbox: null,
75221
75003
  begin: null,
75222
- bias: number$b,
75004
+ bias: number$a,
75223
75005
  by: null,
75224
75006
  calcMode: null,
75225
- capHeight: number$b,
75007
+ capHeight: number$a,
75226
75008
  className: spaceSeparated,
75227
75009
  clip: null,
75228
75010
  clipPath: null,
@@ -75243,26 +75025,26 @@ const svg$1 = create$c({
75243
75025
  d: null,
75244
75026
  dataType: null,
75245
75027
  defaultAction: null,
75246
- descent: number$b,
75247
- diffuseConstant: number$b,
75028
+ descent: number$a,
75029
+ diffuseConstant: number$a,
75248
75030
  direction: null,
75249
75031
  display: null,
75250
75032
  dur: null,
75251
- divisor: number$b,
75033
+ divisor: number$a,
75252
75034
  dominantBaseline: null,
75253
75035
  download: boolean,
75254
75036
  dx: null,
75255
75037
  dy: null,
75256
75038
  edgeMode: null,
75257
75039
  editable: null,
75258
- elevation: number$b,
75040
+ elevation: number$a,
75259
75041
  enableBackground: null,
75260
75042
  end: null,
75261
75043
  event: null,
75262
- exponent: number$b,
75044
+ exponent: number$a,
75263
75045
  externalResourcesRequired: null,
75264
75046
  fill: null,
75265
- fillOpacity: number$b,
75047
+ fillOpacity: number$a,
75266
75048
  fillRule: null,
75267
75049
  filter: null,
75268
75050
  filterRes: null,
@@ -75292,27 +75074,27 @@ const svg$1 = create$c({
75292
75074
  gradientTransform: null,
75293
75075
  gradientUnits: null,
75294
75076
  handler: null,
75295
- hanging: number$b,
75077
+ hanging: number$a,
75296
75078
  hatchContentUnits: null,
75297
75079
  hatchUnits: null,
75298
75080
  height: null,
75299
75081
  href: null,
75300
75082
  hrefLang: null,
75301
- horizAdvX: number$b,
75302
- horizOriginX: number$b,
75303
- horizOriginY: number$b,
75083
+ horizAdvX: number$a,
75084
+ horizOriginX: number$a,
75085
+ horizOriginY: number$a,
75304
75086
  id: null,
75305
- ideographic: number$b,
75087
+ ideographic: number$a,
75306
75088
  imageRendering: null,
75307
75089
  initialVisibility: null,
75308
75090
  in: null,
75309
75091
  in2: null,
75310
- intercept: number$b,
75311
- k: number$b,
75312
- k1: number$b,
75313
- k2: number$b,
75314
- k3: number$b,
75315
- k4: number$b,
75092
+ intercept: number$a,
75093
+ k: number$a,
75094
+ k1: number$a,
75095
+ k2: number$a,
75096
+ k3: number$a,
75097
+ k4: number$a,
75316
75098
  kernelMatrix: commaOrSpaceSeparated,
75317
75099
  kernelUnitLength: null,
75318
75100
  keyPoints: null,
@@ -75326,7 +75108,7 @@ const svg$1 = create$c({
75326
75108
  lengthAdjust: null,
75327
75109
  letterSpacing: null,
75328
75110
  lightingColor: null,
75329
- limitingConeAngle: number$b,
75111
+ limitingConeAngle: number$a,
75330
75112
  local: null,
75331
75113
  markerEnd: null,
75332
75114
  markerMid: null,
@@ -75342,7 +75124,7 @@ const svg$1 = create$c({
75342
75124
  media: null,
75343
75125
  mediaCharacterEncoding: null,
75344
75126
  mediaContentEncodings: null,
75345
- mediaSize: number$b,
75127
+ mediaSize: number$a,
75346
75128
  mediaTime: null,
75347
75129
  method: null,
75348
75130
  min: null,
@@ -75448,12 +75230,12 @@ const svg$1 = create$c({
75448
75230
  origin: null,
75449
75231
  overflow: null,
75450
75232
  overlay: null,
75451
- overlinePosition: number$b,
75452
- overlineThickness: number$b,
75233
+ overlinePosition: number$a,
75234
+ overlineThickness: number$a,
75453
75235
  paintOrder: null,
75454
75236
  panose1: null,
75455
75237
  path: null,
75456
- pathLength: number$b,
75238
+ pathLength: number$a,
75457
75239
  patternContentUnits: null,
75458
75240
  patternTransform: null,
75459
75241
  patternUnits: null,
@@ -75463,9 +75245,9 @@ const svg$1 = create$c({
75463
75245
  playbackOrder: null,
75464
75246
  pointerEvents: null,
75465
75247
  points: null,
75466
- pointsAtX: number$b,
75467
- pointsAtY: number$b,
75468
- pointsAtZ: number$b,
75248
+ pointsAtX: number$a,
75249
+ pointsAtY: number$a,
75250
+ pointsAtZ: number$a,
75469
75251
  preserveAlpha: null,
75470
75252
  preserveAspectRatio: null,
75471
75253
  primitiveUnits: null,
@@ -75497,8 +75279,8 @@ const svg$1 = create$c({
75497
75279
  side: null,
75498
75280
  slope: null,
75499
75281
  snapshotTime: null,
75500
- specularConstant: number$b,
75501
- specularExponent: number$b,
75282
+ specularConstant: number$a,
75283
+ specularExponent: number$a,
75502
75284
  spreadMethod: null,
75503
75285
  spacing: null,
75504
75286
  startOffset: null,
@@ -75508,30 +75290,30 @@ const svg$1 = create$c({
75508
75290
  stitchTiles: null,
75509
75291
  stopColor: null,
75510
75292
  stopOpacity: null,
75511
- strikethroughPosition: number$b,
75512
- strikethroughThickness: number$b,
75293
+ strikethroughPosition: number$a,
75294
+ strikethroughThickness: number$a,
75513
75295
  string: null,
75514
75296
  stroke: null,
75515
75297
  strokeDashArray: commaOrSpaceSeparated,
75516
75298
  strokeDashOffset: null,
75517
75299
  strokeLineCap: null,
75518
75300
  strokeLineJoin: null,
75519
- strokeMiterLimit: number$b,
75520
- strokeOpacity: number$b,
75301
+ strokeMiterLimit: number$a,
75302
+ strokeOpacity: number$a,
75521
75303
  strokeWidth: null,
75522
75304
  style: null,
75523
- surfaceScale: number$b,
75305
+ surfaceScale: number$a,
75524
75306
  syncBehavior: null,
75525
75307
  syncBehaviorDefault: null,
75526
75308
  syncMaster: null,
75527
75309
  syncTolerance: null,
75528
75310
  syncToleranceDefault: null,
75529
75311
  systemLanguage: commaOrSpaceSeparated,
75530
- tabIndex: number$b,
75312
+ tabIndex: number$a,
75531
75313
  tableValues: null,
75532
75314
  target: null,
75533
- targetX: number$b,
75534
- targetY: number$b,
75315
+ targetX: number$a,
75316
+ targetY: number$a,
75535
75317
  textAnchor: null,
75536
75318
  textDecoration: null,
75537
75319
  textRendering: null,
@@ -75546,22 +75328,22 @@ const svg$1 = create$c({
75546
75328
  transformOrigin: null,
75547
75329
  u1: null,
75548
75330
  u2: null,
75549
- underlinePosition: number$b,
75550
- underlineThickness: number$b,
75331
+ underlinePosition: number$a,
75332
+ underlineThickness: number$a,
75551
75333
  unicode: null,
75552
75334
  unicodeBidi: null,
75553
75335
  unicodeRange: null,
75554
- unitsPerEm: number$b,
75336
+ unitsPerEm: number$a,
75555
75337
  values: null,
75556
- vAlphabetic: number$b,
75557
- vMathematical: number$b,
75338
+ vAlphabetic: number$a,
75339
+ vMathematical: number$a,
75558
75340
  vectorEffect: null,
75559
- vHanging: number$b,
75560
- vIdeographic: number$b,
75341
+ vHanging: number$a,
75342
+ vIdeographic: number$a,
75561
75343
  version: null,
75562
- vertAdvY: number$b,
75563
- vertOriginX: number$b,
75564
- vertOriginY: number$b,
75344
+ vertAdvY: number$a,
75345
+ vertOriginX: number$a,
75346
+ vertOriginY: number$a,
75565
75347
  viewBox: null,
75566
75348
  viewTarget: null,
75567
75349
  visibility: null,
@@ -75573,7 +75355,7 @@ const svg$1 = create$c({
75573
75355
  x1: null,
75574
75356
  x2: null,
75575
75357
  xChannelSelector: null,
75576
- xHeight: number$b,
75358
+ xHeight: number$a,
75577
75359
  y: null,
75578
75360
  y1: null,
75579
75361
  y2: null,
@@ -86514,7 +86296,7 @@ function treeToExpectedCheckedLevel(currTree, checkedPaths) {
86514
86296
  currTree.tree.forEach((lzn) => {
86515
86297
  const levelZeroPath = [lzn.name];
86516
86298
  const height2 = nodeToHeight(lzn);
86517
- range$f(height2).forEach((i2) => {
86299
+ range$e(height2).forEach((i2) => {
86518
86300
  const levelIndex = i2 + 1;
86519
86301
  const levelNodePaths = nodeToLevelDescendantNamePaths(lzn, levelIndex, [], true);
86520
86302
  if (isEqual$3(levelNodePaths, checkedPaths)) {
@@ -86587,7 +86369,7 @@ function treeToMembershipMap(currTree) {
86587
86369
  if (currTree) {
86588
86370
  currTree.tree.forEach((lzn) => {
86589
86371
  const height2 = nodeToHeight(lzn);
86590
- range$f(height2).forEach((i2) => {
86372
+ range$e(height2).forEach((i2) => {
86591
86373
  const levelIndex = i2 + 1;
86592
86374
  const levelNodePaths = nodeToLevelDescendantNamePaths(lzn, levelIndex, [], true);
86593
86375
  levelNodePaths.forEach((setNamePath) => {
@@ -104293,7 +104075,7 @@ function LevelsButtons(props) {
104293
104075
  }
104294
104076
  }
104295
104077
  const { classes: classes2 } = useStyles$u();
104296
- return jsxRuntimeExports.jsx("div", { className: classes2.levelButtonsContainer, children: range$f(1, height2 + 1).map((i2) => {
104078
+ return jsxRuntimeExports.jsx("div", { className: classes2.levelButtonsContainer, children: range$e(1, height2 + 1).map((i2) => {
104297
104079
  const isChecked = isEqual$3(path2, checkedLevelPath) && i2 === checkedLevelIndex;
104298
104080
  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);
104299
104081
  }) });
@@ -104899,10 +104681,10 @@ function ObsSetsManagerSubscriber(props) {
104899
104681
  ]);
104900
104682
  return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, helpText, errors, children: manager2 });
104901
104683
  }
104902
- function ascending$9(a2, b2) {
104684
+ function ascending$8(a2, b2) {
104903
104685
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
104904
104686
  }
104905
- function bisector$4(f2) {
104687
+ function bisector$3(f2) {
104906
104688
  let delta = f2;
104907
104689
  let compare2 = f2;
104908
104690
  if (f2.length === 1) {
@@ -104938,14 +104720,14 @@ function bisector$4(f2) {
104938
104720
  return { left: left2, center: center2, right: right2 };
104939
104721
  }
104940
104722
  function ascendingComparator$1(f2) {
104941
- return (d, x2) => ascending$9(f2(d), x2);
104723
+ return (d, x2) => ascending$8(f2(d), x2);
104942
104724
  }
104943
- function number$a(x2) {
104725
+ function number$9(x2) {
104944
104726
  return x2 === null ? NaN : +x2;
104945
104727
  }
104946
- const ascendingBisect$2 = bisector$4(ascending$9);
104947
- const bisectRight$3 = ascendingBisect$2.right;
104948
- bisector$4(number$a).center;
104728
+ const ascendingBisect$1 = bisector$3(ascending$8);
104729
+ const bisectRight$2 = ascendingBisect$1.right;
104730
+ bisector$3(number$9).center;
104949
104731
  function count$2(values3, valueof) {
104950
104732
  let count2 = 0;
104951
104733
  {
@@ -105164,7 +104946,7 @@ function bin$2() {
105164
104946
  for (i2 = 0; i2 < n3; ++i2) {
105165
104947
  x2 = values3[i2];
105166
104948
  if (x02 <= x2 && x2 <= x12) {
105167
- bins2[bisectRight$3(tz, x2, 0, m2)].push(data2[i2]);
104949
+ bins2[bisectRight$2(tz, x2, 0, m2)].push(data2[i2]);
105168
104950
  }
105169
104951
  }
105170
104952
  return bins2;
@@ -105202,7 +104984,7 @@ function min$4(values3, valueof) {
105202
104984
  }
105203
104985
  return min2;
105204
104986
  }
105205
- function quantileSorted$1(values3, p, valueof = number$a) {
104987
+ function quantileSorted$1(values3, p, valueof = number$9) {
105206
104988
  if (!(n3 = values3.length)) return;
105207
104989
  if ((p = +p) <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
105208
104990
  if (p >= 1) return +valueof(values3[n3 - 1], n3 - 1, values3);
@@ -144397,7 +144179,7 @@ const defaultGetValue = (points2) => points2.length;
144397
144179
  const MAX_32_BIT_FLOAT = 3402823466e29;
144398
144180
  const defaultGetPoints = (bin2) => bin2.points;
144399
144181
  const defaultGetIndex = (bin2) => bin2.index;
144400
- const ascending$8 = (a2, b2) => a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
144182
+ const ascending$7 = (a2, b2) => a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
144401
144183
  const defaultProps$w = {
144402
144184
  getValue: defaultGetValue,
144403
144185
  getPoints: defaultGetPoints,
@@ -144481,7 +144263,7 @@ class BinSorter {
144481
144263
  }
144482
144264
  getValueRange(percentileRange) {
144483
144265
  if (!this.sortedBins) {
144484
- this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$8(a2.value, b2.value));
144266
+ this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$7(a2.value, b2.value));
144485
144267
  }
144486
144268
  if (!this.sortedBins.length) {
144487
144269
  return [];
@@ -144497,7 +144279,7 @@ class BinSorter {
144497
144279
  }
144498
144280
  getValueDomainByScale(scale2, [lower2 = 0, upper = 100] = []) {
144499
144281
  if (!this.sortedBins) {
144500
- this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$8(a2.value, b2.value));
144282
+ this.sortedBins = this.aggregatedBins.sort((a2, b2) => ascending$7(a2.value, b2.value));
144501
144283
  }
144502
144284
  if (!this.sortedBins.length) {
144503
144285
  return [];
@@ -184272,7 +184054,7 @@ function cartesianNormalizeInPlace$1(d) {
184272
184054
  var l2 = sqrt$5(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
184273
184055
  d[0] /= l2, d[1] /= l2, d[2] /= l2;
184274
184056
  }
184275
- var lambda0$3, phi0$1, lambda1$1, phi1$1, lambda2$1, lambda00$4, phi00$4, p0$1, deltaSum$1 = adder(), ranges$1, range$c;
184057
+ var lambda0$3, phi0$1, lambda1$1, phi1$1, lambda2$1, lambda00$4, phi00$4, p0$1, deltaSum$1 = adder(), ranges$1, range$b;
184276
184058
  var boundsStream$3 = {
184277
184059
  point: boundsPoint$3,
184278
184060
  lineStart: boundsLineStart$1,
@@ -184292,11 +184074,11 @@ var boundsStream$3 = {
184292
184074
  if (areaRingSum$3 < 0) lambda0$3 = -(lambda1$1 = 180), phi0$1 = -(phi1$1 = 90);
184293
184075
  else if (deltaSum$1 > epsilon$8) phi1$1 = 90;
184294
184076
  else if (deltaSum$1 < -epsilon$8) phi0$1 = -90;
184295
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
184077
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
184296
184078
  }
184297
184079
  };
184298
184080
  function boundsPoint$3(lambda, phi2) {
184299
- ranges$1.push(range$c = [lambda0$3 = lambda, lambda1$1 = lambda]);
184081
+ ranges$1.push(range$b = [lambda0$3 = lambda, lambda1$1 = lambda]);
184300
184082
  if (phi2 < phi0$1) phi0$1 = phi2;
184301
184083
  if (phi2 > phi1$1) phi1$1 = phi2;
184302
184084
  }
@@ -184336,7 +184118,7 @@ function linePoint$1(lambda, phi2) {
184336
184118
  }
184337
184119
  }
184338
184120
  } else {
184339
- ranges$1.push(range$c = [lambda0$3 = lambda, lambda1$1 = lambda]);
184121
+ ranges$1.push(range$b = [lambda0$3 = lambda, lambda1$1 = lambda]);
184340
184122
  }
184341
184123
  if (phi2 < phi0$1) phi0$1 = phi2;
184342
184124
  if (phi2 > phi1$1) phi1$1 = phi2;
@@ -184346,7 +184128,7 @@ function boundsLineStart$1() {
184346
184128
  boundsStream$3.point = linePoint$1;
184347
184129
  }
184348
184130
  function boundsLineEnd$1() {
184349
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
184131
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
184350
184132
  boundsStream$3.point = boundsPoint$3;
184351
184133
  p0$1 = null;
184352
184134
  }
@@ -184367,7 +184149,7 @@ function boundsRingEnd$1() {
184367
184149
  boundsRingPoint$1(lambda00$4, phi00$4);
184368
184150
  areaStream$3.lineEnd();
184369
184151
  if (abs$5(deltaSum$1) > epsilon$8) lambda0$3 = -(lambda1$1 = 180);
184370
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
184152
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
184371
184153
  p0$1 = null;
184372
184154
  }
184373
184155
  function angle$1(lambda02, lambda12) {
@@ -184400,7 +184182,7 @@ function bounds$2(feature2) {
184400
184182
  if ((delta = angle$1(a2[1], b2[0])) > deltaMax) deltaMax = delta, lambda0$3 = b2[0], lambda1$1 = a2[1];
184401
184183
  }
184402
184184
  }
184403
- ranges$1 = range$c = null;
184185
+ ranges$1 = range$b = null;
184404
184186
  return lambda0$3 === Infinity || phi0$1 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda0$3, phi0$1], [lambda1$1, phi1$1]];
184405
184187
  }
184406
184188
  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;
@@ -184746,10 +184528,10 @@ function link$1(array2) {
184746
184528
  a2.n = b2 = array2[0];
184747
184529
  b2.p = a2;
184748
184530
  }
184749
- function ascending$7(a2, b2) {
184531
+ function ascending$6(a2, b2) {
184750
184532
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
184751
184533
  }
184752
- function bisector$3(compare2) {
184534
+ function bisector$2(compare2) {
184753
184535
  if (compare2.length === 1) compare2 = ascendingComparator(compare2);
184754
184536
  return {
184755
184537
  left: function(a2, x2, lo, hi) {
@@ -184776,11 +184558,11 @@ function bisector$3(compare2) {
184776
184558
  }
184777
184559
  function ascendingComparator(f2) {
184778
184560
  return function(d, x2) {
184779
- return ascending$7(f2(d), x2);
184561
+ return ascending$6(f2(d), x2);
184780
184562
  };
184781
184563
  }
184782
- bisector$3(ascending$7);
184783
- function range$b(start2, stop3, step) {
184564
+ bisector$2(ascending$6);
184565
+ function range$a(start2, stop3, step) {
184784
184566
  start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
184785
184567
  var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
184786
184568
  while (++i2 < n3) {
@@ -185062,7 +184844,7 @@ function contains$2(object2, point2) {
185062
184844
  return (object2 && containsObjectType.hasOwnProperty(object2.type) ? containsObjectType[object2.type] : containsGeometry)(object2, point2);
185063
184845
  }
185064
184846
  function graticuleX$1(y02, y12, dy) {
185065
- var y2 = range$b(y02, y12 - epsilon$8, dy).concat(y12);
184847
+ var y2 = range$a(y02, y12 - epsilon$8, dy).concat(y12);
185066
184848
  return function(x2) {
185067
184849
  return y2.map(function(y22) {
185068
184850
  return [x2, y22];
@@ -185070,7 +184852,7 @@ function graticuleX$1(y02, y12, dy) {
185070
184852
  };
185071
184853
  }
185072
184854
  function graticuleY$1(x02, x12, dx) {
185073
- var x2 = range$b(x02, x12 - epsilon$8, dx).concat(x12);
184855
+ var x2 = range$a(x02, x12 - epsilon$8, dx).concat(x12);
185074
184856
  return function(y2) {
185075
184857
  return x2.map(function(x22) {
185076
184858
  return [x22, y2];
@@ -185083,9 +184865,9 @@ function graticule$1() {
185083
184865
  return { type: "MultiLineString", coordinates: lines() };
185084
184866
  }
185085
184867
  function lines() {
185086
- 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) {
184868
+ 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) {
185087
184869
  return abs$5(x22 % DX) > epsilon$8;
185088
- }).map(x2)).concat(range$b(ceil$3(y02 / dy) * dy, y12, dy).filter(function(y22) {
184870
+ }).map(x2)).concat(range$a(ceil$3(y02 / dy) * dy, y12, dy).filter(function(y22) {
185089
184871
  return abs$5(y22 % DY) > epsilon$8;
185090
184872
  }).map(y2));
185091
184873
  }
@@ -210791,22 +210573,22 @@ async function getDecoder(fileDirectory) {
210791
210573
  const Decoder = await importFn();
210792
210574
  return new Decoder(fileDirectory);
210793
210575
  }
210794
- addDecoder([void 0, 1], () => import("./raw-DA5BKg3-.js").then((m2) => m2.default));
210795
- addDecoder(5, () => import("./lzw-Crrj35q2.js").then((m2) => m2.default));
210576
+ addDecoder([void 0, 1], () => import("./raw-xhYWeGgm.js").then((m2) => m2.default));
210577
+ addDecoder(5, () => import("./lzw-BWKtxIFs.js").then((m2) => m2.default));
210796
210578
  addDecoder(6, () => {
210797
210579
  throw new Error("old style JPEG compression is not supported.");
210798
210580
  });
210799
- addDecoder(7, () => import("./jpeg-Kuxx-efU.js").then((m2) => m2.default));
210800
- addDecoder([8, 32946], () => import("./deflate-B0SUWLyi.js").then((m2) => m2.default));
210801
- addDecoder(32773, () => import("./packbits-B1nQzu1Y.js").then((m2) => m2.default));
210581
+ addDecoder(7, () => import("./jpeg-jUgXKflB.js").then((m2) => m2.default));
210582
+ addDecoder([8, 32946], () => import("./deflate-BXitYXfE.js").then((m2) => m2.default));
210583
+ addDecoder(32773, () => import("./packbits-DtqTcTmz.js").then((m2) => m2.default));
210802
210584
  addDecoder(
210803
210585
  34887,
210804
- () => import("./lerc-BpkIvz2d.js").then(async (m2) => {
210586
+ () => import("./lerc-Dj-OE8Tk.js").then(async (m2) => {
210805
210587
  await m2.zstd.init();
210806
210588
  return m2;
210807
210589
  }).then((m2) => m2.default)
210808
210590
  );
210809
- addDecoder(50001, () => import("./webimage-Dq0suZA4.js").then((m2) => m2.default));
210591
+ addDecoder(50001, () => import("./webimage-D6-tAV4h.js").then((m2) => m2.default));
210810
210592
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
210811
210593
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
210812
210594
  }
@@ -213847,7 +213629,7 @@ const Z_FIXED = 4;
213847
213629
  const Z_BINARY = 0;
213848
213630
  const Z_TEXT = 1;
213849
213631
  const Z_UNKNOWN = 2;
213850
- function zero$6(buf) {
213632
+ function zero$5(buf) {
213851
213633
  let len2 = buf.length;
213852
213634
  while (--len2 >= 0) {
213853
213635
  buf[len2] = 0;
@@ -213886,17 +213668,17 @@ const extra_blbits = (
213886
213668
  const bl_order = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
213887
213669
  const DIST_CODE_LEN = 512;
213888
213670
  const static_ltree = new Array((L_CODES + 2) * 2);
213889
- zero$6(static_ltree);
213671
+ zero$5(static_ltree);
213890
213672
  const static_dtree = new Array(D_CODES * 2);
213891
- zero$6(static_dtree);
213673
+ zero$5(static_dtree);
213892
213674
  const _dist_code = new Array(DIST_CODE_LEN);
213893
- zero$6(_dist_code);
213675
+ zero$5(_dist_code);
213894
213676
  const _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
213895
- zero$6(_length_code);
213677
+ zero$5(_length_code);
213896
213678
  const base_length = new Array(LENGTH_CODES);
213897
- zero$6(base_length);
213679
+ zero$5(base_length);
213898
213680
  const base_dist = new Array(D_CODES);
213899
- zero$6(base_dist);
213681
+ zero$5(base_dist);
213900
213682
  function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
213901
213683
  this.static_tree = static_tree;
213902
213684
  this.extra_bits = extra_bits;
@@ -221762,7 +221544,7 @@ const channels = {
221762
221544
  },
221763
221545
  fs: fs$2
221764
221546
  };
221765
- function range$a(len2) {
221547
+ function range$9(len2) {
221766
221548
  return [...Array(len2).keys()];
221767
221549
  }
221768
221550
  function padWithDefault$2(arr, defaultValue2, padWidth) {
@@ -222862,7 +222644,7 @@ const ScaleBarLayer = class extends CompositeLayer {
222862
222644
  sizeScale: 2 ** -zoom2,
222863
222645
  characterSet: [
222864
222646
  ...displayUnit.split(""),
222865
- ...range$a(10).map((i2) => String(i2)),
222647
+ ...range$9(10).map((i2) => String(i2)),
222866
222648
  ".",
222867
222649
  "e",
222868
222650
  "+"
@@ -224301,7 +224083,7 @@ class BitmaskLayer2 extends XRLayer {
224301
224083
  } = this.state;
224302
224084
  if (textures && model) {
224303
224085
  const scaleFactor = 1 / 2 ** (maxZoom - zoom2);
224304
- const colors2 = Object.fromEntries(range$f(MAX_CHANNELS).map((i2) => [`color${i2}`, getColor(channelColors[i2])]));
224086
+ const colors2 = Object.fromEntries(range$e(MAX_CHANNELS).map((i2) => [`color${i2}`, getColor(channelColors[i2])]));
224305
224087
  model.setUniforms(Object.assign({}, uniforms, {
224306
224088
  ...colors2,
224307
224089
  // Bitmask image channel data textures
@@ -227490,7 +227272,7 @@ class ContourLayerWithText extends ContourLayer {
227490
227272
  let minCirclePointI;
227491
227273
  let minPolygonPoint;
227492
227274
  const numVertices = maxAreaPolygon.geometry.coordinates[0].length;
227493
- 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]];
227275
+ 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]];
227494
227276
  circlePolygon.geometry.coordinates[0].forEach((circleCoord, circlePointI) => {
227495
227277
  const circlePoint = point$9(circleCoord);
227496
227278
  polygonVertices.forEach((polyCoord) => {
@@ -227910,7 +227692,7 @@ function createQuadTree(obsEmbedding, getCellCoords) {
227910
227692
  if (!obsEmbedding) {
227911
227693
  return null;
227912
227694
  }
227913
- const tree2 = quadtree$1().x((i2) => getCellCoords(i2)[0]).y((i2) => getCellCoords(i2)[1]).addAll(range$f(obsEmbedding.shape[1]));
227695
+ const tree2 = quadtree$1().x((i2) => getCellCoords(i2)[0]).y((i2) => getCellCoords(i2)[1]).addAll(range$e(obsEmbedding.shape[1]));
227914
227696
  return tree2;
227915
227697
  }
227916
227698
  function constant$6(v) {
@@ -228018,8 +227800,14 @@ function forceCollideRects() {
228018
227800
  };
228019
227801
  return force2;
228020
227802
  }
228021
- function getPointSizeDevicePixels(devicePixelRatio2, zoom2, xRange, yRange, width2, height2) {
228022
- const pointSize = 5e-4;
227803
+ const BASE_POINT_SIZE = 5;
227804
+ const LARGE_DATASET_CELL_COUNT = 1e4;
227805
+ const SMALL_DATASET_CELL_COUNT = 100;
227806
+ function getInitialPointSize(numCells = LARGE_DATASET_CELL_COUNT) {
227807
+ return BASE_POINT_SIZE / clamp$8(numCells, SMALL_DATASET_CELL_COUNT, LARGE_DATASET_CELL_COUNT);
227808
+ }
227809
+ function getPointSizeDevicePixels(devicePixelRatio2, zoom2, xRange, yRange, width2, height2, numCells) {
227810
+ const pointSize = getInitialPointSize(numCells);
228023
227811
  const pointScreenSizeMax = 10;
228024
227812
  const pointScreenSizeMin = 1 / devicePixelRatio2;
228025
227813
  const scaleFactor = 2 ** zoom2;
@@ -229215,7 +229003,7 @@ function selection_order() {
229215
229003
  return this;
229216
229004
  }
229217
229005
  function selection_sort(compare2) {
229218
- if (!compare2) compare2 = ascending$6;
229006
+ if (!compare2) compare2 = ascending$5;
229219
229007
  function compareNode(a2, b2) {
229220
229008
  return a2 && b2 ? compare2(a2.__data__, b2.__data__) : !a2 - !b2;
229221
229009
  }
@@ -229229,7 +229017,7 @@ function selection_sort(compare2) {
229229
229017
  }
229230
229018
  return new Selection(sortgroups, this._parents).order();
229231
229019
  }
229232
- function ascending$6(a2, b2) {
229020
+ function ascending$5(a2, b2) {
229233
229021
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
229234
229022
  }
229235
229023
  function selection_call() {
@@ -229638,20 +229426,20 @@ Selection.prototype = {
229638
229426
  function select$1(selector2) {
229639
229427
  return typeof selector2 === "string" ? new Selection([[document.querySelector(selector2)]], [document.documentElement]) : new Selection([[selector2]], root$2);
229640
229428
  }
229641
- function ascending$5(a2, b2) {
229429
+ function ascending$4(a2, b2) {
229642
229430
  return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
229643
229431
  }
229644
- function descending$2(a2, b2) {
229432
+ function descending$1(a2, b2) {
229645
229433
  return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
229646
229434
  }
229647
- function bisector$2(f2) {
229435
+ function bisector$1(f2) {
229648
229436
  let compare12, compare2, delta;
229649
229437
  if (f2.length !== 2) {
229650
- compare12 = ascending$5;
229651
- compare2 = (d, x2) => ascending$5(f2(d), x2);
229438
+ compare12 = ascending$4;
229439
+ compare2 = (d, x2) => ascending$4(f2(d), x2);
229652
229440
  delta = (d, x2) => f2(d) - x2;
229653
229441
  } else {
229654
- compare12 = f2 === ascending$5 || f2 === descending$2 ? f2 : zero$5;
229442
+ compare12 = f2 === ascending$4 || f2 === descending$1 ? f2 : zero$4;
229655
229443
  compare2 = f2;
229656
229444
  delta = f2;
229657
229445
  }
@@ -229683,10 +229471,10 @@ function bisector$2(f2) {
229683
229471
  }
229684
229472
  return { left: left2, center: center2, right: right2 };
229685
229473
  }
229686
- function zero$5() {
229474
+ function zero$4() {
229687
229475
  return 0;
229688
229476
  }
229689
- function number$9(x2) {
229477
+ function number$8(x2) {
229690
229478
  return x2 === null ? NaN : +x2;
229691
229479
  }
229692
229480
  function* numbers$4(values3, valueof) {
@@ -229705,10 +229493,10 @@ function* numbers$4(values3, valueof) {
229705
229493
  }
229706
229494
  }
229707
229495
  }
229708
- const ascendingBisect$1 = bisector$2(ascending$5);
229709
- const bisectRight$2 = ascendingBisect$1.right;
229710
- const bisectLeft$1 = ascendingBisect$1.left;
229711
- bisector$2(number$9).center;
229496
+ const ascendingBisect = bisector$1(ascending$4);
229497
+ const bisectRight$1 = ascendingBisect.right;
229498
+ const bisectLeft$1 = ascendingBisect.left;
229499
+ bisector$1(number$8).center;
229712
229500
  function variance(values3, valueof) {
229713
229501
  let count2 = 0;
229714
229502
  let delta;
@@ -229779,8 +229567,8 @@ class Adder {
229779
229567
  function permute(source2, keys2) {
229780
229568
  return Array.from(keys2, (key2) => source2[key2]);
229781
229569
  }
229782
- function compareDefined(compare2 = ascending$5) {
229783
- if (compare2 === ascending$5) return ascendingDefined;
229570
+ function compareDefined(compare2 = ascending$4) {
229571
+ if (compare2 === ascending$4) return ascendingDefined;
229784
229572
  if (typeof compare2 !== "function") throw new TypeError("compare is not a function");
229785
229573
  return (a2, b2) => {
229786
229574
  const x2 = compare2(a2, b2);
@@ -229791,40 +229579,51 @@ function compareDefined(compare2 = ascending$5) {
229791
229579
  function ascendingDefined(a2, b2) {
229792
229580
  return (a2 == null || !(a2 >= a2)) - (b2 == null || !(b2 >= b2)) || (a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
229793
229581
  }
229794
- var e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2);
229582
+ const e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2);
229583
+ function tickSpec(start2, stop3, count2) {
229584
+ 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;
229585
+ let i1, i2, inc;
229586
+ if (power < 0) {
229587
+ inc = Math.pow(10, -power) / factor;
229588
+ i1 = Math.round(start2 * inc);
229589
+ i2 = Math.round(stop3 * inc);
229590
+ if (i1 / inc < start2) ++i1;
229591
+ if (i2 / inc > stop3) --i2;
229592
+ inc = -inc;
229593
+ } else {
229594
+ inc = Math.pow(10, power) * factor;
229595
+ i1 = Math.round(start2 / inc);
229596
+ i2 = Math.round(stop3 / inc);
229597
+ if (i1 * inc < start2) ++i1;
229598
+ if (i2 * inc > stop3) --i2;
229599
+ }
229600
+ if (i2 < i1 && 0.5 <= count2 && count2 < 2) return tickSpec(start2, stop3, count2 * 2);
229601
+ return [i1, i2, inc];
229602
+ }
229795
229603
  function ticks(start2, stop3, count2) {
229796
- var reverse2, i2 = -1, n3, ticks2, step;
229797
229604
  stop3 = +stop3, start2 = +start2, count2 = +count2;
229798
- if (start2 === stop3 && count2 > 0) return [start2];
229799
- if (reverse2 = stop3 < start2) n3 = start2, start2 = stop3, stop3 = n3;
229800
- if ((step = tickIncrement(start2, stop3, count2)) === 0 || !isFinite(step)) return [];
229801
- if (step > 0) {
229802
- let r0 = Math.round(start2 / step), r1 = Math.round(stop3 / step);
229803
- if (r0 * step < start2) ++r0;
229804
- if (r1 * step > stop3) --r1;
229805
- ticks2 = new Array(n3 = r1 - r0 + 1);
229806
- while (++i2 < n3) ticks2[i2] = (r0 + i2) * step;
229605
+ if (!(count2 > 0)) return [];
229606
+ if (start2 === stop3) return [start2];
229607
+ const reverse2 = stop3 < start2, [i1, i2, inc] = reverse2 ? tickSpec(stop3, start2, count2) : tickSpec(start2, stop3, count2);
229608
+ if (!(i2 >= i1)) return [];
229609
+ const n3 = i2 - i1 + 1, ticks2 = new Array(n3);
229610
+ if (reverse2) {
229611
+ if (inc < 0) for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i2 - i3) / -inc;
229612
+ else for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i2 - i3) * inc;
229807
229613
  } else {
229808
- step = -step;
229809
- let r0 = Math.round(start2 * step), r1 = Math.round(stop3 * step);
229810
- if (r0 / step < start2) ++r0;
229811
- if (r1 / step > stop3) --r1;
229812
- ticks2 = new Array(n3 = r1 - r0 + 1);
229813
- while (++i2 < n3) ticks2[i2] = (r0 + i2) / step;
229614
+ if (inc < 0) for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i1 + i3) / -inc;
229615
+ else for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i1 + i3) * inc;
229814
229616
  }
229815
- if (reverse2) ticks2.reverse();
229816
229617
  return ticks2;
229817
229618
  }
229818
229619
  function tickIncrement(start2, stop3, count2) {
229819
- var step = (stop3 - start2) / Math.max(0, count2), power = Math.floor(Math.log(step) / Math.LN10), error2 = step / Math.pow(10, power);
229820
- 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);
229620
+ stop3 = +stop3, start2 = +start2, count2 = +count2;
229621
+ return tickSpec(start2, stop3, count2)[2];
229821
229622
  }
229822
229623
  function tickStep(start2, stop3, count2) {
229823
- var step0 = Math.abs(stop3 - start2) / Math.max(0, count2), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error2 = step0 / step1;
229824
- if (error2 >= e10) step1 *= 10;
229825
- else if (error2 >= e5) step1 *= 5;
229826
- else if (error2 >= e2) step1 *= 2;
229827
- return stop3 < start2 ? -step1 : step1;
229624
+ stop3 = +stop3, start2 = +start2, count2 = +count2;
229625
+ const reverse2 = stop3 < start2, inc = reverse2 ? tickIncrement(stop3, start2, count2) : tickIncrement(start2, stop3, count2);
229626
+ return (reverse2 ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
229828
229627
  }
229829
229628
  function max$3(values3, valueof) {
229830
229629
  let max2;
@@ -229862,7 +229661,11 @@ function min$3(values3, valueof) {
229862
229661
  }
229863
229662
  return min2;
229864
229663
  }
229865
- function quickselect(array2, k, left2 = 0, right2 = array2.length - 1, compare2) {
229664
+ function quickselect(array2, k, left2 = 0, right2 = Infinity, compare2) {
229665
+ k = Math.floor(k);
229666
+ left2 = Math.floor(Math.max(0, left2));
229667
+ right2 = Math.floor(Math.min(array2.length - 1, right2));
229668
+ if (!(left2 <= k && k <= right2)) return array2;
229866
229669
  compare2 = compare2 === void 0 ? ascendingDefined : compareDefined(compare2);
229867
229670
  while (right2 > left2) {
229868
229671
  if (right2 - left2 > 600) {
@@ -229899,15 +229702,15 @@ function swap$1(array2, i2, j) {
229899
229702
  }
229900
229703
  function quantile$1(values3, p, valueof) {
229901
229704
  values3 = Float64Array.from(numbers$4(values3, valueof));
229902
- if (!(n3 = values3.length)) return;
229903
- if ((p = +p) <= 0 || n3 < 2) return min$3(values3);
229705
+ if (!(n3 = values3.length) || isNaN(p = +p)) return;
229706
+ if (p <= 0 || n3 < 2) return min$3(values3);
229904
229707
  if (p >= 1) return max$3(values3);
229905
229708
  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));
229906
229709
  return value0 + (value1 - value0) * (i2 - i0);
229907
229710
  }
229908
- function quantileSorted(values3, p, valueof = number$9) {
229909
- if (!(n3 = values3.length)) return;
229910
- if ((p = +p) <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
229711
+ function quantileSorted(values3, p, valueof = number$8) {
229712
+ if (!(n3 = values3.length) || isNaN(p = +p)) return;
229713
+ if (p <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
229911
229714
  if (p >= 1) return +valueof(values3[n3 - 1], n3 - 1, values3);
229912
229715
  var n3, i2 = (n3 - 1) * p, i0 = Math.floor(i2), value0 = +valueof(values3[i0], i0, values3), value1 = +valueof(values3[i0 + 1], i0 + 1, values3);
229913
229716
  return value0 + (value1 - value0) * (i2 - i0);
@@ -229942,7 +229745,7 @@ function* flatten$2(arrays) {
229942
229745
  function merge$3(arrays) {
229943
229746
  return Array.from(flatten$2(arrays));
229944
229747
  }
229945
- function range$9(start2, stop3, step) {
229748
+ function range$8(start2, stop3, step) {
229946
229749
  start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
229947
229750
  var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
229948
229751
  while (++i2 < n3) {
@@ -230613,7 +230416,7 @@ function object$1(a2, b2) {
230613
230416
  };
230614
230417
  }
230615
230418
  var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, reB = new RegExp(reA.source, "g");
230616
- function zero$4(b2) {
230419
+ function zero$3(b2) {
230617
230420
  return function() {
230618
230421
  return b2;
230619
230422
  };
@@ -230646,7 +230449,7 @@ function string(a2, b2) {
230646
230449
  if (s2[i2]) s2[i2] += bs;
230647
230450
  else s2[++i2] = bs;
230648
230451
  }
230649
- return s2.length < 2 ? q[0] ? one$2(q[0].x) : zero$4(b2) : (b2 = q.length, function(t4) {
230452
+ return s2.length < 2 ? q[0] ? one$2(q[0].x) : zero$3(b2) : (b2 = q.length, function(t4) {
230650
230453
  for (var i22 = 0, o2; i22 < b2; ++i22) s2[(o2 = q[i22]).i] = o2.x(t4);
230651
230454
  return s2.join("");
230652
230455
  });
@@ -230912,7 +230715,7 @@ function constants$1(x2) {
230912
230715
  return x2;
230913
230716
  };
230914
230717
  }
230915
- function number$8(x2) {
230718
+ function number$7(x2) {
230916
230719
  return +x2;
230917
230720
  }
230918
230721
  var unit$1 = [0, 1];
@@ -230950,7 +230753,7 @@ function polymap(domain2, range2, interpolate2) {
230950
230753
  r3[i2] = interpolate2(range2[i2], range2[i2 + 1]);
230951
230754
  }
230952
230755
  return function(x2) {
230953
- var i22 = bisectRight$2(domain2, x2, 1, j) - 1;
230756
+ var i22 = bisectRight$1(domain2, x2, 1, j) - 1;
230954
230757
  return r3[i22](d[i22](x2));
230955
230758
  };
230956
230759
  }
@@ -230973,7 +230776,7 @@ function transformer$3() {
230973
230776
  return clamp2(untransform((input || (input = piecewise2(range2, domain2.map(transform3), interpolateNumber)))(y2)));
230974
230777
  };
230975
230778
  scale2.domain = function(_) {
230976
- return arguments.length ? (domain2 = Array.from(_, number$8), rescale()) : domain2.slice();
230779
+ return arguments.length ? (domain2 = Array.from(_, number$7), rescale()) : domain2.slice();
230977
230780
  };
230978
230781
  scale2.range = function(_) {
230979
230782
  return arguments.length ? (range2 = Array.from(_), rescale()) : range2.slice();
@@ -231293,7 +231096,7 @@ function identity$6(domain2) {
231293
231096
  }
231294
231097
  scale2.invert = scale2;
231295
231098
  scale2.domain = scale2.range = function(_) {
231296
- return arguments.length ? (domain2 = Array.from(_, number$8), scale2) : domain2.slice();
231099
+ return arguments.length ? (domain2 = Array.from(_, number$7), scale2) : domain2.slice();
231297
231100
  };
231298
231101
  scale2.unknown = function(_) {
231299
231102
  return arguments.length ? (unknown = _, scale2) : unknown;
@@ -231301,7 +231104,7 @@ function identity$6(domain2) {
231301
231104
  scale2.copy = function() {
231302
231105
  return identity$6(domain2).unknown(unknown);
231303
231106
  };
231304
- domain2 = arguments.length ? Array.from(domain2, number$8) : [0, 1];
231107
+ domain2 = arguments.length ? Array.from(domain2, number$7) : [0, 1];
231305
231108
  return linearish(scale2);
231306
231109
  }
231307
231110
  function nice$1(domain2, interval2) {
@@ -231491,7 +231294,7 @@ function quantile() {
231491
231294
  return scale2;
231492
231295
  }
231493
231296
  function scale2(x2) {
231494
- return x2 == null || isNaN(x2 = +x2) ? unknown : range2[bisectRight$2(thresholds, x2)];
231297
+ return x2 == null || isNaN(x2 = +x2) ? unknown : range2[bisectRight$1(thresholds, x2)];
231495
231298
  }
231496
231299
  scale2.invertExtent = function(y2) {
231497
231300
  var i2 = range2.indexOf(y2);
@@ -231504,7 +231307,7 @@ function quantile() {
231504
231307
  if (!arguments.length) return domain2.slice();
231505
231308
  domain2 = [];
231506
231309
  for (let d of _) if (d != null && !isNaN(d = +d)) domain2.push(d);
231507
- domain2.sort(ascending$5);
231310
+ domain2.sort(ascending$4);
231508
231311
  return rescale();
231509
231312
  };
231510
231313
  scale2.range = function(_) {
@@ -231524,7 +231327,7 @@ function quantile() {
231524
231327
  function quantize$2() {
231525
231328
  var x02 = 0, x12 = 1, n3 = 1, domain2 = [0.5], range2 = [0, 1], unknown;
231526
231329
  function scale2(x2) {
231527
- return x2 != null && x2 <= x2 ? range2[bisectRight$2(domain2, x2, 0, n3)] : unknown;
231330
+ return x2 != null && x2 <= x2 ? range2[bisectRight$1(domain2, x2, 0, n3)] : unknown;
231528
231331
  }
231529
231332
  function rescale() {
231530
231333
  var i2 = -1;
@@ -231556,7 +231359,7 @@ function quantize$2() {
231556
231359
  function threshold() {
231557
231360
  var domain2 = [0.5], range2 = [0, 1], unknown, n3 = 1;
231558
231361
  function scale2(x2) {
231559
- return x2 != null && x2 <= x2 ? range2[bisectRight$2(domain2, x2, 0, n3)] : unknown;
231362
+ return x2 != null && x2 <= x2 ? range2[bisectRight$1(domain2, x2, 0, n3)] : unknown;
231560
231363
  }
231561
231364
  scale2.domain = function(_) {
231562
231365
  return arguments.length ? (domain2 = Array.from(_), n3 = Math.min(domain2.length, range2.length - 1), scale2) : domain2.slice();
@@ -231870,7 +231673,7 @@ function ticker(year2, month2, week2, day2, hour2, minute2) {
231870
231673
  }
231871
231674
  function tickInterval(start2, stop3, count2) {
231872
231675
  const target2 = Math.abs(stop3 - start2) / count2;
231873
- const i2 = bisector$2(([, , step2]) => step2).right(tickIntervals, target2);
231676
+ const i2 = bisector$1(([, , step2]) => step2).right(tickIntervals, target2);
231874
231677
  if (i2 === tickIntervals.length) return year2.every(tickStep(start2 / durationYear$1, stop3 / durationYear$1, count2));
231875
231678
  if (i2 === 0) return millisecond.every(Math.max(tickStep(start2, stop3, count2), 1));
231876
231679
  const [t4, step] = tickIntervals[target2 / tickIntervals[i2 - 1][2] < tickIntervals[i2][2] / target2 ? i2 - 1 : i2];
@@ -232442,7 +232245,7 @@ function defaultLocale$1(definition2) {
232442
232245
  function date(t4) {
232443
232246
  return new Date(t4);
232444
232247
  }
232445
- function number$7(t4) {
232248
+ function number$6(t4) {
232446
232249
  return t4 instanceof Date ? +t4 : +/* @__PURE__ */ new Date(+t4);
232447
232250
  }
232448
232251
  function calendar(ticks2, tickInterval, year2, month2, week2, day2, hour2, minute2, second2, format2) {
@@ -232455,7 +232258,7 @@ function calendar(ticks2, tickInterval, year2, month2, week2, day2, hour2, minut
232455
232258
  return new Date(invert2(y2));
232456
232259
  };
232457
232260
  scale2.domain = function(_) {
232458
- return arguments.length ? domain2(Array.from(_, number$7)) : domain2().map(date);
232261
+ return arguments.length ? domain2(Array.from(_, number$6)) : domain2().map(date);
232459
232262
  };
232460
232263
  scale2.ticks = function(interval2) {
232461
232264
  var d = domain2();
@@ -232615,7 +232418,7 @@ function translateX(x2) {
232615
232418
  function translateY(y2) {
232616
232419
  return "translate(0," + y2 + ")";
232617
232420
  }
232618
- function number$6(scale2) {
232421
+ function number$5(scale2) {
232619
232422
  return (d) => +scale2(d);
232620
232423
  }
232621
232424
  function center(scale2, offset2) {
@@ -232629,7 +232432,7 @@ function entering() {
232629
232432
  function axis(orient2, scale2) {
232630
232433
  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;
232631
232434
  function axis2(context2) {
232632
- 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");
232435
+ 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");
232633
232436
  path2 = path2.merge(path2.enter().insert("path", ".tick").attr("class", "domain").attr("stroke", "currentColor"));
232634
232437
  tick2 = tick2.merge(tickEnter);
232635
232438
  line2 = line2.merge(tickEnter.append("line").attr("stroke", "currentColor").attr(x2 + "2", k * tickSizeInner));
@@ -232762,6 +232565,9 @@ function ramp(color2, n3 = 256) {
232762
232565
  canvas.width = n3;
232763
232566
  canvas.height = 1;
232764
232567
  const context2 = canvas.getContext("2d");
232568
+ if (!context2) {
232569
+ throw new Error("Could not get 2d context from canvas");
232570
+ }
232765
232571
  for (let i2 = 0; i2 < n3; ++i2) {
232766
232572
  context2.fillStyle = color2(i2 / (n3 - 1));
232767
232573
  context2.fillRect(i2, 0, 1, 1);
@@ -232780,6 +232586,8 @@ function getXlinkHref(cmap) {
232780
232586
  }
232781
232587
  const useStyles$q = makeStyles()(() => ({
232782
232588
  legend: {
232589
+ position: "relative",
232590
+ // Needed for absolute positioning of slider overlay
232783
232591
  top: "2px",
232784
232592
  right: "2px",
232785
232593
  fontSize: "10px !important",
@@ -232811,6 +232619,74 @@ const useStyles$q = makeStyles()(() => ({
232811
232619
  },
232812
232620
  legendInvisible: {
232813
232621
  display: "none"
232622
+ },
232623
+ sliderContainer: {
232624
+ position: "absolute",
232625
+ // Position at the colormap location: top offset = titleHeight
232626
+ top: "10px",
232627
+ // titleHeight
232628
+ left: "2px",
232629
+ // Account for parent padding
232630
+ width: "calc(100% - 4px)",
232631
+ // Account for left and right padding
232632
+ height: "8px",
232633
+ // rectHeight
232634
+ "&:hover $sliderThumb": {
232635
+ opacity: 1
232636
+ }
232637
+ },
232638
+ sliderRoot: {
232639
+ position: "absolute",
232640
+ top: 0,
232641
+ left: 0,
232642
+ width: "100%",
232643
+ height: "8px",
232644
+ // rectHeight
232645
+ padding: 0,
232646
+ "& .MuiSlider-rail": {
232647
+ display: "none"
232648
+ },
232649
+ "& .MuiSlider-track": {
232650
+ display: "none"
232651
+ },
232652
+ "& .MuiSlider-valueLabel": {
232653
+ fontSize: "9px",
232654
+ padding: "2px 4px",
232655
+ backgroundColor: "rgb(0, 0, 0)",
232656
+ borderRadius: "2px"
232657
+ }
232658
+ },
232659
+ sliderThumb: {
232660
+ width: "4px",
232661
+ height: "12px",
232662
+ borderRadius: "2px",
232663
+ backgroundColor: "white",
232664
+ border: "1px solid black",
232665
+ opacity: 0,
232666
+ transition: "opacity 0.15s ease-in-out",
232667
+ "&:hover, &.Mui-focusVisible": {
232668
+ boxShadow: "0 0 0 4px rgba(0, 0, 0, 0.16)",
232669
+ opacity: 1
232670
+ },
232671
+ "&.Mui-active": {
232672
+ boxShadow: "0 0 0 6px rgba(0, 0, 0, 0.16)",
232673
+ opacity: 1
232674
+ }
232675
+ },
232676
+ colormapImage: {
232677
+ position: "absolute",
232678
+ top: "2px",
232679
+ height: "6px",
232680
+ // rectHeight
232681
+ pointerEvents: "none"
232682
+ },
232683
+ grayTrack: {
232684
+ position: "absolute",
232685
+ top: "2px",
232686
+ height: "6px",
232687
+ // rectHeight
232688
+ backgroundColor: "rgba(128, 128, 128, 0.5)",
232689
+ pointerEvents: "none"
232814
232690
  }
232815
232691
  }));
232816
232692
  const titleHeight = 10;
@@ -232820,21 +232696,23 @@ const rectMarginX = 2;
232820
232696
  function combineExtents(extents, featureAggregationStrategy) {
232821
232697
  if (Array.isArray(extents)) {
232822
232698
  if (Array.isArray(extents?.[0])) {
232699
+ const extentsArray = extents;
232823
232700
  if (featureAggregationStrategy === "first") {
232824
- return extents[0];
232701
+ return extentsArray[0];
232825
232702
  }
232826
232703
  if (featureAggregationStrategy === "last") {
232827
- return extents.at(-1);
232704
+ return extentsArray.at(-1) || null;
232828
232705
  }
232829
232706
  if (typeof featureAggregationStrategy === "number") {
232830
232707
  const i2 = featureAggregationStrategy;
232831
- return extents[i2];
232708
+ return extentsArray[i2];
232832
232709
  }
232833
232710
  if (featureAggregationStrategy === "sum") {
232834
- return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
232711
+ return extentsArray.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
232835
232712
  }
232836
232713
  if (featureAggregationStrategy === "mean") {
232837
- return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]).map((v) => v / extents.length);
232714
+ const sum2 = extentsArray.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
232715
+ return [sum2[0] / extentsArray.length, sum2[1] / extentsArray.length];
232838
232716
  }
232839
232717
  } else {
232840
232718
  return extents;
@@ -232848,7 +232726,7 @@ function combineMissings(missings, featureAggregationStrategy) {
232848
232726
  return missings[0];
232849
232727
  }
232850
232728
  if (featureAggregationStrategy === "last") {
232851
- return missings.at(-1);
232729
+ return missings.at(-1) || null;
232852
232730
  }
232853
232731
  if (typeof featureAggregationStrategy === "number") {
232854
232732
  const i2 = featureAggregationStrategy;
@@ -232864,52 +232742,127 @@ function combineMissings(missings, featureAggregationStrategy) {
232864
232742
  return null;
232865
232743
  }
232866
232744
  function Legend(props) {
232867
- 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;
232868
- const svgRef = useRef();
232745
+ const {
232746
+ visible: visibleProp,
232747
+ positionRelative = false,
232748
+ highContrast = false,
232749
+ obsType,
232750
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
232751
+ featureType: _featureType = void 0,
232752
+ // Unused but accepted for API compatibility
232753
+ featureValueType,
232754
+ considerSelections = true,
232755
+ obsColorEncoding,
232756
+ featureSelection,
232757
+ featureLabelsMap,
232758
+ featureValueColormap,
232759
+ featureValueColormapRange,
232760
+ setFeatureValueColormapRange,
232761
+ spatialChannelColor,
232762
+ spatialLayerColor,
232763
+ obsSetSelection,
232764
+ obsSetColor,
232765
+ featureAggregationStrategy,
232766
+ extent: extent2,
232767
+ missing,
232768
+ width: width2 = 100,
232769
+ height: height2 = 36,
232770
+ maxHeight: maxHeight2 = null,
232771
+ theme,
232772
+ showObsLabel = false,
232773
+ pointsVisible = true,
232774
+ contoursVisible = false,
232775
+ contoursFilled,
232776
+ contourPercentiles,
232777
+ contourThresholds
232778
+ } = props;
232779
+ const svgRef = useRef(null);
232869
232780
  const { classes: classes2 } = useStyles$q();
232781
+ const [localRange, setLocalRange] = useState(featureValueColormapRange);
232782
+ useEffect(() => {
232783
+ setLocalRange(featureValueColormapRange);
232784
+ }, [featureValueColormapRange]);
232785
+ const debouncedSetRange = useMemo$1(() => setFeatureValueColormapRange ? debounce$5((value2) => {
232786
+ setFeatureValueColormapRange(value2);
232787
+ }, 5, { leading: false, trailing: true }) : null, [setFeatureValueColormapRange]);
232788
+ useEffect(() => () => {
232789
+ if (debouncedSetRange) {
232790
+ debouncedSetRange.cancel();
232791
+ }
232792
+ }, [debouncedSetRange]);
232793
+ const handleSliderChange = useCallback((_event, newValue) => {
232794
+ const rangeValue = newValue;
232795
+ setLocalRange(rangeValue);
232796
+ if (debouncedSetRange) {
232797
+ debouncedSetRange(rangeValue);
232798
+ }
232799
+ }, [debouncedSetRange]);
232870
232800
  const isDarkTheme = theme === "dark";
232871
232801
  const isStaticColor = obsColorEncoding === "spatialChannelColor" || obsColorEncoding === "spatialLayerColor";
232872
232802
  const isSetColor = obsColorEncoding === "cellSetSelection";
232873
- const layerColor = Array.isArray(spatialLayerColor) && spatialLayerColor.length === 3 ? spatialLayerColor : getDefaultColor(theme);
232874
- const channelColor = Array.isArray(spatialChannelColor) && spatialChannelColor.length === 3 ? spatialChannelColor : getDefaultColor(theme);
232803
+ const layerColor = Array.isArray(spatialLayerColor) && spatialLayerColor.length === 3 ? spatialLayerColor : getDefaultColor(theme ?? "light");
232804
+ const channelColor = Array.isArray(spatialChannelColor) && spatialChannelColor.length === 3 ? spatialChannelColor : getDefaultColor(theme ?? "light");
232875
232805
  const staticColor = obsColorEncoding === "spatialChannelColor" ? channelColor : layerColor;
232876
- const visible = visibleProp && (!considerSelections || obsColorEncoding === "geneSelection" && featureSelection && Array.isArray(featureSelection) && featureSelection.length >= 1 || isSetColor && obsSetSelection?.length > 0 && obsSetColor?.length > 0 || isStaticColor);
232806
+ 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);
232877
232807
  const levelZeroNames = useMemo$1(() => Array.from(new Set(obsSetSelection?.map((setPath) => setPath[0]) || [])), [obsSetSelection]);
232878
- const dynamicHeight = isSetColor && obsSetSelection ? levelZeroNames.length * titleHeight + obsSetSelection?.length * (rectHeight + rectMarginY) : height2 + (!pointsVisible && contoursVisible ? 25 : 0);
232808
+ const dynamicHeight = isSetColor && obsSetSelection ? levelZeroNames.length * titleHeight + (obsSetSelection?.length ?? 0) * (rectHeight + rectMarginY) : height2 + (!pointsVisible && contoursVisible ? 25 : 0);
232879
232809
  const availHeight = maxHeight2 !== null ? Math.max(0, maxHeight2 - 4) : Infinity;
232880
232810
  const needsScroll = Number.isFinite(availHeight) && dynamicHeight > availHeight + 1;
232881
232811
  useEffect(() => {
232882
232812
  const domElement = svgRef.current;
232813
+ if (!domElement)
232814
+ return;
232883
232815
  const foregroundColor = highContrast ? "black" : isDarkTheme ? "white" : "black";
232884
232816
  const svg2 = select$1(domElement);
232885
232817
  svg2.selectAll("g").remove();
232886
232818
  svg2.attr("width", width2).attr("height", dynamicHeight);
232887
232819
  const g2 = svg2.append("g").attr("width", width2).attr("height", dynamicHeight);
232888
- if (!considerSelections || obsColorEncoding === "geneSelection") {
232889
- const [xMin, xMax] = combineExtents(extent2, featureAggregationStrategy) || [0, 1];
232820
+ const showInteractiveSlider2 = setFeatureValueColormapRange && ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "") && pointsVisible && featureValueColormap;
232821
+ if (!considerSelections || ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "")) {
232822
+ const combinedExtent = combineExtents(extent2 ?? null, featureAggregationStrategy ?? null) || [0, 1];
232823
+ const [xMin, xMax] = combinedExtent;
232890
232824
  if (featureValueColormap && pointsVisible) {
232891
- const xlinkHref = getXlinkHref(featureValueColormap);
232892
- g2.append("image").attr("x", 0).attr("y", titleHeight).attr("width", width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref);
232893
- const [rMin, rMax] = featureValueColormapRange;
232825
+ const xlinkHref2 = getXlinkHref(featureValueColormap);
232826
+ const currentRange = showInteractiveSlider2 ? localRange : featureValueColormapRange;
232827
+ const [rMin, rMax] = currentRange || [0, 1];
232828
+ if (showInteractiveSlider2) ;
232829
+ else if (setFeatureValueColormapRange) {
232830
+ g2.append("image").attr("x", rMin * width2).attr("y", titleHeight).attr("width", (rMax - rMin) * width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref2);
232831
+ } else {
232832
+ g2.append("image").attr("x", 0).attr("y", titleHeight).attr("width", width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref2);
232833
+ }
232894
232834
  const scaledDataExtent = [
232895
232835
  xMin + (xMax - xMin) * rMin,
232896
232836
  xMax - (xMax - xMin) * (1 - rMax)
232897
232837
  ];
232898
- const x2 = linear$1().domain(scaledDataExtent).range([0.5, width2 - 0.5]);
232899
- const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(x2).tickValues(scaledDataExtent));
232900
- axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
232901
- axisTicks2.selectAll("text").style("fill", foregroundColor);
232902
- axisTicks2.selectAll("text").attr("text-anchor", (d, i2) => i2 === 0 ? "start" : "end");
232903
- } else if (contoursVisible) {
232838
+ let x2;
232839
+ if (setFeatureValueColormapRange || showInteractiveSlider2) {
232840
+ x2 = linear$1().domain(scaledDataExtent).range([rMin * width2, rMax * width2]);
232841
+ } else {
232842
+ x2 = linear$1().domain(scaledDataExtent).range([0, width2]);
232843
+ }
232844
+ if (showInteractiveSlider2) {
232845
+ const xGlobal = linear$1().domain([xMin, xMax]).range([0, width2 - 4]);
232846
+ const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(xGlobal).tickValues([xMin, xMax]));
232847
+ axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
232848
+ axisTicks2.selectAll("text").style("fill", foregroundColor);
232849
+ axisTicks2.selectAll("text").attr("text-anchor", (_d2, i2) => i2 === 0 ? "start" : "end");
232850
+ } else {
232851
+ const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(x2).tickValues(scaledDataExtent));
232852
+ axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
232853
+ axisTicks2.selectAll("text").style("fill", foregroundColor);
232854
+ axisTicks2.selectAll("text").attr("text-anchor", (_d2, i2) => i2 === 0 ? "start" : "end");
232855
+ }
232856
+ } else if (contoursVisible && contourPercentiles) {
232904
232857
  const tSize = 12;
232905
232858
  const xPercentile = linear$1().domain([0, 1]).range([tSize / 2, width2 - tSize / 2 - 2]);
232906
- 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));
232859
+ 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));
232907
232860
  axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
232908
232861
  axisTicks2.selectAll("text").style("fill", foregroundColor);
232909
232862
  const NEIGHBOR_THRESHOLD = 18;
232910
- const contourPercentages = contourPercentiles.map((x2) => x2 * 100);
232863
+ const contourPercentages = contourPercentiles.map((p) => p * 100);
232911
232864
  if (contourPercentages?.[1] - contourPercentages?.[0] <= NEIGHBOR_THRESHOLD || contourPercentages?.[2] - contourPercentages?.[1] <= NEIGHBOR_THRESHOLD) {
232912
- axisTicks2.selectAll("text").attr("transform", (d, i2) => `translate(0,${i2 === 0 || i2 === contourPercentiles.length - 1 ? 0 : 10})`);
232865
+ axisTicks2.selectAll("text").attr("transform", (_d2, i2) => `translate(0,${i2 === 0 || i2 === contourPercentiles.length - 1 ? 0 : 10})`);
232913
232866
  }
232914
232867
  const triangleGroupG = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight + 4})`);
232915
232868
  contourPercentiles.forEach((p, i2) => {
@@ -232919,7 +232872,7 @@ function Legend(props) {
232919
232872
  const thresholdGroupG = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`);
232920
232873
  const thresholdFormatter = format$8(".0f");
232921
232874
  contourPercentiles.forEach((p, i2) => {
232922
- const contourThreshold = xMin + (xMax - xMin) * (contourThresholds?.[i2] / 255);
232875
+ const contourThreshold = xMin + (xMax - xMin) * ((contourThresholds?.[i2] ?? 0) / 255);
232923
232876
  const thresholdG = thresholdGroupG.append("g").attr("transform", `translate(${xPercentile(p)},0)`).style("font-size", "7px");
232924
232877
  thresholdG.append("text").text(thresholdFormatter(contourThreshold)).style("fill", foregroundColor).attr("text-anchor", "middle");
232925
232878
  });
@@ -232942,9 +232895,9 @@ function Legend(props) {
232942
232895
  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);
232943
232896
  y2 += titleHeight;
232944
232897
  setPaths.forEach((setPath) => {
232945
- const setColor2 = obsSetColor?.find((d) => isEqual$3(d.path, setPath))?.color || getDefaultColor(theme);
232898
+ const setColor2 = obsSetColor?.find((d) => isEqual$3(d.path, setPath))?.color || getDefaultColor(theme ?? "light");
232946
232899
  g2.append("rect").attr("x", 0).attr("y", y2).attr("width", rectHeight).attr("height", rectHeight).attr("fill", `rgb(${setColor2[0]},${setColor2[1]},${setColor2[2]})`);
232947
- 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);
232900
+ 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);
232948
232901
  y2 += rectHeight + rectMarginY;
232949
232902
  });
232950
232903
  });
@@ -232965,17 +232918,17 @@ function Legend(props) {
232965
232918
  } else {
232966
232919
  featureSelectionLabelRawStr = featureSelectionLabelRaw?.[0];
232967
232920
  }
232968
- const combinedMissing = combineMissings(missing, featureAggregationStrategy);
232921
+ const combinedMissing = combineMissings(missing ?? null, featureAggregationStrategy ?? null);
232969
232922
  const featureSelectionLabel = combinedMissing ? `${featureSelectionLabelRawStr} (${Math.round(combinedMissing * 100)}% NaN)` : featureSelectionLabelRawStr;
232970
- const obsLabel = capitalize$3(obsType);
232971
- const featureLabel = considerSelections ? featureSelectionLabel || capitalize$3(featureValueType) : capitalize$3(featureValueType);
232923
+ const obsLabel = capitalize$3(obsType ?? null);
232924
+ const featureLabel = considerSelections ? featureSelectionLabel || capitalize$3(featureValueType ?? null) : capitalize$3(featureValueType ?? null);
232972
232925
  const mainLabel = showObsLabel ? obsLabel : featureLabel;
232973
232926
  const subLabel = showObsLabel ? featureLabel : null;
232974
232927
  const hasSubLabel = subLabel !== null;
232975
232928
  if (!isSetColor) {
232976
- 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);
232929
+ 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);
232977
232930
  if (hasSubLabel) {
232978
- 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);
232931
+ 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);
232979
232932
  }
232980
232933
  }
232981
232934
  }, [
@@ -232983,6 +232936,7 @@ function Legend(props) {
232983
232936
  height2,
232984
232937
  featureValueColormap,
232985
232938
  featureValueColormapRange,
232939
+ localRange,
232986
232940
  considerSelections,
232987
232941
  obsType,
232988
232942
  obsColorEncoding,
@@ -233001,20 +232955,63 @@ function Legend(props) {
233001
232955
  contoursFilled,
233002
232956
  contoursVisible,
233003
232957
  pointsVisible,
233004
- featureAggregationStrategy
232958
+ featureAggregationStrategy,
232959
+ setFeatureValueColormapRange,
232960
+ dynamicHeight,
232961
+ highContrast,
232962
+ isStaticColor,
232963
+ missing,
232964
+ showObsLabel,
232965
+ staticColor
233005
232966
  ]);
233006
- return jsxRuntimeExports.jsx("div", { className: clsx(classes2.legend, {
232967
+ const showInteractiveSlider = setFeatureValueColormapRange && ["geneSelection", "geneExpression"].includes(obsColorEncoding ?? "") && pointsVisible && featureValueColormap;
232968
+ const globalExtent = useMemo$1(() => {
232969
+ const combined = combineExtents(extent2 ?? null, featureAggregationStrategy ?? null);
232970
+ return combined || [0, 1];
232971
+ }, [extent2, featureAggregationStrategy]);
232972
+ const formatSliderValue = useCallback((value2) => {
232973
+ const [xMin, xMax] = globalExtent;
232974
+ const dataValue = xMin + (xMax - xMin) * value2;
232975
+ const range2 = xMax - xMin;
232976
+ if (range2 < 0.01) {
232977
+ return dataValue.toExponential(2);
232978
+ }
232979
+ if (range2 < 1) {
232980
+ return dataValue.toFixed(3);
232981
+ }
232982
+ if (range2 < 100) {
232983
+ return dataValue.toFixed(1);
232984
+ }
232985
+ return Math.round(dataValue).toString();
232986
+ }, [globalExtent]);
232987
+ const xlinkHref = featureValueColormap ? getXlinkHref(featureValueColormap) : null;
232988
+ const currentLocalRange = localRange || [0, 1];
232989
+ return jsxRuntimeExports.jsxs("div", { className: clsx(classes2.legend, {
233007
232990
  [classes2.legendRelative]: positionRelative,
233008
232991
  [classes2.legendAbsolute]: !positionRelative,
233009
232992
  [classes2.legendHighContrast]: highContrast,
233010
232993
  [classes2.legendLowContrast]: !highContrast,
233011
232994
  [classes2.legendInvisible]: !visible
233012
232995
  }), style: {
233013
- ...needsScroll ? { maxHeight: `${Math.floor(availHeight)}px`, overflowY: "auto" } : { maxHeight: void 0, overflowY: "visible" }
233014
- }, children: jsxRuntimeExports.jsx("svg", { ref: svgRef, style: {
232996
+ ...needsScroll ? { maxHeight: `${Math.floor(availHeight)}px`, overflowY: "auto" } : { maxHeight: void 0, overflowY: "visible" },
232997
+ width: `${width2}px`
232998
+ }, children: [jsxRuntimeExports.jsx("svg", { ref: svgRef, style: {
233015
232999
  width: `${width2}px`,
233016
233000
  height: `${dynamicHeight}px`
233017
- } }) });
233001
+ } }), showInteractiveSlider && xlinkHref && jsxRuntimeExports.jsxs("div", { className: classes2.sliderContainer, children: [currentLocalRange[0] > 0 && jsxRuntimeExports.jsx("div", { className: classes2.grayTrack, style: {
233002
+ left: 0,
233003
+ width: `${currentLocalRange[0] * 100}%`
233004
+ } }), currentLocalRange[1] < 1 && jsxRuntimeExports.jsx("div", { className: classes2.grayTrack, style: {
233005
+ left: `${currentLocalRange[1] * 100}%`,
233006
+ width: `${(1 - currentLocalRange[1]) * 100}%`
233007
+ } }), jsxRuntimeExports.jsx("img", { src: xlinkHref, alt: "Colormap gradient", className: classes2.colormapImage, style: {
233008
+ left: `${currentLocalRange[0] * 100}%`,
233009
+ width: `${(currentLocalRange[1] - currentLocalRange[0]) * 100}%`
233010
+ } }), 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: {
233011
+ thumb: {
233012
+ className: classes2.sliderThumb
233013
+ }
233014
+ } })] })] });
233018
233015
  }
233019
233016
  const useStyles$p = makeStyles()(() => ({
233020
233017
  multiLegend: {
@@ -233047,8 +233044,12 @@ function MultiLegend(props) {
233047
233044
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
233048
233045
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].reverse(), [pointLayerScopes]);
233049
233046
  return jsxRuntimeExports.jsxs("div", { className: classes2.multiLegend, children: [pointLayerScopes ? reversedPointLayerScopes.flatMap((layerScope) => {
233050
- const layerCoordination = pointLayerCoordination[0][layerScope];
233051
- const { spatialLayerVisible, obsColorEncoding, obsType, featureType, featureValueType, spatialLayerColor, legendVisible } = layerCoordination;
233047
+ const layerCoordination = pointLayerCoordination?.[0]?.[layerScope];
233048
+ const layerSetters = pointLayerCoordination?.[1]?.[layerScope];
233049
+ if (!layerCoordination)
233050
+ return null;
233051
+ const { spatialLayerVisible, obsColorEncoding, obsType, featureType, featureValueType, featureSelection, featureValueColormap, featureValueColormapRange, spatialLayerColor, legendVisible } = layerCoordination;
233052
+ const { setFeatureValueColormapRange } = layerSetters || {};
233052
233053
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
233053
233054
  const height2 = isStaticColor ? 20 : 36;
233054
233055
  return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, {
@@ -233063,30 +233064,39 @@ function MultiLegend(props) {
233063
233064
  featureValueType,
233064
233065
  obsColorEncoding,
233065
233066
  spatialLayerColor,
233066
- featureSelection: null,
233067
+ featureSelection,
233067
233068
  // featureLabelsMap={featureLabelsMap} // TODO
233068
- featureValueColormap: "viridis",
233069
- featureValueColormapRange: [0, 1],
233069
+ featureValueColormap: featureValueColormap || "viridis",
233070
+ featureValueColormapRange: featureValueColormapRange || [0, 1],
233071
+ setFeatureValueColormapRange,
233070
233072
  extent: null,
233071
233073
  height: height2
233072
233074
  }, layerScope) : null;
233073
233075
  }) : null, spotLayerScopes ? reversedSpotLayerScopes.flatMap((layerScope) => {
233074
- const layerCoordination = spotLayerCoordination[0][layerScope];
233076
+ const layerCoordination = spotLayerCoordination?.[0][layerScope];
233077
+ const layerSetters = spotLayerCoordination?.[1]?.[layerScope];
233078
+ if (!layerCoordination)
233079
+ return null;
233075
233080
  const { spatialLayerVisible, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, spatialLayerColor, legendVisible, obsSetSelection, obsSetColor } = layerCoordination;
233081
+ const { setFeatureValueColormapRange } = layerSetters || {};
233076
233082
  const expressionExtents = spotMultiExpressionExtents?.[layerScope];
233077
233083
  const firstExpressionExtent = expressionExtents?.[0];
233078
233084
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
233079
233085
  const height2 = isStaticColor ? 20 : 36;
233080
233086
  const featureLabelsMap = spotMultiFeatureLabels?.[layerScope]?.featureLabelsMap;
233081
- 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;
233087
+ 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;
233082
233088
  }) : null, segmentationLayerScopes ? reversedSegmentationLayerScopes.flatMap((layerScope) => {
233083
- const layerCoordination = segmentationLayerCoordination[0][layerScope];
233084
- const channelScopes = segmentationChannelScopesByLayer[layerScope];
233085
- const channelCoordination = segmentationChannelCoordination[0][layerScope];
233089
+ const layerCoordination = segmentationLayerCoordination?.[0][layerScope];
233090
+ const channelScopes = segmentationChannelScopesByLayer?.[layerScope];
233091
+ const channelCoordination = segmentationChannelCoordination?.[0][layerScope];
233092
+ const channelSetters = segmentationChannelCoordination?.[1]?.[layerScope];
233093
+ if (!layerCoordination)
233094
+ return null;
233086
233095
  const { spatialLayerVisible } = layerCoordination;
233087
233096
  const reversedChannelScopes = [...channelScopes || []].reverse();
233088
233097
  return channelCoordination && channelScopes ? reversedChannelScopes.map((cScope) => {
233089
233098
  const { spatialChannelVisible, spatialChannelColor, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, legendVisible, obsSetSelection, obsSetColor } = channelCoordination[cScope];
233099
+ const { setFeatureValueColormapRange } = channelSetters?.[cScope] || {};
233090
233100
  const expressionExtents = segmentationMultiExpressionExtents?.[layerScope]?.[cScope];
233091
233101
  const firstExpressionExtent = expressionExtents?.[0];
233092
233102
  const isStaticColor = obsColorEncoding === "spatialChannelColor";
@@ -233107,6 +233117,7 @@ function MultiLegend(props) {
233107
233117
  // featureLabelsMap={featureLabelsMap} // TODO
233108
233118
  featureValueColormap,
233109
233119
  featureValueColormapRange,
233120
+ setFeatureValueColormapRange,
233110
233121
  extent: firstExpressionExtent,
233111
233122
  height: height2,
233112
233123
  spatialChannelColor,
@@ -233156,7 +233167,7 @@ function ChannelNamesLegend(props) {
233156
233167
  const imageWrapperInstance = images?.[layerScope]?.image?.instance;
233157
233168
  const channelNames = imageWrapperInstance?.getChannelNames();
233158
233169
  const channelIndex = imageWrapperInstance?.getChannelIndex(spatialTargetC);
233159
- const channelName = channelNames?.[channelIndex];
233170
+ const channelName = channelIndex !== void 0 ? channelNames?.[channelIndex] : void 0;
233160
233171
  return spatialLayerVisible && spatialChannelVisible && spatialChannelLabelsVisible ? jsxRuntimeExports.jsx(Typography, { variant: "h6", className: classes2.channelNameText, style: {
233161
233172
  color: rgbColor,
233162
233173
  fontSize: `${spatialChannelLabelSize}px`
@@ -233315,7 +233326,7 @@ function EmbeddingScatterplotSubscriber(props) {
233315
233326
  }, [obsEmbedding]);
233316
233327
  useEffect(() => {
233317
233328
  if (xRange && yRange && width2 && height2) {
233318
- const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2);
233329
+ const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2, numCells);
233319
233330
  setDynamicCellRadius(pointSizeDevicePixels);
233320
233331
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
233321
233332
  setDynamicCellOpacity(nextCellOpacityScale);
@@ -233354,7 +233365,14 @@ function EmbeddingScatterplotSubscriber(props) {
233354
233365
  const getCellIsSelected = useCallback((object2, { index: index2 }) => (cellSelectionSet || /* @__PURE__ */ new Set([])).has(obsEmbeddingIndex[index2]) ? 1 : 0, [cellSelectionSet, obsEmbeddingIndex]);
233355
233366
  const cellRadius = cellRadiusMode === "manual" ? cellRadiusFixed : dynamicCellRadius;
233356
233367
  const cellOpacity = cellOpacityMode === "manual" ? cellOpacityFixed : dynamicCellOpacity;
233357
- const { normData: uint8ExpressionData, extents: expressionExtents, missing: expressionMissing } = useUint8FeatureSelection(expressionData);
233368
+ const aggregatedExpressionData = useMemo$1(() => {
233369
+ if (featureAggregationStrategyToUse != null && expressionData && expressionData.length > 1) {
233370
+ const aggregated = aggregateFeatureArrays(expressionData, featureAggregationStrategyToUse);
233371
+ return [aggregated];
233372
+ }
233373
+ return expressionData;
233374
+ }, [expressionData, featureAggregationStrategyToUse]);
233375
+ const { normData: uint8ExpressionData, extents: expressionExtents, missing: expressionMissing } = useUint8FeatureSelection(aggregatedExpressionData);
233358
233376
  const getExpressionValue = useExpressionValueGetter({
233359
233377
  instanceObsIndex: obsEmbeddingIndex,
233360
233378
  matrixObsIndex,
@@ -233516,6 +233534,7 @@ function EmbeddingScatterplotSubscriber(props) {
233516
233534
  featureLabelsMap,
233517
233535
  featureValueColormap: geneExpressionColormap,
233518
233536
  featureValueColormapRange: geneExpressionColormapRange,
233537
+ setFeatureValueColormapRange: setGeneExpressionColormapRange,
233519
233538
  obsSetSelection: cellSetSelection,
233520
233539
  extent: expressionExtents,
233521
233540
  missing: expressionMissing,
@@ -233743,7 +233762,7 @@ function GatingSubscriber(props) {
233743
233762
  }, [obsXY]);
233744
233763
  useEffect(() => {
233745
233764
  if (xRange && yRange) {
233746
- const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2);
233765
+ const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2, numCells);
233747
233766
  setDynamicCellRadius(pointSizeDevicePixels);
233748
233767
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
233749
233768
  setDynamicCellOpacity(nextCellOpacityScale);
@@ -248409,7 +248428,7 @@ var equalScalar = /* @__PURE__ */ createEqualScalar({
248409
248428
  config: config$2,
248410
248429
  typed
248411
248430
  });
248412
- var number$5 = /* @__PURE__ */ createNumber({
248431
+ var number$4 = /* @__PURE__ */ createNumber({
248413
248432
  typed
248414
248433
  });
248415
248434
  var multiplyScalar = /* @__PURE__ */ createMultiplyScalar({
@@ -248526,7 +248545,7 @@ var pow$4 = /* @__PURE__ */ createPow({
248526
248545
  identity: identity$4,
248527
248546
  matrix,
248528
248547
  multiply,
248529
- number: number$5,
248548
+ number: number$4,
248530
248549
  typed
248531
248550
  });
248532
248551
  var bignumber = /* @__PURE__ */ createBignumber({
@@ -248536,7 +248555,7 @@ var bignumber = /* @__PURE__ */ createBignumber({
248536
248555
  var numeric$1 = /* @__PURE__ */ createNumeric({
248537
248556
  bignumber,
248538
248557
  fraction,
248539
- number: number$5
248558
+ number: number$4
248540
248559
  });
248541
248560
  var subtract = /* @__PURE__ */ createSubtract({
248542
248561
  DenseMatrix,
@@ -248630,7 +248649,7 @@ var Unit = /* @__PURE__ */ createUnitClass({
248630
248649
  format: format$4,
248631
248650
  isNumeric: isNumeric$1,
248632
248651
  multiplyScalar,
248633
- number: number$5,
248652
+ number: number$4,
248634
248653
  pow: pow$4,
248635
248654
  round,
248636
248655
  subtract
@@ -250324,7 +250343,7 @@ let Array$2 = class Array2 extends (_a$5 = Location$1, _a$5) {
250324
250343
  return is_dtype$1(this.dtype, query);
250325
250344
  }
250326
250345
  };
250327
- function* range$8(start2, stop3, step = 1) {
250346
+ function* range$7(start2, stop3, step = 1) {
250328
250347
  if (stop3 === void 0) {
250329
250348
  stop3 = start2;
250330
250349
  start2 = 0;
@@ -250468,7 +250487,7 @@ let SliceDimIndexer$1 = class SliceDimIndexer {
250468
250487
  *[Symbol.iterator]() {
250469
250488
  const dim_chunk_ix_from = Math.floor(this.start / this.dim_chunk_len);
250470
250489
  const dim_chunk_ix_to = Math.ceil(this.stop / this.dim_chunk_len);
250471
- for (const dim_chunk_ix of range$8(dim_chunk_ix_from, dim_chunk_ix_to)) {
250490
+ for (const dim_chunk_ix of range$7(dim_chunk_ix_from, dim_chunk_ix_to)) {
250472
250491
  const dim_offset = dim_chunk_ix * this.dim_chunk_len;
250473
250492
  const dim_limit = Math.min(this.dim_len, (dim_chunk_ix + 1) * this.dim_chunk_len);
250474
250493
  const dim_chunk_len = dim_limit - dim_offset;
@@ -251833,7 +251852,7 @@ function parseV1(spec, renderString) {
251833
251852
  function* iterDims(dimensions) {
251834
251853
  const keys2 = Object.keys(dimensions);
251835
251854
  const iterables = Object.values(dimensions).map(
251836
- (i2) => Array.isArray(i2) ? i2 : [...range$7(i2)]
251855
+ (i2) => Array.isArray(i2) ? i2 : [...range$6(i2)]
251837
251856
  );
251838
251857
  for (const values3 of product$1(...iterables)) {
251839
251858
  yield Object.fromEntries(keys2.map((key2, i2) => [key2, values3[i2]]));
@@ -251862,7 +251881,7 @@ function* product$1(...iterables) {
251862
251881
  results[i2] = iterators[i2].next();
251863
251882
  }
251864
251883
  }
251865
- function* range$7({ stop: stop3, start: start2 = 0, step = 1 }) {
251884
+ function* range$6({ stop: stop3, start: start2 = 0, step = 1 }) {
251866
251885
  for (let i2 = start2; i2 < stop3; i2 += step) {
251867
251886
  yield i2;
251868
251887
  }
@@ -253300,6 +253319,7 @@ function SpatialSubscriber$1(props) {
253300
253319
  featureLabelsMap,
253301
253320
  featureValueColormap: geneExpressionColormap,
253302
253321
  featureValueColormapRange: geneExpressionColormapRange,
253322
+ setFeatureValueColormapRange: setGeneExpressionColormapRange,
253303
253323
  extent: expressionExtents?.[0]
253304
253324
  })] });
253305
253325
  }
@@ -254678,12 +254698,12 @@ class ErrorBoundary extends React__default.Component {
254678
254698
  }
254679
254699
  }
254680
254700
  const LazySpatialThree = React__default.lazy(async () => {
254681
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DvmAgsRf.js");
254701
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-Dea9LBw1.js");
254682
254702
  return { default: SpatialWrapper2 };
254683
254703
  });
254684
254704
  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 }) }) }) }));
254685
254705
  const LazySpatialAccelerated = React__default.lazy(async () => {
254686
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-GeGt-U9p.js");
254706
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DE9wvnUC.js");
254687
254707
  return { default: SpatialWrapper2 };
254688
254708
  });
254689
254709
  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 }) }) }) }));
@@ -255561,7 +255581,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255561
255581
  }
255562
255582
  const curr = backlog[backlog.length - 1];
255563
255583
  if (dataRef.current && dataRef.current.buffer.byteLength && expressionRowLookUp.size > 0 && !shouldUsePaddedImplementation(dataRef.current.length)) {
255564
- const promises = range$f(yTiles).map((i2) => range$f(xTiles).map(async (j) => workerPool.process({
255584
+ const promises = range$e(yTiles).map((i2) => range$e(xTiles).map(async (j) => workerPool.process({
255565
255585
  curr,
255566
255586
  tileI: i2,
255567
255587
  tileJ: j,
@@ -255670,7 +255690,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255670
255690
  });
255671
255691
  };
255672
255692
  const cellOrdering = transpose2 ? axisTopLabels : axisLeftLabels;
255673
- const layers3 = range$f(yTiles * xTiles).map((index2) => getLayer2(Math.floor(index2 / xTiles), index2 % xTiles));
255693
+ const layers3 = range$e(yTiles * xTiles).map((index2) => getLayer2(Math.floor(index2 / xTiles), index2 % xTiles));
255674
255694
  return layers3;
255675
255695
  }
255676
255696
  function getLayer(i2, j, tile) {
@@ -255822,10 +255842,10 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255822
255842
  const cellOrdering = transpose2 ? axisTopLabels : axisLeftLabels;
255823
255843
  const colorBarTileWidthPx = transpose2 ? TILE_SIZE : 1;
255824
255844
  const colorBarTileHeightPx = transpose2 ? 1 : TILE_SIZE;
255825
- const result = range$f(numCellColorTracks).map((track) => {
255826
- const trackResult = range$f(transpose2 ? xTiles : yTiles).map((i2) => {
255845
+ const result = range$e(numCellColorTracks).map((track) => {
255846
+ const trackResult = range$e(transpose2 ? xTiles : yTiles).map((i2) => {
255827
255847
  const tileData = new Uint8ClampedArray(TILE_SIZE * 1 * 4);
255828
- range$f(TILE_SIZE).forEach((tileY) => {
255848
+ range$e(TILE_SIZE).forEach((tileY) => {
255829
255849
  rowI = i2 * TILE_SIZE + tileY;
255830
255850
  if (rowI < cellOrdering.length) {
255831
255851
  cellId = cellOrdering[rowI];
@@ -255955,7 +255975,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255955
255975
  }
255956
255976
  }
255957
255977
  const cellColorsViews = useMemo$1(() => {
255958
- const result = range$f(numCellColorTracks).map((track) => {
255978
+ const result = range$e(numCellColorTracks).map((track) => {
255959
255979
  let view;
255960
255980
  if (transpose2) {
255961
255981
  view = new OrthographicView({
@@ -256181,7 +256201,7 @@ function HeatmapSubscriber(props) {
256181
256201
  setTargetY(target2[1]);
256182
256202
  }, 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: () => {
256183
256203
  setComponentHover(uuid2);
256184
- }, 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 })] });
256204
+ }, 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 })] });
256185
256205
  }
256186
256206
  function _classCallCheck(a2, n3) {
256187
256207
  if (!(a2 instanceof n3)) throw new TypeError("Cannot call a class as a function");
@@ -262844,22 +262864,18 @@ function FeatureList(props) {
262844
262864
  const { width: width2, height: height2, hasColorEncoding, geneList = [], featureLabelsMap, geneSelection = [], geneFilter = null, setGeneSelection, enableMultiSelect, showFeatureTable, featureListSort, featureListSortKey, hasFeatureLabels, primaryColumnName } = props;
262845
262865
  const { classes: classes2 } = useStyles$m();
262846
262866
  const [searchTerm, setSearchTerm] = useState("");
262847
- const [searchResults, setSearchResults] = useState(geneList);
262848
262867
  const selectableTableSortKey = featureListSortKey === "featureIndex" ? "key" : "name";
262849
- useEffect(() => {
262850
- 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()));
262851
- setSearchResults(results);
262852
- }, [searchTerm, geneList, featureLabelsMap]);
262868
+ 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]);
262853
262869
  function onChange(selection) {
262854
262870
  if (setGeneSelection && selection) {
262855
- if (Array.isArray(selection)) {
262856
- if (selection.length > 0 && every$1(selection, (s2) => s2.key)) {
262857
- setGeneSelection(selection.map((s2) => s2.key));
262858
- } else {
262859
- setGeneSelection(null);
262860
- }
262861
- } else if (selection.key) {
262862
- setGeneSelection([selection.key]);
262871
+ const selectedHiddenKeys = (geneSelection || []).filter((key2) => !searchResults.includes(key2));
262872
+ const selectionArray = Array.isArray(selection) ? selection : [selection];
262873
+ const selectedVisibleKeys = selectionArray.map((s2) => s2.key).filter((key2) => searchResults.includes(key2));
262874
+ const newSelection = [...selectedHiddenKeys, ...selectedVisibleKeys].filter(Boolean);
262875
+ if (newSelection.length > 0) {
262876
+ setGeneSelection(newSelection);
262877
+ } else {
262878
+ setGeneSelection(null);
262863
262879
  }
262864
262880
  }
262865
262881
  }
@@ -263377,7 +263393,7 @@ function LayerOptions({ colormap, opacity: opacity2, handleColormapChange, handl
263377
263393
  const domainSelectorId = $bdb11010cef70236$export$f680877a34711e37();
263378
263394
  const opacitySliderId = $bdb11010cef70236$export$f680877a34711e37();
263379
263395
  const zeroTransparentId = $bdb11010cef70236$export$f680877a34711e37();
263380
- 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) => {
263396
+ 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) => {
263381
263397
  handleDomainChange(value2);
263382
263398
  } }) }) })] }) : 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 }) }) })] });
263383
263399
  }
@@ -268700,7 +268716,7 @@ async function open(location, options = {}) {
268700
268716
  }
268701
268717
  open.v2 = open_v2;
268702
268718
  open.v3 = open_v3;
268703
- function* range$6(start2, stop3, step = 1) {
268719
+ function* range$5(start2, stop3, step = 1) {
268704
268720
  if (stop3 === void 0) {
268705
268721
  stop3 = start2;
268706
268722
  start2 = 0;
@@ -268844,7 +268860,7 @@ class SliceDimIndexer2 {
268844
268860
  *[Symbol.iterator]() {
268845
268861
  const dim_chunk_ix_from = Math.floor(this.start / this.dim_chunk_len);
268846
268862
  const dim_chunk_ix_to = Math.ceil(this.stop / this.dim_chunk_len);
268847
- for (const dim_chunk_ix of range$6(dim_chunk_ix_from, dim_chunk_ix_to)) {
268863
+ for (const dim_chunk_ix of range$5(dim_chunk_ix_from, dim_chunk_ix_to)) {
268848
268864
  const dim_offset = dim_chunk_ix * this.dim_chunk_len;
268849
268865
  const dim_limit = Math.min(this.dim_len, (dim_chunk_ix + 1) * this.dim_chunk_len);
268850
268866
  const dim_chunk_len = dim_limit - dim_offset;
@@ -269300,7 +269316,7 @@ function HiglassGlobalStyles(props) {
269300
269316
  }
269301
269317
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
269302
269318
  const LazyHiGlassComponent = React__default.lazy(async () => {
269303
- const { HiGlassComponent } = await import("./higlass-dxy_beXN.js");
269319
+ const { HiGlassComponent } = await import("./higlass-HrDVcILg.js");
269304
269320
  return { default: HiGlassComponent };
269305
269321
  });
269306
269322
  const HG_SIZE = 800;
@@ -272247,7 +272263,7 @@ function NeuroglancerGlobalStyles(props) {
272247
272263
  const { classes: classes2 } = props;
272248
272264
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
272249
272265
  }
272250
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-DH0qN16-.js"));
272266
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BsrULsNY.js"));
272251
272267
  function createWorker() {
272252
272268
  return new WorkerFactory();
272253
272269
  }
@@ -302516,68 +302532,6 @@ function toSet$1(_) {
302516
302532
  for (let i2 = 0; i2 < n3; ++i2) s2[_[i2]] = true;
302517
302533
  return s2;
302518
302534
  }
302519
- function ascending$4(a2, b2) {
302520
- return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
302521
- }
302522
- function descending$1(a2, b2) {
302523
- return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
302524
- }
302525
- function bisector$1(f2) {
302526
- let compare12, compare2, delta;
302527
- if (f2.length !== 2) {
302528
- compare12 = ascending$4;
302529
- compare2 = (d, x2) => ascending$4(f2(d), x2);
302530
- delta = (d, x2) => f2(d) - x2;
302531
- } else {
302532
- compare12 = f2 === ascending$4 || f2 === descending$1 ? f2 : zero$3;
302533
- compare2 = f2;
302534
- delta = f2;
302535
- }
302536
- function left2(a2, x2, lo = 0, hi = a2.length) {
302537
- if (lo < hi) {
302538
- if (compare12(x2, x2) !== 0) return hi;
302539
- do {
302540
- const mid = lo + hi >>> 1;
302541
- if (compare2(a2[mid], x2) < 0) lo = mid + 1;
302542
- else hi = mid;
302543
- } while (lo < hi);
302544
- }
302545
- return lo;
302546
- }
302547
- function right2(a2, x2, lo = 0, hi = a2.length) {
302548
- if (lo < hi) {
302549
- if (compare12(x2, x2) !== 0) return hi;
302550
- do {
302551
- const mid = lo + hi >>> 1;
302552
- if (compare2(a2[mid], x2) <= 0) lo = mid + 1;
302553
- else hi = mid;
302554
- } while (lo < hi);
302555
- }
302556
- return lo;
302557
- }
302558
- function center2(a2, x2, lo = 0, hi = a2.length) {
302559
- const i2 = left2(a2, x2, lo, hi - 1);
302560
- return i2 > lo && delta(a2[i2 - 1], x2) > -delta(a2[i2], x2) ? i2 - 1 : i2;
302561
- }
302562
- return { left: left2, center: center2, right: right2 };
302563
- }
302564
- function zero$3() {
302565
- return 0;
302566
- }
302567
- function number$4(x2) {
302568
- return x2 === null ? NaN : +x2;
302569
- }
302570
- const ascendingBisect = bisector$1(ascending$4);
302571
- const bisectRight$1 = ascendingBisect.right;
302572
- bisector$1(number$4).center;
302573
- function range$5(start2, stop3, step) {
302574
- start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
302575
- var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
302576
- while (++i2 < n3) {
302577
- range2[i2] = start2 + i2 * step;
302578
- }
302579
- return range2;
302580
- }
302581
302535
  function colors$2(specifier) {
302582
302536
  var n3 = specifier.length / 6 | 0, colors2 = new Array(n3), i2 = 0;
302583
302537
  while (i2 < n3) colors2[i2] = "#" + specifier.slice(i2 * 6, ++i2 * 6);
@@ -302767,7 +302721,7 @@ function band$1() {
302767
302721
  start2 = Math.round(start2);
302768
302722
  bandwidth2 = Math.round(bandwidth2);
302769
302723
  }
302770
- const values3 = range$5(n3).map((i2) => start2 + step * i2);
302724
+ const values3 = range$8(n3).map((i2) => start2 + step * i2);
302771
302725
  return ordinalRange(reverse2 ? values3.reverse() : values3);
302772
302726
  }
302773
302727
  scale2.domain = function(_) {
@@ -304531,7 +304485,7 @@ const useStyles$4 = makeStyles()(() => ({
304531
304485
  }
304532
304486
  }));
304533
304487
  function summarize(iterable, keepZeros) {
304534
- const values3 = iterable.filter((d) => keepZeros).sort(ascending$9);
304488
+ const values3 = iterable.filter((d) => keepZeros).sort(ascending$8);
304535
304489
  const minVal = values3[0];
304536
304490
  const maxVal = values3[values3.length - 1];
304537
304491
  const q1 = quantileSorted$1(values3, 0.25);
@@ -306142,7 +306096,7 @@ const Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS], Second
306142
306096
  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]];
306143
306097
  function bin$1(opt) {
306144
306098
  const ext = opt.extent, max2 = opt.maxbins || 40, target2 = Math.abs(span(ext)) / max2;
306145
- let i2 = bisector$2((i3) => i3[2]).right(intervals, target2), units, step;
306099
+ let i2 = bisector$1((i3) => i3[2]).right(intervals, target2), units, step;
306146
306100
  if (i2 === intervals.length) {
306147
306101
  units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max2);
306148
306102
  } else if (i2) {
@@ -308080,7 +308034,7 @@ function* numbers$1(values3, valueof) {
308080
308034
  }
308081
308035
  function quantiles(array2, p, f2) {
308082
308036
  const values3 = Float64Array.from(numbers$1(array2, f2));
308083
- values3.sort(ascending$5);
308037
+ values3.sort(ascending$4);
308084
308038
  return p.map((_) => quantileSorted(values3, _));
308085
308039
  }
308086
308040
  function quartiles(array2, f2) {
@@ -308139,7 +308093,7 @@ function bootstrapCI(array2, samples, alpha2, f2) {
308139
308093
  }
308140
308094
  mu[j] = a2 / n3;
308141
308095
  }
308142
- mu.sort(ascending$5);
308096
+ mu.sort(ascending$4);
308143
308097
  return [quantile$1(mu, alpha2 / 2), quantile$1(mu, 1 - alpha2 / 2)];
308144
308098
  }
308145
308099
  function dotbin(array2, step, smooth, f2) {
@@ -311112,7 +311066,7 @@ inherits(Quantile$1, Transform2, {
311112
311066
  out.source = this.value;
311113
311067
  return out;
311114
311068
  }
311115
- 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;
311069
+ 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;
311116
311070
  groups.forEach((g2) => {
311117
311071
  const q = quantiles(g2, p);
311118
311072
  for (let i2 = 0; i2 < n3; ++i2) {
@@ -311271,7 +311225,7 @@ inherits(Sequence, Transform2, {
311271
311225
  if (this.value && !_.modified()) return;
311272
311226
  const out = pulse2.materialize().fork(pulse2.MOD), as = _.as || "data";
311273
311227
  out.rem = this.value ? pulse2.rem.concat(this.value) : pulse2.rem;
311274
- this.value = range$9(_.start, _.stop, _.step || 1).map((v) => {
311228
+ this.value = range$8(_.start, _.stop, _.step || 1).map((v) => {
311275
311229
  const t4 = {};
311276
311230
  t4[as] = v;
311277
311231
  return ingest$1(t4);
@@ -311731,7 +311685,7 @@ inherits(Window, Transform2, {
311731
311685
  }
311732
311686
  });
311733
311687
  function processPartition(list2, state, cmp2, _) {
311734
- const sort2 = _.sort, range2 = sort2 && !_.ignorePeers, frame2 = _.frame || [null, 0], data2 = list2.data(cmp2), n3 = data2.length, b2 = range2 ? bisector$2(sort2) : null, w2 = {
311688
+ const sort2 = _.sort, range2 = sort2 && !_.ignorePeers, frame2 = _.frame || [null, 0], data2 = list2.data(cmp2), n3 = data2.length, b2 = range2 ? bisector$1(sort2) : null, w2 = {
311735
311689
  i0: 0,
311736
311690
  i1: 0,
311737
311691
  p0: 0,
@@ -311889,7 +311843,7 @@ function band() {
311889
311843
  start2 = Math.round(start2);
311890
311844
  bandwidth2 = Math.round(bandwidth2);
311891
311845
  }
311892
- const values3 = range$9(n3).map((i2) => start2 + step * i2);
311846
+ const values3 = range$8(n3).map((i2) => start2 + step * i2);
311893
311847
  return ordinalRange(reverse2 ? values3.reverse() : values3);
311894
311848
  }
311895
311849
  scale2.domain = function(_) {
@@ -311971,8 +311925,8 @@ function band() {
311971
311925
  hi = t4;
311972
311926
  }
311973
311927
  if (hi < values3[0] || lo > range$12[1 - reverse2]) return;
311974
- a2 = Math.max(0, bisectRight$2(values3, lo) - 1);
311975
- b2 = lo === hi ? a2 : bisectRight$2(values3, hi) - 1;
311928
+ a2 = Math.max(0, bisectRight$1(values3, lo) - 1);
311929
+ b2 = lo === hi ? a2 : bisectRight$1(values3, hi) - 1;
311976
311930
  if (lo - values3[a2] > bandwidth2 + 1e-10) ++a2;
311977
311931
  if (reverse2) {
311978
311932
  t4 = a2;
@@ -312010,7 +311964,7 @@ const slice$2 = Array.prototype.slice;
312010
311964
  function scaleBinOrdinal() {
312011
311965
  let domain2 = [], range2 = [];
312012
311966
  function scale2(x2) {
312013
- return x2 == null || x2 !== x2 ? void 0 : range2[(bisectRight$2(domain2, x2) - 1) % range2.length];
311967
+ return x2 == null || x2 !== x2 ? void 0 : range2[(bisectRight$1(domain2, x2) - 1) % range2.length];
312014
311968
  }
312015
311969
  scale2.domain = function(_) {
312016
311970
  if (arguments.length) {
@@ -317733,7 +317687,7 @@ Pie.Definition = {
317733
317687
  };
317734
317688
  inherits(Pie, Transform2, {
317735
317689
  transform(_, pulse2) {
317736
- 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;
317690
+ 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;
317737
317691
  if (_.sort) {
317738
317692
  index2.sort((a3, b2) => values3[a3] - values3[b2]);
317739
317693
  }
@@ -317851,7 +317805,7 @@ function configureBins(scale2, _, count2) {
317851
317805
  if (!step) error("Scale bins parameter missing step property.");
317852
317806
  if (start2 < lo) start2 = step * Math.ceil(lo / step);
317853
317807
  if (stop3 > hi) stop3 = step * Math.floor(hi / step);
317854
- bins2 = range$9(start2, stop3 + step / 2, step);
317808
+ bins2 = range$8(start2, stop3 + step / 2, step);
317855
317809
  }
317856
317810
  if (bins2) {
317857
317811
  scale2.bins = bins2;
@@ -319072,7 +319026,7 @@ function clipRectangle(x02, y02, x12, y12) {
319072
319026
  };
319073
319027
  }
319074
319028
  function graticuleX(y02, y12, dy) {
319075
- var y2 = range$9(y02, y12 - epsilon$3, dy).concat(y12);
319029
+ var y2 = range$8(y02, y12 - epsilon$3, dy).concat(y12);
319076
319030
  return function(x2) {
319077
319031
  return y2.map(function(y22) {
319078
319032
  return [x2, y22];
@@ -319080,7 +319034,7 @@ function graticuleX(y02, y12, dy) {
319080
319034
  };
319081
319035
  }
319082
319036
  function graticuleY(x02, x12, dx) {
319083
- var x2 = range$9(x02, x12 - epsilon$3, dx).concat(x12);
319037
+ var x2 = range$8(x02, x12 - epsilon$3, dx).concat(x12);
319084
319038
  return function(y2) {
319085
319039
  return x2.map(function(x22) {
319086
319040
  return [x22, y2];
@@ -319093,9 +319047,9 @@ function graticule() {
319093
319047
  return { type: "MultiLineString", coordinates: lines() };
319094
319048
  }
319095
319049
  function lines() {
319096
- 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) {
319050
+ 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) {
319097
319051
  return abs$1(x22 % DX) > epsilon$3;
319098
- }).map(x2)).concat(range$9(ceil(y02 / dy) * dy, y12, dy).filter(function(y22) {
319052
+ }).map(x2)).concat(range$8(ceil(y02 / dy) * dy, y12, dy).filter(function(y22) {
319099
319053
  return abs$1(y22 % DY) > epsilon$3;
319100
319054
  }).map(y2));
319101
319055
  }
@@ -320370,7 +320324,7 @@ function within(p, q, r3) {
320370
320324
  function quantize$1(k, nice2, zero2) {
320371
320325
  return function(values3) {
320372
320326
  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);
320373
- return range$9(start2 + step, stop3, step);
320327
+ return range$8(start2 + step, stop3, step);
320374
320328
  };
320375
320329
  }
320376
320330
  function Isocontour(params2) {
@@ -326310,7 +326264,7 @@ function SortedIndex() {
326310
326264
  array2 = value2;
326311
326265
  n3 = size2;
326312
326266
  }
326313
- return [bisectLeft$1(array2, range2[0], 0, n3), bisectRight$2(array2, range2[1], 0, n3)];
326267
+ return [bisectLeft$1(array2, range2[0], 0, n3), bisectRight$1(array2, range2[1], 0, n3)];
326314
326268
  }
326315
326269
  return {
326316
326270
  insert: insert2,
@@ -328675,7 +328629,7 @@ const functionContext = {
328675
328629
  hsl: hsl$2,
328676
328630
  luminance,
328677
328631
  contrast,
328678
- sequence: range$9,
328632
+ sequence: range$8,
328679
328633
  format: format$1,
328680
328634
  utcFormat,
328681
328635
  utcParse,
@@ -355945,7 +355899,7 @@ function FeatureBarPlot(props) {
355945
355899
  const xTitle = `${capitalize$3(obsType)}`;
355946
355900
  const autoMarginBottom = marginBottom || 30 + Math.sqrt(maxCharactersForLabel / 2) * 30;
355947
355901
  const foregroundColor = theme === "dark" ? "lightgray" : "black";
355948
- data2.sort((a2, b2) => ascending$9(a2[FEATURE_KEY], b2[FEATURE_KEY]));
355902
+ data2.sort((a2, b2) => ascending$8(a2[FEATURE_KEY], b2[FEATURE_KEY]));
355949
355903
  const svg2 = select$1(domElement);
355950
355904
  svg2.selectAll("g").remove();
355951
355905
  svg2.attr("width", width2).attr("height", height2);
@@ -357975,13 +357929,7 @@ class SpatialDataAutoConfig extends AbstractAutoConfig {
357975
357929
  };
357976
357930
  }
357977
357931
  if (relPath.match(/^(shapes)\/([^/]*)$/)) {
357978
- options.obsSpots = {
357979
- path: relPath,
357980
- coordinateSystem: firstCoordinateSystem
357981
- };
357982
- }
357983
- if (relPath.match(/^(points)\/([^/]*)$/)) {
357984
- options.obsPoints = {
357932
+ options.obsSegmentations = {
357985
357933
  path: relPath,
357986
357934
  coordinateSystem: firstCoordinateSystem
357987
357935
  };
@@ -357995,21 +357943,6 @@ class SpatialDataAutoConfig extends AbstractAutoConfig {
357995
357943
  // region: null,
357996
357944
  };
357997
357945
  }
357998
- const hasObs = tableEls.find((el) => el.path === `${path2}/obs`);
357999
- if (hasObs) {
358000
- const columnOrder = hasObs.attrs?.["column-order"];
358001
- options.obsSets = {
358002
- // region: null,
358003
- tablePath: relPath,
358004
- obsSets: columnOrder.map((c2) => ({
358005
- // TODO: determine whether this column is string/categorical.
358006
- // TODO: determine whether this column contains too many
358007
- // categories to make sense to consider a cell set.
358008
- path: `${hasObs.path.substring(1)}/${c2}`,
358009
- name: c2
358010
- }))
358011
- };
358012
- }
358013
357946
  }
358014
357947
  });
358015
357948
  return options;
@@ -358160,8 +358093,16 @@ async function parsedUrlToZmetadata(parsedUrl) {
358160
358093
  store = await withConsolidated(initialStore, { metadataKey: "zmetadata" });
358161
358094
  }
358162
358095
  const contents = store.contents();
358096
+ const consolidatedRoot = await open$1(store, { kind: "group" });
358163
358097
  promises = contents.map(async (value2) => {
358164
- const item = await open$1(root$1(store).resolve(value2.path));
358098
+ let item;
358099
+ try {
358100
+ item = await open$1(consolidatedRoot.resolve(value2.path), { kind: value2.kind });
358101
+ } catch {
358102
+ item = {
358103
+ attrs: {}
358104
+ };
358105
+ }
358165
358106
  return {
358166
358107
  ...value2,
358167
358108
  attrs: item.attrs
@@ -358192,9 +358133,10 @@ async function parsedUrlToZmetadata(parsedUrl) {
358192
358133
  // Note: For spatialData, we assume the store is always consolidated.
358193
358134
  // TODO: throw error if spatialdata + not consolidated?
358194
358135
  ];
358136
+ const storeRoot = await open$1(store, { kind: "group" });
358195
358137
  promises = keysToTry.map(async (k) => {
358196
358138
  try {
358197
- const item = await open$1(root$1(store).resolve(k));
358139
+ const item = await open$1(storeRoot.resolve(k));
358198
358140
  return {
358199
358141
  path: k,
358200
358142
  kind: item.kind,
@@ -358718,7 +358660,7 @@ class ClustersJsonAsObsFeatureMatrixLoader extends JsonLoader {
358718
358660
  const normalize2 = (d) => Math.floor((d - min2) / (max2 - min2) * 255);
358719
358661
  return col.map(normalize2);
358720
358662
  });
358721
- const tNormalizedMatrix = range$f(shape2[0]).map((i2) => range$f(shape2[1]).map((j) => normalizedMatrix[j][i2]));
358663
+ const tNormalizedMatrix = range$e(shape2[0]).map((i2) => range$e(shape2[1]).map((j) => normalizedMatrix[j][i2]));
358722
358664
  const normalizedFlatMatrix = tNormalizedMatrix.flat();
358723
358665
  const obsFeatureMatrix = { data: Uint8Array.from(normalizedFlatMatrix) };
358724
358666
  this.cachedResult = { obsIndex, featureIndex, obsFeatureMatrix };
@@ -358769,12 +358711,12 @@ class MoleculesJsonAsObsLabelsLoader extends JsonLoader {
358769
358711
  if (this.cachedResult) {
358770
358712
  return this.cachedResult;
358771
358713
  }
358772
- const obsIndex = range$f(sum$7(Object.values(data2).map((v) => v.length))).map((i2) => String(i2));
358714
+ const obsIndex = range$e(sum$7(Object.values(data2).map((v) => v.length))).map((i2) => String(i2));
358773
358715
  let obsLabels = [];
358774
358716
  Object.entries(data2).forEach(([gene, locations]) => {
358775
358717
  obsLabels = [
358776
358718
  ...obsLabels,
358777
- ...range$f(locations.length).map(() => gene)
358719
+ ...range$e(locations.length).map(() => gene)
358778
358720
  ];
358779
358721
  });
358780
358722
  this.cachedResult = { obsIndex, obsLabels };
@@ -358797,7 +358739,7 @@ class MoleculesJsonAsObsLocationsLoader extends JsonLoader {
358797
358739
  return this.cachedResult;
358798
358740
  }
358799
358741
  const moleculesValues = Object.values(data2);
358800
- const obsIndex = range$f(sum$7(moleculesValues.map((v) => v.length))).map((i2) => String(i2));
358742
+ const obsIndex = range$e(sum$7(moleculesValues.map((v) => v.length))).map((i2) => String(i2));
358801
358743
  const obsLocationsX = new Float32Array(obsIndex.length);
358802
358744
  const obsLocationsY = new Float32Array(obsIndex.length);
358803
358745
  let startAt = 0;
@@ -384019,6 +383961,7 @@ function ControlledLauncherInner(props) {
384019
383961
  setLauncherError(null);
384020
383962
  } else if (configUrlResult.isError) {
384021
383963
  setIsEditing(true);
383964
+ console.log(configUrlResult.error);
384022
383965
  setLauncherError(`Error loading config from URL: ${configUrlResult.error.message}`);
384023
383966
  }
384024
383967
  } else if (sourceUrlQueryEnabled) {
@@ -384029,6 +383972,7 @@ function ControlledLauncherInner(props) {
384029
383972
  setLauncherError(null);
384030
383973
  } else if (sourceUrlResult.isError) {
384031
383974
  setIsEditing(true);
383975
+ console.log(sourceUrlResult.error);
384032
383976
  setLauncherError(`Error loading data/metadata from source URL(s): ${sourceUrlResult.error.message}`);
384033
383977
  }
384034
383978
  } else if (validConfigFromDroppedData) {