@vitessce/all 3.6.2 → 3.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ var __privateGet = (obj, member, getter2) => (__accessCheck(obj, member, "read f
9
9
  var __privateAdd = (obj, member, value2) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value2);
10
10
  var __privateSet = (obj, member, value2, setter2) => (__accessCheck(obj, member, "write to private field"), setter2 ? setter2.call(obj, value2) : member.set(obj, value2), value2);
11
11
  var __privateMethod = (obj, member, method2) => (__accessCheck(obj, member, "access private method"), method2);
12
- var _a2, _b2, _bytes, _c, _encoder, _d, _data, _e, _stride, _TypedArray, _BYTES_PER_ELEMENT, _shape, _endian, _f, _encoder_config, _decoder_config, _g, _order, _inverseOrder, _h, _shape2, _strides, _i, _metadata, _j, _metadata2, _k, _overrides, _use_suffix_request, _FetchStore_instances, merge_init_fn, _overrides2, _refs, _opts, _overrides3, _focused, _cleanup, _setup, _l2, _online, _cleanup2, _setup2, _m2, _client, _currentQuery, _currentQueryInitialState, _currentResult, _currentResultState, _currentResultOptions, _currentThenable, _selectError, _selectFn, _selectResult, _lastQueryWithDefinedData, _staleTimeoutId, _refetchIntervalId, _currentRefetchInterval, _trackedProps, _QueryObserver_instances, executeFetch_fn, updateStaleTimeout_fn, computeRefetchInterval_fn, updateRefetchInterval_fn, updateTimers_fn, clearStaleTimeout_fn, clearRefetchInterval_fn, updateQuery_fn, notify_fn, _n, _client2, _result, _queries, _options, _observers, _combinedResult, _lastCombine, _lastResult, _observerMatches, _QueriesObserver_instances, trackResult_fn, combineResult_fn, findMatchingObservers_fn, onUpdate_fn, notify_fn2, _o2, _bytes2, _encoder2, _data2, _strides2, _TypedArray2, _BYTES_PER_ELEMENT2, _shape3, _endian2, _encoder_config2, _decoder_config2, _shape4, _strides3, _metadata3, _p, _metadata4, _q;
12
+ var _a2, _b2, _bytes, _c, _encoder, _d, _data, _e, _stride, _TypedArray, _BYTES_PER_ELEMENT, _shape, _endian, _f, _encoder_config, _decoder_config, _g, _order, _inverseOrder, _h, _shape2, _strides, _i, _metadata, _j, _metadata2, _k, _overrides, _use_suffix_request, _FetchStore_instances, merge_init_fn, _l, _overrides2, _refs, _opts, _overrides3, _focused, _cleanup, _setup, _m2, _online, _cleanup2, _setup2, _n, _client, _currentQuery, _currentQueryInitialState, _currentResult, _currentResultState, _currentResultOptions, _currentThenable, _selectError, _selectFn, _selectResult, _lastQueryWithDefinedData, _staleTimeoutId, _refetchIntervalId, _currentRefetchInterval, _trackedProps, _QueryObserver_instances, executeFetch_fn, updateStaleTimeout_fn, computeRefetchInterval_fn, updateRefetchInterval_fn, updateTimers_fn, clearStaleTimeout_fn, clearRefetchInterval_fn, updateQuery_fn, notify_fn, _o2, _client2, _result, _queries, _options, _observers, _combinedResult, _lastCombine, _lastResult, _observerMatches, _QueriesObserver_instances, trackResult_fn, combineResult_fn, findMatchingObservers_fn, onUpdate_fn, notify_fn2, _p2, _bytes2, _encoder2, _data2, _strides2, _TypedArray2, _BYTES_PER_ELEMENT2, _shape3, _endian2, _encoder_config2, _decoder_config2, _shape4, _strides3, _metadata3, _q, _metadata4, _r, _overrides4, _use_suffix_request2, _FetchStore_instances2, merge_init_fn2;
13
13
  import * as React from "react";
14
14
  import React__default, { useContext, forwardRef as forwardRef$1, useRef, useMemo as useMemo$1, createContext, createElement, isValidElement, cloneElement, Children, version as version$6, useLayoutEffect as useLayoutEffect$1, useEffect, useImperativeHandle, PureComponent, Component as Component$1, useState, useCallback, Suspense, useReducer } from "react";
15
15
  import { useLoaders, useCoordination, useDescription, useImageData, useReady, TitleInfo, useVitessceContainer, useSetWarning, useObsSetsData, useUrls, usePlotOptionsStyles, OptionsContainer, CellColorEncodingOption, OptionSelect, useComponentHover, useComponentViewInfo, useSetComponentHover, useSetComponentViewInfo, useInitialCoordination, useDeckCanvasSize, useMultiObsLabels, useObsEmbeddingData, useFeatureSelection, useObsFeatureMatrixIndices, useFeatureLabelsData, useExpandedFeatureLabelsMap, useSampleSetsData, useSampleEdgesData, useGetObsInfo, useUint8FeatureSelection, useExpressionValueGetter, useAuxiliaryCoordination, useHasLoader, useObsLocationsData, useObsLabelsData, useObsSegmentationsData, useNeighborhoodsData, useMergeCoordination, useCoordinationScopes, useCoordinationScopesBy, useMultiCoordinationScopesSecondaryNonNull, useMultiCoordinationScopesNonNull, useComplexCoordination, useComplexCoordinationSecondary, useGridItemSize, useMultiObsPoints, usePointMultiObsLabels, useMultiObsSpots, useSpotMultiObsSets, useSpotMultiFeatureLabels, useSpotMultiFeatureSelection, useSpotMultiObsFeatureMatrixIndices, useSegmentationMultiObsLocations, useMultiObsSegmentations, useSegmentationMultiObsSets, useSegmentationMultiFeatureSelection, useSegmentationMultiObsFeatureMatrixIndices, useMultiImages, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useGetObsMembership, PopperMenu, useComponentLayout, useClosestVitessceContainerSize, useWindowDimensions, useRemoveImageChannelInMetaCoordinationScopes, useAddImageChannelInMetaCoordinationScopes, useViewConfigStoreApi, createLoaders, useWarning, useGenomicProfilesData, useMatchingLoader, useColumnNameMapping, useFeatureStatsData, useObsSetStatsData, useAsyncFunction, useFeatureSetStatsData, useViewConfig, useSetViewConfig, useComparisonMetadata, logConfig, VitSContainer } from "@vitessce/vit-s";
@@ -9039,6 +9039,7 @@ const FileType$1 = {
9039
9039
  ANNDATA_ZARR_ZIP: "anndata.zarr.zip",
9040
9040
  ANNDATA_H5AD: "anndata.h5ad",
9041
9041
  SPATIALDATA_ZARR: "spatialdata.zarr",
9042
+ SPATIALDATA_ZARR_ZIP: "spatialdata.zarr.zip",
9042
9043
  // Atomic file types
9043
9044
  OBS_EMBEDDING_CSV: "obsEmbedding.csv",
9044
9045
  OBS_SPOTS_CSV: "obsSpots.csv",
@@ -9119,6 +9120,14 @@ const FileType$1 = {
9119
9120
  // TODO:
9120
9121
  // OBS_POINTS_SPATIALDATA_ZARR: 'obsPoints.spatialdata.zarr',
9121
9122
  // OBS_LOCATIONS_SPATIALDATA_ZARR: 'obsLocations.spatialdata.zarr',
9123
+ // SpatialData - zipped
9124
+ IMAGE_SPATIALDATA_ZARR_ZIP: "image.spatialdata.zarr.zip",
9125
+ LABELS_SPATIALDATA_ZARR_ZIP: "labels.spatialdata.zarr.zip",
9126
+ SHAPES_SPATIALDATA_ZARR_ZIP: "shapes.spatialdata.zarr.zip",
9127
+ OBS_FEATURE_MATRIX_SPATIALDATA_ZARR_ZIP: "obsFeatureMatrix.spatialdata.zarr.zip",
9128
+ OBS_SETS_SPATIALDATA_ZARR_ZIP: "obsSets.spatialdata.zarr.zip",
9129
+ OBS_SPOTS_SPATIALDATA_ZARR_ZIP: "obsSpots.spatialdata.zarr.zip",
9130
+ FEATURE_LABELS_SPATIALDATA_ZARR_ZIP: "featureLabels.spatialdata.zarr.zip",
9122
9131
  // MuData
9123
9132
  OBS_FEATURE_MATRIX_MUDATA_ZARR: "obsFeatureMatrix.mudata.zarr",
9124
9133
  OBS_SETS_MUDATA_ZARR: "obsSets.mudata.zarr",
@@ -9546,6 +9555,28 @@ const ALT_ZARR_STORE_TYPES = {
9546
9555
  },
9547
9556
  [FileType$1.OBS_SEGMENTATIONS_OME_ZARR]: {
9548
9557
  zip: FileType$1.OBS_SEGMENTATIONS_OME_ZARR_ZIP
9558
+ },
9559
+ // For SpatialData:
9560
+ [FileType$1.IMAGE_SPATIALDATA_ZARR]: {
9561
+ zip: FileType$1.IMAGE_SPATIALDATA_ZARR_ZIP
9562
+ },
9563
+ [FileType$1.LABELS_SPATIALDATA_ZARR]: {
9564
+ zip: FileType$1.LABELS_SPATIALDATA_ZARR_ZIP
9565
+ },
9566
+ [FileType$1.SHAPES_SPATIALDATA_ZARR]: {
9567
+ zip: FileType$1.SHAPES_SPATIALDATA_ZARR_ZIP
9568
+ },
9569
+ [FileType$1.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR]: {
9570
+ zip: FileType$1.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR_ZIP
9571
+ },
9572
+ [FileType$1.OBS_SETS_SPATIALDATA_ZARR]: {
9573
+ zip: FileType$1.OBS_SETS_SPATIALDATA_ZARR_ZIP
9574
+ },
9575
+ [FileType$1.OBS_SPOTS_SPATIALDATA_ZARR]: {
9576
+ zip: FileType$1.OBS_SPOTS_SPATIALDATA_ZARR_ZIP
9577
+ },
9578
+ [FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR]: {
9579
+ zip: FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR_ZIP
9549
9580
  }
9550
9581
  };
9551
9582
  [
@@ -10748,6 +10779,7 @@ const anndataZarrSchema = z.object({
10748
10779
  z.array(annDataConvenienceFeatureLabelsItem)
10749
10780
  ]),
10750
10781
  obsFeatureMatrix: annDataObsFeatureMatrix,
10782
+ obsFeatureColumns: annDataObsFeatureColumnsArr,
10751
10783
  obsSets: annDataObsSetsArr,
10752
10784
  obsSpots: annDataObsSpots,
10753
10785
  obsPoints: annDataObsPoints,
@@ -181841,29 +181873,29 @@ function requireJsts_min() {
181841
181873
  }, e4.prototype.getClass = function() {
181842
181874
  return e4;
181843
181875
  }, e4;
181844
- }(hr), _r2 = function() {
181876
+ }(hr), _r3 = function() {
181845
181877
  this._leaves = new Nt(), this._root = null, this._level = 0;
181846
181878
  };
181847
- _r2.prototype.buildTree = function() {
181879
+ _r3.prototype.buildTree = function() {
181848
181880
  $e.sort(this._leaves, new hr.NodeComparator());
181849
181881
  for (var t5 = this._leaves, e4 = null, n4 = new Nt(); ; ) {
181850
181882
  if (this.buildLevel(t5, n4), 1 === n4.size()) return n4.get(0);
181851
181883
  e4 = t5, t5 = n4, n4 = e4;
181852
181884
  }
181853
- }, _r2.prototype.insert = function(t5, e4, n4) {
181885
+ }, _r3.prototype.insert = function(t5, e4, n4) {
181854
181886
  if (null !== this._root) throw new Error("Index cannot be added to once it has been queried");
181855
181887
  this._leaves.add(new dr(t5, e4, n4));
181856
- }, _r2.prototype.query = function(t5, e4, n4) {
181888
+ }, _r3.prototype.query = function(t5, e4, n4) {
181857
181889
  this.init(), this._root.query(t5, e4, n4);
181858
- }, _r2.prototype.buildRoot = function() {
181890
+ }, _r3.prototype.buildRoot = function() {
181859
181891
  if (null !== this._root) return null;
181860
181892
  this._root = this.buildTree();
181861
- }, _r2.prototype.printNode = function(t5) {
181893
+ }, _r3.prototype.printNode = function(t5) {
181862
181894
  Y3.out.println(Z.toLineString(new C3(t5._min, this._level), new C3(t5._max, this._level)));
181863
- }, _r2.prototype.init = function() {
181895
+ }, _r3.prototype.init = function() {
181864
181896
  if (null !== this._root) return null;
181865
181897
  this.buildRoot();
181866
- }, _r2.prototype.buildLevel = function(t5, e4) {
181898
+ }, _r3.prototype.buildLevel = function(t5, e4) {
181867
181899
  this._level++, e4.clear();
181868
181900
  for (var n4 = 0; n4 < t5.size(); n4 += 2) {
181869
181901
  var i3 = t5.get(n4);
@@ -181873,10 +181905,10 @@ function requireJsts_min() {
181873
181905
  e4.add(r4);
181874
181906
  }
181875
181907
  }
181876
- }, _r2.prototype.interfaces_ = function() {
181908
+ }, _r3.prototype.interfaces_ = function() {
181877
181909
  return [];
181878
- }, _r2.prototype.getClass = function() {
181879
- return _r2;
181910
+ }, _r3.prototype.getClass = function() {
181911
+ return _r3;
181880
181912
  };
181881
181913
  var mr = function() {
181882
181914
  this._items = new Nt();
@@ -181922,7 +181954,7 @@ function requireJsts_min() {
181922
181954
  return Er;
181923
181955
  };
181924
181956
  var xr = function() {
181925
- this._index = new _r2();
181957
+ this._index = new _r3();
181926
181958
  var t5 = arguments[0];
181927
181959
  this.init(t5);
181928
181960
  };
@@ -209284,22 +209316,22 @@ async function getDecoder(fileDirectory) {
209284
209316
  const Decoder = await importFn();
209285
209317
  return new Decoder(fileDirectory);
209286
209318
  }
209287
- addDecoder([void 0, 1], () => import("./raw-C8Sljmcb.js").then((m2) => m2.default));
209288
- addDecoder(5, () => import("./lzw-DmDsHkC2.js").then((m2) => m2.default));
209319
+ addDecoder([void 0, 1], () => import("./raw-CoeHW2Mx.js").then((m2) => m2.default));
209320
+ addDecoder(5, () => import("./lzw-Ct4BzFEq.js").then((m2) => m2.default));
209289
209321
  addDecoder(6, () => {
209290
209322
  throw new Error("old style JPEG compression is not supported.");
209291
209323
  });
209292
- addDecoder(7, () => import("./jpeg-C2g1td_K.js").then((m2) => m2.default));
209293
- addDecoder([8, 32946], () => import("./deflate-DTO-rr8G.js").then((m2) => m2.default));
209294
- addDecoder(32773, () => import("./packbits-B_GD-k-S.js").then((m2) => m2.default));
209324
+ addDecoder(7, () => import("./jpeg-Bh1wXUXT.js").then((m2) => m2.default));
209325
+ addDecoder([8, 32946], () => import("./deflate-BSP3an_k.js").then((m2) => m2.default));
209326
+ addDecoder(32773, () => import("./packbits-BAF4ayoO.js").then((m2) => m2.default));
209295
209327
  addDecoder(
209296
209328
  34887,
209297
- () => import("./lerc-DiBZtw18.js").then(async (m2) => {
209329
+ () => import("./lerc-1WB3uddx.js").then(async (m2) => {
209298
209330
  await m2.zstd.init();
209299
209331
  return m2;
209300
209332
  }).then((m2) => m2.default)
209301
209333
  );
209302
- addDecoder(50001, () => import("./webimage-CbHUHFQy.js").then((m2) => m2.default));
209334
+ addDecoder(50001, () => import("./webimage-BxxoMAns.js").then((m2) => m2.default));
209303
209335
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
209304
209336
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
209305
209337
  }
@@ -232185,21 +232217,25 @@ const rectMarginY = 2;
232185
232217
  const rectMarginX = 2;
232186
232218
  function combineExtents(extents, featureAggregationStrategy) {
232187
232219
  if (Array.isArray(extents)) {
232188
- if (featureAggregationStrategy === "first") {
232189
- return extents[0];
232190
- }
232191
- if (featureAggregationStrategy === "last") {
232192
- return extents.at(-1);
232193
- }
232194
- if (typeof featureAggregationStrategy === "number") {
232195
- const i2 = featureAggregationStrategy;
232196
- return extents[i2];
232197
- }
232198
- if (featureAggregationStrategy === "sum") {
232199
- return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
232200
- }
232201
- if (featureAggregationStrategy === "mean") {
232202
- return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]).map((v) => v / extents.length);
232220
+ if (Array.isArray(extents == null ? void 0 : extents[0])) {
232221
+ if (featureAggregationStrategy === "first") {
232222
+ return extents[0];
232223
+ }
232224
+ if (featureAggregationStrategy === "last") {
232225
+ return extents.at(-1);
232226
+ }
232227
+ if (typeof featureAggregationStrategy === "number") {
232228
+ const i2 = featureAggregationStrategy;
232229
+ return extents[i2];
232230
+ }
232231
+ if (featureAggregationStrategy === "sum") {
232232
+ return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]);
232233
+ }
232234
+ if (featureAggregationStrategy === "mean") {
232235
+ return extents.reduce((a2, h2) => [a2[0] + h2[0], a2[1] + h2[1]]).map((v) => v / extents.length);
232236
+ }
232237
+ } else {
232238
+ return extents;
232203
232239
  }
232204
232240
  }
232205
232241
  return null;
@@ -232425,13 +232461,13 @@ function MultiLegend(props) {
232425
232461
  }) : null, spotLayerScopes ? reversedSpotLayerScopes.flatMap((layerScope) => {
232426
232462
  var _a3;
232427
232463
  const layerCoordination = spotLayerCoordination[0][layerScope];
232428
- const { spatialLayerVisible, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, spatialLayerColor, legendVisible, obsSetSelection, obsSetColor } = layerCoordination;
232464
+ const { spatialLayerVisible, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, spatialLayerColor, legendVisible, obsSetSelection, obsSetColor } = layerCoordination;
232429
232465
  const expressionExtents = spotMultiExpressionExtents == null ? void 0 : spotMultiExpressionExtents[layerScope];
232430
232466
  const firstExpressionExtent = expressionExtents == null ? void 0 : expressionExtents[0];
232431
232467
  const isStaticColor = obsColorEncoding === "spatialLayerColor";
232432
232468
  const height2 = isStaticColor ? 20 : 36;
232433
232469
  const featureLabelsMap = (_a3 = spotMultiFeatureLabels == null ? void 0 : spotMultiFeatureLabels[layerScope]) == null ? void 0 : _a3.featureLabelsMap;
232434
- return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, { positionRelative: true, highContrast: true, showObsLabel: true, visible: spatialLayerVisible, theme, obsType, featureType, featureValueType, obsColorEncoding, spatialLayerColor, featureSelection, featureLabelsMap, featureValueColormap, featureValueColormapRange, extent: firstExpressionExtent, height: height2, obsSetSelection, obsSetColor }, layerScope) : null;
232470
+ return spatialLayerVisible && legendVisible ? jsxRuntimeExports.jsx(Legend, { 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;
232435
232471
  }) : null, segmentationLayerScopes ? reversedSegmentationLayerScopes.flatMap((layerScope) => {
232436
232472
  const layerCoordination = segmentationLayerCoordination[0][layerScope];
232437
232473
  const channelScopes = segmentationChannelScopesByLayer[layerScope];
@@ -232440,7 +232476,7 @@ function MultiLegend(props) {
232440
232476
  const reversedChannelScopes = [...channelScopes || []].reverse();
232441
232477
  return channelCoordination && channelScopes ? reversedChannelScopes.map((cScope) => {
232442
232478
  var _a3;
232443
- const { spatialChannelVisible, spatialChannelColor, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, legendVisible, obsSetSelection, obsSetColor } = channelCoordination[cScope];
232479
+ const { spatialChannelVisible, spatialChannelColor, obsColorEncoding, featureValueColormap, featureValueColormapRange, obsType, featureType, featureValueType, featureSelection, featureAggregationStrategy, legendVisible, obsSetSelection, obsSetColor } = channelCoordination[cScope];
232444
232480
  const expressionExtents = (_a3 = segmentationMultiExpressionExtents == null ? void 0 : segmentationMultiExpressionExtents[layerScope]) == null ? void 0 : _a3[cScope];
232445
232481
  const firstExpressionExtent = expressionExtents == null ? void 0 : expressionExtents[0];
232446
232482
  const isStaticColor = obsColorEncoding === "spatialChannelColor";
@@ -232456,6 +232492,7 @@ function MultiLegend(props) {
232456
232492
  featureValueType,
232457
232493
  obsColorEncoding,
232458
232494
  featureSelection,
232495
+ featureAggregationStrategy,
232459
232496
  // featureLabelsMap={featureLabelsMap} // TODO
232460
232497
  featureValueColormap,
232461
232498
  featureValueColormapRange,
@@ -248721,6 +248758,18 @@ function assert$4(expression2, msg = "") {
248721
248758
  throw new Error(msg);
248722
248759
  }
248723
248760
  }
248761
+ async function decompress(data2, { format: format2, signal }) {
248762
+ const response = data2 instanceof Response ? data2 : new Response(data2);
248763
+ assert$4(response.body, "Response does not contain body.");
248764
+ try {
248765
+ const decompressedResponse = new Response(response.body.pipeThrough(new DecompressionStream(format2), { signal }));
248766
+ const buffer2 = await decompressedResponse.arrayBuffer();
248767
+ return buffer2;
248768
+ } catch {
248769
+ signal == null ? void 0 : signal.throwIfAborted();
248770
+ throw new Error(`Failed to decode ${format2}`);
248771
+ }
248772
+ }
248724
248773
  class BitroundCodec {
248725
248774
  constructor(configuration2, _meta2) {
248726
248775
  this.kind = "array_to_array";
@@ -248807,6 +248856,21 @@ let Crc32cCodec$1 = class Crc32cCodec {
248807
248856
  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength - 4);
248808
248857
  }
248809
248858
  };
248859
+ class GzipCodec {
248860
+ constructor() {
248861
+ this.kind = "bytes_to_bytes";
248862
+ }
248863
+ static fromConfig(_) {
248864
+ return new GzipCodec();
248865
+ }
248866
+ encode(_bytes3) {
248867
+ throw new Error("Gzip encoding is not enabled by default. Please register a custom codec with `numcodecs/gzip`.");
248868
+ }
248869
+ async decode(bytes) {
248870
+ const buffer2 = await decompress(bytes, { format: "gzip" });
248871
+ return new Uint8Array(buffer2);
248872
+ }
248873
+ }
248810
248874
  function throw_on_nan_replacer$1(_key, value2) {
248811
248875
  assert$4(!Number.isNaN(value2), "JsonCodec allow_nan is false but NaN was encountered during encoding.");
248812
248876
  assert$4(value2 !== Number.POSITIVE_INFINITY, "JsonCodec allow_nan is false but Infinity was encountered during encoding.");
@@ -249037,8 +249101,23 @@ let VLenUTF8$1 = (_i = class {
249037
249101
  return { data: data2, shape: __privateGet(this, _shape2), stride: __privateGet(this, _strides) };
249038
249102
  }
249039
249103
  }, _shape2 = new WeakMap(), _strides = new WeakMap(), _i);
249104
+ class ZlibCodec {
249105
+ constructor() {
249106
+ this.kind = "bytes_to_bytes";
249107
+ }
249108
+ static fromConfig(_) {
249109
+ return new ZlibCodec();
249110
+ }
249111
+ encode(_bytes3) {
249112
+ throw new Error("Zlib encoding is not enabled by default. Please register a codec with `numcodecs/zlib`.");
249113
+ }
249114
+ async decode(bytes) {
249115
+ const buffer2 = await decompress(bytes, { format: "deflate" });
249116
+ return new Uint8Array(buffer2);
249117
+ }
249118
+ }
249040
249119
  function create_default_registry$1() {
249041
- return (/* @__PURE__ */ new Map()).set("blosc", () => import("./blosc-B8fjEpk7.js").then((m2) => m2.default)).set("gzip", () => import("./gzip-BcpOCWcu.js").then((m2) => m2.default)).set("lz4", () => import("./lz4-C9lm_i9S.js").then((m2) => m2.default)).set("zlib", () => import("./zlib-ZTk3sZPP.js").then((m2) => m2.default)).set("zstd", () => import("./zstd-y75FARxZ.js").then((m2) => m2.default)).set("transpose", () => TransposeCodec$1).set("bytes", () => BytesCodec$1).set("crc32c", () => Crc32cCodec$1).set("vlen-utf8", () => VLenUTF8$1).set("json2", () => JsonCodec$1).set("bitround", () => BitroundCodec);
249120
+ return (/* @__PURE__ */ new Map()).set("blosc", () => import("./blosc-B8fjEpk7.js").then((m2) => m2.default)).set("lz4", () => import("./lz4-C9lm_i9S.js").then((m2) => m2.default)).set("zstd", () => import("./zstd-y75FARxZ.js").then((m2) => m2.default)).set("gzip", () => GzipCodec).set("zlib", () => ZlibCodec).set("transpose", () => TransposeCodec$1).set("bytes", () => BytesCodec$1).set("crc32c", () => Crc32cCodec$1).set("vlen-utf8", () => VLenUTF8$1).set("json2", () => JsonCodec$1).set("bitround", () => BitroundCodec);
249042
249121
  }
249043
249122
  const registry$1 = create_default_registry$1();
249044
249123
  function create_codec_pipeline$1(chunk_metadata) {
@@ -249775,7 +249854,7 @@ function uri2href(url) {
249775
249854
  }
249776
249855
  throw Error(`Protocol not supported, got: ${JSON.stringify(protocol)}`);
249777
249856
  }
249778
- function fetch_range(url, offset2, length2, opts2 = {}) {
249857
+ function fetch_range$1(url, offset2, length2, opts2 = {}) {
249779
249858
  if (offset2 !== void 0 && length2 !== void 0) {
249780
249859
  opts2 = {
249781
249860
  ...opts2,
@@ -249787,7 +249866,7 @@ function fetch_range(url, offset2, length2, opts2 = {}) {
249787
249866
  }
249788
249867
  return fetch(url, opts2);
249789
249868
  }
249790
- function merge_init(storeOverrides, requestOverrides) {
249869
+ function merge_init$1(storeOverrides, requestOverrides) {
249791
249870
  return {
249792
249871
  ...storeOverrides,
249793
249872
  ...requestOverrides,
@@ -249801,7 +249880,7 @@ function assert$3(expression2, msg = "") {
249801
249880
  if (!expression2)
249802
249881
  throw new Error(msg);
249803
249882
  }
249804
- function resolve$1(root2, path2) {
249883
+ function resolve$2(root2, path2) {
249805
249884
  const base2 = typeof root2 === "string" ? new URL(root2) : root2;
249806
249885
  if (!base2.pathname.endsWith("/")) {
249807
249886
  base2.pathname += "/";
@@ -249810,7 +249889,7 @@ function resolve$1(root2, path2) {
249810
249889
  resolved.search = base2.search;
249811
249890
  return resolved;
249812
249891
  }
249813
- async function handle_response(response) {
249892
+ async function handle_response$1(response) {
249814
249893
  if (response.status === 404) {
249815
249894
  return void 0;
249816
249895
  }
@@ -249819,7 +249898,7 @@ async function handle_response(response) {
249819
249898
  }
249820
249899
  throw new Error(`Unexpected response status ${response.status} ${response.statusText}`);
249821
249900
  }
249822
- async function fetch_suffix(url, suffix_length, init2, use_suffix_request) {
249901
+ async function fetch_suffix$1(url, suffix_length, init2, use_suffix_request) {
249823
249902
  if (use_suffix_request) {
249824
249903
  return fetch(url, {
249825
249904
  ...init2,
@@ -249832,9 +249911,9 @@ async function fetch_suffix(url, suffix_length, init2, use_suffix_request) {
249832
249911
  }
249833
249912
  let content_length = response.headers.get("Content-Length");
249834
249913
  let length2 = Number(content_length);
249835
- return fetch_range(url, length2 - suffix_length, length2, init2);
249914
+ return fetch_range$1(url, length2 - suffix_length, length2, init2);
249836
249915
  }
249837
- class FetchStore {
249916
+ let FetchStore$1 = (_l = class {
249838
249917
  constructor(url, options = {}) {
249839
249918
  __privateAdd(this, _FetchStore_instances);
249840
249919
  __privateAdd(this, _overrides);
@@ -249844,28 +249923,24 @@ class FetchStore {
249844
249923
  __privateSet(this, _use_suffix_request, options.useSuffixRequest ?? false);
249845
249924
  }
249846
249925
  async get(key2, options = {}) {
249847
- let href2 = resolve$1(this.url, key2).href;
249926
+ let href2 = resolve$2(this.url, key2).href;
249848
249927
  let response = await fetch(href2, __privateMethod(this, _FetchStore_instances, merge_init_fn).call(this, options));
249849
- return handle_response(response);
249928
+ return handle_response$1(response);
249850
249929
  }
249851
249930
  async getRange(key2, range2, options = {}) {
249852
- let url = resolve$1(this.url, key2);
249931
+ let url = resolve$2(this.url, key2);
249853
249932
  let init2 = __privateMethod(this, _FetchStore_instances, merge_init_fn).call(this, options);
249854
249933
  let response;
249855
249934
  if ("suffixLength" in range2) {
249856
- response = await fetch_suffix(url, range2.suffixLength, init2, __privateGet(this, _use_suffix_request));
249935
+ response = await fetch_suffix$1(url, range2.suffixLength, init2, __privateGet(this, _use_suffix_request));
249857
249936
  } else {
249858
- response = await fetch_range(url, range2.offset, range2.length, init2);
249937
+ response = await fetch_range$1(url, range2.offset, range2.length, init2);
249859
249938
  }
249860
- return handle_response(response);
249939
+ return handle_response$1(response);
249861
249940
  }
249862
- }
249863
- _overrides = new WeakMap();
249864
- _use_suffix_request = new WeakMap();
249865
- _FetchStore_instances = new WeakSet();
249866
- merge_init_fn = function(overrides) {
249867
- return merge_init(__privateGet(this, _overrides), overrides);
249868
- };
249941
+ }, _overrides = new WeakMap(), _use_suffix_request = new WeakMap(), _FetchStore_instances = new WeakSet(), merge_init_fn = function(overrides) {
249942
+ return merge_init$1(__privateGet(this, _overrides), overrides);
249943
+ }, _l);
249869
249944
  function getV2DataType(dtype) {
249870
249945
  const mapping = {
249871
249946
  int8: "|i1",
@@ -250618,11 +250693,11 @@ async function readEntryDataHeader(reader, rawEntry) {
250618
250693
  const fileNameLength = getUint16LE(buffer2, 26);
250619
250694
  const extraFieldLength = getUint16LE(buffer2, 28);
250620
250695
  const localFileHeaderEnd = rawEntry.relativeOffsetOfLocalHeader + buffer2.length + fileNameLength + extraFieldLength;
250621
- let decompress;
250696
+ let decompress2;
250622
250697
  if (rawEntry.compressionMethod === 0) {
250623
- decompress = false;
250698
+ decompress2 = false;
250624
250699
  } else if (rawEntry.compressionMethod === 8) {
250625
- decompress = true;
250700
+ decompress2 = true;
250626
250701
  } else {
250627
250702
  throw new Error(`unsupported compression method: ${rawEntry.compressionMethod}`);
250628
250703
  }
@@ -250634,13 +250709,13 @@ async function readEntryDataHeader(reader, rawEntry) {
250634
250709
  }
250635
250710
  }
250636
250711
  return {
250637
- decompress,
250712
+ decompress: decompress2,
250638
250713
  fileDataStart
250639
250714
  };
250640
250715
  }
250641
250716
  async function readEntryDataAsArrayBuffer(reader, rawEntry) {
250642
- const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);
250643
- if (!decompress) {
250717
+ const { decompress: decompress2, fileDataStart } = await readEntryDataHeader(reader, rawEntry);
250718
+ if (!decompress2) {
250644
250719
  const dataView = await readAs(reader, fileDataStart, rawEntry.compressedSize);
250645
250720
  return isTypedArraySameAsArrayBuffer(dataView) ? dataView.buffer : dataView.slice().buffer;
250646
250721
  }
@@ -250649,8 +250724,8 @@ async function readEntryDataAsArrayBuffer(reader, rawEntry) {
250649
250724
  return result;
250650
250725
  }
250651
250726
  async function readEntryDataAsBlob(reader, rawEntry, type2) {
250652
- const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);
250653
- if (!decompress) {
250727
+ const { decompress: decompress2, fileDataStart } = await readEntryDataHeader(reader, rawEntry);
250728
+ if (!decompress2) {
250654
250729
  const typedArrayOrBlob2 = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize, type2);
250655
250730
  if (isBlob(typedArrayOrBlob2)) {
250656
250731
  return typedArrayOrBlob2;
@@ -250730,7 +250805,7 @@ class HTTPRangeReader {
250730
250805
  if (size2 === 0) {
250731
250806
  return new Uint8Array(0);
250732
250807
  }
250733
- const req = await fetch_range(this.url, offset2, size2, __privateGet(this, _overrides2));
250808
+ const req = await fetch_range$1(this.url, offset2, size2, __privateGet(this, _overrides2));
250734
250809
  assert$3(req.ok, `failed http request ${this.url}, status: ${req.status} offset: ${offset2} size: ${size2}: ${req.statusText}`);
250735
250810
  return new Uint8Array(await req.arrayBuffer());
250736
250811
  }
@@ -250996,7 +251071,7 @@ const _ReferenceStore = class _ReferenceStore {
250996
251071
  if (!url) {
250997
251072
  throw Error(`No url for key ${key2}, and no target url provided.`);
250998
251073
  }
250999
- let res = await fetch_range(uri2href(url), offset2, size2, merge_init(__privateGet(this, _overrides3), opts2));
251074
+ let res = await fetch_range$1(uri2href(url), offset2, size2, merge_init$1(__privateGet(this, _overrides3), opts2));
251000
251075
  if (res.status === 200 || res.status === 206) {
251001
251076
  return new Uint8Array(await res.arrayBuffer());
251002
251077
  }
@@ -251015,7 +251090,7 @@ _refs = new WeakMap();
251015
251090
  _opts = new WeakMap();
251016
251091
  _overrides3 = new WeakMap();
251017
251092
  let ReferenceStore = _ReferenceStore;
251018
- class RelaxedFetchStore extends FetchStore {
251093
+ class RelaxedFetchStore extends FetchStore$1 {
251019
251094
  // This allows returning `undefined` for 403 responses,
251020
251095
  // as opposed to completely erroring.
251021
251096
  // Needed due to https://github.com/manzt/zarrita.js/pull/212
@@ -253698,7 +253773,7 @@ class ErrorBoundary extends React__default.Component {
253698
253773
  }
253699
253774
  }
253700
253775
  const LazySpatialThree = React__default.lazy(async () => {
253701
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-BLLQzyXB.js");
253776
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-Sx2LvLG6.js");
253702
253777
  return { default: SpatialWrapper2 };
253703
253778
  });
253704
253779
  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 }) }) }) }));
@@ -253828,6 +253903,7 @@ function SpatialSubscriber(props) {
253828
253903
  CoordinationType$1.SPATIAL_SEGMENTATION_STROKE_WIDTH,
253829
253904
  CoordinationType$1.OBS_COLOR_ENCODING,
253830
253905
  CoordinationType$1.FEATURE_SELECTION,
253906
+ CoordinationType$1.FEATURE_AGGREGATION_STRATEGY,
253831
253907
  CoordinationType$1.FEATURE_VALUE_COLORMAP,
253832
253908
  CoordinationType$1.FEATURE_VALUE_COLORMAP_RANGE,
253833
253909
  CoordinationType$1.OBS_SET_COLOR,
@@ -253873,6 +253949,7 @@ function SpatialSubscriber(props) {
253873
253949
  CoordinationType$1.SPATIAL_SPOT_STROKE_WIDTH,
253874
253950
  CoordinationType$1.OBS_COLOR_ENCODING,
253875
253951
  CoordinationType$1.FEATURE_SELECTION,
253952
+ CoordinationType$1.FEATURE_AGGREGATION_STRATEGY,
253876
253953
  CoordinationType$1.FEATURE_VALUE_COLORMAP,
253877
253954
  CoordinationType$1.FEATURE_VALUE_COLORMAP_RANGE,
253878
253955
  CoordinationType$1.OBS_SET_COLOR,
@@ -263505,7 +263582,7 @@ function shouldThrowError(throwOnError, params2) {
263505
263582
  }
263506
263583
  return !!throwOnError;
263507
263584
  }
263508
- var FocusManager = (_l2 = class extends Subscribable {
263585
+ var FocusManager = (_m2 = class extends Subscribable {
263509
263586
  constructor() {
263510
263587
  super();
263511
263588
  __privateAdd(this, _focused);
@@ -263566,9 +263643,9 @@ var FocusManager = (_l2 = class extends Subscribable {
263566
263643
  }
263567
263644
  return ((_a3 = globalThis.document) == null ? void 0 : _a3.visibilityState) !== "hidden";
263568
263645
  }
263569
- }, _focused = new WeakMap(), _cleanup = new WeakMap(), _setup = new WeakMap(), _l2);
263646
+ }, _focused = new WeakMap(), _cleanup = new WeakMap(), _setup = new WeakMap(), _m2);
263570
263647
  var focusManager = new FocusManager();
263571
- var OnlineManager = (_m2 = class extends Subscribable {
263648
+ var OnlineManager = (_n = class extends Subscribable {
263572
263649
  constructor() {
263573
263650
  super();
263574
263651
  __privateAdd(this, _online, true);
@@ -263618,7 +263695,7 @@ var OnlineManager = (_m2 = class extends Subscribable {
263618
263695
  isOnline() {
263619
263696
  return __privateGet(this, _online);
263620
263697
  }
263621
- }, _online = new WeakMap(), _cleanup2 = new WeakMap(), _setup2 = new WeakMap(), _m2);
263698
+ }, _online = new WeakMap(), _cleanup2 = new WeakMap(), _setup2 = new WeakMap(), _n);
263622
263699
  var onlineManager = new OnlineManager();
263623
263700
  function pendingThenable() {
263624
263701
  let resolve2;
@@ -263743,7 +263820,7 @@ function fetchState(data2, options) {
263743
263820
  }
263744
263821
  };
263745
263822
  }
263746
- var QueryObserver = (_n = class extends Subscribable {
263823
+ var QueryObserver = (_o2 = class extends Subscribable {
263747
263824
  constructor(client, options) {
263748
263825
  super();
263749
263826
  __privateAdd(this, _QueryObserver_instances);
@@ -264153,7 +264230,7 @@ var QueryObserver = (_n = class extends Subscribable {
264153
264230
  type: "observerResultsUpdated"
264154
264231
  });
264155
264232
  });
264156
- }, _n);
264233
+ }, _o2);
264157
264234
  function shouldLoadOnMount(query, options) {
264158
264235
  return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === "error" && options.retryOnMount === false);
264159
264236
  }
@@ -264188,7 +264265,7 @@ function replaceAt(array2, index2, value2) {
264188
264265
  copy2[index2] = value2;
264189
264266
  return copy2;
264190
264267
  }
264191
- var QueriesObserver = (_o2 = class extends Subscribable {
264268
+ var QueriesObserver = (_p2 = class extends Subscribable {
264192
264269
  constructor(client, queries, options) {
264193
264270
  super();
264194
264271
  __privateAdd(this, _QueriesObserver_instances);
@@ -264361,7 +264438,7 @@ var QueriesObserver = (_o2 = class extends Subscribable {
264361
264438
  });
264362
264439
  }
264363
264440
  }
264364
- }, _o2);
264441
+ }, _p2);
264365
264442
  var QueryClientContext = React.createContext(
264366
264443
  void 0
264367
264444
  );
@@ -266046,7 +266123,7 @@ class Location2 {
266046
266123
  function root(store) {
266047
266124
  return new Location2(store ?? /* @__PURE__ */ new Map());
266048
266125
  }
266049
- let Group$2 = (_p = class extends Location2 {
266126
+ let Group$2 = (_q = class extends Location2 {
266050
266127
  constructor(store, path2, metadata2) {
266051
266128
  super(store, path2);
266052
266129
  __privateAdd(this, _metadata3);
@@ -266056,7 +266133,7 @@ let Group$2 = (_p = class extends Location2 {
266056
266133
  get attrs() {
266057
266134
  return __privateGet(this, _metadata3).attributes;
266058
266135
  }
266059
- }, _metadata3 = new WeakMap(), _p);
266136
+ }, _metadata3 = new WeakMap(), _q);
266060
266137
  const CONTEXT_MARKER = Symbol("zarrita.context");
266061
266138
  function get_context(obj) {
266062
266139
  return obj[CONTEXT_MARKER];
@@ -266105,7 +266182,7 @@ function create_context(location, metadata2) {
266105
266182
  }
266106
266183
  };
266107
266184
  }
266108
- let Array$1 = (_q = class extends (_a$4 = Location2, _a$4) {
266185
+ let Array$1 = (_r = class extends (_a$4 = Location2, _a$4) {
266109
266186
  constructor(store, path2, metadata2) {
266110
266187
  super(store, path2);
266111
266188
  __privateAdd(this, _metadata4);
@@ -266163,7 +266240,7 @@ let Array$1 = (_q = class extends (_a$4 = Location2, _a$4) {
266163
266240
  is(query) {
266164
266241
  return is_dtype(this.dtype, query);
266165
266242
  }
266166
- }, _metadata4 = new WeakMap(), _q);
266243
+ }, _metadata4 = new WeakMap(), _r);
266167
266244
  let VERSION_COUNTER = create_version_counter();
266168
266245
  function create_version_counter() {
266169
266246
  let version_counts = /* @__PURE__ */ new WeakMap();
@@ -266646,6 +266723,93 @@ function set_from_chunk_binary(dest, src, bytes_per_element2, projections2) {
266646
266723
  }, bytes_per_element2, projs);
266647
266724
  }
266648
266725
  }
266726
+ function fetch_range(url, offset2, length2, opts2 = {}) {
266727
+ if (offset2 !== void 0 && length2 !== void 0) {
266728
+ opts2 = {
266729
+ ...opts2,
266730
+ headers: {
266731
+ ...opts2.headers,
266732
+ Range: `bytes=${offset2}-${offset2 + length2 - 1}`
266733
+ }
266734
+ };
266735
+ }
266736
+ return fetch(url, opts2);
266737
+ }
266738
+ function merge_init(storeOverrides, requestOverrides) {
266739
+ return {
266740
+ ...storeOverrides,
266741
+ ...requestOverrides,
266742
+ headers: {
266743
+ ...storeOverrides.headers,
266744
+ ...requestOverrides.headers
266745
+ }
266746
+ };
266747
+ }
266748
+ function resolve$1(root2, path2) {
266749
+ const base2 = typeof root2 === "string" ? new URL(root2) : root2;
266750
+ if (!base2.pathname.endsWith("/")) {
266751
+ base2.pathname += "/";
266752
+ }
266753
+ const resolved = new URL(path2.slice(1), base2);
266754
+ resolved.search = base2.search;
266755
+ return resolved;
266756
+ }
266757
+ async function handle_response(response) {
266758
+ if (response.status === 404) {
266759
+ return void 0;
266760
+ }
266761
+ if (response.status === 200 || response.status === 206) {
266762
+ return new Uint8Array(await response.arrayBuffer());
266763
+ }
266764
+ throw new Error(`Unexpected response status ${response.status} ${response.statusText}`);
266765
+ }
266766
+ async function fetch_suffix(url, suffix_length, init2, use_suffix_request) {
266767
+ if (use_suffix_request) {
266768
+ return fetch(url, {
266769
+ ...init2,
266770
+ headers: { ...init2.headers, Range: `bytes=-${suffix_length}` }
266771
+ });
266772
+ }
266773
+ let response = await fetch(url, { ...init2, method: "HEAD" });
266774
+ if (!response.ok) {
266775
+ return response;
266776
+ }
266777
+ let content_length = response.headers.get("Content-Length");
266778
+ let length2 = Number(content_length);
266779
+ return fetch_range(url, length2 - suffix_length, length2, init2);
266780
+ }
266781
+ class FetchStore {
266782
+ constructor(url, options = {}) {
266783
+ __privateAdd(this, _FetchStore_instances2);
266784
+ __privateAdd(this, _overrides4);
266785
+ __privateAdd(this, _use_suffix_request2);
266786
+ this.url = url;
266787
+ __privateSet(this, _overrides4, options.overrides ?? {});
266788
+ __privateSet(this, _use_suffix_request2, options.useSuffixRequest ?? false);
266789
+ }
266790
+ async get(key2, options = {}) {
266791
+ let href2 = resolve$1(this.url, key2).href;
266792
+ let response = await fetch(href2, __privateMethod(this, _FetchStore_instances2, merge_init_fn2).call(this, options));
266793
+ return handle_response(response);
266794
+ }
266795
+ async getRange(key2, range2, options = {}) {
266796
+ let url = resolve$1(this.url, key2);
266797
+ let init2 = __privateMethod(this, _FetchStore_instances2, merge_init_fn2).call(this, options);
266798
+ let response;
266799
+ if ("suffixLength" in range2) {
266800
+ response = await fetch_suffix(url, range2.suffixLength, init2, __privateGet(this, _use_suffix_request2));
266801
+ } else {
266802
+ response = await fetch_range(url, range2.offset, range2.length, init2);
266803
+ }
266804
+ return handle_response(response);
266805
+ }
266806
+ }
266807
+ _overrides4 = new WeakMap();
266808
+ _use_suffix_request2 = new WeakMap();
266809
+ _FetchStore_instances2 = new WeakSet();
266810
+ merge_init_fn2 = function(overrides) {
266811
+ return merge_init(__privateGet(this, _overrides4), overrides);
266812
+ };
266649
266813
  function multivecChunksToTileDenseArray(chunks, tileShape, isRow) {
266650
266814
  const fullTileLength = isRow ? tileShape[1] : tileShape[0] * tileShape[1];
266651
266815
  const fullTileArray = new Float32Array(fullTileLength);
@@ -266864,7 +267028,7 @@ function HiglassGlobalStyles(props) {
266864
267028
  }
266865
267029
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
266866
267030
  const LazyHiGlassComponent = React__default.lazy(async () => {
266867
- const { HiGlassComponent } = await import("./higlass-BDwTvH9n.js");
267031
+ const { HiGlassComponent } = await import("./higlass-Cm-4roQO.js");
266868
267032
  return { default: HiGlassComponent };
266869
267033
  });
266870
267034
  const HG_SIZE = 800;
@@ -269801,7 +269965,7 @@ function NeuroglancerGlobalStyles(props) {
269801
269965
  const { classes: classes2 } = props;
269802
269966
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
269803
269967
  }
269804
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-CeoyM_6M.js"));
269968
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-Cdyy6KYr.js"));
269805
269969
  function createWorker() {
269806
269970
  return new WorkerFactory();
269807
269971
  }
@@ -316998,7 +317162,7 @@ function assembleScalesForModel(model) {
316998
317162
  return scales2;
316999
317163
  }
317000
317164
  const scale2 = scaleComponent.combine();
317001
- const { name: name2, type: type2, selectionExtent, domains: _d3, range: _r2, reverse: reverse2 } = scale2, otherScaleProps = __rest$7(scale2, ["name", "type", "selectionExtent", "domains", "range", "reverse"]);
317165
+ const { name: name2, type: type2, selectionExtent, domains: _d3, range: _r3, reverse: reverse2 } = scale2, otherScaleProps = __rest$7(scale2, ["name", "type", "selectionExtent", "domains", "range", "reverse"]);
317002
317166
  const range2 = assembleScaleRange(scale2.range, name2, channel, model);
317003
317167
  const domain2 = assembleDomain(model, channel);
317004
317168
  const domainRaw = selectionExtent ? assembleSelectionScaleDomain(model, selectionExtent, scaleComponent, domain2) : null;
@@ -330127,7 +330291,13 @@ class SpatialDataTableSource extends AnnDataSource {
330127
330291
  * @returns
330128
330292
  */
330129
330293
  async loadSpatialDataAttrs(tablePath) {
330130
- return this._loadDict(`${tablePath}uns/spatialdata_attrs`, ["instance_key", "region", "region_key"]);
330294
+ const v0_4_0_attrs = await this.getJson(`${tablePath}.zattrs`);
330295
+ const attrsKeys = Object.keys(v0_4_0_attrs);
330296
+ if (["instance_key", "region", "region_key"].every((k) => attrsKeys.includes(k))) {
330297
+ return v0_4_0_attrs;
330298
+ }
330299
+ const pre_v0_4_0_attrs = await this._loadDict(`${tablePath}uns/spatialdata_attrs`, ["instance_key", "region", "region_key"]);
330300
+ return pre_v0_4_0_attrs;
330131
330301
  }
330132
330302
  /**
330133
330303
  * Class method for loading the obs index.
@@ -330144,7 +330314,9 @@ class SpatialDataTableSource extends AnnDataSource {
330144
330314
  // region_key: regionKey,
330145
330315
  // region,
330146
330316
  } = await this.loadSpatialDataAttrs(getTablePrefix(path2));
330147
- indexPath = `${obsPath}/${instanceKey}`;
330317
+ if (instanceKey !== void 0 && instanceKey !== null) {
330318
+ indexPath = `${obsPath}/${instanceKey}`;
330319
+ }
330148
330320
  if (indexPath in this.obsIndices) {
330149
330321
  return this.obsIndices[indexPath];
330150
330322
  }
@@ -333077,7 +333249,7 @@ class BN {
333077
333249
  return BN.new(num, isSigned);
333078
333250
  }
333079
333251
  }
333080
- var _a$3, _b, _c2, _d2, _e2, _f2, _g2, _h2, _j2, _k2, _l, _m, _o, _p2, _q$1, _r, _s, _t, _u, _v, _w, _x$1;
333252
+ var _a$3, _b, _c2, _d2, _e2, _f2, _g2, _h2, _j2, _k2, _l2, _m, _o, _p, _q$1, _r2, _s, _t, _u, _v, _w, _x$1;
333081
333253
  class DataType2 {
333082
333254
  /** @nocollapse */
333083
333255
  static isNull(x2) {
@@ -333352,8 +333524,8 @@ class Date_ extends DataType2 {
333352
333524
  return this.unit === DateUnit.DAY ? Int32Array : BigInt64Array;
333353
333525
  }
333354
333526
  }
333355
- _l = Symbol.toStringTag;
333356
- Date_[_l] = ((proto2) => {
333527
+ _l2 = Symbol.toStringTag;
333528
+ Date_[_l2] = ((proto2) => {
333357
333529
  proto2.unit = null;
333358
333530
  return proto2[Symbol.toStringTag] = "Date";
333359
333531
  })(Date_.prototype);
@@ -333408,8 +333580,8 @@ class Interval_ extends DataType2 {
333408
333580
  return `Interval<${IntervalUnit[this.unit]}>`;
333409
333581
  }
333410
333582
  }
333411
- _p2 = Symbol.toStringTag;
333412
- Interval_[_p2] = ((proto2) => {
333583
+ _p = Symbol.toStringTag;
333584
+ Interval_[_p] = ((proto2) => {
333413
333585
  proto2.unit = null;
333414
333586
  proto2.ArrayType = Int32Array;
333415
333587
  return proto2[Symbol.toStringTag] = "Interval";
@@ -333447,8 +333619,8 @@ class List3 extends DataType2 {
333447
333619
  return this.valueType.ArrayType;
333448
333620
  }
333449
333621
  }
333450
- _r = Symbol.toStringTag;
333451
- List3[_r] = ((proto2) => {
333622
+ _r2 = Symbol.toStringTag;
333623
+ List3[_r2] = ((proto2) => {
333452
333624
  proto2.children = null;
333453
333625
  return proto2[Symbol.toStringTag] = "List";
333454
333626
  })(List3.prototype);
@@ -380194,7 +380366,7 @@ Fuse.config = Config;
380194
380366
  Fuse.parseQuery = parse;
380195
380367
  }
380196
380368
  const KG_BASE_URL = "https://storage.googleapis.com/vitessce-demo-data/enrichr-kg-september-2023";
380197
- const ENSG_TO_GENE_SYMBOL_URL = "https://vitessce-resources.s3.us-east-2.amazonaws.com/genes_filtered.json";
380369
+ const ENSG_TO_GENE_SYMBOL_URL = "https://data-1.vitessce.io/genes_filtered.json";
380198
380370
  function loadGeneNodes() {
380199
380371
  return fetch(`${KG_BASE_URL}/Gene.nodes.csv`).then((res) => res.text()).then((res) => {
380200
380372
  const result = csvParse(res);
@@ -380425,6 +380597,23 @@ function expandAnndataZarr(fileDef) {
380425
380597
  featureValueType: baseFileDef.coordinationValues.featureValueType
380426
380598
  }
380427
380599
  }] : [],
380600
+ // obsFeatureColumns
380601
+ ...options.obsFeatureColumns ? [{
380602
+ ...baseFileDef,
380603
+ fileType: getFileType(FileType$1.OBS_FEATURE_COLUMNS_ANNDATA_ZARR),
380604
+ options: {
380605
+ ...sharedOptions,
380606
+ obsFeatureColumns: options.obsFeatureColumns
380607
+ },
380608
+ coordinationValues: {
380609
+ ...extraCoordinationValues,
380610
+ obsType: baseFileDef.coordinationValues.obsType,
380611
+ // TODO: allow providing a featureType that is scoped to each `obsFeatureColumns` item
380612
+ // (rather than always using the featureType from the file definition).
380613
+ featureType: baseFileDef.coordinationValues.featureType,
380614
+ featureValueType: baseFileDef.coordinationValues.featureValueType
380615
+ }
380616
+ }] : [],
380428
380617
  // obsSets
380429
380618
  ...options.obsSets ? [{
380430
380619
  ...baseFileDef,
@@ -380596,6 +380785,7 @@ function expandAnndataZarr(fileDef) {
380596
380785
  }
380597
380786
  function expandSpatialdataZarr(fileDef) {
380598
380787
  var _a3, _b3, _c3;
380788
+ const getFileType = createGetFileType(fileDef.fileType);
380599
380789
  const baseFileDef = {
380600
380790
  url: fileDef.url,
380601
380791
  requestInit: fileDef.requestInit,
@@ -380619,7 +380809,7 @@ function expandSpatialdataZarr(fileDef) {
380619
380809
  // TODO: handle multiple obsFeatureMatrix?
380620
380810
  ...options.obsFeatureMatrix ? [{
380621
380811
  ...baseFileDef,
380622
- fileType: FileType$1.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR,
380812
+ fileType: getFileType(FileType$1.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR),
380623
380813
  options: options.obsFeatureMatrix,
380624
380814
  coordinationValues: {
380625
380815
  ...extraCoordinationValues,
@@ -380632,7 +380822,7 @@ function expandSpatialdataZarr(fileDef) {
380632
380822
  // TODO: handle multiple obsSets?
380633
380823
  ...options.obsSets ? [{
380634
380824
  ...baseFileDef,
380635
- fileType: FileType$1.OBS_SETS_SPATIALDATA_ZARR,
380825
+ fileType: getFileType(FileType$1.OBS_SETS_SPATIALDATA_ZARR),
380636
380826
  options: options.obsSets,
380637
380827
  coordinationValues: {
380638
380828
  ...extraCoordinationValues,
@@ -380643,7 +380833,7 @@ function expandSpatialdataZarr(fileDef) {
380643
380833
  // TODO: handle multiple obsSpots?
380644
380834
  ...options.obsSpots ? [{
380645
380835
  ...baseFileDef,
380646
- fileType: FileType$1.OBS_SPOTS_SPATIALDATA_ZARR,
380836
+ fileType: getFileType(FileType$1.OBS_SPOTS_SPATIALDATA_ZARR),
380647
380837
  options: {
380648
380838
  coordinateSystem: defaultCoordinateSystem,
380649
380839
  ...options.obsSpots
@@ -380662,7 +380852,7 @@ function expandSpatialdataZarr(fileDef) {
380662
380852
  // TODO: handle multiple images
380663
380853
  ...options.image ? [{
380664
380854
  ...baseFileDef,
380665
- fileType: FileType$1.IMAGE_SPATIALDATA_ZARR,
380855
+ fileType: getFileType(FileType$1.IMAGE_SPATIALDATA_ZARR),
380666
380856
  options: {
380667
380857
  coordinateSystem: defaultCoordinateSystem,
380668
380858
  ...options.image
@@ -380677,7 +380867,7 @@ function expandSpatialdataZarr(fileDef) {
380677
380867
  // TODO: handle multiple labels?
380678
380868
  ...options.labels ? [{
380679
380869
  ...baseFileDef,
380680
- fileType: FileType$1.LABELS_SPATIALDATA_ZARR,
380870
+ fileType: getFileType(FileType$1.LABELS_SPATIALDATA_ZARR),
380681
380871
  options: {
380682
380872
  coordinateSystem: defaultCoordinateSystem,
380683
380873
  ...options.labels
@@ -381090,6 +381280,7 @@ const baseJointFileTypes = [
381090
381280
  new PluginJointFileType(FileType$1.ANNDATA_ZARR_ZIP, expandAnndataZarr, anndataZarrSchema),
381091
381281
  new PluginJointFileType(FileType$1.ANNDATA_H5AD, expandAnndataZarr, anndataH5adSchema),
381092
381282
  new PluginJointFileType(FileType$1.SPATIALDATA_ZARR, expandSpatialdataZarr, spatialdataZarrSchema),
381283
+ new PluginJointFileType(FileType$1.SPATIALDATA_ZARR_ZIP, expandSpatialdataZarr, spatialdataZarrSchema),
381093
381284
  // For legacy file types:
381094
381285
  new PluginJointFileType(FileType$1.ANNDATA_CELLS_ZARR, expandAnndataCellsZarr, anndataCellsZarrSchema),
381095
381286
  new PluginJointFileType(FileType$1.ANNDATA_CELL_SETS_ZARR, expandAnndataCellSetsZarr, anndataCellSetsZarrSchema),