@vitessce/launcher 3.9.9 → 3.9.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.
@@ -1,4 +1,4 @@
1
- import { aG as getDefaultExportFromCjs, aH as Raycaster, W as OrthographicCamera, K as PerspectiveCamera, av as Scene, aI as PCFSoftShadowMap, aJ as VSMShadowMap, aK as PCFShadowMap, aL as BasicShadowMap, aM as NoToneMapping, aN as ACESFilmicToneMapping, e as Vector3, V as Vector2, aO as Clock, aP as WebGLRenderer, aQ as Camera, x as BufferGeometry, r as Material, aR as Layers, a1 as Texture, aC as RGBAFormat, ay as UnsignedByteType, C as Color, aj as _extends, aS as THREE, aT as EventDispatcher, aU as MOUSE, aV as TOUCH, aW as Spherical, Q as Quaternion, an as Ray, ak as Plane } from "./index-C7kW8YKc.js";
1
+ import { aG as getDefaultExportFromCjs, aH as Raycaster, W as OrthographicCamera, K as PerspectiveCamera, av as Scene, aI as PCFSoftShadowMap, aJ as VSMShadowMap, aK as PCFShadowMap, aL as BasicShadowMap, aM as NoToneMapping, aN as ACESFilmicToneMapping, e as Vector3, V as Vector2, aO as Clock, aP as WebGLRenderer, aQ as Camera, x as BufferGeometry, r as Material, aR as Layers, a1 as Texture, aC as RGBAFormat, ay as UnsignedByteType, C as Color, aj as _extends, aS as THREE, aT as EventDispatcher, aU as MOUSE, aV as TOUCH, aW as Spherical, Q as Quaternion, an as Ray, ak as Plane } from "./index-dq5Rjqj6.js";
2
2
  import * as React from "react";
3
3
  import React__default, { useReducer, useRef, useEffect, useLayoutEffect, useDebugValue, useState, useMemo } from "react";
4
4
  var constants = { exports: {} };
@@ -1,4 +1,4 @@
1
- import { aG as getDefaultExportFromCjs, b1 as requireAssign, b2 as require_export, b3 as require_core, b4 as require_fails, b5 as require_toObject, b6 as require_objectKeys, b7 as require_cof, b8 as require_wks, b9 as require_iterators, ba as requireWeb_dom_iterable, bb as requireEs6_string_iterator, bc as require_anObject, bd as require_hide, be as require_ctx, bf as require_toLength, bg as require_global, bh as require_objectDp, bi as require_descriptors, bj as require_isObject, bk as require_objectCreate, bl as require_iterDefine, bm as require_iterStep, bn as require_meta, bo as require_isArray, bp as require_iobject, bq as require_setToStringTag, br as require_aFunction, bs as requireIterator, bt as require_propertyDesc, a_ as commonjsGlobal, bu as requireEs6_symbol, bv as requireDefineProperty, bw as require_toIobject, bx as require_objectGopd, by as require_html, bz as require_domCreate, bA as require_library, bB as requireSymbol, bC as require_objectPie, bD as require_has, bE as require_redefine, bF as require_objectAssign, bG as diffCameraState, ao as jsxRuntimeExports } from "./index-C7kW8YKc.js";
1
+ import { aG as getDefaultExportFromCjs, b1 as requireAssign, b2 as require_export, b3 as require_core, b4 as require_fails, b5 as require_toObject, b6 as require_objectKeys, b7 as require_cof, b8 as require_wks, b9 as require_iterators, ba as requireWeb_dom_iterable, bb as requireEs6_string_iterator, bc as require_anObject, bd as require_hide, be as require_ctx, bf as require_toLength, bg as require_global, bh as require_objectDp, bi as require_descriptors, bj as require_isObject, bk as require_objectCreate, bl as require_iterDefine, bm as require_iterStep, bn as require_meta, bo as require_isArray, bp as require_iobject, bq as require_setToStringTag, br as require_aFunction, bs as requireIterator, bt as require_propertyDesc, a_ as commonjsGlobal, bu as requireEs6_symbol, bv as requireDefineProperty, bw as require_toIobject, bx as require_objectGopd, by as require_html, bz as require_domCreate, bA as require_library, bB as requireSymbol, bC as require_objectPie, bD as require_has, bE as require_redefine, bF as require_objectAssign, bG as diffCameraState, ao as jsxRuntimeExports } from "./index-dq5Rjqj6.js";
2
2
  import React__default from "react";
3
3
  var assignExports = requireAssign();
