@vitessce/launcher 3.9.0 → 3.9.1

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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.js";
5
5
  var promise = {};
6
6
  var hasRequiredPromise;
7
7
  function requirePromise() {
@@ -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-eLeCPCoI.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-BtkbJnAk.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(),
@@ -210608,22 +210610,22 @@ async function getDecoder(fileDirectory) {
210608
210610
  const Decoder = await importFn();
210609
210611
  return new Decoder(fileDirectory);
210610
210612
  }
210611
- addDecoder([void 0, 1], () => import("./raw-C2Cyu7qH.js").then((m2) => m2.default));
210612
- addDecoder(5, () => import("./lzw-DLRhyzmK.js").then((m2) => m2.default));
210613
+ addDecoder([void 0, 1], () => import("./raw-D1HlNbuO.js").then((m2) => m2.default));
210614
+ addDecoder(5, () => import("./lzw-ietT45zT.js").then((m2) => m2.default));
210613
210615
  addDecoder(6, () => {
210614
210616
  throw new Error("old style JPEG compression is not supported.");
210615
210617
  });
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));
210618
+ addDecoder(7, () => import("./jpeg-CBEb4Wla.js").then((m2) => m2.default));
210619
+ addDecoder([8, 32946], () => import("./deflate-ZIe3Ahsx.js").then((m2) => m2.default));
210620
+ addDecoder(32773, () => import("./packbits-BDNd8psk.js").then((m2) => m2.default));
210619
210621
  addDecoder(
210620
210622
  34887,
210621
- () => import("./lerc-BnXkSVBK.js").then(async (m2) => {
210623
+ () => import("./lerc-Cb0ZS1W3.js").then(async (m2) => {
210622
210624
  await m2.zstd.init();
210623
210625
  return m2;
210624
210626
  }).then((m2) => m2.default)
210625
210627
  );
210626
- addDecoder(50001, () => import("./webimage-BUMl9PKo.js").then((m2) => m2.default));
210628
+ addDecoder(50001, () => import("./webimage-DSebXv_d.js").then((m2) => m2.default));
210627
210629
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
210628
210630
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
210629
210631
  }
@@ -255090,12 +255092,12 @@ class ErrorBoundary extends React__default.Component {
255090
255092
  }
255091
255093
  }
255092
255094
  const LazySpatialThree = React__default.lazy(async () => {
255093
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-C1eGTlSq.js");
255095
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-qB8yVLMX.js");
255094
255096
  return { default: SpatialWrapper2 };
255095
255097
  });
255096
255098
  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
255099
  const LazySpatialAccelerated = React__default.lazy(async () => {
255098
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DHvGxl1H.js");
255100
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CqOEyAUT.js");
255099
255101
  return { default: SpatialWrapper2 };
255100
255102
  });
255101
255103
  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 +270052,7 @@ function HiglassGlobalStyles(props) {
270050
270052
  }
270051
270053
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
270052
270054
  const LazyHiGlassComponent = React__default.lazy(async () => {
270053
- const { HiGlassComponent } = await import("./higlass-Baa_gFVD.js");
270055
+ const { HiGlassComponent } = await import("./higlass-_elX6XYK.js");
270054
270056
  return { default: HiGlassComponent };
270055
270057
  });
270056
270058
  const HG_SIZE = 800;
@@ -272997,7 +272999,7 @@ function NeuroglancerGlobalStyles(props) {
272997
272999
  const { classes: classes2 } = props;
272998
273000
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
272999
273001
  }
273000
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BfXvm92G.js"));
273002
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-DDBFlWFo.js"));
273001
273003
  function createWorker() {
273002
273004
  return new WorkerFactory();
273003
273005
  }
@@ -362238,14 +362240,14 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
362238
362240
  * @returns {Promise} A promise for an array of columns.
362239
362241
  */
