@vitessce/launcher 3.9.0 → 3.9.2

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-BCLXgocP.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-kqgO-sn-.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-BCLXgocP.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-kqgO-sn-.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-BCLXgocP.js";
2
+ import { aX as BaseDecoder } from "./index-kqgO-sn-.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-BCLXgocP.js";
4
+ import { a_ as commonjsGlobal$1, a$ as requireObjectAssign, aG as getDefaultExportFromCjs$1, b0 as earcut } from "./index-kqgO-sn-.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-BCLXgocP.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-kqgO-sn-.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-DyQ044MA.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-DGRrAiaM.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-DI_XyWCQ.js"), []);
5030
+ } = suspend(async () => import("./troika-three-text.esm-HIyc43x2.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-BCLXgocP.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-kqgO-sn-.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-DyQ044MA.js";
3
+ import { u as useThree, a as useFrame, O as OrbitControls, C as Canvas } from "./OrbitControls-DGRrAiaM.js";
4
4
  const LogLevel = {
5
5
  INFO: "info",
6
6
  WARN: "warn",
@@ -12658,7 +12658,9 @@ const obsSegmentationsSpatialdataSchema = z.object({
12658
12658
  const obsPointsSpatialdataSchema = z.object({
12659
12659
  path: z.string().describe("The path to the point data."),
12660
12660
  tablePath: z.string().optional().describe("The path to a table which annotates the points. If available but not specified, the spot identifiers may not be aligned with associated tabular data as expected."),
12661
- coordinateSystem: z.string().optional().describe('The name of a coordinate transformation output used to transform the image. If not provided, the "global" coordinate system is assumed.')
12661
+ coordinateSystem: z.string().optional().describe('The name of a coordinate transformation output used to transform the image. If not provided, the "global" coordinate system is assumed.'),
12662
+ featureIndexColumn: z.string().optional().describe("The name of the column in the table which contains the feature (e.g., gene) indices associated with each point (aligned with the table var.index dataframe column)."),
12663
+ mortonCodeColumn: z.string().optional().describe('The name of the column in the table which contains the Morton codes for each point, used for efficient spatial querying. If not provided, Vitessce will assume the default column name "morton_code_2d".')
12662
12664
  });
12663
12665
  z.object({
12664
12666
  path: z.string(),
@@ -74388,21 +74390,20 @@ Popper$1.Utils = (typeof window !== "undefined" ? window : global).PopperUtils;
74388
74390
  Popper$1.placements = placements$1;
74389
74391
  Popper$1.Defaults = Defaults;
74390
74392
  function createChainedFunction(...funcs) {
74391
- return funcs.reduce((acc, func) => {
74392
- if (func == null) {
74393
- return acc;
74394
- }
74395
- {
74396
- if (typeof func !== "function") {
74397
- console.error("Material-UI: Invalid Argument Type, must only provide functions, undefined, or null.");
74393
+ return funcs.reduce(
74394
+ (acc, func) => {
74395
+ if (func == null) {
74396
+ return acc;
74398
74397
  }
74398
+ return function chainedFunction(...args) {
74399
+ acc.apply(this, args);
74400
+ func.apply(this, args);
74401
+ };
74402
+ },
74403
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
74404
+ () => {
74399
74405
  }
74400
- return function chainedFunction(...args) {
74401
- acc.apply(this, args);
74402
- func.apply(this, args);
74403
- };
74404
- }, () => {
74405
- });
74406
+ );
74406
74407
  }
74407
74408
  function setRef(ref2, value2) {
74408
74409
  if (typeof ref2 === "function") {
@@ -74441,7 +74442,7 @@ function flipPlacement(placement, theme) {
74441
74442
  }
74442
74443
  }
74443
74444
  function getAnchorEl(anchorEl) {
74444
- return typeof anchorEl === "function" ? anchorEl() : anchorEl;
74445
+ return typeof anchorEl === "function" ? anchorEl(document.body) : anchorEl;
74445
74446
  }
74446
74447
  const useEnhancedEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
74447
74448
  const defaultPopperOptions = {};
@@ -74471,25 +74472,18 @@ const Popper = React.forwardRef((props, ref2) => {
74471
74472
  }
74472
74473
  if (popperRef.current) {
74473
74474
  popperRef.current.destroy();
74474
- handlePopperRefRef.current(null);
74475
+ if (handlePopperRefRef.current) {
74476
+ setRef(handlePopperRefRef.current, null);
74477
+ }
74475
74478
  }
74476
74479
  const handlePopperUpdate = (data2) => {
74477
74480
  setPlacement(data2.placement);
74478
74481
  };
74479
- const resolvedAnchorEl = getAnchorEl(anchorEl);
74480
- {
74481
- if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {
74482
- const box = resolvedAnchorEl.getBoundingClientRect();
74483
- if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
74484
- console.warn([
74485
- "Material-UI: The `anchorEl` prop provided to the component is invalid.",
74486
- "The anchor element should be part of the document layout.",
74487
- "Make sure the element is present in the document or that it's not display none."
74488
- ].join("\n"));
74489
- }
74490
- }
74482
+ const anchorElement = getAnchorEl(anchorEl);
74483
+ if (!anchorElement) {
74484
+ return;
74491
74485
  }
74492
- const popper2 = new Popper$1(getAnchorEl(anchorEl), tooltipRef.current, {
74486
+ const popper2 = new Popper$1(anchorElement, tooltipRef.current, {
74493
74487
  placement: rtlPlacement,
74494
74488
  ...popperOptions,
74495
74489
  modifiers: {
@@ -74507,7 +74501,9 @@ const Popper = React.forwardRef((props, ref2) => {
74507
74501
  onCreate: createChainedFunction(handlePopperUpdate, popperOptions.onCreate),
74508
74502
  onUpdate: createChainedFunction(handlePopperUpdate, popperOptions.onUpdate)
74509
74503
  });
74510
- handlePopperRefRef.current(popper2);
74504
+ if (handlePopperRefRef.current) {
74505
+ setRef(handlePopperRefRef.current, popper2);
74506
+ }
74511
74507
  }, [anchorEl, disablePortal, modifiers2, open2, rtlPlacement, popperOptions]);
74512
74508
  const handleRef = React.useCallback((node2) => {
74513
74509
  setRef(ownRef, node2);
@@ -74521,7 +74517,9 @@ const Popper = React.forwardRef((props, ref2) => {
74521
74517
  return;
74522
74518
  }
74523
74519
  popperRef.current.destroy();
74524
- handlePopperRefRef.current(null);
74520
+ if (handlePopperRefRef.current) {
74521
+ setRef(handlePopperRefRef.current, null);
74522
+ }
74525
74523
  };
74526
74524
  const handleExited = () => {
74527
74525
  setExited(true);
@@ -74552,7 +74550,7 @@ const Popper = React.forwardRef((props, ref2) => {
74552
74550
  // Fix Popper.js display issue
74553
74551
  top: 0,
74554
74552
  left: 0,
74555
- display: !open2 && keepMounted && !transition3 ? "none" : null,
74553
+ display: !open2 && keepMounted && !transition3 ? "none" : void 0,
74556
74554
  ...style2
74557
74555
  }, children: typeof children3 === "function" ? children3(childProps) : children3 }) });
74558
74556
  });
@@ -74567,7 +74565,7 @@ function ScopedGlobalStyles(props) {
74567
74565
  const component = useMemo$1(() => {
74568
74566
  const computedStyles = prependParentClassName(styles2, parentClassName);
74569
74567
  return jsxRuntimeExports.jsx(GlobalStyles$3, { styles: computedStyles });
74570
- }, [parentClassName]);
74568
+ }, [parentClassName, styles2]);
74571
74569
  return component;
74572
74570
  }
74573
74571
  function ok$1() {
@@ -210608,22 +210606,22 @@ async function getDecoder(fileDirectory) {
210608
210606
  const Decoder = await importFn();
210609
210607
  return new Decoder(fileDirectory);
210610
210608
  }
210611
- addDecoder([void 0, 1], () => import("./raw-C2Cyu7qH.js").then((m2) => m2.default));
210612
- addDecoder(5, () => import("./lzw-DLRhyzmK.js").then((m2) => m2.default));
210609
+ addDecoder([void 0, 1], () => import("./raw-CG2gVGOP.js").then((m2) => m2.default));
210610
+ addDecoder(5, () => import("./lzw-2nt9L4Ru.js").then((m2) => m2.default));
210613
210611
  addDecoder(6, () => {
210614
210612
  throw new Error("old style JPEG compression is not supported.");
210615
210613
  });
210616
- addDecoder(7, () => import("./jpeg-nKpt4803.js").then((m2) => m2.default));
210617
- addDecoder([8, 32946], () => import("./deflate-DWFSnmER.js").then((m2) => m2.default));
210618
- addDecoder(32773, () => import("./packbits-Bu2OcxM_.js").then((m2) => m2.default));
210614
+ addDecoder(7, () => import("./jpeg-Mg6dripE.js").then((m2) => m2.default));
210615
+ addDecoder([8, 32946], () => import("./deflate-D5lALlVK.js").then((m2) => m2.default));
210616
+ addDecoder(32773, () => import("./packbits-cWr_6BH2.js").then((m2) => m2.default));
210619
210617
  addDecoder(
210620
210618
  34887,
210621
- () => import("./lerc-BnXkSVBK.js").then(async (m2) => {
210619
+ () => import("./lerc--2UMppol.js").then(async (m2) => {
210622
210620
  await m2.zstd.init();
210623
210621
  return m2;
210624
210622
  }).then((m2) => m2.default)
210625
210623
  );
210626
- addDecoder(50001, () => import("./webimage-BUMl9PKo.js").then((m2) => m2.default));
210624
+ addDecoder(50001, () => import("./webimage-2P-XekNC.js").then((m2) => m2.default));
210627
210625
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
210628
210626
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
210629
210627
  }
@@ -253985,21 +253983,18 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
253985
253983
  };
253986
253984
  }
253987
253985
  }
253988
- const isStaticColor = obsColorEncoding === "spatialLayerColor";
253989
- const getMoleculeColor = (object2, { data: data2, index: index2, target: target2 }) => {
253990
- const obsId = data2.src.obsIndex[index2];
253991
- if (data2.src.obsLabelsMap && data2.src.uniqueObsLabels && data2.src.PALETTE) {
253992
- const obsLabel = data2.src.obsLabelsMap.get(obsId);
253993
- const labelIndex = data2.src.uniqueObsLabels.indexOf(obsLabel);
253994
- target2[0] = data2.src.PALETTE[labelIndex % data2.src.PALETTE.length]?.[0];
253995
- target2[1] = data2.src.PALETTE[labelIndex % data2.src.PALETTE.length]?.[1];
253996
- target2[2] = data2.src.PALETTE[labelIndex % data2.src.PALETTE.length]?.[2];
253997
- }
253998
- return target2;
253999
- };
254000
- const { obsPointsModelMatrix, obsPoints, obsPointsTilingType, loadPointsInRect } = this.obsPointsData?.[layerScope]?.src ?? {};
253986
+ const {
253987
+ obsPointsModelMatrix,
253988
+ obsPoints,
253989
+ // featureIndices: obsPointsFeatureIndices,
253990
+ obsPointsTilingType,
253991
+ loadPointsInRect
253992
+ } = this.obsPointsData?.[layerScope]?.src ?? {};
254001
253993
  obsPoints?.shape?.[0] === 3;
254002
253994
  const modelMatrix2 = obsPointsModelMatrix?.clone();
253995
+ const hasFeatureIndicesMinMax = !showUnselected && Array.isArray(featureIndices) && featureIndices.length === 1;
253996
+ const FILTER_PLACEHOLDER = 0;
253997
+ const featureIndicesMinMax = hasFeatureIndicesMinMax ? [featureIndices[0], featureIndices[0]] : [FILTER_PLACEHOLDER, FILTER_PLACEHOLDER];
254003
253998
  if (obsPointsTilingType === "tiled") {
254004
253999
  return new TileLayer({
254005
254000
  id: `Tiled-${POINT_LAYER_PREFIX}${layerScope}`,
@@ -254050,9 +254045,6 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254050
254045
  renderSubLayers: (subLayerProps) => {
254051
254046
  const { bbox: bbox2, content: tileData } = subLayerProps.tile;
254052
254047
  const { left: left2, top: top2, right: right2, bottom: bottom2 } = bbox2;
254053
- const hasFeatureIndicesMinMax = !showUnselected && Array.isArray(featureIndices) && featureIndices.length === 1;
254054
- const FILTER_PLACEHOLDER = 0;
254055
- const featureIndicesMinMax = hasFeatureIndicesMinMax ? [featureIndices[0], featureIndices[0]] : [FILTER_PLACEHOLDER, FILTER_PLACEHOLDER];
254056
254048
  return new ScatterplotLayer(subLayerProps, {
254057
254049
  bounds: [left2, top2, right2, bottom2],
254058
254050
  data: tileData,
@@ -254129,26 +254121,44 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254129
254121
  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
254130
254122
  pickable: true,
254131
254123
  autoHighlight: AUTO_HIGHLIGHT,
254132
- radiusMaxPixels: 3,
254133
254124
  opacity: spatialLayerOpacity,
254134
254125
  visible: spatialLayerVisible,
254135
254126
  modelMatrix: modelMatrix2,
254136
- getRadius: 300,
254127
+ getRadius: 5,
254128
+ radiusMaxPixels: 3,
254137
254129
  getPosition: (object2, { data: data2, index: index2, target: target2 }) => {
254138
254130
  target2[0] = data2.src.obsPoints.data[0][index2];
254139
254131
  target2[1] = data2.src.obsPoints.data[1][index2];
254140
254132
  target2[2] = 0;
254141
254133
  return target2;
254142
254134
  },
254143
- getLineColor: isStaticColor ? staticColor : getMoleculeColor,
254144
- getFillColor: isStaticColor ? staticColor : getMoleculeColor,
254135
+ getFillColor,
254145
254136
  onHover: (info2) => delegateHover(info2, "point", layerScope),
254137
+ // Use GPU filtering to filter to only the points in the tile bounding box,
254138
+ // since the row groups may contain points from other tiles.
254139
+ // Note: this can be improved using filterCategories,
254140
+ // but it is not available until post-v9 deck.gl/extensions.
254141
+ filterRange: [featureIndicesMinMax],
254142
+ getFilterValue: hasFeatureIndicesMinMax ? (object2, { data: data2, index: index2 }) => [
254143
+ data2.src.featureIndices[index2]
254144
+ ] : (object2, { data: data2, index: index2 }) => [
254145
+ FILTER_PLACEHOLDER
254146
+ ],
254147
+ extensions: [
254148
+ new DataFilterExtension({ filterSize: 1 })
254149
+ ],
254146
254150
  updateTriggers: {
254147
- getRadius: [],
254148
- getFillColor: [obsColorEncoding, staticColor],
254149
- getLineColor: [obsColorEncoding, staticColor]
254150
- },
254151
- ...{}
254151
+ getFillColor: [
254152
+ showUnselected,
254153
+ featureColor,
254154
+ obsColorEncoding,
254155
+ spatialLayerColor,
254156
+ featureSelection,
254157
+ hasMultipleFeaturesSelected
254158
+ ],
254159
+ getFilterValue: [hasFeatureIndicesMinMax, showUnselected, featureSelection],
254160
+ filterRange: [hasFeatureIndicesMinMax, showUnselected, featureSelection]
254161
+ }
254152
254162
  });
254153
254163
  }
254154
254164
  createSelectionLayer() {
@@ -254687,8 +254697,8 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254687
254697
  this.obsSegmentationsLayers = this.createSegmentationLayers();
254688
254698
  }
254689
254699
  onUpdatePointsData(layerScope) {
254690
- const { obsPoints, pointMultiObsLabels } = this.props;
254691
- const { obsIndex, obsPoints: layerObsPoints, obsPointsModelMatrix, loadPointsInRect, obsPointsTilingType } = obsPoints?.[layerScope] || {};
254700
+ const { obsPoints, pointMultiObsLabels, pointMatrixIndices } = this.props;
254701
+ const { obsIndex, obsPoints: layerObsPoints, featureIds: layerObsPointsFeatureIds, obsPointsModelMatrix, loadPointsInRect, obsPointsTilingType } = obsPoints?.[layerScope] || {};
254692
254702
  const { obsIndex: obsLabelsIndex, obsLabels } = pointMultiObsLabels?.[layerScope] || {};
254693
254703
  if (obsPointsTilingType === "tiled") {
254694
254704
  this.obsPointsData[layerScope] = {
@@ -254696,6 +254706,7 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254696
254706
  obsPointsTilingType,
254697
254707
  obsIndex: null,
254698
254708
  obsPoints: null,
254709
+ featureIndices: null,
254699
254710
  obsPointsModelMatrix,
254700
254711
  obsLabelsMap: null,
254701
254712
  uniqueObsLabels: null,
@@ -254708,11 +254719,17 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254708
254719
  if (layerObsPoints) {
254709
254720
  const getCellCoords = makeDefaultGetObsCoords(layerObsPoints);
254710
254721
  this.obsPointsQuadTree[layerScope] = createQuadTree(layerObsPoints, getCellCoords);
254722
+ let pointFeatureIndex = pointMatrixIndices?.[layerScope]?.featureIndex;
254723
+ if (!pointFeatureIndex) {
254724
+ pointFeatureIndex = Array.from(new Set(layerObsPointsFeatureIds));
254725
+ }
254726
+ const featureIndices = layerObsPointsFeatureIds.map((featureId2) => pointFeatureIndex?.indexOf(featureId2));
254711
254727
  this.obsPointsData[layerScope] = {
254712
254728
  src: {
254713
254729
  obsPointsTilingType,
254714
254730
  obsIndex,
254715
254731
  obsPoints: layerObsPoints,
254732
+ featureIndices,
254716
254733
  obsPointsModelMatrix,
254717
254734
  obsLabelsMap: null,
254718
254735
  uniqueObsLabels: null,
@@ -254925,7 +254942,7 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254925
254942
  forceUpdate = true;
254926
254943
  } else {
254927
254944
  this.props.pointLayerScopes.forEach((layerScope) => {
254928
- if (shallowDiffByLayer("obsPoints", layerScope) || shallowDiffByLayer("pointMultiObsLabels", layerScope)) {
254945
+ if (shallowDiffByLayer("obsPoints", layerScope) || shallowDiffByLayer("pointMultiObsLabels", layerScope) || shallowDiffByLayer("pointMatrixIndices", layerScope)) {
254929
254946
  this.onUpdatePointsData(layerScope);
254930
254947
  forceUpdate = true;
254931
254948
  }
@@ -255090,12 +255107,12 @@ class ErrorBoundary extends React__default.Component {
255090
255107
  }
255091
255108
  }
255092
255109
  const LazySpatialThree = React__default.lazy(async () => {
255093
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-C1eGTlSq.js");
255110
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-BRKAl1Rb.js");
255094
255111
  return { default: SpatialWrapper2 };
255095
255112
  });
255096
255113
  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 }) }) }) }));
255097
255114
  const LazySpatialAccelerated = React__default.lazy(async () => {
255098
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DHvGxl1H.js");
255115
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-BsRCdoDN.js");
255099
255116
  return { default: SpatialWrapper2 };
255100
255117
  });
255101
255118
  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 }) }) }) }));
@@ -270050,7 +270067,7 @@ function HiglassGlobalStyles(props) {
270050
270067
  }
270051
270068
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
270052
270069
  const LazyHiGlassComponent = React__default.lazy(async () => {
270053
- const { HiGlassComponent } = await import("./higlass-Baa_gFVD.js");
270070
+ const { HiGlassComponent } = await import("./higlass-DjvIAKNH.js");
270054
270071
  return { default: HiGlassComponent };
270055
270072
  });
270056
270073
  const HG_SIZE = 800;
@@ -272997,7 +273014,7 @@ function NeuroglancerGlobalStyles(props) {
272997
273014
  const { classes: classes2 } = props;
272998
273015
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
272999
273016
  }
273000
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BfXvm92G.js"));
273017
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-94YJn1Ps.js"));
273001
273018
  function createWorker() {
273002
273019
  return new WorkerFactory();
273003
273020
  }
@@ -359924,6 +359941,9 @@ class AnnDataSource extends ZarrDataSource {
359924
359941
  async getFlatArrDecompressed(path2) {
359925
359942
  const { storeRoot } = this;
359926
359943
  const arr = await open$1(storeRoot.resolve(path2), { kind: "array" });
359944
+ if (arr.shape[0] === 0) {
359945
+ return [];
359946
+ }
359927
359947
  const data2 = await get$c(arr);
359928
359948
  if (data2.data?.[Symbol.iterator]) {
359929
359949
  return (
@@ -362252,12 +362272,31 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
362252
362272
  this.locations = locations;
362253
362273
  return this.locations;
362254
362274
  }
362255
- async loadPointsInRect(bounds2, signal) {
362275
+ /**
362276
+ * Class method for loading the feature index column for points.
362277
+ * @returns {Promise} A promise for a column array of integers.
362278
+ */
362279
+ async loadPointsFeatureIds() {
362256
362280
  const { path: path2 } = this.options;
362281
+ if (this.locationsFeatureIndex) {
362282
+ return this.locationsFeatureIndex;
362283
+ }
362284
+ let locationsFeatureIndex;
362285
+ const formatVersion = await this.dataSource.getPointsFormatVersion(path2);
362286
+ if (formatVersion === "0.1") {
362287
+ locationsFeatureIndex = await this.dataSource.loadPointsFeatureIds(path2);
362288
+ } else {
362289
+ throw new UnknownSpatialDataFormatError("Only points format version 0.1 is supported.");
362290
+ }
362291
+ this.locationsFeatureIndex = locationsFeatureIndex;
362292
+ return this.locationsFeatureIndex;
362293
+ }
362294
+ async loadPointsInRect(bounds2, signal) {
362295
+ const { path: path2, featureIndexColumn, mortonCodeColumn } = this.options;
362257
362296
  let locations;
362258
362297
  const formatVersion = await this.dataSource.getPointsFormatVersion(path2);
362259
362298
  if (formatVersion === "0.1") {
362260
- locations = await this.dataSource.loadPointsInRect(path2, bounds2, signal);
362299
+ locations = await this.dataSource.loadPointsInRect(path2, bounds2, signal, featureIndexColumn, mortonCodeColumn);
362261
362300
  } else {
362262
362301
  throw new UnknownSpatialDataFormatError("Only points format version 0.1 is supported.");
362263
362302
  }
@@ -362276,15 +362315,17 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
362276
362315
  return null;
362277
362316
  }
362278
362317
  async supportsTiling() {
362279
- const { path: path2 } = this.options;
362280
- const [formatVersion, zattrs, hasRequiredColumnsAndRowGroupSize] = await Promise.all([
362318
+ const { path: path2, featureIndexColumn: featureIndexColumnNameFromOptions, mortonCodeColumn } = this.options;
362319
+ const zattrs = await this.dataSource.loadSpatialDataElementAttrs(path2);
362320
+ const { spatialdata_attrs: spatialDataAttrs } = zattrs;
362321
+ const { feature_key: featureKey } = spatialDataAttrs;
362322
+ const featureIndexColumnName = featureIndexColumnNameFromOptions ?? `${featureKey}_codes`;
362323
+ const [formatVersion, hasRequiredColumnsAndRowGroupSize] = await Promise.all([
362281
362324
  // Check the points format version.
362282
362325
  this.dataSource.getPointsFormatVersion(path2),
362283
- // Check for the presence of bounding_box metadata.
362284
- this.dataSource.loadSpatialDataElementAttrs(path2),
362285
362326
  // Check the size of parquet row groups,
362286
362327
  // and for the presence of morton_code_2d and feature_index columns.
362287
- this.dataSource.supportsLoadPointsInRect(path2)
362328
+ this.dataSource.supportsLoadPointsInRect(path2, featureIndexColumnName, mortonCodeColumn)
362288
362329
  ]);
362289
362330
  const isSupportedVersion = formatVersion === "0.1";
362290
362331
  const boundingBox = zattrs?.bounding_box;
@@ -362312,23 +362353,19 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
362312
362353
  };
362313
362354
  let obsIndex = null;
362314
362355
  let obsPoints = null;
362315
- const featureIndices = null;
362356
+ let featureIds = null;
362316
362357
  if (!supportsTiling) {
362317
- [obsIndex, obsPoints] = await Promise.all([
362358
+ [obsIndex, obsPoints, featureIds] = await Promise.all([
362318
362359
  this.loadObsIndex(),
362319
- this.loadPoints()
362360
+ this.loadPoints(),
362361
+ this.loadPointsFeatureIds()
362320
362362
  ]);
362321
362363
  }
362322
362364
  return new LoaderResult({
362323
- /* obsIndex: ["1"], // TEMP
362324
- obsPoints: { // TEMP
362325
- shape: [2, 1],
362326
- data: [[0], [0]],
362327
- }, */
362328
362365
  // These will be null if tiling is supported.
362329
362366
  obsIndex,
362330
362367
  obsPoints,
362331
- featureIndices,
362368
+ featureIds,
362332
362369
  obsPointsModelMatrix: modelMatrix2,
362333
362370
  // Return 'tiled' if the morton_code_2d column
362334
362371
  // and bounding_box metadata are present,
@@ -372132,7 +372169,7 @@ async function _bisectRowGroupsRight({ queryClient, store }, parquetPath, column
372132
372169
  meta: { queryClient, store }
372133
372170
  });
372134
372171
  }
372135
- async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileBbox, allPointsBbox) {
372172
+ async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileBbox, allPointsBbox, mortonCodeColumnName) {
372136
372173
  return queryClient.fetchQuery({
372137
372174
  queryKey: ["SpatialDataTableSource", "_rectToRowGroupIndices", parquetPath, tileBbox, allPointsBbox],
372138
372175
  staleTime: Infinity,
@@ -372155,8 +372192,8 @@ async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileB
372155
372192
  const [startMin, startMax] = mortonIntervals[startIndex];
372156
372193
  const [endMin, endMax] = mortonIntervals[endIndex];
372157
372194
  const [rowGroupIndexMin, rowGroupIndexMax] = await Promise.all([
372158
- _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, "morton_code_2d", startMin),
372159
- _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, "morton_code_2d", endMax)
372195
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, startMin),
372196
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, endMax)
372160
372197
  ]);
372161
372198
  if (rowGroupIndexMin === rowGroupIndexMax) {
372162
372199
  return [false, [rowGroupIndexMin]];
@@ -372178,8 +372215,8 @@ async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileB
372178
372215
  if (startIndex === endIndex) {
372179
372216
  const [intervalMin, intervalMax] = mortonIntervals[startIndex];
372180
372217
  const [rowGroupIndexMin, rowGroupIndexMax] = await Promise.all([
372181
- _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, "morton_code_2d", intervalMin),
372182
- _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, "morton_code_2d", intervalMax)
372218
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, intervalMin),
372219
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, intervalMax)
372183
372220
  ]);
372184
372221
  if (rowGroupIndexMin <= rowGroupIndexMax) {
372185
372222
  coveredRowGroupIndices = coveredRowGroupIndices.concat(range$e(rowGroupIndexMin, rowGroupIndexMax + 1));
@@ -372506,7 +372543,7 @@ class SpatialDataTableSource extends AnnDataSource {
372506
372543
  this.varAliases[varPath] = this.varAliases[varPath].map((val, ind) => val ? val.concat(` (${index2[ind]})`) : index2[ind]);
372507
372544
  return this.varAliases[varPath];
372508
372545
  }
372509
- async _supportsTiledPoints(parquetPath) {
372546
+ async _supportsTiledPoints(parquetPath, featureIndexColumnName, mortonCodeColumn) {
372510
372547
  const { queryClient } = this;
372511
372548
  const { store } = this.storeRoot;
372512
372549
  const allMetadata = await _loadParquetMetadataByPart({ queryClient, store }, parquetPath);
@@ -372518,7 +372555,8 @@ class SpatialDataTableSource extends AnnDataSource {
372518
372555
  }
372519
372556
  return false;
372520
372557
  }
372521
- const requiredColumns = ["x", "y", "feature_index", "morton_code_2d"];
372558
+ const mortonCodeColumnName = mortonCodeColumn ?? "morton_code_2d";
372559
+ const requiredColumns = ["x", "y", featureIndexColumnName, mortonCodeColumnName];
372522
372560
  const hasColumns = allMetadata?.schema?.fields?.map((f2) => f2.name);
372523
372561
  if (!hasColumns) {
372524
372562
  return false;
@@ -372537,9 +372575,10 @@ class SpatialDataTableSource extends AnnDataSource {
372537
372575
  * @param {string[]|undefined} columns An optional list of column names to load.
372538
372576
  * @returns
372539
372577
  */
372540
- async loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal) {
372578
+ async loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal, featureIndexColumnName, mortonCodeColumn) {
372541
372579
  const { queryClient } = this;
372542
372580
  const { store } = this.storeRoot;
372581
+ const mortonCodeColumnName = mortonCodeColumn ?? "morton_code_2d";
372543
372582
  const TILE_SIZE2 = 256;
372544
372583
  let tileBboxes = [];
372545
372584
  if (tileBbox.right - tileBbox.left > TILE_SIZE2 || tileBbox.bottom - tileBbox.top > TILE_SIZE2) {
@@ -372561,7 +372600,7 @@ class SpatialDataTableSource extends AnnDataSource {
372561
372600
  } else {
372562
372601
  tileBboxes = [tileBbox];
372563
372602
  }
372564
- const rowGroupIndicesPerTile = await Promise.all(tileBboxes.map(async (subTileBbox) => _rectToRowGroupIndices({ queryClient, store }, parquetPath, subTileBbox, allPointsBbox)));
372603
+ const rowGroupIndicesPerTile = await Promise.all(tileBboxes.map(async (subTileBbox) => _rectToRowGroupIndices({ queryClient, store }, parquetPath, subTileBbox, allPointsBbox, mortonCodeColumnName)));
372565
372604
  const uniqueCoveredRowGroupIndices = Array.from(new Set(rowGroupIndicesPerTile.flat())).toSorted((a2, b2) => a2 - b2);
372566
372605
  const allMetadata = await _loadParquetMetadataByPart({ queryClient, store }, parquetPath);
372567
372606
  const { numRowsPerGroup } = allMetadata;
@@ -372575,7 +372614,7 @@ class SpatialDataTableSource extends AnnDataSource {
372575
372614
  rowGroupTables.forEach((table2) => {
372576
372615
  const xColumn = table2.getChild("x");
372577
372616
  const yColumn = table2.getChild("y");
372578
- const featureIndexColumn = table2.getChild("feature_index");
372617
+ const featureIndexColumn = table2.getChild(featureIndexColumnName);
372579
372618
  if (!xColumn || !yColumn || !featureIndexColumn) {
372580
372619
  throw new Error(`Missing required column in parquet table at ${parquetPath}. Required columns: x, y, feature_index`);
372581
372620
  }
@@ -378730,11 +378769,10 @@ class SpatialDataPointsSource extends SpatialDataTableSource {
378730
378769
  async loadPoints(elementPath) {
378731
378770
  const parquetPath = getParquetPath(elementPath);
378732
378771
  const zattrs = await this.loadSpatialDataElementAttrs(elementPath);
378733
- const { axes, spatialdata_attrs: spatialDataAttrs } = zattrs;
378772
+ const { axes } = zattrs;
378734
378773
  const normAxes = normalizeAxes(axes);
378735
378774
  const axisNames = normAxes.map((axis2) => axis2.name);
378736
- const { feature_key: featureKey } = spatialDataAttrs;
378737
- const columnNames = [...axisNames, featureKey].filter(Boolean);
378775
+ const columnNames = axisNames.filter(Boolean);
378738
378776
  const arrowTable = await this.loadParquetTable(parquetPath, columnNames);
378739
378777
  const axisColumnArrs = axisNames.map((name2) => {
378740
378778
  const column2 = arrowTable.getChild(name2);
@@ -378748,6 +378786,30 @@ class SpatialDataPointsSource extends SpatialDataTableSource {
378748
378786
  data: axisColumnArrs
378749
378787
  };
378750
378788
  }
378789
+ /**
378790
+ *
378791
+ * @param {string} elementPath The path to the points element,
378792
+ * like "points/element_name".
378793
+ * @param {string|undefined} featureIndexColumnNameFromOptions The name
378794
+ * of the feature index column specified in the file definition options, if any.
378795
+ * @returns {Promise<number[]>} A promise for a zarr array containing the data.
378796
+ */
378797
+ async loadPointsFeatureIds(elementPath) {
378798
+ const parquetPath = getParquetPath(elementPath);
378799
+ const zattrs = await this.loadSpatialDataElementAttrs(elementPath);
378800
+ const { spatialdata_attrs: spatialDataAttrs } = zattrs;
378801
+ const { feature_key: featureKey } = spatialDataAttrs;
378802
+ const columnNames = [featureKey];
378803
+ const arrowTable = await this.loadParquetTable(parquetPath, columnNames);
378804
+ const axisColumnArrs = columnNames.map((name2) => {
378805
+ const column2 = arrowTable.getChild(name2);
378806
+ if (!column2) {
378807
+ throw new Error(`Column "${name2}" not found in the arrow table.`);
378808
+ }
378809
+ return column2.toArray();
378810
+ });
378811
+ return axisColumnArrs[0];
378812
+ }
378751
378813
  /**
378752
378814
  *
378753
378815
  * @param {string} elementPath
@@ -378757,23 +378819,25 @@ class SpatialDataPointsSource extends SpatialDataTableSource {
378757
378819
  * shape: [number, number],
378758
378820
  * }>} A promise for a zarr array containing the data.
378759
378821
  */
378760
- async loadPointsInRect(elementPath, tileBbox, signal) {
378822
+ async loadPointsInRect(elementPath, tileBbox, signal, featureIndexColumnNameFromOptions, mortonCodeColumn) {
378761
378823
  const parquetPath = getParquetPath(elementPath);
378762
378824
  const zattrs = await this.loadSpatialDataElementAttrs(elementPath);
378763
378825
  const {
378764
378826
  // axes,
378765
- // spatialdata_attrs: spatialDataAttrs,
378827
+ spatialdata_attrs: spatialDataAttrs,
378766
378828
  // The bounding box (extent) of all points.
378767
378829
  // Required for un-normalization from uints back to floats.
378768
378830
  // TODO: decide whether these will be stored here or somewhere else.
378769
378831
  // Reference: https://github.com/vitessce/vitessce-python/pull/476#issuecomment-3362656956
378770
378832
  bounding_box: allPointsBbox
378771
378833
  } = zattrs;
378772
- return this.loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal);
378834
+ const { feature_key: featureKey } = spatialDataAttrs;
378835
+ const featureIndexColumnName = featureIndexColumnNameFromOptions ?? `${featureKey}_codes`;
378836
+ return this.loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal, featureIndexColumnName, mortonCodeColumn);
378773
378837
  }
378774
- async supportsLoadPointsInRect(elementPath) {
378838
+ async supportsLoadPointsInRect(elementPath, featureIndexColumnName, mortonCodeColumn) {
378775
378839
  const parquetPath = getParquetPath(elementPath);
378776
- return this._supportsTiledPoints(parquetPath);
378840
+ return this._supportsTiledPoints(parquetPath, featureIndexColumnName, mortonCodeColumn);
378777
378841
  }
378778
378842
  }
378779
378843
  class OmeTiffSource {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { bN, bM } from "./index-BCLXgocP.js";
1
+ import { bN, bM } from "./index-kqgO-sn-.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-BCLXgocP.js";
1
+ import { aX as BaseDecoder } from "./index-kqgO-sn-.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-BCLXgocP.js";
2
+ import { aG as getDefaultExportFromCjs, aX as BaseDecoder, aY as LercParameters, aZ as LercAddCompression } from "./index-kqgO-sn-.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-BCLXgocP.js";
1
+ import { aX as BaseDecoder } from "./index-kqgO-sn-.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-BCLXgocP.js";
1
+ import { aX as BaseDecoder } from "./index-kqgO-sn-.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-BCLXgocP.js";
1
+ import { aX as BaseDecoder } from "./index-kqgO-sn-.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-BCLXgocP.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-kqgO-sn-.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-BCLXgocP.js";
1
+ import { aX as BaseDecoder } from "./index-kqgO-sn-.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.0",
3
+ "version": "3.9.2",
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.0",
24
- "@vitessce/example-plugins": "3.9.0",
25
- "@vitessce/constants-internal": "3.9.0",
26
- "@vitessce/globals": "3.9.0",
27
- "@vitessce/styles": "3.9.0",
28
- "@vitessce/config": "3.9.0",
29
- "@vitessce/vit-s": "3.9.0",
30
- "@vitessce/example-configs": "3.9.0"
23
+ "@vitessce/constants-internal": "3.9.2",
24
+ "@vitessce/example-plugins": "3.9.2",
25
+ "@vitessce/example-configs": "3.9.2",
26
+ "@vitessce/styles": "3.9.2",
27
+ "@vitessce/globals": "3.9.2",
28
+ "@vitessce/vit-s": "3.9.2",
29
+ "@vitessce/config": "3.9.2",
30
+ "@vitessce/all": "3.9.2"
31
31
  },
32
32
  "devDependencies": {
33
33
  "react": "18.3.1",