4
4
  const _Object$assign = /* @__PURE__ */ getDefaultExportFromCjs(assignExports);
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-SxljTded.js";
2
- import { aX as BaseDecoder } from "./index-C7kW8YKc.js";
2
+ import { aX as BaseDecoder } from "./index-dq5Rjqj6.js";
3
3
  class DeflateDecoder extends BaseDecoder {
4
4
  decodeBlock(buffer) {
5
5
  return inflate_1(new Uint8Array(buffer)).buffer;
@@ -1,7 +1,7 @@
1
1
  import * as React$7 from "react";
2
2
  import React__default, { isValidElement, PureComponent, Component, createElement, createContext, createRef } from "react";
3
3
  import ReactDOM__default, { findDOMNode as findDOMNode$1 } from "react-dom";
4
- import { a_ as commonjsGlobal$1, a$ as requireObjectAssign, aG as getDefaultExportFromCjs$1, b0 as earcut } from "./index-C7kW8YKc.js";
4
+ import { a_ as commonjsGlobal$1, a$ as requireObjectAssign, aG as getDefaultExportFromCjs$1, b0 as earcut } from "./index-dq5Rjqj6.js";
5
5
  var promise = {};
6
6
  var hasRequiredPromise;
7
7
  function requirePromise() {
@@ -1,7 +1,7 @@
1
- import { G as Group, M as Matrix4, T as TrianglesDrawMode, a as TriangleFanDrawMode, b as TriangleStripDrawMode, R as REVISION, L as Loader, c as LoaderUtils, F as FileLoader, d as MeshPhysicalMaterial, V as Vector2, C as Color, S as SpotLight, P as PointLight, D as DirectionalLight, e as Vector3, I as InstancedMesh, Q as Quaternion, O as Object3D, f as TextureLoader, g as ImageBitmapLoader, B as BufferAttribute, h as InterleavedBuffer, i as LinearMipmapLinearFilter, N as NearestMipmapLinearFilter, j as LinearMipmapNearestFilter, k as NearestMipmapNearestFilter, l as LinearFilter, m as NearestFilter, n as RepeatWrapping, o as MirroredRepeatWrapping, p as ClampToEdgeWrapping, q as PointsMaterial, r as Material, s as LineBasicMaterial, t as MeshStandardMaterial, u as DoubleSide, v as MeshBasicMaterial, w as PropertyBinding, x as BufferGeometry, y as SkinnedMesh, z as Mesh, A as LineSegments, E as Line$1, H as LineLoop, J as Points, K as PerspectiveCamera, U as MathUtils, W as OrthographicCamera, X as Skeleton, Y as InterpolateDiscrete, Z as InterpolateLinear, _ as AnimationClip, $ as Bone, a0 as InterleavedBufferAttribute, a1 as Texture, a2 as VectorKeyframeTrack, a3 as QuaternionKeyframeTrack, a4 as NumberKeyframeTrack, a5 as FrontSide, a6 as Interpolant, a7 as Box3, a8 as Sphere, a9 as InstancedBufferGeometry, aa as Float32BufferAttribute, ab as InstancedInterleavedBuffer, ac as WireframeGeometry, ad as ShaderMaterial, ae as UniformsUtils, af as UniformsLib, ag as Vector4, ah as Line3, ai as SphereGeometry, aj as _extends, ak as Plane, al as Triangle, am as BackSide, an as Ray$1, ao as jsxRuntimeExports, ap as Matrix3, aq as CoordinationType, ar as Data3DTexture, as as RedFormat, at as FloatType, au as getImageSize, av as Scene } from "./index-C7kW8YKc.js";
1
+ import { G as Group, M as Matrix4, T as TrianglesDrawMode, a as TriangleFanDrawMode, b as TriangleStripDrawMode, R as REVISION, L as Loader, c as LoaderUtils, F as FileLoader, d as MeshPhysicalMaterial, V as Vector2, C as Color, S as SpotLight, P as PointLight, D as DirectionalLight, e as Vector3, I as InstancedMesh, Q as Quaternion, O as Object3D, f as TextureLoader, g as ImageBitmapLoader, B as BufferAttribute, h as InterleavedBuffer, i as LinearMipmapLinearFilter, N as NearestMipmapLinearFilter, j as LinearMipmapNearestFilter, k as NearestMipmapNearestFilter, l as LinearFilter, m as NearestFilter, n as RepeatWrapping, o as MirroredRepeatWrapping, p as ClampToEdgeWrapping, q as PointsMaterial, r as Material, s as LineBasicMaterial, t as MeshStandardMaterial, u as DoubleSide, v as MeshBasicMaterial, w as PropertyBinding, x as BufferGeometry, y as SkinnedMesh, z as Mesh, A as LineSegments, E as Line$1, H as LineLoop, J as Points, K as PerspectiveCamera, U as MathUtils, W as OrthographicCamera, X as Skeleton, Y as InterpolateDiscrete, Z as InterpolateLinear, _ as AnimationClip, $ as Bone, a0 as InterleavedBufferAttribute, a1 as Texture, a2 as VectorKeyframeTrack, a3 as QuaternionKeyframeTrack, a4 as NumberKeyframeTrack, a5 as FrontSide, a6 as Interpolant, a7 as Box3, a8 as Sphere, a9 as InstancedBufferGeometry, aa as Float32BufferAttribute, ab as InstancedInterleavedBuffer, ac as WireframeGeometry, ad as ShaderMaterial, ae as UniformsUtils, af as UniformsLib, ag as Vector4, ah as Line3, ai as SphereGeometry, aj as _extends, ak as Plane, al as Triangle, am as BackSide, an as Ray$1, ao as jsxRuntimeExports, ap as Matrix3, aq as CoordinationType, ar as Data3DTexture, as as RedFormat, at as FloatType, au as getImageSize, av as Scene } from "./index-dq5Rjqj6.js";
2
2
  import * as React from "react";
3
3
  import { useRef, useEffect, useState, forwardRef } from "react";
4
- import { u as useThree, a as useFrame, c as create, e as extend, b as createPortal, O as OrbitControls, C as Canvas } from "./OrbitControls-rkiwZoCV.js";
4
+ import { u as useThree, a as useFrame, c as create, e as extend, b as createPortal, O as OrbitControls, C as Canvas } from "./OrbitControls-EUhjZYox.js";
5
5
  const isPromise = (promise) => typeof promise === "object" && typeof promise.then === "function";
6
6
  const globalCache = [];
7
7
  function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {
@@ -5027,7 +5027,7 @@ const Text = /* @__PURE__ */ React.forwardRef(({
5027
5027
  const {
5028
5028
  Text: TextMeshImpl,
5029
5029
  preloadFont
5030
- } = suspend(async () => import("./troika-three-text.esm-DCSbwoWM.js"), []);
5030
+ } = suspend(async () => import("./troika-three-text.esm-C5MetR4O.js"), []);
5031
5031
  const invalidate = useThree(({
5032
5032
  invalidate: invalidate2
5033
5033
  }) => invalidate2);
@@ -1,6 +1,6 @@
1
- import { aw as log, ax as isEqual, ar as Data3DTexture, as as RedFormat, ay as UnsignedByteType, l as LinearFilter, az as RedIntegerFormat, aA as UnsignedIntType, m as NearestFilter, e as Vector3, V as Vector2, ag as Vector4, ae as UniformsUtils, aq as CoordinationType, aB as WebGLMultipleRenderTargets, aC as RGBAFormat, av as Scene, W as OrthographicCamera, ad as ShaderMaterial, z as Mesh, aD as PlaneGeometry, aE as useEventCallback, ao as jsxRuntimeExports, aF as GLSL3, am as BackSide } from "./index-C7kW8YKc.js";
1
+ import { aw as log, ax as isEqual, ar as Data3DTexture, as as RedFormat, ay as UnsignedByteType, l as LinearFilter, az as RedIntegerFormat, aA as UnsignedIntType, m as NearestFilter, e as Vector3, V as Vector2, ag as Vector4, ae as UniformsUtils, aq as CoordinationType, aB as WebGLMultipleRenderTargets, aC as RGBAFormat, av as Scene, W as OrthographicCamera, ad as ShaderMaterial, z as Mesh, aD as PlaneGeometry, aE as useEventCallback, ao as jsxRuntimeExports, aF as GLSL3, am as BackSide } from "./index-dq5Rjqj6.js";
2
2
  import { useRef, useState, useMemo, useEffect, Suspense } from "react";
3
- import { u as useThree, a as useFrame, O as OrbitControls, C as Canvas } from "./OrbitControls-rkiwZoCV.js";
3
+ import { u as useThree, a as useFrame, O as OrbitControls, C as Canvas } from "./OrbitControls-EUhjZYox.js";
4
4
  const LogLevel = {
5
5
  INFO: "info",
6
6
  WARN: "warn",
@@ -11106,6 +11106,7 @@ const FileType$1 = {
11106
11106
  OBS_LABELS_MUDATA_ZARR: "obsLabels.mudata.zarr",
11107
11107
  FEATURE_LABELS_MUDATA_ZARR: "featureLabels.mudata.zarr",
11108
11108
  GENOMIC_PROFILES_ZARR: "genomic-profiles.zarr",
11109
+ GENOMIC_PROFILES_ZARR_ZIP: "genomic-profiles.zarr.zip",
11109
11110
  NEIGHBORHOODS_JSON: "neighborhoods.json",
11110
11111
  // OME-TIFF
11111
11112
  IMAGE_OME_TIFF: "image.ome-tiff",
@@ -11400,6 +11401,7 @@ const ViewHelpMapping = {
11400
11401
  [FileType$1.OBS_LABELS_MOLECULES_JSON]: DataType$3.OBS_LABELS,
11401
11402
  // For old file types
11402
11403
  [FileType$1.GENOMIC_PROFILES_ZARR]: DataType$3.GENOMIC_PROFILES,
11404
+ [FileType$1.GENOMIC_PROFILES_ZARR_ZIP]: DataType$3.GENOMIC_PROFILES,
11403
11405
  [FileType$1.NEIGHBORHOODS_JSON]: DataType$3.NEIGHBORHOODS
11404
11406
  });
11405
11407
  ({
@@ -11564,6 +11566,10 @@ const ALT_ZARR_STORE_TYPES = {
11564
11566
  },
11565
11567
  [FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR]: {
11566
11568
  zip: FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR_ZIP
11569
+ },
11570
+ // For genomic profiles:
11571
+ [FileType$1.GENOMIC_PROFILES_ZARR]: {
11572
+ zip: FileType$1.GENOMIC_PROFILES_ZARR_ZIP
11567
11573
  }
11568
11574
  };
11569
11575
  [
@@ -211827,22 +211833,22 @@ async function getDecoder(fileDirectory) {
211827
211833
  const Decoder = await importFn();
211828
211834
  return new Decoder(fileDirectory);
211829
211835
  }
211830
- addDecoder([void 0, 1], () => import("./raw-BecsWWD-.js").then((m2) => m2.default));
211831
- addDecoder(5, () => import("./lzw-DwMJ1C9x.js").then((m2) => m2.default));
211836
+ addDecoder([void 0, 1], () => import("./raw-CgEyy76y.js").then((m2) => m2.default));
211837
+ addDecoder(5, () => import("./lzw-Clq2S7lv.js").then((m2) => m2.default));
211832
211838
  addDecoder(6, () => {
211833
211839
  throw new Error("old style JPEG compression is not supported.");
211834
211840
  });
211835
- addDecoder(7, () => import("./jpeg-iS7dFiFn.js").then((m2) => m2.default));
211836
- addDecoder([8, 32946], () => import("./deflate-BtZLCgk5.js").then((m2) => m2.default));
211837
- addDecoder(32773, () => import("./packbits-8RuDMM5K.js").then((m2) => m2.default));
211841
+ addDecoder(7, () => import("./jpeg-ZLpwudQ0.js").then((m2) => m2.default));
211842
+ addDecoder([8, 32946], () => import("./deflate-DdUMPfPX.js").then((m2) => m2.default));
211843
+ addDecoder(32773, () => import("./packbits-CoBPy7Ka.js").then((m2) => m2.default));
211838
211844
  addDecoder(
211839
211845
  34887,
211840
- () => import("./lerc-DlsnNE1I.js").then(async (m2) => {
211846
+ () => import("./lerc-ClZhA-Ay.js").then(async (m2) => {
211841
211847
  await m2.zstd.init();
211842
211848
  return m2;
211843
211849
  }).then((m2) => m2.default)
211844
211850
  );
211845
- addDecoder(50001, () => import("./webimage-1fmk-aLA.js").then((m2) => m2.default));
211851
+ addDecoder(50001, () => import("./webimage-Cqw15JzH.js").then((m2) => m2.default));
211846
211852
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
211847
211853
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
211848
211854
  }
@@ -256404,12 +256410,12 @@ class ErrorBoundary extends React__default.Component {
256404
256410
  }
256405
256411
  }
256406
256412
  const LazySpatialThree = React__default.lazy(async () => {
256407
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DzPOP2R1.js");
256413
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-HfN7ntLr.js");
256408
256414
  return { default: SpatialWrapper2 };
256409
256415
  });
256410
256416
  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 }) }) }) }));
