@vitessce/launcher 3.8.9 → 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.
@@ -7430,7 +7430,7 @@ function createRange(fromRight) {
7430
7430
  return baseRange(start2, end2, step);
7431
7431
  };
7432
7432
  }
7433
- var range$f = createRange();
7433
+ var range$e = createRange();
7434
7434
  function sum$7(array2) {
7435
7435
  return array2 && array2.length ? baseSum(array2, identity$h) : 0;
7436
7436
  }
@@ -9522,10 +9522,10 @@ function requireLrucache() {
9522
9522
  lrucache = LRUCache3;
9523
9523
  return lrucache;
9524
9524
  }
9525
- var range$e;
9525
+ var range$d;
9526
9526
  var hasRequiredRange$1;
9527
9527
  function requireRange$1() {
9528
- if (hasRequiredRange$1) return range$e;
9528
+ if (hasRequiredRange$1) return range$d;
9529
9529
  hasRequiredRange$1 = 1;
9530
9530
  const SPACE_CHARACTERS = /\s+/g;
9531
9531
  class Range2 {
@@ -9666,7 +9666,7 @@ function requireRange$1() {
9666
9666
  return false;
9667
9667
  }
9668
9668
  }
9669
- range$e = Range2;
9669
+ range$d = Range2;
9670
9670
  const LRU = requireLrucache();
9671
9671
  const cache2 = new LRU();
9672
9672
  const parseOptions2 = requireParseOptions();
@@ -9896,7 +9896,7 @@ function requireRange$1() {
9896
9896
  }
9897
9897
  return true;
9898
9898
  };
9899
- return range$e;
9899
+ return range$d;
9900
9900
  }
9901
9901
  var comparator$2;
9902
9902
  var hasRequiredComparator$1;
@@ -48399,7 +48399,7 @@ function escapeRegExp(value2) {
48399
48399
  return value2.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
48400
48400
  }
48401
48401
  const clamp$6 = (value2, min2, max2) => Math.max(min2, Math.min(max2, value2));