362240
362242
  async loadPoints() {
362241
- const { path: path2 } = this.options;
362243
+ const { path: path2, featureIndexColumn } = this.options;
362242
362244
  if (this.locations) {
362243
362245
  return this.locations;
362244
362246
  }
362245
362247
  let locations;
362246
362248
  const formatVersion = await this.dataSource.getPointsFormatVersion(path2);
362247
362249
  if (formatVersion === "0.1") {
362248
- locations = await this.dataSource.loadPoints(path2);
362250
+ locations = await this.dataSource.loadPoints(path2, featureIndexColumn);
362249
362251
  } else {
362250
362252
  throw new UnknownSpatialDataFormatError("Only points format version 0.1 is supported.");
362251
362253
  }
@@ -362253,11 +362255,11 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
362253
362255
  return this.locations;
362254
362256
  }
362255
362257
  async loadPointsInRect(bounds2, signal) {
362256
- const { path: path2 } = this.options;
362258
+ const { path: path2, featureIndexColumn, mortonCodeColumn } = this.options;
362257
362259
  let locations;
362258
362260
  const formatVersion = await this.dataSource.getPointsFormatVersion(path2);
362259
362261
  if (formatVersion === "0.1") {
362260
- locations = await this.dataSource.loadPointsInRect(path2, bounds2, signal);
362262
+ locations = await this.dataSource.loadPointsInRect(path2, bounds2, signal, featureIndexColumn, mortonCodeColumn);
362261
362263
  } else {
362262
362264
  throw new UnknownSpatialDataFormatError("Only points format version 0.1 is supported.");
362263
362265
  }
@@ -362276,15 +362278,17 @@ class SpatialDataObsPointsLoader extends AbstractTwoStepLoader {
362276
362278
  return null;
362277
362279
  }
362278
362280
  async supportsTiling() {
362279
- const { path: path2 } = this.options;
362280
- const [formatVersion, zattrs, hasRequiredColumnsAndRowGroupSize] = await Promise.all([
362281
+ const { path: path2, featureIndexColumn: featureIndexColumnNameFromOptions, mortonCodeColumn } = this.options;
362282
+ const zattrs = await this.dataSource.loadSpatialDataElementAttrs(path2);
362283
+ const { spatialdata_attrs: spatialDataAttrs } = zattrs;
362284
+ const { feature_key: featureKey } = spatialDataAttrs;
362285
+ const featureIndexColumnName = featureIndexColumnNameFromOptions ?? `${featureKey}_codes`;
362286
+ const [formatVersion, hasRequiredColumnsAndRowGroupSize] = await Promise.all([
362281
362287
  // Check the points format version.
362282
362288
  this.dataSource.getPointsFormatVersion(path2),
362283
- // Check for the presence of bounding_box metadata.
362284
- this.dataSource.loadSpatialDataElementAttrs(path2),
362285
362289
  // Check the size of parquet row groups,
362286
362290
  // and for the presence of morton_code_2d and feature_index columns.
362287
- this.dataSource.supportsLoadPointsInRect(path2)
362291
+ this.dataSource.supportsLoadPointsInRect(path2, featureIndexColumnName, mortonCodeColumn)
362288
362292
  ]);
362289
362293
  const isSupportedVersion = formatVersion === "0.1";
362290
362294
  const boundingBox = zattrs?.bounding_box;
@@ -372132,7 +372136,7 @@ async function _bisectRowGroupsRight({ queryClient, store }, parquetPath, column
372132
372136
  meta: { queryClient, store }
372133
372137
  });
372134
372138
  }
372135
- async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileBbox, allPointsBbox) {
372139
+ async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileBbox, allPointsBbox, mortonCodeColumnName) {
372136
372140
  return queryClient.fetchQuery({
372137
372141
  queryKey: ["SpatialDataTableSource", "_rectToRowGroupIndices", parquetPath, tileBbox, allPointsBbox],
372138
372142
  staleTime: Infinity,
@@ -372155,8 +372159,8 @@ async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileB
372155
372159
  const [startMin, startMax] = mortonIntervals[startIndex];
372156
372160
  const [endMin, endMax] = mortonIntervals[endIndex];
372157
372161
  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)
372162
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, startMin),
372163
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, endMax)
372160
372164
  ]);