256411
256417
  const LazySpatialAccelerated = React__default.lazy(async () => {
256412
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-BGzgHqzw.js");
256418
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-RsK7cASr.js");
256413
256419
  return { default: SpatialWrapper2 };
256414
256420
  });
256415
256421
  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 }) }) }) }));
@@ -271593,7 +271599,7 @@ function HiglassGlobalStyles(props) {
271593
271599
  }
271594
271600
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
271595
271601
  const LazyHiGlassComponent = React__default.lazy(async () => {
271596
- const { HiGlassComponent } = await import("./higlass-BXmDHp1M.js");
271602
+ const { HiGlassComponent } = await import("./higlass-BQr7sqN0.js");
271597
271603
  return { default: HiGlassComponent };
271598
271604
  });
271599
271605
  const HG_SIZE = 800;
@@ -274541,7 +274547,7 @@ function NeuroglancerGlobalStyles(props) {
274541
274547
  const { classes: classes2 } = props;
274542
274548
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
274543
274549
  }
274544
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-Cb2ywexW.js"));
274550
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-Du5EgkkS.js"));
274545
274551
  function createWorker() {
274546
274552
  const worker = new WorkerFactory$1();
274547
274553
  worker.AsyncComputationWorker = WorkerFactory;
@@ -360952,7 +360958,9 @@ const fileTypeToExtensions = {
360952
360958
  // TODO: how to handle h5ad-based AnnData (since needs reference JSON file).
360953
360959
  // Perhaps just assume one H5AD+one JSON (or .ref.json) file correspond to each other?
360954
360960
  [FileType$1.SPATIALDATA_ZARR]: [".sd.zarr", ".sdata.zarr", ".spatialdata.zarr"],
360955
- [FileType$1.SPATIALDATA_ZARR_ZIP]: [".sd.zarr.zip", ".sdata.zarr.zip", ".spatialdata.zarr.zip"]
360961
+ [FileType$1.SPATIALDATA_ZARR_ZIP]: [".sd.zarr.zip", ".sdata.zarr.zip", ".spatialdata.zarr.zip"],
360962
+ [FileType$1.GENOMIC_PROFILES_ZARR]: [".multivec.zarr"],
360963
+ [FileType$1.GENOMIC_PROFILES_ZARR_ZIP]: [".multivec.zarr.zip"]
360956
360964
  };
360957
360965
  const fileTypeToClass = {
360958
360966
  // OME-TIFF
@@ -360978,7 +360986,9 @@ const ZARR_FILETYPES = [
360978
360986
  FileType$1.IMAGE_OME_ZARR,
360979
360987
  FileType$1.IMAGE_OME_ZARR_ZIP,
360980
360988
  FileType$1.OBS_SEGMENTATIONS_OME_ZARR,
360981
- FileType$1.OBS_SEGMENTATIONS_OME_ZARR_ZIP
360989
+ FileType$1.OBS_SEGMENTATIONS_OME_ZARR_ZIP,
360990
+ FileType$1.GENOMIC_PROFILES_ZARR,
360991
+ FileType$1.GENOMIC_PROFILES_ZARR_ZIP
360982
360992
  ];
360983
360993
  function urlToFileType(url) {
360984
360994
  const match2 = Object.entries(fileTypeToExtensions).find(
@@ -363226,16 +363236,25 @@ let FeatureStatsAnndataLoader$1 = class FeatureStatsAnndataLoader extends Abstra
363226
363236
  return this.dataSource.loadDataFrameIndex(dfPath);
363227
363237
  }
363228
363238
  async loadDataFrame(dfPath) {
363229
- const [featureId2, featureFoldChange, featureSignificance] = await Promise.all([
363230
- this.loadFeatureNames(dfPath),
363231
- this.loadFoldChanges(dfPath),
363232
- this.loadSignificances(dfPath)
363233
- ]);
363234
- return {
363235
- featureId: featureId2,
363236
- featureFoldChange,
363237
- featureSignificance
363238
- };
363239
+ try {
363240
+ const [featureId2, featureFoldChange, featureSignificance] = await Promise.all([
363241
+ this.loadFeatureNames(dfPath),
363242
+ this.loadFoldChanges(dfPath),
363243
+ this.loadSignificances(dfPath)
363244
+ ]);
363245
+ return {
363246
+ featureId: featureId2,
363247
+ featureFoldChange,
363248
+ featureSignificance
363249
+ };
363250
+ } catch (e3) {
363251
+ log$b.warn("Dataframe not found at", dfPath);
363252
+ return {
363253
+ featureId: [],
363254
+ featureFoldChange: [],
363255
+ featureSignificance: []
363256
+ };
363257
+ }
363239
363258
  }
363240
363259
  /**
363241
363260
  *
@@ -363262,7 +363281,7 @@ let FeatureStatsAnndataLoader$1 = class FeatureStatsAnndataLoader extends Abstra
363262
363281
  * @returns {Promise<LoaderResult<FeatureStatsData>>}
363263
363282
  */
363264
363283
  async loadMulti(volcanoOptions) {
363265
- const { analysisType: targetAnalysisType = "rank_genes_groups" } = this.options;
363284
+ const { analysisType: targetAnalysisType = "pydeseq2" } = this.options;
363266
363285
  const { sampleSetSelection, obsSetSelection } = volcanoOptions || {};
363267
363286
  const rawObsSetSelection = obsSetSelection;
363268
363287
  const rawSampleSetSelection = sampleSetSelection;
@@ -364503,9 +364522,7 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
364503
364522
  this.dataSource.supportsLoadPointsInRect(path2, featureIndexColumnName, mortonCodeColumn)
364504
364523
  ]);
364505
364524
  const isSupportedVersion = formatVersion === "0.1" || formatVersion === "0.2";
364506
- const boundingBox = zattrs?.bounding_box;
364507
- const hasBoundingBox2D = typeof boundingBox?.x_max === "number" && typeof boundingBox?.x_min === "number" && typeof boundingBox?.y_max === "number" && typeof boundingBox?.y_min === "number";
364508
- return isSupportedVersion && hasBoundingBox2D && hasRequiredColumnsAndRowGroupSize;
364525
+ return isSupportedVersion && hasRequiredColumnsAndRowGroupSize;
364509
364526
  }
364510
364527
  async load() {
364511
364528
  const [modelMatrix2, supportsTiling] = await Promise.all([
@@ -364543,7 +364560,7 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
364543
364560
  featureIds,
364544
364561
  obsPointsModelMatrix: modelMatrix2,
364545
364562
  // Return 'tiled' if the morton_code_2d column
364546
- // and bounding_box metadata are present,
364563
+ // is present,
364547
364564
  // and the row group size is small enough.
364548
364565
  // Otherwise, return 'full'.
364549
364566
  obsPointsTilingType: supportsTiling ? "tiled" : "full",
@@ -374052,6 +374069,7 @@ function sdataMortonQueryRectAux(boundingBox, origRect) {
374052
374069
  const mortonIntervals = zcoverRectangle(normRect[0][0], normRect[0][1], normRect[1][0], normRect[1][1], 16, null, true);
374053
374070
  return mortonIntervals;
374054
374071
  }
374072
+ const MORTON_CODE_EXTREME_VALUE_INDICATOR = 0;
374055
374073
  async function getParquetModule() {
374056
374074
  const module2 = await import(
374057
374075
  /* webpackIgnore: true */
@@ -374177,22 +374195,22 @@ async function _loadParquetMetadataByPart({ queryClient, store }, parquetPath) {
374177
374195
  } catch (error2) {
374178
374196
  if (error2.message.includes("Failed to load parquet footerLength")) {
374179
374197
  numParts = partIndex;
374198
+ log$b.info(`Found ${numParts} parts for parquet path ${parquetPath}; An above "Failed to load parquet footerLength" error is expected for the subsequent part.`);
374180
374199
  }
374181
374200
  }
374182
374201
  } while (numParts === void 0);
374202
+ const numRows = allMetadata.map((part) => part.metadata.fileMetadata().numRows());
374203
+ const numRowGroups = allMetadata.map((part) => part.metadata.numRowGroups());
374204
+ const numRowsPerGroup = allMetadata.map((part) => part.metadata.rowGroup(0).numRows());
374183
374205
  const metadata2 = {
374184
- numRows: 0,
374185
- numRowGroups: 0,
374186
- numRowsPerGroup: 0,
374187
- schema: null
374188
- };
374189
- if (allMetadata.length > 0) {
374190
- const firstPart = allMetadata[0];
374191
- metadata2.numRows = allMetadata.reduce((sum2, part) => sum2 + part.metadata.fileMetadata().numRows(), 0);
374192
- metadata2.numRowGroups = allMetadata.reduce((sum2, part) => sum2 + part.metadata.numRowGroups(), 0);
374193
- metadata2.numRowsPerGroup = firstPart.metadata.rowGroup(0).numRows();
374194
- metadata2.schema = firstPart.schema.schema;
374195
- }
374206
+ totalNumRows: numRows.reduce((a2, b2) => a2 + b2, 0),
374207
+ totalNumRowGroups: numRowGroups.reduce((a2, b2) => a2 + b2, 0),
374208
+ // Array of count per part (length equal to numParts).
374209
+ numRowsByPart: numRows,
374210
+ numRowGroupsByPart: numRowGroups,
374211
+ numRowsPerGroupByPart: numRowsPerGroup,
374212
+ schema: allMetadata?.[0]?.schema?.schema
374213
+ };
374196
374214
  const result = {
374197
374215
  ...metadata2,
374198
374216
  // TODO: extract metadata per part and rowGroup into plain objects that match the hyparquet parquetMetadata() return value?
@@ -374216,8 +374234,8 @@ async function _loadParquetRowGroupByGroupIndex({ queryClient, store }, parquetP
374216
374234
  const store2 = ctx.meta?.store;
374217
374235
  const { readParquetRowGroup } = await _getParquetModule({ queryClient: queryClient2 });
374218
374236
  const allMetadata = await _loadParquetMetadataByPart({ queryClient: queryClient2, store: store2 }, parquetPath);
374219
- if (rowGroupIndex < 0 || rowGroupIndex >= allMetadata.numRowGroups) {
374220
- throw new Error(`Row group index ${rowGroupIndex} is out of bounds for parquet table with ${allMetadata.numRowGroups} row groups.`);
374237
+ if (rowGroupIndex < 0 || rowGroupIndex >= allMetadata.totalNumRowGroups) {
374238
+ throw new Error(`Row group index ${rowGroupIndex} is out of bounds for parquet table with ${allMetadata.totalNumRowGroups} row groups.`);
374221
374239
  }
374222
374240
  let partIndex;
374223
374241
  let cumulativeRowGroups = 0;
@@ -374327,9 +374345,9 @@ async function _bisectRowGroupsRight({ queryClient, store }, parquetPath, column
374327
374345
  );
374328
374346
  const store2 = ctx.meta?.store;
374329
374347
  const allMetadata = await _loadParquetMetadataByPart({ queryClient: queryClient2, store: store2 }, parquetPath);
374330
- const { numRowGroups } = allMetadata;
374348
+ const { totalNumRowGroups } = allMetadata;
374331
374349
  let lo = 0;
374332
- let hi = numRowGroups;
374350
+ let hi = totalNumRowGroups;
374333
374351
  while (lo < hi) {
374334
374352
  const cachedInRange = await getCachedInRange(queryClient2, parquetPath, columnName, lo, hi);
374335
374353
  const betterLo = cachedInRange.slice().reverse().find((c2) => c2.index > lo && targetValue >= c2.max);
@@ -374732,11 +374750,12 @@ class SpatialDataTableSource extends AnnDataSource {
374732
374750
  const { queryClient } = this;
374733
374751
  const { store } = this.storeRoot;
374734
374752
  const allMetadata = await _loadParquetMetadataByPart({ queryClient, store }, parquetPath);
374735
- const { numRowsPerGroup } = allMetadata;
374736
- const numRowsTotal = allMetadata.numRows;
374737
- if (numRowsPerGroup >= 1e5) {
374753
+ const { numRowsPerGroupByPart } = allMetadata;
374754
+ const numRowsTotal = allMetadata.totalNumRows;
374755
+ const maxNumRowsPerGroup = Math.max(...numRowsPerGroupByPart);
374756
+ if (maxNumRowsPerGroup >= 1e5) {
374738
374757
  if (numRowsTotal > 5e6) {
374739
- throw new Error(`The Parquet table at ${parquetPath} has ${numRowsTotal} total rows, which necessitates tiled loading, but it was not possible because the row group size is too large (${numRowsPerGroup}). See the Vitessce documentation at Data Troubleshooting -> Points for more details.`);
374758
+ throw new Error(`The Parquet table at ${parquetPath} has ${numRowsTotal} total rows, which necessitates tiled loading, but it was not possible because the row group size is too large (${maxNumRowsPerGroup}). See the Vitessce documentation at Data Troubleshooting -> Points for more details.`);
374740
374759
  }
374741
374760
  return false;
374742
374761
  }
@@ -374760,7 +374779,7 @@ class SpatialDataTableSource extends AnnDataSource {
374760
374779
  * @param {string[]|undefined} columns An optional list of column names to load.
374761
374780
  * @returns
374762
374781
  */
374763
- async loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal, featureIndexColumnName, mortonCodeColumn) {
374782
+ async loadParquetTableInRect(parquetPath, tileBbox, signal, featureIndexColumnName, mortonCodeColumn) {
374764
374783
  const { queryClient } = this;
374765
374784
  const { store } = this.storeRoot;
374766
374785
  const mortonCodeColumnName = mortonCodeColumn ?? "morton_code_2d";
@@ -374785,15 +374804,46 @@ class SpatialDataTableSource extends AnnDataSource {
374785
374804
  } else {
374786
374805
  tileBboxes = [tileBbox];
374787
374806
  }
374807
+ const firstRowGroupTable = await _loadParquetRowGroupByGroupIndex({ queryClient, store }, parquetPath, 0);
374808
+ const xColumnForBoundingBox = firstRowGroupTable.getChild("x");
374809
+ const yColumnForBoundingBox = firstRowGroupTable.getChild("y");
374810
+ const mortonCodeColumnForBoundingBox = firstRowGroupTable.getChild(mortonCodeColumnName);
374811
+ const boundingBoxMaxNumRows = Math.min(4, firstRowGroupTable.numRows);
374812
+ const firstMortonCodes = range$e(boundingBoxMaxNumRows).map((i2) => mortonCodeColumnForBoundingBox.get(i2));
374813
+ const boundingBoxNumRows = firstMortonCodes.filter((code2) => code2 === MORTON_CODE_EXTREME_VALUE_INDICATOR).length;
374814
+ const boundingBoxXValues = range$e(boundingBoxNumRows).map((i2) => xColumnForBoundingBox.get(i2));
374815
+ const boundingBoxYValues = range$e(boundingBoxNumRows).map((i2) => yColumnForBoundingBox.get(i2));
374816
+ const xMin = Math.min(...boundingBoxXValues);
374817
+ const xMax = Math.max(...boundingBoxXValues);
374818
+ const yMin = Math.min(...boundingBoxYValues);
374819
+ const yMax = Math.max(...boundingBoxYValues);
374820
+ const allPointsBbox = {
374821
+ x_min: xMin,
374822
+ x_max: xMax,
374823
+ y_min: yMin,
374824
+ y_max: yMax
374825
+ };
374788
374826
  const rowGroupIndicesPerTile = await Promise.all(tileBboxes.map(async (subTileBbox) => _rectToRowGroupIndices({ queryClient, store }, parquetPath, subTileBbox, allPointsBbox, mortonCodeColumnName)));
374789
374827
  const uniqueCoveredRowGroupIndices = Array.from(new Set(rowGroupIndicesPerTile.flat())).toSorted((a2, b2) => a2 - b2);
374790
374828
  const allMetadata = await _loadParquetMetadataByPart({ queryClient, store }, parquetPath);
374791
- const { numRowsPerGroup } = allMetadata;
374792
- const numRowGroups = uniqueCoveredRowGroupIndices.length;
374793
- const totalNumRows = numRowsPerGroup * numRowGroups;
374794
- const xArr = new Float32Array(totalNumRows);
374795
- const yArr = new Float32Array(totalNumRows);
374796
- const featureIndexArr = new Uint32Array(totalNumRows);
374829
+ const { numRowsPerGroupByPart, numRowGroupsByPart } = allMetadata;
374830
+ const rowGroupIToNumRows = (rowGroupI) => {
374831
+ let currPartIndex = 0;
374832
+ let prevTotalRowGroupCount = 0;
374833
+ for (let partIndex = 0; partIndex < numRowGroupsByPart.length; partIndex++) {
374834
+ const numRowGroupsInPart = numRowGroupsByPart[partIndex];
374835
+ if (prevTotalRowGroupCount <= rowGroupI && rowGroupI < prevTotalRowGroupCount + numRowGroupsInPart) {
374836
+ currPartIndex = partIndex;
374837
+ break;
374838
+ }
374839
+ prevTotalRowGroupCount += numRowGroupsInPart;
374840
+ }
374841
+ return numRowsPerGroupByPart[currPartIndex];
374842
+ };
374843
+ const totalNumRowsToLoad = uniqueCoveredRowGroupIndices.reduce((acc, rowGroupI) => acc + rowGroupIToNumRows(rowGroupI), 0);
374844
+ const xArr = new Float32Array(totalNumRowsToLoad);
374845
+ const yArr = new Float32Array(totalNumRowsToLoad);
374846
+ const featureIndexArr = new Uint32Array(totalNumRowsToLoad);
374797
374847
  const rowGroupTables = await Promise.all(uniqueCoveredRowGroupIndices.map(async (rowGroupIndex) => _loadParquetRowGroupByGroupIndex({ queryClient, store }, parquetPath, rowGroupIndex)));
374798
374848
  let rowOffset = 0;
374799
374849
  rowGroupTables.forEach((table2) => {
@@ -374806,7 +374856,7 @@ class SpatialDataTableSource extends AnnDataSource {
374806
374856
  xArr.set(xColumn.toArray(), rowOffset);
374807
374857
  yArr.set(yColumn.toArray(), rowOffset);
374808
374858
  featureIndexArr.set(featureIndexColumn.toArray(), rowOffset);
374809
- rowOffset += numRowsPerGroup;
374859
+ rowOffset += table2.numRows;
374810
374860
  });
374811
374861
  return {
374812
374862
  data: {
@@ -374814,7 +374864,7 @@ class SpatialDataTableSource extends AnnDataSource {
374814
374864
  y: yArr,
374815
374865
  featureIndices: featureIndexArr
374816
374866
  },
374817
- shape: [3, totalNumRows]
374867
+ shape: [3, totalNumRowsToLoad]
374818
374868
  };
374819
374869
  }
374820
374870
  }
@@ -381009,16 +381059,11 @@ class SpatialDataPointsSource extends SpatialDataTableSource {
381009
381059
  const zattrs = await this.loadSpatialDataElementAttrs(elementPath);
381010
381060
  const {
381011
381061
  // axes,
381012
- spatialdata_attrs: spatialDataAttrs,
381013
- // The bounding box (extent) of all points.
381014
- // Required for un-normalization from uints back to floats.
381015
- // TODO: decide whether these will be stored here or somewhere else.
381016
- // Reference: https://github.com/vitessce/vitessce-python/pull/476#issuecomment-3362656956
381017
- bounding_box: allPointsBbox
381062
+ spatialdata_attrs: spatialDataAttrs
381018
381063
  } = zattrs;
381019
381064
  const { feature_key: featureKey } = spatialDataAttrs;
381020
381065
  const featureIndexColumnName = featureIndexColumnNameFromOptions ?? `${featureKey}_codes`;
381021
- return this.loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal, featureIndexColumnName, mortonCodeColumn);
381066
+ return this.loadParquetTableInRect(parquetPath, tileBbox, signal, featureIndexColumnName, mortonCodeColumn);
381022
381067
  }
381023
381068
  async supportsLoadPointsInRect(elementPath, featureIndexColumnName, mortonCodeColumn) {
381024
381069
  const parquetPath = getParquetPath(elementPath);
@@ -386576,7 +386621,8 @@ const baseFileTypes = [
386576
386621
  makeFileType(FileType$1.OBS_LOCATIONS_MOLECULES_JSON, DataType$3.OBS_LOCATIONS, MoleculesJsonAsObsLocationsLoader, JsonSource, z.null()),
386577
386622
  makeFileType(FileType$1.OBS_LABELS_MOLECULES_JSON, DataType$3.OBS_LABELS, MoleculesJsonAsObsLabelsLoader, JsonSource, z.null()),
386578
386623
  makeFileType(FileType$1.NEIGHBORHOODS_JSON, DataType$3.NEIGHBORHOODS, JsonLoader, JsonSource, z.null()),
386579
- makeFileType(FileType$1.GENOMIC_PROFILES_ZARR, DataType$3.GENOMIC_PROFILES, GenomicProfilesZarrLoader, ZarrDataSource, z.null())
386624
+ makeFileType(FileType$1.GENOMIC_PROFILES_ZARR, DataType$3.GENOMIC_PROFILES, GenomicProfilesZarrLoader, ZarrDataSource, z.null()),
386625
+ makeFileType(FileType$1.GENOMIC_PROFILES_ZARR_ZIP, DataType$3.GENOMIC_PROFILES, GenomicProfilesZarrLoader, ZarrDataSource, z.null())
386580
386626
  ];
386581
386627
  const baseJointFileTypes = [
386582
386628
  new PluginJointFileType(FileType$1.ANNDATA_ZARR, expandAnndataZarr, anndataZarrSchema),
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { bN, bM } from "./index-C7kW8YKc.js";
1
+ import { bN, bM } from "./index-dq5Rjqj6.js";
2
2
  export {
3
3
  bN as ControlledLauncher,
4
4
  bM as UncontrolledLauncher
@@ -1,4 +1,4 @@
1
- import { aX as BaseDecoder } from "./index-C7kW8YKc.js";
1
+ import { aX as BaseDecoder } from "./index-dq5Rjqj6.js";
2
2
  const dctZigZag = new Int32Array([
3
3
  0,
4
4
  1,
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-SxljTded.js";
2
- import { aG as getDefaultExportFromCjs, aX as BaseDecoder, aY as LercParameters, aZ as LercAddCompression } from "./index-C7kW8YKc.js";
2
+ import { aG as getDefaultExportFromCjs, aX as BaseDecoder, aY as LercParameters, aZ as LercAddCompression } from "./index-dq5Rjqj6.js";
3
3
  var LercDecode = { exports: {} };
4
4
  var hasRequiredLercDecode;
5
5
  function requireLercDecode() {
@@ -1,4 +1,4 @@
1
- import { aX as BaseDecoder } from "./index-C7kW8YKc.js";
1
+ import { aX as BaseDecoder } from "./index-dq5Rjqj6.js";
2
2
  const MIN_BITS = 9;
3
3
  const CLEAR_CODE = 256;
4
4
  const EOI_CODE = 257;
@@ -1,4 +1,4 @@
1
- import { aX as BaseDecoder } from "./index-C7kW8YKc.js";
1
+ import { aX as BaseDecoder } from "./index-dq5Rjqj6.js";
2
2
  class PackbitsDecoder extends BaseDecoder {
3
3
  decodeBlock(buffer) {
4
4
  const dataView = new DataView(buffer);
@@ -1,4 +1,4 @@
1
- import { aX as BaseDecoder } from "./index-C7kW8YKc.js";
1
+ import { aX as BaseDecoder } from "./index-dq5Rjqj6.js";
2
2
  class RawDecoder extends BaseDecoder {
3
3
  decodeBlock(buffer) {
4
4
  return buffer;
@@ -1,4 +1,4 @@
1
- import { bH as MeshDistanceMaterial, bI as MeshDepthMaterial, bJ as RGBADepthPacking, ae as UniformsUtils, bK as ShaderChunk, a9 as InstancedBufferGeometry, a8 as Sphere, a7 as Box3, am as BackSide, u as DoubleSide, z as Mesh, a5 as FrontSide, v as MeshBasicMaterial, C as Color, e as Vector3, M as Matrix4, V as Vector2, ap as Matrix3, ag as Vector4, a1 as Texture, l as LinearFilter, aD as PlaneGeometry, x as BufferGeometry, aa as Float32BufferAttribute, bL as InstancedBufferAttribute } from "./index-C7kW8YKc.js";
1
+ import { bH as MeshDistanceMaterial, bI as MeshDepthMaterial, bJ as RGBADepthPacking, ae as UniformsUtils, bK as ShaderChunk, a9 as InstancedBufferGeometry, a8 as Sphere, a7 as Box3, am as BackSide, u as DoubleSide, z as Mesh, a5 as FrontSide, v as MeshBasicMaterial, C as Color, e as Vector3, M as Matrix4, V as Vector2, ap as Matrix3, ag as Vector4, a1 as Texture, l as LinearFilter, aD as PlaneGeometry, x as BufferGeometry, aa as Float32BufferAttribute, bL as InstancedBufferAttribute } from "./index-dq5Rjqj6.js";
2
2
  function workerBootstrap() {
3
3
  var modules = /* @__PURE__ */ Object.create(null);
4
4
  function registerModule(ref, callback) {
@@ -1,4 +1,4 @@
1
- import { aX as BaseDecoder } from "./index-C7kW8YKc.js";
1
+ import { aX as BaseDecoder } from "./index-dq5Rjqj6.js";
2
2
  class WebImageDecoder extends BaseDecoder {
3
3
  constructor() {
4
4
  super();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/launcher",
3
- "version": "3.9.9",
3
+ "version": "3.9.10",
4
4
  "author": "HIDIVE Lab at HMS",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -20,14 +20,14 @@
20
20
  "use-query-params": "^1.1.9",
21
21
  "react-dropzone": "^14.3.8",
22
22
  "@tanstack/react-query": "^5.80.2",
23
- "@vitessce/all": "3.9.9",
24
- "@vitessce/example-configs": "3.9.9",
25
- "@vitessce/constants-internal": "3.9.9",
26
- "@vitessce/styles": "3.9.9",
27
- "@vitessce/vit-s": "3.9.9",
28
- "@vitessce/example-plugins": "3.9.9",
29
- "@vitessce/globals": "3.9.9",
30
- "@vitessce/config": "3.9.9"
23
+ "@vitessce/all": "3.9.10",
24
+ "@vitessce/constants-internal": "3.9.10",
25
+ "@vitessce/example-plugins": "3.9.10",
26
+ "@vitessce/globals": "3.9.10",
27
+ "@vitessce/example-configs": "3.9.10",
28
+ "@vitessce/vit-s": "3.9.10",
29
+ "@vitessce/styles": "3.9.10",
30
+ "@vitessce/config": "3.9.10"
31
31
  },
32
32
  "devDependencies": {
33
33
  "react": "18.3.1",