48402
- function range$d(from2, to) {
48402
+ function range$c(from2, to) {
48403
48403
  return Array.from({
48404
48404
  length: to - from2
48405
48405
  }).map((_, i2) => from2 + i2);
@@ -52797,7 +52797,7 @@ const useGridVirtualScroller = () => {
52797
52797
  const rowModels = params2.rows ?? currentPage.rows;
52798
52798
  const firstRowToRender = baseRenderContext.firstRowIndex;
52799
52799
  const lastRowToRender = Math.min(baseRenderContext.lastRowIndex, rowModels.length);
52800
- 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);
52801
52801
  let virtualRowIndex = -1;
52802
52802
  if (!isPinnedSection && focusedVirtualCell) {
52803
52803
  if (focusedVirtualCell.rowIndex < firstRowToRender) {
@@ -74284,7 +74284,7 @@ let powers = 0;
74284
74284
  const boolean = increment$1();
74285
74285
  const booleanish = increment$1();
74286
74286
  const overloadedBoolean = increment$1();
74287
- const number$b = increment$1();
74287
+ const number$a = increment$1();
74288
74288
  const spaceSeparated = increment$1();
74289
74289
  const commaSeparated = increment$1();
74290
74290
  const commaOrSpaceSeparated = increment$1();
@@ -74297,7 +74297,7 @@ const types = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePropert
74297
74297
  booleanish,
74298
74298
  commaOrSpaceSeparated,
74299
74299
  commaSeparated,
74300
- number: number$b,
74300
+ number: number$a,
74301
74301
  overloadedBoolean,
74302
74302
  spaceSeparated
74303
74303
  }, Symbol.toStringTag, { value: "Module" }));
@@ -74396,9 +74396,9 @@ const aria$1 = create$c({
74396
74396
  ariaAutoComplete: null,
74397
74397
  ariaBusy: booleanish,
74398
74398
  ariaChecked: booleanish,
74399
- ariaColCount: number$b,
74400
- ariaColIndex: number$b,
74401
- ariaColSpan: number$b,
74399
+ ariaColCount: number$a,
74400
+ ariaColIndex: number$a,
74401
+ ariaColSpan: number$a,
74402
74402
  ariaControls: spaceSeparated,
74403
74403
  ariaCurrent: null,
74404
74404
  ariaDescribedBy: spaceSeparated,
@@ -74415,7 +74415,7 @@ const aria$1 = create$c({
74415
74415
  ariaKeyShortcuts: null,
74416
74416
  ariaLabel: null,
74417
74417
  ariaLabelledBy: spaceSeparated,
74418
- ariaLevel: number$b,
74418
+ ariaLevel: number$a,
74419
74419
  ariaLive: null,
74420
74420
  ariaModal: booleanish,
74421
74421
  ariaMultiLine: booleanish,
@@ -74423,21 +74423,21 @@ const aria$1 = create$c({
74423
74423
  ariaOrientation: null,
74424
74424
  ariaOwns: spaceSeparated,
74425
74425
  ariaPlaceholder: null,
74426
- ariaPosInSet: number$b,
74426
+ ariaPosInSet: number$a,
74427
74427
  ariaPressed: booleanish,
74428
74428
  ariaReadOnly: booleanish,
74429
74429
  ariaRelevant: null,
74430
74430
  ariaRequired: booleanish,
74431
74431
  ariaRoleDescription: spaceSeparated,
74432
- ariaRowCount: number$b,
74433
- ariaRowIndex: number$b,
74434
- ariaRowSpan: number$b,
74432
+ ariaRowCount: number$a,
74433
+ ariaRowIndex: number$a,
74434
+ ariaRowSpan: number$a,
74435
74435
  ariaSelected: booleanish,
74436
- ariaSetSize: number$b,
74436
+ ariaSetSize: number$a,
74437
74437
  ariaSort: null,
74438
- ariaValueMax: number$b,
74439
- ariaValueMin: number$b,
74440
- ariaValueNow: number$b,
74438
+ ariaValueMax: number$a,
74439
+ ariaValueMin: number$a,
74440
+ ariaValueNow: number$a,
74441
74441
  ariaValueText: null,
74442
74442
  role: null
74443
74443
  }
@@ -74476,13 +74476,13 @@ const html$2 = create$c({
74476
74476
  checked: boolean,
74477
74477
  cite: null,
74478
74478
  className: spaceSeparated,
74479
- cols: number$b,
74479
+ cols: number$a,
74480
74480
  colSpan: null,
74481
74481
  content: null,
74482
74482
  contentEditable: booleanish,
74483
74483
  controls: boolean,
74484
74484
  controlsList: spaceSeparated,
74485
- coords: number$b | commaSeparated,
74485
+ coords: number$a | commaSeparated,
74486
74486
  crossOrigin: null,
74487
74487
  data: null,
74488
74488
  dateTime: null,
@@ -74504,9 +74504,9 @@ const html$2 = create$c({
74504
74504
  formNoValidate: boolean,
74505
74505
  formTarget: null,
74506
74506
  headers: spaceSeparated,
74507
- height: number$b,
74507
+ height: number$a,
74508
74508
  hidden: boolean,
74509
- high: number$b,
74509
+ high: number$a,
74510
74510
  href: null,
74511
74511
  hrefLang: null,
74512
74512
  htmlFor: spaceSeparated,
@@ -74531,14 +74531,14 @@ const html$2 = create$c({
74531
74531
  list: null,
74532
74532
  loading: null,
74533
74533
  loop: boolean,
74534
- low: number$b,
74534
+ low: number$a,
74535
74535
  manifest: null,
74536
74536
  max: null,
74537
- maxLength: number$b,
74537
+ maxLength: number$a,
74538
74538
  media: null,
74539
74539
  method: null,
74540
74540
  min: null,
74541
- minLength: number$b,
74541
+ minLength: number$a,
74542
74542
  multiple: boolean,
74543
74543
  muted: boolean,
74544
74544
  name: null,
@@ -74634,7 +74634,7 @@ const html$2 = create$c({
74634
74634
  onWaiting: null,
74635
74635
  onWheel: null,
74636
74636
  open: boolean,
74637
- optimum: number$b,
74637
+ optimum: number$a,
74638
74638
  pattern: null,
74639
74639
  ping: spaceSeparated,
74640
74640
  placeholder: null,
@@ -74649,8 +74649,8 @@ const html$2 = create$c({
74649
74649
  rel: spaceSeparated,
74650
74650
  required: boolean,
74651
74651
  reversed: boolean,
74652
- rows: number$b,
74653
- rowSpan: number$b,
74652
+ rows: number$a,
74653
+ rowSpan: number$a,
74654
74654
  sandbox: spaceSeparated,
74655
74655
  scope: null,
74656
74656
  scoped: boolean,
@@ -74660,19 +74660,19 @@ const html$2 = create$c({
74660
74660
  shadowRootDelegatesFocus: boolean,
74661
74661
  shadowRootMode: null,
74662
74662
  shape: null,
74663
- size: number$b,
74663
+ size: number$a,
74664
74664
  sizes: null,
74665
74665
  slot: null,
74666
- span: number$b,
74666
+ span: number$a,
74667
74667
  spellCheck: booleanish,
74668
74668
  src: null,
74669
74669
  srcDoc: null,
74670
74670
  srcLang: null,
74671
74671
  srcSet: null,
74672
- start: number$b,
74672
+ start: number$a,
74673
74673
  step: null,
74674
74674
  style: null,
74675
- tabIndex: number$b,
74675
+ tabIndex: number$a,
74676
74676
  target: null,
74677
74677
  title: null,
74678
74678
  translate: null,
@@ -74680,7 +74680,7 @@ const html$2 = create$c({
74680
74680
  typeMustMatch: boolean,
74681
74681
  useMap: null,
74682
74682
  value: booleanish,
74683
- width: number$b,
74683
+ width: number$a,
74684
74684
  wrap: null,
74685
74685
  writingSuggestions: null,
74686
74686
  // Legacy.
@@ -74697,11 +74697,11 @@ const html$2 = create$c({
74697
74697
  // `<body>`. Use CSS `background-image` instead
74698
74698
  bgColor: null,
74699
74699
  // `<body>` and table elements. Use CSS `background-color` instead
74700
- border: number$b,
74700
+ border: number$a,
74701
74701
  // `<table>`. Use CSS `border-width` instead,
74702
74702
  borderColor: null,
74703
74703
  // `<table>`. Use CSS `border-color` instead,
74704
- bottomMargin: number$b,
74704
+ bottomMargin: number$a,
74705
74705
  // `<body>`
74706
74706
  cellPadding: null,
74707
74707
  // `<table>`
@@ -74735,9 +74735,9 @@ const html$2 = create$c({
74735
74735
  // `<table>`
74736
74736
  frameBorder: null,
74737
74737
  // `<iframe>`. Use CSS `border` instead
74738
- hSpace: number$b,
74738
+ hSpace: number$a,
74739
74739
  // `<img>` and `<object>`
74740
- leftMargin: number$b,
74740
+ leftMargin: number$a,
74741
74741
  // `<body>`
74742
74742
  link: null,
74743
74743
  // `<body>`. Use CSS `a:link {color: *}` instead
@@ -74745,9 +74745,9 @@ const html$2 = create$c({
74745
74745
  // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`
74746
74746
  lowSrc: null,
74747
74747
  // `<img>`. Use a `<picture>`
74748
- marginHeight: number$b,
74748
+ marginHeight: number$a,
74749
74749
  // `<body>`
74750
- marginWidth: number$b,
74750
+ marginWidth: number$a,
74751
74751
  // `<body>`
74752
74752
  noResize: boolean,
74753
74753
  // `<frame>`
@@ -74765,7 +74765,7 @@ const html$2 = create$c({
74765
74765
  // `<isindex>`
74766
74766
  rev: null,
74767
74767
  // `<link>`
74768
- rightMargin: number$b,
74768
+ rightMargin: number$a,
74769
74769
  // `<body>`
74770
74770
  rules: null,
74771
74771
  // `<table>`
@@ -74779,7 +74779,7 @@ const html$2 = create$c({
74779
74779
  // `<table>`
74780
74780
  text: null,
74781
74781
  // `<body>`. Use CSS `color` instead
74782
- topMargin: number$b,
74782
+ topMargin: number$a,
74783
74783
  // `<body>`
74784
74784
  valueType: null,
74785
74785
  // `<param>`
@@ -74789,7 +74789,7 @@ const html$2 = create$c({
74789
74789
  // Several. Use CSS `vertical-align` instead
74790
74790
  vLink: null,
74791
74791
  // `<body>`. Use CSS `a:visited {color}` instead
74792
- vSpace: number$b,
74792
+ vSpace: number$a,
74793
74793
  // `<img>` and `<object>`
74794
74794
  // Non-standard Properties.
74795
74795
  allowTransparency: null,
@@ -74799,7 +74799,7 @@ const html$2 = create$c({
74799
74799
  disableRemotePlayback: boolean,
74800
74800
  prefix: null,
74801
74801
  property: null,
74802
- results: number$b,
74802
+ results: number$a,
74803
74803
  security: null,
74804
74804
  unselectable: null
74805
74805
  }
@@ -74984,27 +74984,27 @@ const svg$1 = create$c({
74984
74984
  transform: caseSensitiveTransform,
74985
74985
  properties: {
74986
74986
  about: commaOrSpaceSeparated,
74987
- accentHeight: number$b,
74987
+ accentHeight: number$a,
74988
74988
  accumulate: null,
74989
74989
  additive: null,
74990
74990
  alignmentBaseline: null,
74991
- alphabetic: number$b,
74992
- amplitude: number$b,
74991
+ alphabetic: number$a,
74992
+ amplitude: number$a,
74993
74993
  arabicForm: null,
74994
- ascent: number$b,
74994
+ ascent: number$a,
74995
74995
  attributeName: null,
74996
74996
  attributeType: null,
74997
- azimuth: number$b,
74997
+ azimuth: number$a,
74998
74998
  bandwidth: null,
74999
74999
  baselineShift: null,
75000
75000
  baseFrequency: null,
75001
75001
  baseProfile: null,
75002
75002
  bbox: null,
75003
75003
  begin: null,
75004
- bias: number$b,
75004
+ bias: number$a,
75005
75005
  by: null,
75006
75006
  calcMode: null,
75007
- capHeight: number$b,
75007
+ capHeight: number$a,
75008
75008
  className: spaceSeparated,
75009
75009
  clip: null,
75010
75010
  clipPath: null,
@@ -75025,26 +75025,26 @@ const svg$1 = create$c({
75025
75025
  d: null,
75026
75026
  dataType: null,
75027
75027
  defaultAction: null,
75028
- descent: number$b,
75029
- diffuseConstant: number$b,
75028
+ descent: number$a,
75029
+ diffuseConstant: number$a,
75030
75030
  direction: null,
75031
75031
  display: null,
75032
75032
  dur: null,
75033
- divisor: number$b,
75033
+ divisor: number$a,
75034
75034
  dominantBaseline: null,
75035
75035
  download: boolean,
75036
75036
  dx: null,
75037
75037
  dy: null,
75038
75038
  edgeMode: null,
75039
75039
  editable: null,
75040
- elevation: number$b,
75040
+ elevation: number$a,
75041
75041
  enableBackground: null,
75042
75042
  end: null,
75043
75043
  event: null,
75044
- exponent: number$b,
75044
+ exponent: number$a,
75045
75045
  externalResourcesRequired: null,
75046
75046
  fill: null,
75047
- fillOpacity: number$b,
75047
+ fillOpacity: number$a,
75048
75048
  fillRule: null,
75049
75049
  filter: null,
75050
75050
  filterRes: null,
@@ -75074,27 +75074,27 @@ const svg$1 = create$c({
75074
75074
  gradientTransform: null,
75075
75075
  gradientUnits: null,
75076
75076
  handler: null,
75077
- hanging: number$b,
75077
+ hanging: number$a,
75078
75078
  hatchContentUnits: null,
75079
75079
  hatchUnits: null,
75080
75080
  height: null,
75081
75081
  href: null,
75082
75082
  hrefLang: null,
75083
- horizAdvX: number$b,
75084
- horizOriginX: number$b,
75085
- horizOriginY: number$b,
75083
+ horizAdvX: number$a,
75084
+ horizOriginX: number$a,
75085
+ horizOriginY: number$a,
75086
75086
  id: null,
75087
- ideographic: number$b,
75087
+ ideographic: number$a,
75088
75088
  imageRendering: null,
75089
75089
  initialVisibility: null,
75090
75090
  in: null,
75091
75091
  in2: null,
75092
- intercept: number$b,
75093
- k: number$b,
75094
- k1: number$b,
75095
- k2: number$b,
75096
- k3: number$b,
75097
- 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,
75098
75098
  kernelMatrix: commaOrSpaceSeparated,
75099
75099
  kernelUnitLength: null,
75100
75100
  keyPoints: null,
@@ -75108,7 +75108,7 @@ const svg$1 = create$c({
75108
75108
  lengthAdjust: null,
75109
75109
  letterSpacing: null,
75110
75110
  lightingColor: null,
75111
- limitingConeAngle: number$b,
75111
+ limitingConeAngle: number$a,
75112
75112
  local: null,
75113
75113
  markerEnd: null,
75114
75114
  markerMid: null,
@@ -75124,7 +75124,7 @@ const svg$1 = create$c({
75124
75124
  media: null,
75125
75125
  mediaCharacterEncoding: null,
75126
75126
  mediaContentEncodings: null,
75127
- mediaSize: number$b,
75127
+ mediaSize: number$a,
75128
75128
  mediaTime: null,
75129
75129
  method: null,
75130
75130
  min: null,
@@ -75230,12 +75230,12 @@ const svg$1 = create$c({
75230
75230
  origin: null,
75231
75231
  overflow: null,
75232
75232
  overlay: null,
75233
- overlinePosition: number$b,
75234
- overlineThickness: number$b,
75233
+ overlinePosition: number$a,
75234
+ overlineThickness: number$a,
75235
75235
  paintOrder: null,
75236
75236
  panose1: null,
75237
75237
  path: null,
75238
- pathLength: number$b,
75238
+ pathLength: number$a,
75239
75239
  patternContentUnits: null,
75240
75240
  patternTransform: null,
75241
75241
  patternUnits: null,
@@ -75245,9 +75245,9 @@ const svg$1 = create$c({
75245
75245
  playbackOrder: null,
75246
75246
  pointerEvents: null,
75247
75247
  points: null,
75248
- pointsAtX: number$b,
75249
- pointsAtY: number$b,
75250
- pointsAtZ: number$b,
75248
+ pointsAtX: number$a,
75249
+ pointsAtY: number$a,
75250
+ pointsAtZ: number$a,
75251
75251
  preserveAlpha: null,
75252
75252
  preserveAspectRatio: null,
75253
75253
  primitiveUnits: null,
@@ -75279,8 +75279,8 @@ const svg$1 = create$c({
75279
75279
  side: null,
75280
75280
  slope: null,
75281
75281
  snapshotTime: null,
75282
- specularConstant: number$b,
75283
- specularExponent: number$b,
75282
+ specularConstant: number$a,
75283
+ specularExponent: number$a,
75284
75284
  spreadMethod: null,
75285
75285
  spacing: null,
75286
75286
  startOffset: null,
@@ -75290,30 +75290,30 @@ const svg$1 = create$c({
75290
75290
  stitchTiles: null,
75291
75291
  stopColor: null,
75292
75292
  stopOpacity: null,
75293
- strikethroughPosition: number$b,
75294
- strikethroughThickness: number$b,
75293
+ strikethroughPosition: number$a,
75294
+ strikethroughThickness: number$a,
75295
75295
  string: null,
75296
75296
  stroke: null,
75297
75297
  strokeDashArray: commaOrSpaceSeparated,
75298
75298
  strokeDashOffset: null,
75299
75299
  strokeLineCap: null,
75300
75300
  strokeLineJoin: null,
75301
- strokeMiterLimit: number$b,
75302
- strokeOpacity: number$b,
75301
+ strokeMiterLimit: number$a,
75302
+ strokeOpacity: number$a,
75303
75303
  strokeWidth: null,
75304
75304
  style: null,
75305
- surfaceScale: number$b,
75305
+ surfaceScale: number$a,
75306
75306
  syncBehavior: null,
75307
75307
  syncBehaviorDefault: null,
75308
75308
  syncMaster: null,
75309
75309
  syncTolerance: null,
75310
75310
  syncToleranceDefault: null,
75311
75311
  systemLanguage: commaOrSpaceSeparated,
75312
- tabIndex: number$b,
75312
+ tabIndex: number$a,
75313
75313
  tableValues: null,
75314
75314
  target: null,
75315
- targetX: number$b,
75316
- targetY: number$b,
75315
+ targetX: number$a,
75316
+ targetY: number$a,
75317
75317
  textAnchor: null,
75318
75318
  textDecoration: null,
75319
75319
  textRendering: null,
@@ -75328,22 +75328,22 @@ const svg$1 = create$c({
75328
75328
  transformOrigin: null,
75329
75329
  u1: null,
75330
75330
  u2: null,
75331
- underlinePosition: number$b,
75332
- underlineThickness: number$b,
75331
+ underlinePosition: number$a,
75332
+ underlineThickness: number$a,
75333
75333
  unicode: null,
75334
75334
  unicodeBidi: null,
75335
75335
  unicodeRange: null,
75336
- unitsPerEm: number$b,
75336
+ unitsPerEm: number$a,
75337
75337
  values: null,
75338
- vAlphabetic: number$b,
75339
- vMathematical: number$b,
75338
+ vAlphabetic: number$a,
75339
+ vMathematical: number$a,
75340
75340
  vectorEffect: null,
75341
- vHanging: number$b,
75342
- vIdeographic: number$b,
75341
+ vHanging: number$a,
75342
+ vIdeographic: number$a,
75343
75343
  version: null,
75344
- vertAdvY: number$b,
75345
- vertOriginX: number$b,
75346
- vertOriginY: number$b,
75344
+ vertAdvY: number$a,
75345
+ vertOriginX: number$a,
75346
+ vertOriginY: number$a,
75347
75347
  viewBox: null,
75348
75348
  viewTarget: null,
75349
75349
  visibility: null,
@@ -75355,7 +75355,7 @@ const svg$1 = create$c({
75355
75355
  x1: null,
75356
75356
  x2: null,
75357
75357
  xChannelSelector: null,
75358
- xHeight: number$b,
75358
+ xHeight: number$a,
75359
75359
  y: null,
75360
75360
  y1: null,
75361
75361
  y2: null,
@@ -86296,7 +86296,7 @@ function treeToExpectedCheckedLevel(currTree, checkedPaths) {
86296
86296
  currTree.tree.forEach((lzn) => {
86297
86297
  const levelZeroPath = [lzn.name];
86298
86298
  const height2 = nodeToHeight(lzn);
86299
- range$f(height2).forEach((i2) => {
86299
+ range$e(height2).forEach((i2) => {
86300
86300
  const levelIndex = i2 + 1;
86301
86301
  const levelNodePaths = nodeToLevelDescendantNamePaths(lzn, levelIndex, [], true);
86302
86302
  if (isEqual$3(levelNodePaths, checkedPaths)) {
@@ -86369,7 +86369,7 @@ function treeToMembershipMap(currTree) {
86369
86369
  if (currTree) {
86370
86370
  currTree.tree.forEach((lzn) => {
86371
86371
  const height2 = nodeToHeight(lzn);
86372
- range$f(height2).forEach((i2) => {
86372
+ range$e(height2).forEach((i2) => {
86373
86373
  const levelIndex = i2 + 1;
86374
86374
  const levelNodePaths = nodeToLevelDescendantNamePaths(lzn, levelIndex, [], true);
86375
86375
  levelNodePaths.forEach((setNamePath) => {
@@ -104075,7 +104075,7 @@ function LevelsButtons(props) {
104075
104075
  }
104076
104076
  }
104077
104077
  const { classes: classes2 } = useStyles$u();
104078
- 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) => {
104079
104079
  const isChecked = isEqual$3(path2, checkedLevelPath) && i2 === checkedLevelIndex;
104080
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);
104081
104081
  }) });
@@ -104681,10 +104681,10 @@ function ObsSetsManagerSubscriber(props) {
104681
104681
  ]);
104682
104682
  return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, helpText, errors, children: manager2 });
104683
104683
  }
104684
- function ascending$9(a2, b2) {
104684
+ function ascending$8(a2, b2) {
104685
104685
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
104686
104686
  }
104687
- function bisector$4(f2) {
104687
+ function bisector$3(f2) {
104688
104688
  let delta = f2;
104689
104689
  let compare2 = f2;
104690
104690
  if (f2.length === 1) {
@@ -104720,14 +104720,14 @@ function bisector$4(f2) {
104720
104720
  return { left: left2, center: center2, right: right2 };
104721
104721
  }
104722
104722
  function ascendingComparator$1(f2) {
104723
- return (d, x2) => ascending$9(f2(d), x2);
104723
+ return (d, x2) => ascending$8(f2(d), x2);
104724
104724
  }
104725
- function number$a(x2) {
104725
+ function number$9(x2) {
104726
104726
  return x2 === null ? NaN : +x2;
104727
104727
  }
104728
- const ascendingBisect$2 = bisector$4(ascending$9);
104729
- const bisectRight$3 = ascendingBisect$2.right;
104730
- 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;
104731
104731
  function count$2(values3, valueof) {
104732
104732
  let count2 = 0;
104733
104733
  {
@@ -104946,7 +104946,7 @@ function bin$2() {
104946
104946
  for (i2 = 0; i2 < n3; ++i2) {
104947
104947
  x2 = values3[i2];
104948
104948
  if (x02 <= x2 && x2 <= x12) {
104949
- bins2[bisectRight$3(tz, x2, 0, m2)].push(data2[i2]);
104949
+ bins2[bisectRight$2(tz, x2, 0, m2)].push(data2[i2]);
104950
104950
  }
104951
104951
  }
104952
104952
  return bins2;
@@ -104984,7 +104984,7 @@ function min$4(values3, valueof) {
104984
104984
  }
104985
104985
  return min2;
104986
104986
  }
104987
- function quantileSorted$1(values3, p, valueof = number$a) {
104987
+ function quantileSorted$1(values3, p, valueof = number$9) {
104988
104988
  if (!(n3 = values3.length)) return;
104989
104989
  if ((p = +p) <= 0 || n3 < 2) return +valueof(values3[0], 0, values3);
104990
104990
  if (p >= 1) return +valueof(values3[n3 - 1], n3 - 1, values3);
@@ -144179,7 +144179,7 @@ const defaultGetValue = (points2) => points2.length;
144179
144179
  const MAX_32_BIT_FLOAT = 3402823466e29;
144180
144180
  const defaultGetPoints = (bin2) => bin2.points;
144181
144181
  const defaultGetIndex = (bin2) => bin2.index;
144182
- 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;
144183
144183
  const defaultProps$w = {
144184
144184
  getValue: defaultGetValue,
144185
144185
  getPoints: defaultGetPoints,
@@ -144263,7 +144263,7 @@ class BinSorter {
144263
144263
  }
144264
144264
  getValueRange(percentileRange) {
144265
144265
  if (!this.sortedBins) {
144266
- 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));
144267
144267
  }
144268
144268
  if (!this.sortedBins.length) {
144269
144269
  return [];
@@ -144279,7 +144279,7 @@ class BinSorter {
144279
144279
  }
144280
144280
  getValueDomainByScale(scale2, [lower2 = 0, upper = 100] = []) {
144281
144281
  if (!this.sortedBins) {
144282
- 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));
144283
144283
  }
144284
144284
  if (!this.sortedBins.length) {
144285
144285
  return [];
@@ -184054,7 +184054,7 @@ function cartesianNormalizeInPlace$1(d) {
184054
184054
  var l2 = sqrt$5(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
184055
184055
  d[0] /= l2, d[1] /= l2, d[2] /= l2;
184056
184056
  }
184057
- 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;
184058
184058
  var boundsStream$3 = {
184059
184059
  point: boundsPoint$3,
184060
184060
  lineStart: boundsLineStart$1,
@@ -184074,11 +184074,11 @@ var boundsStream$3 = {
184074
184074
  if (areaRingSum$3 < 0) lambda0$3 = -(lambda1$1 = 180), phi0$1 = -(phi1$1 = 90);
184075
184075
  else if (deltaSum$1 > epsilon$8) phi1$1 = 90;
184076
184076
  else if (deltaSum$1 < -epsilon$8) phi0$1 = -90;
184077
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
184077
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
184078
184078
  }
184079
184079
  };
184080
184080
  function boundsPoint$3(lambda, phi2) {
184081
- ranges$1.push(range$c = [lambda0$3 = lambda, lambda1$1 = lambda]);
184081
+ ranges$1.push(range$b = [lambda0$3 = lambda, lambda1$1 = lambda]);
184082
184082
  if (phi2 < phi0$1) phi0$1 = phi2;
184083
184083
  if (phi2 > phi1$1) phi1$1 = phi2;
184084
184084
  }
@@ -184118,7 +184118,7 @@ function linePoint$1(lambda, phi2) {
184118
184118
  }
184119
184119
  }
184120
184120
  } else {
184121
- ranges$1.push(range$c = [lambda0$3 = lambda, lambda1$1 = lambda]);
184121
+ ranges$1.push(range$b = [lambda0$3 = lambda, lambda1$1 = lambda]);
184122
184122
  }
184123
184123
  if (phi2 < phi0$1) phi0$1 = phi2;
184124
184124
  if (phi2 > phi1$1) phi1$1 = phi2;
@@ -184128,7 +184128,7 @@ function boundsLineStart$1() {
184128
184128
  boundsStream$3.point = linePoint$1;
184129
184129
  }
184130
184130
  function boundsLineEnd$1() {
184131
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
184131
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
184132
184132
  boundsStream$3.point = boundsPoint$3;
184133
184133
  p0$1 = null;
184134
184134
  }
@@ -184149,7 +184149,7 @@ function boundsRingEnd$1() {
184149
184149
  boundsRingPoint$1(lambda00$4, phi00$4);
184150
184150
  areaStream$3.lineEnd();
184151
184151
  if (abs$5(deltaSum$1) > epsilon$8) lambda0$3 = -(lambda1$1 = 180);
184152
- range$c[0] = lambda0$3, range$c[1] = lambda1$1;
184152
+ range$b[0] = lambda0$3, range$b[1] = lambda1$1;
184153
184153
  p0$1 = null;
184154
184154
  }
184155
184155
  function angle$1(lambda02, lambda12) {
@@ -184182,7 +184182,7 @@ function bounds$2(feature2) {
184182
184182
  if ((delta = angle$1(a2[1], b2[0])) > deltaMax) deltaMax = delta, lambda0$3 = b2[0], lambda1$1 = a2[1];
184183
184183
  }
184184
184184
  }
184185
- ranges$1 = range$c = null;
184185
+ ranges$1 = range$b = null;
184186
184186
  return lambda0$3 === Infinity || phi0$1 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda0$3, phi0$1], [lambda1$1, phi1$1]];
184187
184187
  }
184188
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;
@@ -184528,10 +184528,10 @@ function link$1(array2) {
184528
184528
  a2.n = b2 = array2[0];
184529
184529
  b2.p = a2;
184530
184530
  }
184531
- function ascending$7(a2, b2) {
184531
+ function ascending$6(a2, b2) {
184532
184532
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
184533
184533
  }
184534
- function bisector$3(compare2) {
184534
+ function bisector$2(compare2) {
184535
184535
  if (compare2.length === 1) compare2 = ascendingComparator(compare2);
184536
184536
  return {
184537
184537
  left: function(a2, x2, lo, hi) {
@@ -184558,11 +184558,11 @@ function bisector$3(compare2) {
184558
184558
  }
184559
184559
  function ascendingComparator(f2) {
184560
184560
  return function(d, x2) {
184561
- return ascending$7(f2(d), x2);
184561
+ return ascending$6(f2(d), x2);
184562
184562
  };
184563
184563
  }
184564
- bisector$3(ascending$7);
184565
- function range$b(start2, stop3, step) {
184564
+ bisector$2(ascending$6);
184565
+ function range$a(start2, stop3, step) {
184566
184566
  start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
184567
184567
  var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
184568
184568
  while (++i2 < n3) {
@@ -184844,7 +184844,7 @@ function contains$2(object2, point2) {
184844
184844
  return (object2 && containsObjectType.hasOwnProperty(object2.type) ? containsObjectType[object2.type] : containsGeometry)(object2, point2);
184845
184845
  }
184846
184846
  function graticuleX$1(y02, y12, dy) {
184847
- var y2 = range$b(y02, y12 - epsilon$8, dy).concat(y12);
184847
+ var y2 = range$a(y02, y12 - epsilon$8, dy).concat(y12);
184848
184848
  return function(x2) {
184849
184849
  return y2.map(function(y22) {
184850
184850
  return [x2, y22];
@@ -184852,7 +184852,7 @@ function graticuleX$1(y02, y12, dy) {
184852
184852
  };
184853
184853
  }
184854
184854
  function graticuleY$1(x02, x12, dx) {
184855
- var x2 = range$b(x02, x12 - epsilon$8, dx).concat(x12);
184855
+ var x2 = range$a(x02, x12 - epsilon$8, dx).concat(x12);
184856
184856
  return function(y2) {
184857
184857
  return x2.map(function(x22) {
184858
184858
  return [x22, y2];
@@ -184865,9 +184865,9 @@ function graticule$1() {
184865
184865
  return { type: "MultiLineString", coordinates: lines() };
184866
184866
  }
184867
184867
  function lines() {
184868
- 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) {
184869
184869
  return abs$5(x22 % DX) > epsilon$8;
184870
- }).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) {
184871
184871
  return abs$5(y22 % DY) > epsilon$8;
184872
184872
  }).map(y2));
184873
184873
  }
@@ -210573,22 +210573,22 @@ async function getDecoder(fileDirectory) {
210573
210573
  const Decoder = await importFn();
210574
210574
  return new Decoder(fileDirectory);
210575
210575
  }
210576
- addDecoder([void 0, 1], () => import("./raw-CfV_ffwP.js").then((m2) => m2.default));
210577
- addDecoder(5, () => import("./lzw-CH6cXztR.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));
210578
210578
  addDecoder(6, () => {
210579
210579
  throw new Error("old style JPEG compression is not supported.");
210580
210580
  });
210581
- addDecoder(7, () => import("./jpeg-DYWCovEM.js").then((m2) => m2.default));
210582
- addDecoder([8, 32946], () => import("./deflate-60SrY1qt.js").then((m2) => m2.default));
210583
- addDecoder(32773, () => import("./packbits-YR6TV_Xk.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));
210584
210584
  addDecoder(
210585
210585
  34887,
210586
- () => import("./lerc-DIpWV480.js").then(async (m2) => {
210586
+ () => import("./lerc-Dj-OE8Tk.js").then(async (m2) => {
210587
210587
  await m2.zstd.init();
210588
210588
  return m2;
210589
210589
  }).then((m2) => m2.default)
210590
210590
  );
210591
- addDecoder(50001, () => import("./webimage-DxPJyfM8.js").then((m2) => m2.default));
210591
+ addDecoder(50001, () => import("./webimage-D6-tAV4h.js").then((m2) => m2.default));
210592
210592
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
210593
210593
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
210594
210594
  }
@@ -213629,7 +213629,7 @@ const Z_FIXED = 4;
213629
213629
  const Z_BINARY = 0;
213630
213630
  const Z_TEXT = 1;
213631
213631
  const Z_UNKNOWN = 2;
213632
- function zero$6(buf) {
213632
+ function zero$5(buf) {
213633
213633
  let len2 = buf.length;
213634
213634
  while (--len2 >= 0) {
213635
213635
  buf[len2] = 0;
@@ -213668,17 +213668,17 @@ const extra_blbits = (
213668
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]);
213669
213669
  const DIST_CODE_LEN = 512;
213670
213670
  const static_ltree = new Array((L_CODES + 2) * 2);
213671
- zero$6(static_ltree);
213671
+ zero$5(static_ltree);
213672
213672
  const static_dtree = new Array(D_CODES * 2);
213673
- zero$6(static_dtree);
213673
+ zero$5(static_dtree);
213674
213674
  const _dist_code = new Array(DIST_CODE_LEN);
213675
- zero$6(_dist_code);
213675
+ zero$5(_dist_code);
213676
213676
  const _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
213677
- zero$6(_length_code);
213677
+ zero$5(_length_code);
213678
213678
  const base_length = new Array(LENGTH_CODES);
213679
- zero$6(base_length);
213679
+ zero$5(base_length);
213680
213680
  const base_dist = new Array(D_CODES);
213681
- zero$6(base_dist);
213681
+ zero$5(base_dist);
213682
213682
  function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
213683
213683
  this.static_tree = static_tree;
213684
213684
  this.extra_bits = extra_bits;
@@ -221544,7 +221544,7 @@ const channels = {
221544
221544
  },
221545
221545
  fs: fs$2
221546
221546
  };
221547
- function range$a(len2) {
221547
+ function range$9(len2) {
221548
221548
  return [...Array(len2).keys()];
221549
221549
  }
221550
221550
  function padWithDefault$2(arr, defaultValue2, padWidth) {
@@ -222644,7 +222644,7 @@ const ScaleBarLayer = class extends CompositeLayer {
222644
222644
  sizeScale: 2 ** -zoom2,
222645
222645
  characterSet: [
222646
222646
  ...displayUnit.split(""),
222647
- ...range$a(10).map((i2) => String(i2)),
222647
+ ...range$9(10).map((i2) => String(i2)),
222648
222648
  ".",
222649
222649
  "e",
222650
222650
  "+"
@@ -224083,7 +224083,7 @@ class BitmaskLayer2 extends XRLayer {
224083
224083
  } = this.state;
224084
224084
  if (textures && model) {
224085
224085
  const scaleFactor = 1 / 2 ** (maxZoom - zoom2);
224086
- 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])]));
224087
224087
  model.setUniforms(Object.assign({}, uniforms, {
224088
224088
  ...colors2,
224089
224089
  // Bitmask image channel data textures
@@ -227272,7 +227272,7 @@ class ContourLayerWithText extends ContourLayer {
227272
227272
  let minCirclePointI;
227273
227273
  let minPolygonPoint;
227274
227274
  const numVertices = maxAreaPolygon.geometry.coordinates[0].length;
227275
- 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]];
227276
227276
  circlePolygon.geometry.coordinates[0].forEach((circleCoord, circlePointI) => {
227277
227277
  const circlePoint = point$9(circleCoord);
227278
227278
  polygonVertices.forEach((polyCoord) => {
@@ -227692,7 +227692,7 @@ function createQuadTree(obsEmbedding, getCellCoords) {
227692
227692
  if (!obsEmbedding) {
227693
227693
  return null;
227694
227694
  }
227695
- 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]));
227696
227696
  return tree2;
227697
227697
  }
227698
227698
  function constant$6(v) {
@@ -227800,8 +227800,14 @@ function forceCollideRects() {
227800
227800
  };
227801
227801
  return force2;
227802
227802
  }
227803
- function getPointSizeDevicePixels(devicePixelRatio2, zoom2, xRange, yRange, width2, height2) {
227804
- 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);
227805
227811
  const pointScreenSizeMax = 10;
227806
227812
  const pointScreenSizeMin = 1 / devicePixelRatio2;
227807
227813
  const scaleFactor = 2 ** zoom2;
@@ -228997,7 +229003,7 @@ function selection_order() {
228997
229003
  return this;
228998
229004
  }
228999
229005
  function selection_sort(compare2) {
229000
- if (!compare2) compare2 = ascending$6;
229006
+ if (!compare2) compare2 = ascending$5;
229001
229007
  function compareNode(a2, b2) {
229002
229008
  return a2 && b2 ? compare2(a2.__data__, b2.__data__) : !a2 - !b2;
229003
229009
  }
@@ -229011,7 +229017,7 @@ function selection_sort(compare2) {
229011
229017
  }
229012
229018
  return new Selection(sortgroups, this._parents).order();
229013
229019
  }
229014
- function ascending$6(a2, b2) {
229020
+ function ascending$5(a2, b2) {
229015
229021
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
229016
229022
  }
229017
229023
  function selection_call() {
@@ -229420,20 +229426,20 @@ Selection.prototype = {
229420
229426
  function select$1(selector2) {
229421
229427
  return typeof selector2 === "string" ? new Selection([[document.querySelector(selector2)]], [document.documentElement]) : new Selection([[selector2]], root$2);
229422
229428
  }
229423
- function ascending$5(a2, b2) {
229429
+ function ascending$4(a2, b2) {
229424
229430
  return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
229425
229431
  }
229426
- function descending$2(a2, b2) {
229432
+ function descending$1(a2, b2) {
229427
229433
  return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
229428
229434
  }
229429
- function bisector$2(f2) {
229435
+ function bisector$1(f2) {
229430
229436
  let compare12, compare2, delta;
229431
229437
  if (f2.length !== 2) {
229432
- compare12 = ascending$5;
229433
- compare2 = (d, x2) => ascending$5(f2(d), x2);
229438
+ compare12 = ascending$4;
229439
+ compare2 = (d, x2) => ascending$4(f2(d), x2);
229434
229440
  delta = (d, x2) => f2(d) - x2;
229435
229441
  } else {
229436
- compare12 = f2 === ascending$5 || f2 === descending$2 ? f2 : zero$5;
229442
+ compare12 = f2 === ascending$4 || f2 === descending$1 ? f2 : zero$4;
229437
229443
  compare2 = f2;
229438
229444
  delta = f2;
229439
229445
  }
@@ -229465,10 +229471,10 @@ function bisector$2(f2) {
229465
229471
  }
229466
229472
  return { left: left2, center: center2, right: right2 };
229467
229473
  }
229468
- function zero$5() {
229474
+ function zero$4() {
229469
229475
  return 0;
229470
229476
  }
229471
- function number$9(x2) {
229477
+ function number$8(x2) {
229472
229478
  return x2 === null ? NaN : +x2;
229473
229479
  }
229474
229480
  function* numbers$4(values3, valueof) {
@@ -229487,10 +229493,10 @@ function* numbers$4(values3, valueof) {
229487
229493
  }
229488
229494
  }
229489
229495
  }
229490
- const ascendingBisect$1 = bisector$2(ascending$5);
229491
- const bisectRight$2 = ascendingBisect$1.right;
229492
- const bisectLeft$1 = ascendingBisect$1.left;
229493
- 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;
229494
229500
  function variance(values3, valueof) {
229495
229501
  let count2 = 0;
229496
229502
  let delta;
@@ -229561,8 +229567,8 @@ class Adder {
229561
229567
  function permute(source2, keys2) {
229562
229568
  return Array.from(keys2, (key2) => source2[key2]);
229563
229569
  }
229564
- function compareDefined(compare2 = ascending$5) {
229565
- if (compare2 === ascending$5) return ascendingDefined;
229570
+ function compareDefined(compare2 = ascending$4) {
229571
+ if (compare2 === ascending$4) return ascendingDefined;
229566
229572
  if (typeof compare2 !== "function") throw new TypeError("compare is not a function");
229567
229573
  return (a2, b2) => {
229568
229574
  const x2 = compare2(a2, b2);
@@ -229573,40 +229579,51 @@ function compareDefined(compare2 = ascending$5) {
229573
229579
  function ascendingDefined(a2, b2) {
229574
229580
  return (a2 == null || !(a2 >= a2)) - (b2 == null || !(b2 >= b2)) || (a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
229575
229581
  }
229576
- 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
+ }
229577
229603
  function ticks(start2, stop3, count2) {
229578
- var reverse2, i2 = -1, n3, ticks2, step;
229579
229604
  stop3 = +stop3, start2 = +start2, count2 = +count2;
229580
- if (start2 === stop3 && count2 > 0) return [start2];
229581
- if (reverse2 = stop3 < start2) n3 = start2, start2 = stop3, stop3 = n3;
229582
- if ((step = tickIncrement(start2, stop3, count2)) === 0 || !isFinite(step)) return [];
229583
- if (step > 0) {
229584
- let r0 = Math.round(start2 / step), r1 = Math.round(stop3 / step);
229585
- if (r0 * step < start2) ++r0;
229586
- if (r1 * step > stop3) --r1;
229587
- ticks2 = new Array(n3 = r1 - r0 + 1);
229588
- 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;
229589
229613
  } else {
229590
- step = -step;
229591
- let r0 = Math.round(start2 * step), r1 = Math.round(stop3 * step);
229592
- if (r0 / step < start2) ++r0;
229593
- if (r1 / step > stop3) --r1;
229594
- ticks2 = new Array(n3 = r1 - r0 + 1);
229595
- 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;
229596
229616
  }
229597
- if (reverse2) ticks2.reverse();
229598
229617
  return ticks2;
229599
229618
  }
229600
229619
  function tickIncrement(start2, stop3, count2) {
229601
- var step = (stop3 - start2) / Math.max(0, count2), power = Math.floor(Math.log(step) / Math.LN10), error2 = step / Math.pow(10, power);
229602
- 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];
229603
229622
  }
229604
229623
  function tickStep(start2, stop3, count2) {
229605
- var step0 = Math.abs(stop3 - start2) / Math.max(0, count2), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error2 = step0 / step1;
229606
- if (error2 >= e10) step1 *= 10;
229607
- else if (error2 >= e5) step1 *= 5;
229608
- else if (error2 >= e2) step1 *= 2;
229609
- 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);
229610
229627
  }
229611
229628
  function max$3(values3, valueof) {
229612
229629
  let max2;
@@ -229644,7 +229661,11 @@ function min$3(values3, valueof) {
229644
229661
  }
229645
229662
  return min2;
229646
229663
  }
229647
- 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;
229648
229669
  compare2 = compare2 === void 0 ? ascendingDefined : compareDefined(compare2);
229649
229670
  while (right2 > left2) {
229650
229671
  if (right2 - left2 > 600) {
@@ -229681,15 +229702,15 @@ function swap$1(array2, i2, j) {
229681
229702
  }
229682
229703
  function quantile$1(values3, p, valueof) {
229683
229704
  values3 = Float64Array.from(numbers$4(values3, valueof));
229684
- if (!(n3 = values3.length)) return;
229685
- 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);
229686
229707
  if (p >= 1) return max$3(values3);
229687
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));
229688
229709
  return value0 + (value1 - value0) * (i2 - i0);
229689
229710
  }
229690
- function quantileSorted(values3, p, valueof = number$9) {
229691
- if (!(n3 = values3.length)) return;
229692
- 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);
229693
229714
  if (p >= 1) return +valueof(values3[n3 - 1], n3 - 1, values3);
229694
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);
229695
229716
  return value0 + (value1 - value0) * (i2 - i0);
@@ -229724,7 +229745,7 @@ function* flatten$2(arrays) {
229724
229745
  function merge$3(arrays) {
229725
229746
  return Array.from(flatten$2(arrays));
229726
229747
  }
229727
- function range$9(start2, stop3, step) {
229748
+ function range$8(start2, stop3, step) {
229728
229749
  start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
229729
229750
  var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
229730
229751
  while (++i2 < n3) {
@@ -230395,7 +230416,7 @@ function object$1(a2, b2) {
230395
230416
  };
230396
230417
  }
230397
230418
  var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, reB = new RegExp(reA.source, "g");
230398
- function zero$4(b2) {
230419
+ function zero$3(b2) {
230399
230420
  return function() {
230400
230421
  return b2;
230401
230422
  };
@@ -230428,7 +230449,7 @@ function string(a2, b2) {
230428
230449
  if (s2[i2]) s2[i2] += bs;
230429
230450
  else s2[++i2] = bs;
230430
230451
  }
230431
- 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) {
230432
230453
  for (var i22 = 0, o2; i22 < b2; ++i22) s2[(o2 = q[i22]).i] = o2.x(t4);
230433
230454
  return s2.join("");
230434
230455
  });
@@ -230694,7 +230715,7 @@ function constants$1(x2) {
230694
230715
  return x2;
230695
230716
  };
230696
230717
  }
230697
- function number$8(x2) {
230718
+ function number$7(x2) {
230698
230719
  return +x2;
230699
230720
  }
230700
230721
  var unit$1 = [0, 1];
@@ -230732,7 +230753,7 @@ function polymap(domain2, range2, interpolate2) {
230732
230753
  r3[i2] = interpolate2(range2[i2], range2[i2 + 1]);
230733
230754
  }
230734
230755
  return function(x2) {
230735
- var i22 = bisectRight$2(domain2, x2, 1, j) - 1;
230756
+ var i22 = bisectRight$1(domain2, x2, 1, j) - 1;
230736
230757
  return r3[i22](d[i22](x2));
230737
230758
  };
230738
230759
  }
@@ -230755,7 +230776,7 @@ function transformer$3() {
230755
230776
  return clamp2(untransform((input || (input = piecewise2(range2, domain2.map(transform3), interpolateNumber)))(y2)));
230756
230777
  };
230757
230778
  scale2.domain = function(_) {
230758
- return arguments.length ? (domain2 = Array.from(_, number$8), rescale()) : domain2.slice();
230779
+ return arguments.length ? (domain2 = Array.from(_, number$7), rescale()) : domain2.slice();
230759
230780
  };
230760
230781
  scale2.range = function(_) {
230761
230782
  return arguments.length ? (range2 = Array.from(_), rescale()) : range2.slice();
@@ -231075,7 +231096,7 @@ function identity$6(domain2) {
231075
231096
  }
231076
231097
  scale2.invert = scale2;
231077
231098
  scale2.domain = scale2.range = function(_) {
231078
- return arguments.length ? (domain2 = Array.from(_, number$8), scale2) : domain2.slice();
231099
+ return arguments.length ? (domain2 = Array.from(_, number$7), scale2) : domain2.slice();
231079
231100
  };
231080
231101
  scale2.unknown = function(_) {
231081
231102
  return arguments.length ? (unknown = _, scale2) : unknown;
@@ -231083,7 +231104,7 @@ function identity$6(domain2) {
231083
231104
  scale2.copy = function() {
231084
231105
  return identity$6(domain2).unknown(unknown);
231085
231106
  };
231086
- domain2 = arguments.length ? Array.from(domain2, number$8) : [0, 1];
231107
+ domain2 = arguments.length ? Array.from(domain2, number$7) : [0, 1];
231087
231108
  return linearish(scale2);
231088
231109
  }
231089
231110
  function nice$1(domain2, interval2) {
@@ -231273,7 +231294,7 @@ function quantile() {
231273
231294
  return scale2;
231274
231295
  }
231275
231296
  function scale2(x2) {
231276
- 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)];
231277
231298
  }
231278
231299
  scale2.invertExtent = function(y2) {
231279
231300
  var i2 = range2.indexOf(y2);
@@ -231286,7 +231307,7 @@ function quantile() {
231286
231307
  if (!arguments.length) return domain2.slice();
231287
231308
  domain2 = [];
231288
231309
  for (let d of _) if (d != null && !isNaN(d = +d)) domain2.push(d);
231289
- domain2.sort(ascending$5);
231310
+ domain2.sort(ascending$4);
231290
231311
  return rescale();
231291
231312
  };
231292
231313
  scale2.range = function(_) {
@@ -231306,7 +231327,7 @@ function quantile() {
231306
231327
  function quantize$2() {
231307
231328
  var x02 = 0, x12 = 1, n3 = 1, domain2 = [0.5], range2 = [0, 1], unknown;
231308
231329
  function scale2(x2) {
231309
- 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;
231310
231331
  }
231311
231332
  function rescale() {
231312
231333
  var i2 = -1;
@@ -231338,7 +231359,7 @@ function quantize$2() {
231338
231359
  function threshold() {
231339
231360
  var domain2 = [0.5], range2 = [0, 1], unknown, n3 = 1;
231340
231361
  function scale2(x2) {
231341
- 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;
231342
231363
  }
231343
231364
  scale2.domain = function(_) {
231344
231365
  return arguments.length ? (domain2 = Array.from(_), n3 = Math.min(domain2.length, range2.length - 1), scale2) : domain2.slice();
@@ -231652,7 +231673,7 @@ function ticker(year2, month2, week2, day2, hour2, minute2) {
231652
231673
  }
231653
231674
  function tickInterval(start2, stop3, count2) {
231654
231675
  const target2 = Math.abs(stop3 - start2) / count2;
231655
- const i2 = bisector$2(([, , step2]) => step2).right(tickIntervals, target2);
231676
+ const i2 = bisector$1(([, , step2]) => step2).right(tickIntervals, target2);
231656
231677
  if (i2 === tickIntervals.length) return year2.every(tickStep(start2 / durationYear$1, stop3 / durationYear$1, count2));
231657
231678
  if (i2 === 0) return millisecond.every(Math.max(tickStep(start2, stop3, count2), 1));
231658
231679
  const [t4, step] = tickIntervals[target2 / tickIntervals[i2 - 1][2] < tickIntervals[i2][2] / target2 ? i2 - 1 : i2];
@@ -232224,7 +232245,7 @@ function defaultLocale$1(definition2) {
232224
232245
  function date(t4) {
232225
232246
  return new Date(t4);
232226
232247
  }
232227
- function number$7(t4) {
232248
+ function number$6(t4) {
232228
232249
  return t4 instanceof Date ? +t4 : +/* @__PURE__ */ new Date(+t4);
232229
232250
  }
232230
232251
  function calendar(ticks2, tickInterval, year2, month2, week2, day2, hour2, minute2, second2, format2) {
@@ -232237,7 +232258,7 @@ function calendar(ticks2, tickInterval, year2, month2, week2, day2, hour2, minut
232237
232258
  return new Date(invert2(y2));
232238
232259
  };
232239
232260
  scale2.domain = function(_) {
232240
- return arguments.length ? domain2(Array.from(_, number$7)) : domain2().map(date);
232261
+ return arguments.length ? domain2(Array.from(_, number$6)) : domain2().map(date);
232241
232262
  };
232242
232263
  scale2.ticks = function(interval2) {
232243
232264
  var d = domain2();
@@ -232397,7 +232418,7 @@ function translateX(x2) {
232397
232418
  function translateY(y2) {
232398
232419
  return "translate(0," + y2 + ")";
232399
232420
  }
232400
- function number$6(scale2) {
232421
+ function number$5(scale2) {
232401
232422
  return (d) => +scale2(d);
232402
232423
  }
232403
232424
  function center(scale2, offset2) {
@@ -232411,7 +232432,7 @@ function entering() {
232411
232432
  function axis(orient2, scale2) {
232412
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;
232413
232434
  function axis2(context2) {
232414
- 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");
232415
232436
  path2 = path2.merge(path2.enter().insert("path", ".tick").attr("class", "domain").attr("stroke", "currentColor"));
232416
232437
  tick2 = tick2.merge(tickEnter);
232417
232438
  line2 = line2.merge(tickEnter.append("line").attr("stroke", "currentColor").attr(x2 + "2", k * tickSizeInner));
@@ -232544,6 +232565,9 @@ function ramp(color2, n3 = 256) {
232544
232565
  canvas.width = n3;
232545
232566
  canvas.height = 1;
232546
232567
  const context2 = canvas.getContext("2d");
232568
+ if (!context2) {
232569
+ throw new Error("Could not get 2d context from canvas");
232570
+ }
232547
232571
  for (let i2 = 0; i2 < n3; ++i2) {
232548
232572
  context2.fillStyle = color2(i2 / (n3 - 1));
232549
232573
  context2.fillRect(i2, 0, 1, 1);
@@ -232562,6 +232586,8 @@ function getXlinkHref(cmap) {
232562
232586
  }
232563
232587
  const useStyles$q = makeStyles()(() => ({
232564
232588
  legend: {
232589
+ position: "relative",
232590
+ // Needed for absolute positioning of slider overlay
232565
232591
  top: "2px",
232566
232592
  right: "2px",
232567
232593
  fontSize: "10px !important",
@@ -232593,6 +232619,74 @@ const useStyles$q = makeStyles()(() => ({
232593
232619
  },
232594
232620
  legendInvisible: {
232595
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"
232596
232690
  }
232597
232691
  }));
232598
232692
  const titleHeight = 10;
@@ -232602,21 +232696,23 @@ const rectMarginX = 2;
232602
232696
  function combineExtents(extents, featureAggregationStrategy) {
232603
232697
  if (Array.isArray(extents)) {
232604
232698
  if (Array.isArray(extents?.[0])) {
232699
+ const extentsArray = extents;
232605
232700
  if (featureAggregationStrategy === "first") {
232606
- return extents[0];
232701
+ return extentsArray[0];
232607
232702
  }
232608
232703
  if (featureAggregationStrategy === "last") {
232609
- return extents.at(-1);
232704
+ return extentsArray.at(-1) || null;
232610
232705
  }
232611
232706
  if (typeof featureAggregationStrategy === "number") {
232612
232707
  const i2 = featureAggregationStrategy;
232613
- return extents[i2];
232708
+ return extentsArray[i2];
232614
232709
  }
232615
232710
  if (featureAggregationStrategy === "sum") {
232616
- 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]]);
232617
232712
  }
232618
232713
  if (featureAggregationStrategy === "mean") {
232619
- 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];
232620
232716
  }
232621
232717
  } else {
232622
232718
  return extents;
@@ -232630,7 +232726,7 @@ function combineMissings(missings, featureAggregationStrategy) {
232630
232726
  return missings[0];
232631
232727
  }
232632
232728
  if (featureAggregationStrategy === "last") {
232633
- return missings.at(-1);
232729
+ return missings.at(-1) || null;
232634
232730
  }
232635
232731
  if (typeof featureAggregationStrategy === "number") {
232636
232732
  const i2 = featureAggregationStrategy;
@@ -232646,52 +232742,127 @@ function combineMissings(missings, featureAggregationStrategy) {
232646
232742
  return null;
232647
232743
  }
232648
232744
  function Legend(props) {
232649
- 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;
232650
- 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);
232651
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]);
232652
232800
  const isDarkTheme = theme === "dark";
232653
232801
  const isStaticColor = obsColorEncoding === "spatialChannelColor" || obsColorEncoding === "spatialLayerColor";
232654
232802
  const isSetColor = obsColorEncoding === "cellSetSelection";
232655
- const layerColor = Array.isArray(spatialLayerColor) && spatialLayerColor.length === 3 ? spatialLayerColor : getDefaultColor(theme);
232656
- 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");
232657
232805
  const staticColor = obsColorEncoding === "spatialChannelColor" ? channelColor : layerColor;
232658
- 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);
232659
232807
  const levelZeroNames = useMemo$1(() => Array.from(new Set(obsSetSelection?.map((setPath) => setPath[0]) || [])), [obsSetSelection]);
232660
- 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);
232661
232809
  const availHeight = maxHeight2 !== null ? Math.max(0, maxHeight2 - 4) : Infinity;
232662
232810
  const needsScroll = Number.isFinite(availHeight) && dynamicHeight > availHeight + 1;
232663
232811
  useEffect(() => {
232664
232812
  const domElement = svgRef.current;
232813
+ if (!domElement)
232814
+ return;
232665
232815
  const foregroundColor = highContrast ? "black" : isDarkTheme ? "white" : "black";
232666
232816
  const svg2 = select$1(domElement);
232667
232817
  svg2.selectAll("g").remove();
232668
232818
  svg2.attr("width", width2).attr("height", dynamicHeight);
232669
232819
  const g2 = svg2.append("g").attr("width", width2).attr("height", dynamicHeight);
232670
- if (!considerSelections || obsColorEncoding === "geneSelection") {
232671
- 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;
232672
232824
  if (featureValueColormap && pointsVisible) {
232673
- const xlinkHref = getXlinkHref(featureValueColormap);
232674
- g2.append("image").attr("x", 0).attr("y", titleHeight).attr("width", width2).attr("height", rectHeight).attr("preserveAspectRatio", "none").attr("href", xlinkHref);
232675
- 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
+ }
232676
232834
  const scaledDataExtent = [
232677
232835
  xMin + (xMax - xMin) * rMin,
232678
232836
  xMax - (xMax - xMin) * (1 - rMax)
232679
232837
  ];
232680
- const x2 = linear$1().domain(scaledDataExtent).range([0.5, width2 - 0.5]);
232681
- const axisTicks2 = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`).style("font-size", "10px").call(axisBottom(x2).tickValues(scaledDataExtent));
232682
- axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
232683
- axisTicks2.selectAll("text").style("fill", foregroundColor);
232684
- axisTicks2.selectAll("text").attr("text-anchor", (d, i2) => i2 === 0 ? "start" : "end");
232685
- } 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) {
232686
232857
  const tSize = 12;
232687
232858
  const xPercentile = linear$1().domain([0, 1]).range([tSize / 2, width2 - tSize / 2 - 2]);
232688
- 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));
232689
232860
  axisTicks2.selectAll("line,path").style("stroke", foregroundColor);
232690
232861
  axisTicks2.selectAll("text").style("fill", foregroundColor);
232691
232862
  const NEIGHBOR_THRESHOLD = 18;
232692
- const contourPercentages = contourPercentiles.map((x2) => x2 * 100);
232863
+ const contourPercentages = contourPercentiles.map((p) => p * 100);
232693
232864
  if (contourPercentages?.[1] - contourPercentages?.[0] <= NEIGHBOR_THRESHOLD || contourPercentages?.[2] - contourPercentages?.[1] <= NEIGHBOR_THRESHOLD) {
232694
- 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})`);
232695
232866
  }
232696
232867
  const triangleGroupG = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight + 4})`);
232697
232868
  contourPercentiles.forEach((p, i2) => {
@@ -232701,7 +232872,7 @@ function Legend(props) {
232701
232872
  const thresholdGroupG = g2.append("g").attr("transform", `translate(0,${titleHeight + rectHeight})`);
232702
232873
  const thresholdFormatter = format$8(".0f");
232703
232874
  contourPercentiles.forEach((p, i2) => {
232704
- const contourThreshold = xMin + (xMax - xMin) * (contourThresholds?.[i2] / 255);
232875
+ const contourThreshold = xMin + (xMax - xMin) * ((contourThresholds?.[i2] ?? 0) / 255);
232705
232876
  const thresholdG = thresholdGroupG.append("g").attr("transform", `translate(${xPercentile(p)},0)`).style("font-size", "7px");
232706
232877
  thresholdG.append("text").text(thresholdFormatter(contourThreshold)).style("fill", foregroundColor).attr("text-anchor", "middle");
232707
232878
  });
@@ -232724,9 +232895,9 @@ function Legend(props) {
232724
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);
232725
232896
  y2 += titleHeight;
232726
232897
  setPaths.forEach((setPath) => {
232727
- 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");
232728
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]})`);
232729
- 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);
232730
232901
  y2 += rectHeight + rectMarginY;
232731
232902
  });
232732
232903
  });
@@ -232747,17 +232918,17 @@ function Legend(props) {
232747
232918
  } else {
232748
232919
  featureSelectionLabelRawStr = featureSelectionLabelRaw?.[0];
232749
232920
  }
232750
- const combinedMissing = combineMissings(missing, featureAggregationStrategy);
232921
+ const combinedMissing = combineMissings(missing ?? null, featureAggregationStrategy ?? null);
232751
232922
  const featureSelectionLabel = combinedMissing ? `${featureSelectionLabelRawStr} (${Math.round(combinedMissing * 100)}% NaN)` : featureSelectionLabelRawStr;
232752
- const obsLabel = capitalize$3(obsType);
232753
- 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);
232754
232925
  const mainLabel = showObsLabel ? obsLabel : featureLabel;
232755
232926
  const subLabel = showObsLabel ? featureLabel : null;
232756
232927
  const hasSubLabel = subLabel !== null;
232757
232928
  if (!isSetColor) {
232758
- 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);
232759
232930
  if (hasSubLabel) {
232760
- 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);
232761
232932
  }
232762
232933
  }
232763
232934
  }, [
@@ -232765,6 +232936,7 @@ function Legend(props) {
232765
232936
  height2,
232766
232937
  featureValueColormap,
232767
232938
  featureValueColormapRange,
232939
+ localRange,
232768
232940
  considerSelections,
232769
232941
  obsType,
232770
232942
  obsColorEncoding,
@@ -232783,20 +232955,63 @@ function Legend(props) {
232783
232955
  contoursFilled,
232784
232956
  contoursVisible,
232785
232957
  pointsVisible,
232786
- featureAggregationStrategy
232958
+ featureAggregationStrategy,
232959
+ setFeatureValueColormapRange,
232960
+ dynamicHeight,
232961
+ highContrast,
232962
+ isStaticColor,
232963
+ missing,
232964
+ showObsLabel,
232965
+ staticColor
232787
232966
  ]);
232788
- 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, {
232789
232990
  [classes2.legendRelative]: positionRelative,
232790
232991
  [classes2.legendAbsolute]: !positionRelative,
232791
232992
  [classes2.legendHighContrast]: highContrast,
232792
232993
  [classes2.legendLowContrast]: !highContrast,
232793
232994
  [classes2.legendInvisible]: !visible
232794
232995
  }), style: {
232795
- ...needsScroll ? { maxHeight: `${Math.floor(availHeight)}px`, overflowY: "auto" } : { maxHeight: void 0, overflowY: "visible" }
232796
- }, 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: {
232797
232999
  width: `${width2}px`,
232798
233000
  height: `${dynamicHeight}px`
232799
- } }) });
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
+ } })] })] });
232800
233015
  }
232801
233016
  const useStyles$p = makeStyles()(() => ({
232802
233017
  multiLegend: {
@@ -232829,8 +233044,12 @@ function MultiLegend(props) {
232829
233044
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
232830
233045
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].reverse(), [pointLayerScopes]);
232831
233046
  return jsxRuntimeExports.jsxs("div", { className: classes2.multiLegend, children: [pointLayerScopes ? reversedPointLayerScopes.flatMap((layerScope) => {
232832
- const layerCoordination = pointLayerCoordination[0][layerScope];
232833
- 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 || {};
232834
233053
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
232835
233054
  const height2 = isStaticColor ? 20 : 36;
232836
233055
  return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, {
@@ -232845,30 +233064,39 @@ function MultiLegend(props) {
232845
233064
  featureValueType,
232846
233065
  obsColorEncoding,
232847
233066
  spatialLayerColor,
232848
- featureSelection: null,
233067
+ featureSelection,
232849
233068
  // featureLabelsMap={featureLabelsMap} // TODO
232850
- featureValueColormap: "viridis",
232851
- featureValueColormapRange: [0, 1],
233069
+ featureValueColormap: featureValueColormap || "viridis",
233070
+ featureValueColormapRange: featureValueColormapRange || [0, 1],
233071
+ setFeatureValueColormapRange,
232852
233072
  extent: null,
232853
233073
  height: height2
232854
233074
  }, layerScope) : null;
232855
233075
  }) : null, spotLayerScopes ? reversedSpotLayerScopes.flatMap((layerScope) => {
232856
- const layerCoordination = spotLayerCoordination[0][layerScope];
233076
+ const layerCoordination = spotLayerCoordination?.[0][layerScope];
233077
+ const layerSetters = spotLayerCoordination?.[1]?.[layerScope];
233078
+ if (!layerCoordination)
233079
+ return null;
232857
233080
  const { spatialLayerVisible, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, spatialLayerColor, legendVisible, obsSetSelection, obsSetColor } = layerCoordination;
233081
+ const { setFeatureValueColormapRange } = layerSetters || {};
232858
233082
  const expressionExtents = spotMultiExpressionExtents?.[layerScope];
232859
233083
  const firstExpressionExtent = expressionExtents?.[0];
232860
233084
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
232861
233085
  const height2 = isStaticColor ? 20 : 36;
232862
233086
  const featureLabelsMap = spotMultiFeatureLabels?.[layerScope]?.featureLabelsMap;
232863
- 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;
232864
233088
  }) : null, segmentationLayerScopes ? reversedSegmentationLayerScopes.flatMap((layerScope) => {
232865
- const layerCoordination = segmentationLayerCoordination[0][layerScope];
232866
- const channelScopes = segmentationChannelScopesByLayer[layerScope];
232867
- 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;
232868
233095
  const { spatialLayerVisible } = layerCoordination;
232869
233096
  const reversedChannelScopes = [...channelScopes || []].reverse();
232870
233097
  return channelCoordination && channelScopes ? reversedChannelScopes.map((cScope) => {
232871
233098
  const { spatialChannelVisible, spatialChannelColor, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, legendVisible, obsSetSelection, obsSetColor } = channelCoordination[cScope];
233099
+ const { setFeatureValueColormapRange } = channelSetters?.[cScope] || {};
232872
233100
  const expressionExtents = segmentationMultiExpressionExtents?.[layerScope]?.[cScope];
232873
233101
  const firstExpressionExtent = expressionExtents?.[0];
232874
233102
  const isStaticColor = obsColorEncoding === "spatialChannelColor";
@@ -232889,6 +233117,7 @@ function MultiLegend(props) {
232889
233117
  // featureLabelsMap={featureLabelsMap} // TODO
232890
233118
  featureValueColormap,
232891
233119
  featureValueColormapRange,
233120
+ setFeatureValueColormapRange,
232892
233121
  extent: firstExpressionExtent,
232893
233122
  height: height2,
232894
233123
  spatialChannelColor,
@@ -232938,7 +233167,7 @@ function ChannelNamesLegend(props) {
232938
233167
  const imageWrapperInstance = images?.[layerScope]?.image?.instance;
232939
233168
  const channelNames = imageWrapperInstance?.getChannelNames();
232940
233169
  const channelIndex = imageWrapperInstance?.getChannelIndex(spatialTargetC);
232941
- const channelName = channelNames?.[channelIndex];
233170
+ const channelName = channelIndex !== void 0 ? channelNames?.[channelIndex] : void 0;
232942
233171
  return spatialLayerVisible && spatialChannelVisible && spatialChannelLabelsVisible ? jsxRuntimeExports.jsx(Typography, { variant: "h6", className: classes2.channelNameText, style: {
232943
233172
  color: rgbColor,
232944
233173
  fontSize: `${spatialChannelLabelSize}px`
@@ -233097,7 +233326,7 @@ function EmbeddingScatterplotSubscriber(props) {
233097
233326
  }, [obsEmbedding]);
233098
233327
  useEffect(() => {
233099
233328
  if (xRange && yRange && width2 && height2) {
233100
- const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2);
233329
+ const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2, numCells);
233101
233330
  setDynamicCellRadius(pointSizeDevicePixels);
233102
233331
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
233103
233332
  setDynamicCellOpacity(nextCellOpacityScale);
@@ -233305,6 +233534,7 @@ function EmbeddingScatterplotSubscriber(props) {
233305
233534
  featureLabelsMap,
233306
233535
  featureValueColormap: geneExpressionColormap,
233307
233536
  featureValueColormapRange: geneExpressionColormapRange,
233537
+ setFeatureValueColormapRange: setGeneExpressionColormapRange,
233308
233538
  obsSetSelection: cellSetSelection,
233309
233539
  extent: expressionExtents,
233310
233540
  missing: expressionMissing,
@@ -233532,7 +233762,7 @@ function GatingSubscriber(props) {
233532
233762
  }, [obsXY]);
233533
233763
  useEffect(() => {
233534
233764
  if (xRange && yRange) {
233535
- const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2);
233765
+ const pointSizeDevicePixels = getPointSizeDevicePixels(window.devicePixelRatio, zoom2, xRange, yRange, width2, height2, numCells);
233536
233766
  setDynamicCellRadius(pointSizeDevicePixels);
233537
233767
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
233538
233768
  setDynamicCellOpacity(nextCellOpacityScale);
@@ -248198,7 +248428,7 @@ var equalScalar = /* @__PURE__ */ createEqualScalar({
248198
248428
  config: config$2,
248199
248429
  typed
248200
248430
  });
248201
- var number$5 = /* @__PURE__ */ createNumber({
248431
+ var number$4 = /* @__PURE__ */ createNumber({
248202
248432
  typed
248203
248433
  });
248204
248434
  var multiplyScalar = /* @__PURE__ */ createMultiplyScalar({
@@ -248315,7 +248545,7 @@ var pow$4 = /* @__PURE__ */ createPow({
248315
248545
  identity: identity$4,
248316
248546
  matrix,
248317
248547
  multiply,
248318
- number: number$5,
248548
+ number: number$4,
248319
248549
  typed
248320
248550
  });
248321
248551
  var bignumber = /* @__PURE__ */ createBignumber({
@@ -248325,7 +248555,7 @@ var bignumber = /* @__PURE__ */ createBignumber({
248325
248555
  var numeric$1 = /* @__PURE__ */ createNumeric({
248326
248556
  bignumber,
248327
248557
  fraction,
248328
- number: number$5
248558
+ number: number$4
248329
248559
  });
248330
248560
  var subtract = /* @__PURE__ */ createSubtract({
248331
248561
  DenseMatrix,
@@ -248419,7 +248649,7 @@ var Unit = /* @__PURE__ */ createUnitClass({
248419
248649
  format: format$4,
248420
248650
  isNumeric: isNumeric$1,
248421
248651
  multiplyScalar,
248422
- number: number$5,
248652
+ number: number$4,
248423
248653
  pow: pow$4,
248424
248654
  round,
248425
248655
  subtract
@@ -250113,7 +250343,7 @@ let Array$2 = class Array2 extends (_a$5 = Location$1, _a$5) {
250113
250343
  return is_dtype$1(this.dtype, query);
250114
250344
  }
250115
250345
  };
250116
- function* range$8(start2, stop3, step = 1) {
250346
+ function* range$7(start2, stop3, step = 1) {
250117
250347
  if (stop3 === void 0) {
250118
250348
  stop3 = start2;
250119
250349
  start2 = 0;
@@ -250257,7 +250487,7 @@ let SliceDimIndexer$1 = class SliceDimIndexer {
250257
250487
  *[Symbol.iterator]() {
250258
250488
  const dim_chunk_ix_from = Math.floor(this.start / this.dim_chunk_len);
250259
250489
  const dim_chunk_ix_to = Math.ceil(this.stop / this.dim_chunk_len);
250260
- 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)) {
250261
250491
  const dim_offset = dim_chunk_ix * this.dim_chunk_len;
250262
250492
  const dim_limit = Math.min(this.dim_len, (dim_chunk_ix + 1) * this.dim_chunk_len);
250263
250493
  const dim_chunk_len = dim_limit - dim_offset;
@@ -251622,7 +251852,7 @@ function parseV1(spec, renderString) {
251622
251852
  function* iterDims(dimensions) {
251623
251853
  const keys2 = Object.keys(dimensions);
251624
251854
  const iterables = Object.values(dimensions).map(
251625
- (i2) => Array.isArray(i2) ? i2 : [...range$7(i2)]
251855
+ (i2) => Array.isArray(i2) ? i2 : [...range$6(i2)]
251626
251856
  );
251627
251857
  for (const values3 of product$1(...iterables)) {
251628
251858
  yield Object.fromEntries(keys2.map((key2, i2) => [key2, values3[i2]]));
@@ -251651,7 +251881,7 @@ function* product$1(...iterables) {
251651
251881
  results[i2] = iterators[i2].next();
251652
251882
  }
251653
251883
  }
251654
- function* range$7({ stop: stop3, start: start2 = 0, step = 1 }) {
251884
+ function* range$6({ stop: stop3, start: start2 = 0, step = 1 }) {
251655
251885
  for (let i2 = start2; i2 < stop3; i2 += step) {
251656
251886
  yield i2;
251657
251887
  }
@@ -253089,6 +253319,7 @@ function SpatialSubscriber$1(props) {
253089
253319
  featureLabelsMap,
253090
253320
  featureValueColormap: geneExpressionColormap,
253091
253321
  featureValueColormapRange: geneExpressionColormapRange,
253322
+ setFeatureValueColormapRange: setGeneExpressionColormapRange,
253092
253323
  extent: expressionExtents?.[0]
253093
253324
  })] });
253094
253325
  }
@@ -254467,12 +254698,12 @@ class ErrorBoundary extends React__default.Component {
254467
254698
  }
254468
254699
  }
254469
254700
  const LazySpatialThree = React__default.lazy(async () => {
254470
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DLHm5QfB.js");
254701
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-Dea9LBw1.js");
254471
254702
  return { default: SpatialWrapper2 };
254472
254703
  });
254473
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 }) }) }) }));
254474
254705
  const LazySpatialAccelerated = React__default.lazy(async () => {
254475
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DtlGfTXf.js");
254706
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DE9wvnUC.js");
254476
254707
  return { default: SpatialWrapper2 };
254477
254708
  });
254478
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 }) }) }) }));
@@ -255350,7 +255581,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255350
255581
  }
255351
255582
  const curr = backlog[backlog.length - 1];
255352
255583
  if (dataRef.current && dataRef.current.buffer.byteLength && expressionRowLookUp.size > 0 && !shouldUsePaddedImplementation(dataRef.current.length)) {
255353
- 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({
255354
255585
  curr,
255355
255586
  tileI: i2,
255356
255587
  tileJ: j,
@@ -255459,7 +255690,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255459
255690
  });
255460
255691
  };
255461
255692
  const cellOrdering = transpose2 ? axisTopLabels : axisLeftLabels;
255462
- 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));
255463
255694
  return layers3;
255464
255695
  }
255465
255696
  function getLayer(i2, j, tile) {
@@ -255611,10 +255842,10 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255611
255842
  const cellOrdering = transpose2 ? axisTopLabels : axisLeftLabels;
255612
255843
  const colorBarTileWidthPx = transpose2 ? TILE_SIZE : 1;
255613
255844
  const colorBarTileHeightPx = transpose2 ? 1 : TILE_SIZE;
255614
- const result = range$f(numCellColorTracks).map((track) => {
255615
- 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) => {
255616
255847
  const tileData = new Uint8ClampedArray(TILE_SIZE * 1 * 4);
255617
- range$f(TILE_SIZE).forEach((tileY) => {
255848
+ range$e(TILE_SIZE).forEach((tileY) => {
255618
255849
  rowI = i2 * TILE_SIZE + tileY;
255619
255850
  if (rowI < cellOrdering.length) {
255620
255851
  cellId = cellOrdering[rowI];
@@ -255744,7 +255975,7 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
255744
255975
  }
255745
255976
  }
255746
255977
  const cellColorsViews = useMemo$1(() => {
255747
- const result = range$f(numCellColorTracks).map((track) => {
255978
+ const result = range$e(numCellColorTracks).map((track) => {
255748
255979
  let view;
255749
255980
  if (transpose2) {
255750
255981
  view = new OrthographicView({
@@ -255970,7 +256201,7 @@ function HeatmapSubscriber(props) {
255970
256201
  setTargetY(target2[1]);
255971
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: () => {
255972
256203
  setComponentHover(uuid2);
255973
- }, 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 })] });
255974
256205
  }
255975
256206
  function _classCallCheck(a2, n3) {
255976
256207
  if (!(a2 instanceof n3)) throw new TypeError("Cannot call a class as a function");
@@ -263162,7 +263393,7 @@ function LayerOptions({ colormap, opacity: opacity2, handleColormapChange, handl
263162
263393
  const domainSelectorId = $bdb11010cef70236$export$f680877a34711e37();
263163
263394
  const opacitySliderId = $bdb11010cef70236$export$f680877a34711e37();
263164
263395
  const zeroTransparentId = $bdb11010cef70236$export$f680877a34711e37();
263165
- 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) => {
263166
263397
  handleDomainChange(value2);
263167
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 }) }) })] });
263168
263399
  }
@@ -268485,7 +268716,7 @@ async function open(location, options = {}) {
268485
268716
  }
268486
268717
  open.v2 = open_v2;
268487
268718
  open.v3 = open_v3;
268488
- function* range$6(start2, stop3, step = 1) {
268719
+ function* range$5(start2, stop3, step = 1) {
268489
268720
  if (stop3 === void 0) {
268490
268721
  stop3 = start2;
268491
268722
  start2 = 0;
@@ -268629,7 +268860,7 @@ class SliceDimIndexer2 {
268629
268860
  *[Symbol.iterator]() {
268630
268861
  const dim_chunk_ix_from = Math.floor(this.start / this.dim_chunk_len);
268631
268862
  const dim_chunk_ix_to = Math.ceil(this.stop / this.dim_chunk_len);
268632
- 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)) {
268633
268864
  const dim_offset = dim_chunk_ix * this.dim_chunk_len;
268634
268865
  const dim_limit = Math.min(this.dim_len, (dim_chunk_ix + 1) * this.dim_chunk_len);
268635
268866
  const dim_chunk_len = dim_limit - dim_offset;
@@ -269085,7 +269316,7 @@ function HiglassGlobalStyles(props) {
269085
269316
  }
269086
269317
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
269087
269318
  const LazyHiGlassComponent = React__default.lazy(async () => {
269088
- const { HiGlassComponent } = await import("./higlass-BqUxOaYD.js");
269319
+ const { HiGlassComponent } = await import("./higlass-HrDVcILg.js");
269089
269320
  return { default: HiGlassComponent };
269090
269321
  });
269091
269322
  const HG_SIZE = 800;
@@ -272032,7 +272263,7 @@ function NeuroglancerGlobalStyles(props) {
272032
272263
  const { classes: classes2 } = props;
272033
272264
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
272034
272265
  }
272035
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BydwJs6l.js"));
272266
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BsrULsNY.js"));
272036
272267
  function createWorker() {
272037
272268
  return new WorkerFactory();
272038
272269
  }
@@ -302301,68 +302532,6 @@ function toSet$1(_) {
302301
302532
  for (let i2 = 0; i2 < n3; ++i2) s2[_[i2]] = true;
302302
302533
  return s2;
302303
302534
  }
302304
- function ascending$4(a2, b2) {
302305
- return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
302306
- }
302307
- function descending$1(a2, b2) {
302308
- return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
302309
- }
302310
- function bisector$1(f2) {
302311
- let compare12, compare2, delta;
302312
- if (f2.length !== 2) {
302313
- compare12 = ascending$4;
302314
- compare2 = (d, x2) => ascending$4(f2(d), x2);
302315
- delta = (d, x2) => f2(d) - x2;
302316
- } else {
302317
- compare12 = f2 === ascending$4 || f2 === descending$1 ? f2 : zero$3;
302318
- compare2 = f2;
302319
- delta = f2;
302320
- }
302321
- function left2(a2, x2, lo = 0, hi = a2.length) {
302322
- if (lo < hi) {
302323
- if (compare12(x2, x2) !== 0) return hi;
302324
- do {
302325
- const mid = lo + hi >>> 1;
302326
- if (compare2(a2[mid], x2) < 0) lo = mid + 1;
302327
- else hi = mid;
302328
- } while (lo < hi);
302329
- }
302330
- return lo;
302331
- }
302332
- function right2(a2, x2, lo = 0, hi = a2.length) {
302333
- if (lo < hi) {
302334
- if (compare12(x2, x2) !== 0) return hi;
302335
- do {
302336
- const mid = lo + hi >>> 1;
302337
- if (compare2(a2[mid], x2) <= 0) lo = mid + 1;
302338
- else hi = mid;
302339
- } while (lo < hi);
302340
- }
302341
- return lo;
302342
- }
302343
- function center2(a2, x2, lo = 0, hi = a2.length) {
302344
- const i2 = left2(a2, x2, lo, hi - 1);
302345
- return i2 > lo && delta(a2[i2 - 1], x2) > -delta(a2[i2], x2) ? i2 - 1 : i2;
302346
- }
302347
- return { left: left2, center: center2, right: right2 };
302348
- }
302349
- function zero$3() {
302350
- return 0;
302351
- }
302352
- function number$4(x2) {
302353
- return x2 === null ? NaN : +x2;
302354
- }
302355
- const ascendingBisect = bisector$1(ascending$4);
302356
- const bisectRight$1 = ascendingBisect.right;
302357
- bisector$1(number$4).center;
302358
- function range$5(start2, stop3, step) {
302359
- start2 = +start2, stop3 = +stop3, step = (n3 = arguments.length) < 2 ? (stop3 = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
302360
- var i2 = -1, n3 = Math.max(0, Math.ceil((stop3 - start2) / step)) | 0, range2 = new Array(n3);
302361
- while (++i2 < n3) {
302362
- range2[i2] = start2 + i2 * step;
302363
- }
302364
- return range2;
302365
- }
302366
302535
  function colors$2(specifier) {
302367
302536
  var n3 = specifier.length / 6 | 0, colors2 = new Array(n3), i2 = 0;
302368
302537
  while (i2 < n3) colors2[i2] = "#" + specifier.slice(i2 * 6, ++i2 * 6);
@@ -302552,7 +302721,7 @@ function band$1() {
302552
302721
  start2 = Math.round(start2);
302553
302722
  bandwidth2 = Math.round(bandwidth2);
302554
302723
  }
302555
- const values3 = range$5(n3).map((i2) => start2 + step * i2);
302724
+ const values3 = range$8(n3).map((i2) => start2 + step * i2);
302556
302725
  return ordinalRange(reverse2 ? values3.reverse() : values3);
302557
302726
  }
302558
302727
  scale2.domain = function(_) {
@@ -304316,7 +304485,7 @@ const useStyles$4 = makeStyles()(() => ({
304316
304485
  }
304317
304486
  }));
304318
304487
  function summarize(iterable, keepZeros) {
304319
- const values3 = iterable.filter((d) => keepZeros).sort(ascending$9);
304488
+ const values3 = iterable.filter((d) => keepZeros).sort(ascending$8);
304320
304489
  const minVal = values3[0];
304321
304490
  const maxVal = values3[values3.length - 1];
304322
304491
  const q1 = quantileSorted$1(values3, 0.25);
@@ -305927,7 +306096,7 @@ const Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS], Second
305927
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]];
305928
306097
  function bin$1(opt) {
305929
306098
  const ext = opt.extent, max2 = opt.maxbins || 40, target2 = Math.abs(span(ext)) / max2;
305930
- 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;
305931
306100
  if (i2 === intervals.length) {
305932
306101
  units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max2);
305933
306102
  } else if (i2) {
@@ -307865,7 +308034,7 @@ function* numbers$1(values3, valueof) {
307865
308034
  }
307866
308035
  function quantiles(array2, p, f2) {
307867
308036
  const values3 = Float64Array.from(numbers$1(array2, f2));
307868
- values3.sort(ascending$5);
308037
+ values3.sort(ascending$4);
307869
308038
  return p.map((_) => quantileSorted(values3, _));
307870
308039
  }
307871
308040
  function quartiles(array2, f2) {
@@ -307924,7 +308093,7 @@ function bootstrapCI(array2, samples, alpha2, f2) {
307924
308093
  }
307925
308094
  mu[j] = a2 / n3;
307926
308095
  }
307927
- mu.sort(ascending$5);
308096
+ mu.sort(ascending$4);
307928
308097
  return [quantile$1(mu, alpha2 / 2), quantile$1(mu, 1 - alpha2 / 2)];
307929
308098
  }
307930
308099
  function dotbin(array2, step, smooth, f2) {
@@ -310897,7 +311066,7 @@ inherits(Quantile$1, Transform2, {
310897
311066
  out.source = this.value;
310898
311067
  return out;
310899
311068
  }
310900
- 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;
310901
311070
  groups.forEach((g2) => {
310902
311071
  const q = quantiles(g2, p);
310903
311072
  for (let i2 = 0; i2 < n3; ++i2) {
@@ -311056,7 +311225,7 @@ inherits(Sequence, Transform2, {
311056
311225
  if (this.value && !_.modified()) return;
311057
311226
  const out = pulse2.materialize().fork(pulse2.MOD), as = _.as || "data";
311058
311227
  out.rem = this.value ? pulse2.rem.concat(this.value) : pulse2.rem;
311059
- this.value = range$9(_.start, _.stop, _.step || 1).map((v) => {
311228
+ this.value = range$8(_.start, _.stop, _.step || 1).map((v) => {
311060
311229
  const t4 = {};
311061
311230
  t4[as] = v;
311062
311231
  return ingest$1(t4);
@@ -311516,7 +311685,7 @@ inherits(Window, Transform2, {
311516
311685
  }
311517
311686
  });
311518
311687
  function processPartition(list2, state, cmp2, _) {
311519
- 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 = {
311520
311689
  i0: 0,
311521
311690
  i1: 0,
311522
311691
  p0: 0,
@@ -311674,7 +311843,7 @@ function band() {
311674
311843
  start2 = Math.round(start2);
311675
311844
  bandwidth2 = Math.round(bandwidth2);
311676
311845
  }
311677
- const values3 = range$9(n3).map((i2) => start2 + step * i2);
311846
+ const values3 = range$8(n3).map((i2) => start2 + step * i2);
311678
311847
  return ordinalRange(reverse2 ? values3.reverse() : values3);
311679
311848
  }
311680
311849
  scale2.domain = function(_) {
@@ -311756,8 +311925,8 @@ function band() {
311756
311925
  hi = t4;
311757
311926
  }
311758
311927
  if (hi < values3[0] || lo > range$12[1 - reverse2]) return;
311759
- a2 = Math.max(0, bisectRight$2(values3, lo) - 1);
311760
- 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;
311761
311930
  if (lo - values3[a2] > bandwidth2 + 1e-10) ++a2;
311762
311931
  if (reverse2) {
311763
311932
  t4 = a2;
@@ -311795,7 +311964,7 @@ const slice$2 = Array.prototype.slice;
311795
311964
  function scaleBinOrdinal() {
311796
311965
  let domain2 = [], range2 = [];
311797
311966
  function scale2(x2) {
311798
- 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];
311799
311968
  }
311800
311969
  scale2.domain = function(_) {
311801
311970
  if (arguments.length) {
@@ -317518,7 +317687,7 @@ Pie.Definition = {
317518
317687
  };
317519
317688
  inherits(Pie, Transform2, {
317520
317689
  transform(_, pulse2) {
317521
- 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;
317522
317691
  if (_.sort) {
317523
317692
  index2.sort((a3, b2) => values3[a3] - values3[b2]);
317524
317693
  }
@@ -317636,7 +317805,7 @@ function configureBins(scale2, _, count2) {
317636
317805
  if (!step) error("Scale bins parameter missing step property.");
317637
317806
  if (start2 < lo) start2 = step * Math.ceil(lo / step);
317638
317807
  if (stop3 > hi) stop3 = step * Math.floor(hi / step);
317639
- bins2 = range$9(start2, stop3 + step / 2, step);
317808
+ bins2 = range$8(start2, stop3 + step / 2, step);
317640
317809
  }
317641
317810
  if (bins2) {
317642
317811
  scale2.bins = bins2;
@@ -318857,7 +319026,7 @@ function clipRectangle(x02, y02, x12, y12) {
318857
319026
  };
318858
319027
  }
318859
319028
  function graticuleX(y02, y12, dy) {
318860
- var y2 = range$9(y02, y12 - epsilon$3, dy).concat(y12);
319029
+ var y2 = range$8(y02, y12 - epsilon$3, dy).concat(y12);
318861
319030
  return function(x2) {
318862
319031
  return y2.map(function(y22) {
318863
319032
  return [x2, y22];
@@ -318865,7 +319034,7 @@ function graticuleX(y02, y12, dy) {
318865
319034
  };
318866
319035
  }
318867
319036
  function graticuleY(x02, x12, dx) {
318868
- var x2 = range$9(x02, x12 - epsilon$3, dx).concat(x12);
319037
+ var x2 = range$8(x02, x12 - epsilon$3, dx).concat(x12);
318869
319038
  return function(y2) {
318870
319039
  return x2.map(function(x22) {
318871
319040
  return [x22, y2];
@@ -318878,9 +319047,9 @@ function graticule() {
318878
319047
  return { type: "MultiLineString", coordinates: lines() };
318879
319048
  }
318880
319049
  function lines() {
318881
- 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) {
318882
319051
  return abs$1(x22 % DX) > epsilon$3;
318883
- }).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) {
318884
319053
  return abs$1(y22 % DY) > epsilon$3;
318885
319054
  }).map(y2));
318886
319055
  }
@@ -320155,7 +320324,7 @@ function within(p, q, r3) {
320155
320324
  function quantize$1(k, nice2, zero2) {
320156
320325
  return function(values3) {
320157
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);
320158
- return range$9(start2 + step, stop3, step);
320327
+ return range$8(start2 + step, stop3, step);
320159
320328
  };
320160
320329
  }
320161
320330
  function Isocontour(params2) {
@@ -326095,7 +326264,7 @@ function SortedIndex() {
326095
326264
  array2 = value2;
326096
326265
  n3 = size2;
326097
326266
  }
326098
- 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)];
326099
326268
  }
326100
326269
  return {
326101
326270
  insert: insert2,
@@ -328460,7 +328629,7 @@ const functionContext = {
328460
328629
  hsl: hsl$2,
328461
328630
  luminance,
328462
328631
  contrast,
328463
- sequence: range$9,
328632
+ sequence: range$8,
328464
328633
  format: format$1,
328465
328634
  utcFormat,
328466
328635
  utcParse,
@@ -355730,7 +355899,7 @@ function FeatureBarPlot(props) {
355730
355899
  const xTitle = `${capitalize$3(obsType)}`;
355731
355900
  const autoMarginBottom = marginBottom || 30 + Math.sqrt(maxCharactersForLabel / 2) * 30;
355732
355901
  const foregroundColor = theme === "dark" ? "lightgray" : "black";
355733
- 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]));
355734
355903
  const svg2 = select$1(domElement);
355735
355904
  svg2.selectAll("g").remove();
355736
355905
  svg2.attr("width", width2).attr("height", height2);
@@ -357760,13 +357929,7 @@ class SpatialDataAutoConfig extends AbstractAutoConfig {
357760
357929
  };
357761
357930
  }
357762
357931
  if (relPath.match(/^(shapes)\/([^/]*)$/)) {
357763
- options.obsSpots = {
357764
- path: relPath,
357765
- coordinateSystem: firstCoordinateSystem
357766
- };
357767
- }
357768
- if (relPath.match(/^(points)\/([^/]*)$/)) {
357769
- options.obsPoints = {
357932
+ options.obsSegmentations = {
357770
357933
  path: relPath,
357771
357934
  coordinateSystem: firstCoordinateSystem
357772
357935
  };
@@ -357780,21 +357943,6 @@ class SpatialDataAutoConfig extends AbstractAutoConfig {
357780
357943
  // region: null,
357781
357944
  };
357782
357945
  }
357783
- const hasObs = tableEls.find((el) => el.path === `${path2}/obs`);
357784
- if (hasObs) {
357785
- const columnOrder = hasObs.attrs?.["column-order"];
357786
- options.obsSets = {
357787
- // region: null,
357788
- tablePath: relPath,
357789
- obsSets: columnOrder.map((c2) => ({
357790
- // TODO: determine whether this column is string/categorical.
357791
- // TODO: determine whether this column contains too many
357792
- // categories to make sense to consider a cell set.
357793
- path: `${hasObs.path.substring(1)}/${c2}`,
357794
- name: c2
357795
- }))
357796
- };
357797
- }
357798
357946
  }
357799
357947
  });
357800
357948
  return options;
@@ -357945,8 +358093,16 @@ async function parsedUrlToZmetadata(parsedUrl) {
357945
358093
  store = await withConsolidated(initialStore, { metadataKey: "zmetadata" });
357946
358094
  }
357947
358095
  const contents = store.contents();
358096
+ const consolidatedRoot = await open$1(store, { kind: "group" });
357948
358097
  promises = contents.map(async (value2) => {
357949
- 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
+ }
357950
358106
  return {
357951
358107
  ...value2,
357952
358108
  attrs: item.attrs
@@ -357977,9 +358133,10 @@ async function parsedUrlToZmetadata(parsedUrl) {
357977
358133
  // Note: For spatialData, we assume the store is always consolidated.
357978
358134
  // TODO: throw error if spatialdata + not consolidated?
357979
358135
  ];
358136
+ const storeRoot = await open$1(store, { kind: "group" });
357980
358137
  promises = keysToTry.map(async (k) => {
357981
358138
  try {
357982
- const item = await open$1(root$1(store).resolve(k));
358139
+ const item = await open$1(storeRoot.resolve(k));
357983
358140
  return {
357984
358141
  path: k,
357985
358142
  kind: item.kind,
@@ -358503,7 +358660,7 @@ class ClustersJsonAsObsFeatureMatrixLoader extends JsonLoader {
358503
358660
  const normalize2 = (d) => Math.floor((d - min2) / (max2 - min2) * 255);
358504
358661
  return col.map(normalize2);
358505
358662
  });
358506
- 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]));
358507
358664
  const normalizedFlatMatrix = tNormalizedMatrix.flat();
358508
358665
  const obsFeatureMatrix = { data: Uint8Array.from(normalizedFlatMatrix) };
358509
358666
  this.cachedResult = { obsIndex, featureIndex, obsFeatureMatrix };
@@ -358554,12 +358711,12 @@ class MoleculesJsonAsObsLabelsLoader extends JsonLoader {
358554
358711
  if (this.cachedResult) {
358555
358712
  return this.cachedResult;
358556
358713
  }
358557
- 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));
358558
358715
  let obsLabels = [];
358559
358716
  Object.entries(data2).forEach(([gene, locations]) => {
358560
358717
  obsLabels = [
358561
358718
  ...obsLabels,
358562
- ...range$f(locations.length).map(() => gene)
358719
+ ...range$e(locations.length).map(() => gene)
358563
358720
  ];
358564
358721
  });
358565
358722
  this.cachedResult = { obsIndex, obsLabels };
@@ -358582,7 +358739,7 @@ class MoleculesJsonAsObsLocationsLoader extends JsonLoader {
358582
358739
  return this.cachedResult;
358583
358740
  }
358584
358741
  const moleculesValues = Object.values(data2);
358585
- 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));
358586
358743
  const obsLocationsX = new Float32Array(obsIndex.length);
358587
358744
  const obsLocationsY = new Float32Array(obsIndex.length);
358588
358745
  let startAt = 0;
@@ -383804,6 +383961,7 @@ function ControlledLauncherInner(props) {
383804
383961
  setLauncherError(null);
383805
383962
  } else if (configUrlResult.isError) {
383806
383963
  setIsEditing(true);
383964
+ console.log(configUrlResult.error);
383807
383965
  setLauncherError(`Error loading config from URL: ${configUrlResult.error.message}`);
383808
383966
  }
383809
383967
  } else if (sourceUrlQueryEnabled) {
@@ -383814,6 +383972,7 @@ function ControlledLauncherInner(props) {
383814
383972
  setLauncherError(null);
383815
383973
  } else if (sourceUrlResult.isError) {
383816
383974
  setIsEditing(true);
383975
+ console.log(sourceUrlResult.error);
383817
383976
  setLauncherError(`Error loading data/metadata from source URL(s): ${sourceUrlResult.error.message}`);
383818
383977
  }
383819
383978
  } else if (validConfigFromDroppedData) {