372161
372165
  if (rowGroupIndexMin === rowGroupIndexMax) {
372162
372166
  return [false, [rowGroupIndexMin]];
@@ -372178,8 +372182,8 @@ async function _rectToRowGroupIndices({ queryClient, store }, parquetPath, tileB
372178
372182
  if (startIndex === endIndex) {
372179
372183
  const [intervalMin, intervalMax] = mortonIntervals[startIndex];
372180
372184
  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)
372185
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, intervalMin),
372186
+ _bisectRowGroupsRight({ queryClient: queryClient2, store: store2 }, parquetPath, mortonCodeColumnName, intervalMax)
372183
372187
  ]);
372184
372188
  if (rowGroupIndexMin <= rowGroupIndexMax) {
372185
372189
  coveredRowGroupIndices = coveredRowGroupIndices.concat(range$e(rowGroupIndexMin, rowGroupIndexMax + 1));
@@ -372506,7 +372510,7 @@ class SpatialDataTableSource extends AnnDataSource {
372506
372510
  this.varAliases[varPath] = this.varAliases[varPath].map((val, ind) => val ? val.concat(` (${index2[ind]})`) : index2[ind]);
372507
372511
  return this.varAliases[varPath];
372508
372512
  }
372509
- async _supportsTiledPoints(parquetPath) {
372513
+ async _supportsTiledPoints(parquetPath, featureIndexColumnName, mortonCodeColumn) {
372510
372514
  const { queryClient } = this;
372511
372515
  const { store } = this.storeRoot;
372512
372516
  const allMetadata = await _loadParquetMetadataByPart({ queryClient, store }, parquetPath);
@@ -372518,7 +372522,8 @@ class SpatialDataTableSource extends AnnDataSource {
372518
372522
  }
372519
372523
  return false;
372520
372524
  }
372521
- const requiredColumns = ["x", "y", "feature_index", "morton_code_2d"];
372525
+ const mortonCodeColumnName = mortonCodeColumn ?? "morton_code_2d";
372526
+ const requiredColumns = ["x", "y", featureIndexColumnName, mortonCodeColumnName];
372522
372527
  const hasColumns = allMetadata?.schema?.fields?.map((f2) => f2.name);
372523
372528
  if (!hasColumns) {
372524
372529
  return false;
@@ -372537,9 +372542,10 @@ class SpatialDataTableSource extends AnnDataSource {
372537
372542
  * @param {string[]|undefined} columns An optional list of column names to load.
372538
372543
  * @returns
372539
372544
  */
372540
- async loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal) {
372545
+ async loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal, featureIndexColumnName, mortonCodeColumn) {
372541
372546
  const { queryClient } = this;
372542
372547
  const { store } = this.storeRoot;
372548
+ const mortonCodeColumnName = mortonCodeColumn ?? "morton_code_2d";
372543
372549
  const TILE_SIZE2 = 256;
372544
372550
  let tileBboxes = [];
372545
372551
  if (tileBbox.right - tileBbox.left > TILE_SIZE2 || tileBbox.bottom - tileBbox.top > TILE_SIZE2) {
@@ -372561,7 +372567,7 @@ class SpatialDataTableSource extends AnnDataSource {
372561
372567
  } else {
372562
372568
  tileBboxes = [tileBbox];
372563
372569
  }
372564
- const rowGroupIndicesPerTile = await Promise.all(tileBboxes.map(async (subTileBbox) => _rectToRowGroupIndices({ queryClient, store }, parquetPath, subTileBbox, allPointsBbox)));
372570
+ const rowGroupIndicesPerTile = await Promise.all(tileBboxes.map(async (subTileBbox) => _rectToRowGroupIndices({ queryClient, store }, parquetPath, subTileBbox, allPointsBbox, mortonCodeColumnName)));
372565
372571
  const uniqueCoveredRowGroupIndices = Array.from(new Set(rowGroupIndicesPerTile.flat())).toSorted((a2, b2) => a2 - b2);
372566
372572
  const allMetadata = await _loadParquetMetadataByPart({ queryClient, store }, parquetPath);
372567
372573
  const { numRowsPerGroup } = allMetadata;
@@ -372575,7 +372581,7 @@ class SpatialDataTableSource extends AnnDataSource {
372575
372581
  rowGroupTables.forEach((table2) => {
372576
372582
  const xColumn = table2.getChild("x");
372577
372583
  const yColumn = table2.getChild("y");
372578
- const featureIndexColumn = table2.getChild("feature_index");
372584
+ const featureIndexColumn = table2.getChild(featureIndexColumnName);
372579
372585
  if (!xColumn || !yColumn || !featureIndexColumn) {
372580
372586
  throw new Error(`Missing required column in parquet table at ${parquetPath}. Required columns: x, y, feature_index`);
372581
372587
  }
@@ -378727,7 +378733,7 @@ class SpatialDataPointsSource extends SpatialDataTableSource {
378727
378733
  * shape: [number, number],
378728
378734
  * }>} A promise for a zarr array containing the data.
378729
378735
  */
378730
- async loadPoints(elementPath) {
378736
+ async loadPoints(elementPath, featureIndexColumnNameFromOptions) {
378731
378737
  const parquetPath = getParquetPath(elementPath);
378732
378738
  const zattrs = await this.loadSpatialDataElementAttrs(elementPath);
378733
378739
  const { axes, spatialdata_attrs: spatialDataAttrs } = zattrs;
@@ -378757,23 +378763,25 @@ class SpatialDataPointsSource extends SpatialDataTableSource {
378757
378763
  * shape: [number, number],
378758
378764
  * }>} A promise for a zarr array containing the data.
378759
378765
  */
378760
- async loadPointsInRect(elementPath, tileBbox, signal) {
378766
+ async loadPointsInRect(elementPath, tileBbox, signal, featureIndexColumnNameFromOptions, mortonCodeColumn) {
378761
378767
  const parquetPath = getParquetPath(elementPath);
378762
378768
  const zattrs = await this.loadSpatialDataElementAttrs(elementPath);
378763
378769
  const {
378764
378770
  // axes,
378765
- // spatialdata_attrs: spatialDataAttrs,
378771
+ spatialdata_attrs: spatialDataAttrs,
378766
378772
  // The bounding box (extent) of all points.
378767
378773
  // Required for un-normalization from uints back to floats.
378768
378774
  // TODO: decide whether these will be stored here or somewhere else.
378769
378775
  // Reference: https://github.com/vitessce/vitessce-python/pull/476#issuecomment-3362656956
378770
378776
  bounding_box: allPointsBbox
378771
378777
  } = zattrs;
378772
- return this.loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal);
378778
+ const { feature_key: featureKey } = spatialDataAttrs;
378779
+ const featureIndexColumnName = featureIndexColumnNameFromOptions ?? `${featureKey}_codes`;
378780
+ return this.loadParquetTableInRect(parquetPath, tileBbox, allPointsBbox, signal, featureIndexColumnName, mortonCodeColumn);
378773
378781
  }
378774
- async supportsLoadPointsInRect(elementPath) {
378782
+ async supportsLoadPointsInRect(elementPath, featureIndexColumnName, mortonCodeColumn) {
378775
378783
  const parquetPath = getParquetPath(elementPath);
378776
- return this._supportsTiledPoints(parquetPath);
378784
+ return this._supportsTiledPoints(parquetPath, featureIndexColumnName, mortonCodeColumn);
378777
378785
  }
378778
378786
  }
378779
378787
  class OmeTiffSource {
@@ -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-eLeCPCoI.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-BtkbJnAk.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-r2x4vDIr.js"), []);
5031
5031
  const invalidate = useThree(({
5032
5032
  invalidate: invalidate2
5033
5033
  }) => invalidate2);
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { bN, bM } from "./index-BCLXgocP.js";
1
+ import { bN, bM } from "./index-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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-eLeCPCoI.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.1",
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.1",
24
+ "@vitessce/all": "3.9.1",
25
+ "@vitessce/example-configs": "3.9.1",
26
+ "@vitessce/example-plugins": "3.9.1",
27
+ "@vitessce/styles": "3.9.1",
28
+ "@vitessce/globals": "3.9.1",
29
+ "@vitessce/vit-s": "3.9.1",
30
+ "@vitessce/config": "3.9.1"
31
31
  },
32
32
  "devDependencies": {
33
33
  "react": "18.3.1",