@vitessce/all 3.7.1 → 3.8.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.
@@ -8963,6 +8963,7 @@ const ViewType$1 = {
8963
8963
  SCATTERPLOT: "scatterplot",
8964
8964
  SPATIAL: "spatial",
8965
8965
  SPATIAL_BETA: "spatialBeta",
8966
+ // SPATIAL_ACCELERATED: 'spatialAccelerated',
8966
8967
  HEATMAP: "heatmap",
8967
8968
  LAYER_CONTROLLER: "layerController",
8968
8969
  LAYER_CONTROLLER_BETA: "layerControllerBeta",
@@ -9266,6 +9267,8 @@ const CoordinationType$1 = {
9266
9267
  // Could be per-image-layer
9267
9268
  SPATIAL_TARGET_RESOLUTION: "spatialTargetResolution",
9268
9269
  // Per-spatial-layer
9270
+ SPATIAL_MAX_RESOLUTION: "spatialMaxResolution",
9271
+ // Per-image-channel (for spatial-accelerated)
9269
9272
  // For clipping plane sliders
9270
9273
  SPATIAL_SLICE_X: "spatialSliceX",
9271
9274
  SPATIAL_SLICE_Y: "spatialSliceY",
@@ -9841,6 +9844,7 @@ const COMPONENT_COORDINATION_TYPES = {
9841
9844
  CoordinationType$1.SPATIAL_RENDERING_MODE,
9842
9845
  CoordinationType$1.VOLUMETRIC_RENDERING_ALGORITHM,
9843
9846
  CoordinationType$1.SPATIAL_TARGET_RESOLUTION,
9847
+ CoordinationType$1.SPATIAL_MAX_RESOLUTION,
9844
9848
  CoordinationType$1.SPATIAL_SLICE_X,
9845
9849
  CoordinationType$1.SPATIAL_SLICE_Y,
9846
9850
  CoordinationType$1.SPATIAL_SLICE_Z,
@@ -10014,6 +10018,7 @@ const COMPONENT_COORDINATION_TYPES = {
10014
10018
  CoordinationType$1.SPATIAL_RENDERING_MODE,
10015
10019
  CoordinationType$1.VOLUMETRIC_RENDERING_ALGORITHM,
10016
10020
  CoordinationType$1.SPATIAL_TARGET_RESOLUTION,
10021
+ CoordinationType$1.SPATIAL_MAX_RESOLUTION,
10017
10022
  CoordinationType$1.SPATIAL_SLICE_X,
10018
10023
  CoordinationType$1.SPATIAL_SLICE_Y,
10019
10024
  CoordinationType$1.SPATIAL_SLICE_Z,
@@ -209298,22 +209303,22 @@ async function getDecoder(fileDirectory) {
209298
209303
  const Decoder = await importFn();
209299
209304
  return new Decoder(fileDirectory);
209300
209305
  }
209301
- addDecoder([void 0, 1], () => import("./raw-Day99mnL.js").then((m2) => m2.default));
209302
- addDecoder(5, () => import("./lzw-CR9bmrUA.js").then((m2) => m2.default));
209306
+ addDecoder([void 0, 1], () => import("./raw-AeiJCa5u.js").then((m2) => m2.default));
209307
+ addDecoder(5, () => import("./lzw-C7bIlAE9.js").then((m2) => m2.default));
209303
209308
  addDecoder(6, () => {
209304
209309
  throw new Error("old style JPEG compression is not supported.");
209305
209310
  });
209306
- addDecoder(7, () => import("./jpeg-23ExE8ad.js").then((m2) => m2.default));
209307
- addDecoder([8, 32946], () => import("./deflate-D7qntYPm.js").then((m2) => m2.default));
209308
- addDecoder(32773, () => import("./packbits-yEwcRYhH.js").then((m2) => m2.default));
209311
+ addDecoder(7, () => import("./jpeg-D1F3JoMr.js").then((m2) => m2.default));
209312
+ addDecoder([8, 32946], () => import("./deflate-CiJW6nDN.js").then((m2) => m2.default));
209313
+ addDecoder(32773, () => import("./packbits-B0NoJqXw.js").then((m2) => m2.default));
209309
209314
  addDecoder(
209310
209315
  34887,
209311
- () => import("./lerc-BPNFjya5.js").then(async (m2) => {
209316
+ () => import("./lerc-BjYwawxE.js").then(async (m2) => {
209312
209317
  await m2.zstd.init();
209313
209318
  return m2;
209314
209319
  }).then((m2) => m2.default)
209315
209320
  );
209316
- addDecoder(50001, () => import("./webimage-CmvCEz7r.js").then((m2) => m2.default));
209321
+ addDecoder(50001, () => import("./webimage-CrFV1v2P.js").then((m2) => m2.default));
209317
209322
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
209318
209323
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
209319
209324
  }
@@ -226155,13 +226160,13 @@ function IconButton(props) {
226155
226160
  function ToolMenu(props) {
226156
226161
  const pointerIconAltText = "Pointer tool";
226157
226162
  const lassoIconAltText = "Select lasso";
226158
- const { setActiveTool, activeTool, visibleTools = { pan: true, selectLasso: true }, recenterOnClick = () => {
226163
+ const { setActiveTool, activeTool, visibleTools = { pan: true, selectLasso: true, recenter: true }, recenterOnClick = () => {
226159
226164
  } } = props;
226160
226165
  const { classes: classes2 } = useStyles$s();
226161
226166
  const onRecenterButtonCLick = () => {
226162
226167
  recenterOnClick();
226163
226168
  };
226164
- return jsxRuntimeExports.jsxs("div", { className: classes2.tool, children: [visibleTools.pan && jsxRuntimeExports.jsx(IconTool, { alt: pointerIconAltText, onClick: () => setActiveTool(null), isActive: activeTool === null, children: jsxRuntimeExports.jsx(SvgNearMe, {}) }), visibleTools.selectLasso ? jsxRuntimeExports.jsx(IconTool, { alt: lassoIconAltText, onClick: () => setActiveTool(distEs6Exports$2.SELECTION_TYPE.POLYGON), isActive: activeTool === distEs6Exports$2.SELECTION_TYPE.POLYGON, children: jsxRuntimeExports.jsx(SvgSelectionLasso, {}) }) : null, jsxRuntimeExports.jsx(IconButton, { alt: "click to recenter", onClick: () => onRecenterButtonCLick(), "aria-label": "Recenter scatterplot view", children: jsxRuntimeExports.jsx(CenterFocusStrong, {}) })] });
226169
+ return jsxRuntimeExports.jsxs("div", { className: classes2.tool, children: [visibleTools.pan && jsxRuntimeExports.jsx(IconTool, { alt: pointerIconAltText, onClick: () => setActiveTool(null), isActive: activeTool === null, children: jsxRuntimeExports.jsx(SvgNearMe, {}) }), visibleTools.selectLasso ? jsxRuntimeExports.jsx(IconTool, { alt: lassoIconAltText, onClick: () => setActiveTool(distEs6Exports$2.SELECTION_TYPE.POLYGON), isActive: activeTool === distEs6Exports$2.SELECTION_TYPE.POLYGON, children: jsxRuntimeExports.jsx(SvgSelectionLasso, {}) }) : null, visibleTools.recenter ? jsxRuntimeExports.jsx(IconButton, { alt: "click to recenter", onClick: () => onRecenterButtonCLick(), "aria-label": "Recenter scatterplot view", children: jsxRuntimeExports.jsx(CenterFocusStrong, {}) }) : null] });
226165
226170
  }
226166
226171
  const getCursorWithTool = () => "crosshair";
226167
226172
  const getCursor = (interactionState) => interactionState.isDragging ? "grabbing" : "default";
@@ -226395,7 +226400,7 @@ class AbstractSpatialOrScatterplot extends PureComponent {
226395
226400
  * and Scatterplot components.
226396
226401
  */
226397
226402
  render() {
226398
- const { deckRef, viewState, uuid: uuid2, hideTools, orbitAxis } = this.props;
226403
+ const { deckRef, viewState, uuid: uuid2, hideTools, hideRecenter, orbitAxis } = this.props;
226399
226404
  const { gl, tool } = this.state;
226400
226405
  const layers = this.getLayers();
226401
226406
  const use3d = this.use3d();
@@ -226404,7 +226409,8 @@ class AbstractSpatialOrScatterplot extends PureComponent {
226404
226409
  const useDevicePixels = !use3d && (this.obsSegmentationsData?.shape?.[0] < 1e5 || this.obsLocationsData?.shape?.[1] < 1e5);
226405
226410
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(ToolMenu, { activeTool: tool, setActiveTool: this.onToolChange, visibleTools: {
226406
226411
  pan: showPanTool && !hideTools,
226407
- selectLasso: showCellSelectionTools && !hideTools
226412
+ selectLasso: showCellSelectionTools && !hideTools,
226413
+ recenter: !hideRecenter
226408
226414
  }, recenterOnClick: this.recenter }), jsxRuntimeExports.jsx(DeckGL, { id: `deckgl-overlay-${uuid2}`, ref: deckRef, views: [
226409
226415
  use3d ? new OrbitView({ id: "orbit", controller: true, orbitAxis }) : new OrthographicView({
226410
226416
  id: "ortho"
@@ -227439,11 +227445,11 @@ function TooltipContent(props) {
227439
227445
  return jsxRuntimeExports.jsx("table", { children: jsxRuntimeExports.jsx("tbody", { children: Object.entries(mappedInfo).map(([key2, value2]) => jsxRuntimeExports.jsxs("tr", { children: [jsxRuntimeExports.jsx("th", { children: key2 }), jsxRuntimeExports.jsx("td", { children: value2 })] }, key2)) }) });
227440
227446
  }
227441
227447
  function ScatterplotTooltipSubscriber(props) {
227442
- const { parentUuid, obsHighlight, width: width2, height: height2, getObsInfo: getObsInfo2, featureType, featureLabelsMap } = props;
227448
+ const { parentUuid, obsHighlight, width: width2, height: height2, getObsInfo, featureType, featureLabelsMap } = props;
227443
227449
  const sourceUuid = useComponentHover();
227444
227450
  const viewInfo = useComponentViewInfo(parentUuid);
227445
- const [cellInfo, x2, y2] = obsHighlight && getObsInfo2 ? [
227446
- getObsInfo2(obsHighlight),
227451
+ const [cellInfo, x2, y2] = obsHighlight && getObsInfo ? [
227452
+ getObsInfo(obsHighlight),
227447
227453
  ...viewInfo && viewInfo.projectFromId ? viewInfo.projectFromId(obsHighlight) : [null, null]
227448
227454
  ] : [null, null, null];
227449
227455
  return cellInfo ? jsxRuntimeExports.jsx(Tooltip2D, { x: x2, y: y2, parentUuid, sourceUuid, parentWidth: width2, parentHeight: height2, children: jsxRuntimeExports.jsx(TooltipContent, { info: cellInfo, featureType, featureLabelsMap }) }) : null;
@@ -231853,7 +231859,7 @@ function EmbeddingScatterplotSubscriber(props) {
231853
231859
  initialTargetY,
231854
231860
  averageFillDensity
231855
231861
  ]);
231856
- const getObsInfo2 = useGetObsInfo(observationsLabel, obsLabelsTypes, obsLabelsData, obsSetsMembership);
231862
+ const getObsInfo = useGetObsInfo(observationsLabel, obsLabelsTypes, obsLabelsData, obsSetsMembership);
231857
231863
  const cellSelectionSet = useMemo$1(() => new Set(cellSelection), [cellSelection]);
231858
231864
  const getCellIsSelected = useCallback((object2, { index: index2 }) => (cellSelectionSet || /* @__PURE__ */ new Set([])).has(obsEmbeddingIndex[index2]) ? 1 : 0, [cellSelectionSet, obsEmbeddingIndex]);
231859
231865
  const cellRadius = cellRadiusMode === "manual" ? cellRadiusFixed : dynamicCellRadius;
@@ -232010,7 +232016,7 @@ function EmbeddingScatterplotSubscriber(props) {
232010
232016
  embeddingContoursVisible,
232011
232017
  circleInfo,
232012
232018
  featureSelection: geneSelection
232013
- }), tooltipsVisible && width2 && height2 ? jsxRuntimeExports.jsx(ScatterplotTooltipSubscriber, { parentUuid: uuid2, obsHighlight: cellHighlight, width: width2, height: height2, getObsInfo: getObsInfo2, featureType, featureLabelsMap }) : null, jsxRuntimeExports.jsx(Legend, {
232019
+ }), tooltipsVisible && width2 && height2 ? jsxRuntimeExports.jsx(ScatterplotTooltipSubscriber, { parentUuid: uuid2, obsHighlight: cellHighlight, width: width2, height: height2, getObsInfo, featureType, featureLabelsMap }) : null, jsxRuntimeExports.jsx(Legend, {
232014
232020
  visible: true,
232015
232021
  theme,
232016
232022
  featureType,
@@ -232044,21 +232050,14 @@ function DualEmbeddingScatterplotSubscriber(props) {
232044
232050
  function GatingScatterplotOptions(props) {
232045
232051
  const { featureType, gatingFeatureSelectionX, setGatingFeatureSelectionX, gatingFeatureSelectionY, setGatingFeatureSelectionY, gatingFeatureValueTransform, setGatingFeatureValueTransform, gatingFeatureValueTransformCoefficient, setGatingFeatureValueTransformCoefficient, geneSelectOptions, transformOptions } = props;
232046
232052
  const gatingScatterplotOptionsId = $bdb11010cef70236$export$f680877a34711e37();
232053
+ const gatingScatterplotGeneXId = $bdb11010cef70236$export$f680877a34711e37();
232054
+ const gatingScatterplotGeneYId = $bdb11010cef70236$export$f680877a34711e37();
232047
232055
  const { classes: classes2 } = usePlotOptionsStyles();
232048
- const handleGeneSelectChange = (event2) => {
232049
- const { options } = event2.target;
232050
- const newValues = [];
232051
- for (let i2 = 0, l2 = options.length; i2 < l2; i2 += 1) {
232052
- if (options[i2].selected) {
232053
- newValues.push(options[i2].value);
232054
- }
232055
- }
232056
- if (newValues.length === 1 && gatingFeatureSelectionX && !gatingFeatureSelectionY && newValues[0] !== gatingFeatureSelectionX) {
232057
- setGatingFeatureSelectionY(newValues[0]);
232058
- } else if (newValues.length <= 2) {
232059
- setGatingFeatureSelectionX(newValues[0]);
232060
- setGatingFeatureSelectionY(newValues[1]);
232061
- }
232056
+ const handleSelectionX = (event2) => {
232057
+ setGatingFeatureSelectionX(event2.target.value === "" ? null : event2.target.value);
232058
+ };
232059
+ const handleSelectionY = (event2) => {
232060
+ setGatingFeatureSelectionY(event2.target.value === "" ? null : event2.target.value);
232062
232061
  };
232063
232062
  const handleTransformChange = (event2) => {
232064
232063
  setGatingFeatureValueTransform(event2.target.value === "" ? null : event2.target.value);
@@ -232074,11 +232073,13 @@ function GatingScatterplotOptions(props) {
232074
232073
  }
232075
232074
  }
232076
232075
  };
232077
- return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `scatterplot-gating-gene-select-${gatingScatterplotOptionsId}`, children: capitalize$3(pluralize(featureType, geneSelectOptions?.length)) }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsx(OptionSelect, { multiple: true, className: classes2.select, value: [gatingFeatureSelectionX, gatingFeatureSelectionY].filter((v) => v), onChange: handleGeneSelectChange, inputProps: {
232078
- id: `scatterplot-gating-gene-select-${gatingScatterplotOptionsId}`
232079
- }, children: geneSelectOptions.map((name2) => jsxRuntimeExports.jsx("option", { value: name2, children: name2 }, name2)) }) })] }), jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `scatterplot-gating-transform-select-${gatingScatterplotOptionsId}`, children: "Transform" }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsx(OptionSelect, { className: classes2.select, value: gatingFeatureValueTransform === null ? "" : gatingFeatureValueTransform, onChange: handleTransformChange, inputProps: {
232076
+ return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsxs("label", { htmlFor: `scatterplot-gating-gene-select-${gatingScatterplotGeneXId}`, children: [capitalize$3(featureType), " along X"] }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsxs(OptionSelect, { className: classes2.select, value: gatingFeatureSelectionX ?? "", onChange: handleSelectionX, inputProps: {
232077
+ id: `scatterplot-gating-gene-select-${gatingScatterplotGeneXId}`
232078
+ }, children: [jsxRuntimeExports.jsx("option", { value: "", children: "None" }), geneSelectOptions.map((name2) => jsxRuntimeExports.jsx("option", { value: name2, children: name2 }, name2))] }) })] }), jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsxs("label", { htmlFor: `scatterplot-gating-gene-select-${gatingScatterplotGeneYId}`, children: [capitalize$3(featureType), " along Y"] }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsxs(OptionSelect, { className: classes2.select, value: gatingFeatureSelectionY ?? "", onChange: handleSelectionY, inputProps: {
232079
+ id: `scatterplot-gating-gene-select-${gatingScatterplotGeneYId}`
232080
+ }, children: [jsxRuntimeExports.jsx("option", { value: "", children: "None" }), geneSelectOptions.map((name2) => jsxRuntimeExports.jsx("option", { value: name2, children: name2 }, name2))] }) })] }), jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `scatterplot-gating-transform-select-${gatingScatterplotOptionsId}`, children: "Transform" }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsx(OptionSelect, { className: classes2.select, value: gatingFeatureValueTransform === null ? "" : gatingFeatureValueTransform, onChange: handleTransformChange, inputProps: {
232080
232081
  id: `scatterplot-gating-transform-select-${gatingScatterplotOptionsId}`
232081
- }, children: transformOptions.map((opt) => jsxRuntimeExports.jsx("option", { value: opt.value === null ? "" : opt.value, children: opt.name }, opt.name)) }) })] }), jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `scatterplot-gating-transform-coefficient-${gatingScatterplotOptionsId}`, children: "Transform Coefficient" }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsx(TextField, { label: "Transform Coefficient", type: "number", onChange: handleTransformCoefficientChange, value: gatingFeatureValueTransformCoefficient, slotProps: { input: { shrink: true } }, id: `scatterplot-gating-transform-coefficient-${gatingScatterplotOptionsId}` }) })] })] });
232082
+ }, children: transformOptions.map((opt) => jsxRuntimeExports.jsx("option", { value: opt.value === null ? "" : opt.value, children: opt.name }, opt.name)) }) })] }), jsxRuntimeExports.jsxs(TableRow, { children: [jsxRuntimeExports.jsx(TableCell, { className: classes2.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `scatterplot-gating-transform-coefficient-${gatingScatterplotOptionsId}`, children: "Transform Coefficient" }) }), jsxRuntimeExports.jsx(TableCell, { className: classes2.inputCell, variant: "body", children: jsxRuntimeExports.jsx(TextField, { label: "Transform Coefficient", type: "number", onChange: handleTransformCoefficientChange, value: gatingFeatureValueTransformCoefficient, slotProps: { inputLabel: { shrink: true } }, id: `scatterplot-gating-transform-coefficient-${gatingScatterplotOptionsId}` }) })] })] });
232082
232083
  }
232083
232084
  function GatingSubscriber(props) {
232084
232085
  const {
@@ -232099,6 +232100,7 @@ function GatingSubscriber(props) {
232099
232100
  const setComponentHover = useSetComponentHover();
232100
232101
  const setComponentViewInfo = useSetComponentViewInfo(uuid2);
232101
232102
  const [{ dataset, obsType, featureType, featureValueType, embeddingZoom: zoom2, embeddingTargetX: targetX2, embeddingTargetY: targetY2, embeddingTargetZ: targetZ, obsFilter: cellFilter, obsHighlight: cellHighlight, obsSetSelection: cellSetSelection, obsSetColor: cellSetColor, obsColorEncoding: cellColorEncoding, additionalObsSets: additionalCellSets, embeddingObsSetPolygonsVisible: cellSetPolygonsVisible, embeddingObsSetLabelsVisible: cellSetLabelsVisible, embeddingObsSetLabelSize: cellSetLabelSize, embeddingObsRadius: cellRadiusFixed, embeddingObsRadiusMode: cellRadiusMode, embeddingObsOpacity: cellOpacityFixed, embeddingObsOpacityMode: cellOpacityMode, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, featureSelection: gatingFeatureSelectionColor, featureValueTransform, featureValueTransformCoefficient, gatingFeatureSelectionX, gatingFeatureSelectionY }, { setEmbeddingZoom: setZoom, setEmbeddingTargetX: setTargetX, setEmbeddingTargetY: setTargetY, setEmbeddingTargetZ: setTargetZ, setObsFilter: setCellFilter, setObsSetSelection: setCellSetSelection, setObsHighlight: setCellHighlight, setObsSetColor: setCellSetColor, setObsColorEncoding: setCellColorEncoding, setAdditionalObsSets: setAdditionalCellSets, setEmbeddingObsSetPolygonsVisible: setCellSetPolygonsVisible, setEmbeddingObsSetLabelsVisible: setCellSetLabelsVisible, setEmbeddingObsSetLabelSize: setCellSetLabelSize, setEmbeddingObsRadius: setCellRadiusFixed, setEmbeddingObsRadiusMode: setCellRadiusMode, setEmbeddingObsOpacity: setCellOpacityFixed, setEmbeddingObsOpacityMode: setCellOpacityMode, setFeatureValueColormap: setGeneExpressionColormap, setFeatureValueColormapRange: setGeneExpressionColormapRange, setFeatureValueTransform, setFeatureValueTransformCoefficient, setGatingFeatureSelectionX, setGatingFeatureSelectionY }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.GATING], coordinationScopes);
232103
+ const { embeddingZoom: initialZoom, embeddingTargetX: initialTargetX, embeddingTargetY: initialTargetY } = useInitialCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.GATING], coordinationScopes);
232102
232104
  const [width2, height2, deckRef] = useDeckCanvasSize();
232103
232105
  const title2 = useMemo$1(() => {
232104
232106
  if (titleOverride) {
@@ -232184,6 +232186,7 @@ function GatingSubscriber(props) {
232184
232186
  ]);
232185
232187
  const [dynamicCellRadius, setDynamicCellRadius] = useState(cellRadiusFixed);
232186
232188
  const [dynamicCellOpacity, setDynamicCellOpacity] = useState(cellOpacityFixed);
232189
+ const [originalViewState, setOriginalViewState] = useState(null);
232187
232190
  const mergedCellSets = useMemo$1(() => mergeObsSets(cellSets, additionalCellSets), [cellSets, additionalCellSets]);
232188
232191
  const setCellSelectionProp = useCallback((v) => {
232189
232192
  setObsSelection(v, additionalCellSets, cellSetColor, setCellSetSelection, setAdditionalCellSets, setCellSetColor, setCellColorEncoding);
@@ -232254,13 +232257,20 @@ function GatingSubscriber(props) {
232254
232257
  setDynamicCellRadius(pointSizeDevicePixels);
232255
232258
  const nextCellOpacityScale = getPointOpacity(zoom2, xRange, yRange, width2, height2, numCells, averageFillDensity);
232256
232259
  setDynamicCellOpacity(nextCellOpacityScale);
232257
- if (typeof targetX2 !== "number" || typeof targetY2 !== "number") {
232260
+ if (typeof initialTargetX !== "number" || typeof initialTargetY !== "number") {
232258
232261
  const newTargetX = xExtent[0] + xRange / 2;
232259
232262
  const newTargetY = yExtent[0] + yRange / 2;
232260
232263
  const newZoom = Math.log2(Math.min(width2 / xRange, height2 / yRange));
232261
- setTargetX(newTargetX);
232262
- setTargetY(-newTargetY);
232263
- setZoom(newZoom);
232264
+ const notYetInitialized = typeof targetX2 !== "number" || typeof targetY2 !== "number";
232265
+ const stillDefaultInitialized = targetX2 === newTargetX && targetY2 === -newTargetY;
232266
+ if (notYetInitialized || stillDefaultInitialized) {
232267
+ setTargetX(newTargetX);
232268
+ setTargetY(-newTargetY);
232269
+ setZoom(newZoom);
232270
+ }
232271
+ setOriginalViewState({ target: [newTargetX, -newTargetY, 0], zoom: newZoom });
232272
+ } else if (!originalViewState) {
232273
+ setOriginalViewState({ target: [initialTargetX, initialTargetY, 0], zoom: initialZoom });
232264
232274
  }
232265
232275
  }
232266
232276
  }, [
@@ -232272,6 +232282,8 @@ function GatingSubscriber(props) {
232272
232282
  width2,
232273
232283
  height2,
232274
232284
  zoom2,
232285
+ initialTargetX,
232286
+ initialTargetY,
232275
232287
  averageFillDensity
232276
232288
  ]);
232277
232289
  const cellSelectionSet = useMemo$1(() => new Set(cellSelection), [cellSelection]);
@@ -232284,7 +232296,7 @@ function GatingSubscriber(props) {
232284
232296
  matrixObsIndex: obsIndex,
232285
232297
  expressionData: uint8ExpressionData
232286
232298
  });
232287
- const getObsInfo2 = useCallback((obsId) => {
232299
+ const getObsInfo = useCallback((obsId) => {
232288
232300
  const selectedTransformName = VALUE_TRANSFORM_OPTIONS.find((o2) => o2.value === featureValueTransform)?.name;
232289
232301
  const genePrefix = featureValueTransform ? `${selectedTransformName} ` : "";
232290
232302
  const obsIdx = obsIndex?.indexOf(obsId);
@@ -232302,19 +232314,20 @@ function GatingSubscriber(props) {
232302
232314
  gatingFeatureSelectionY,
232303
232315
  obsType
232304
232316
  ]);
232317
+ const setViewState = ({ zoom: newZoom, target: target2 }) => {
232318
+ setZoom(newZoom);
232319
+ setTargetX(target2[0]);
232320
+ setTargetY(target2[1]);
232321
+ setTargetZ(target2[2] || 0);
232322
+ };
232305
232323
  return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: `${commaNumber(cellsCount)} ${pluralize(obsType, cellsCount)}`, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, helpText, errors, options: jsxRuntimeExports.jsx(ScatterplotOptions, { observationsLabel: obsType, cellRadius: cellRadiusFixed, setCellRadius: setCellRadiusFixed, cellRadiusMode, setCellRadiusMode, cellOpacity: cellOpacityFixed, setCellOpacity: setCellOpacityFixed, cellOpacityMode, setCellOpacityMode, cellSetLabelsVisible, setCellSetLabelsVisible, cellSetLabelSize, setCellSetLabelSize, cellSetPolygonsVisible, setCellSetPolygonsVisible, cellColorEncoding, setCellColorEncoding, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, children: jsxRuntimeExports.jsx(GatingScatterplotOptions, { featureType, gatingFeatureSelectionX, setGatingFeatureSelectionX, gatingFeatureSelectionY, setGatingFeatureSelectionY, gatingFeatureValueTransform: featureValueTransform, setGatingFeatureValueTransform: (newValue) => {
232306
232324
  setFeatureValueTransform(newValue);
232307
232325
  setTargetX(null);
232308
232326
  setTargetY(null);
232309
232327
  setZoom(null);
232310
- }, gatingFeatureValueTransformCoefficient: featureValueTransformCoefficient, setGatingFeatureValueTransformCoefficient: setFeatureValueTransformCoefficient, geneSelectOptions: featureIndex, transformOptions: VALUE_TRANSFORM_OPTIONS }) }), children: [jsxRuntimeExports.jsx(EmptyMessage, { visible: !(gatingFeatureSelectionX && gatingFeatureSelectionY), message: `Select two ${pluralize(featureType, 2)} in the plot settings.` }), jsxRuntimeExports.jsx(ScatterplotWrapper, { ref: deckRef, uuid: uuid2, theme, hideTools: !(gatingFeatureSelectionX && gatingFeatureSelectionY), viewState: { zoom: zoom2, target: [targetX2, targetY2, targetZ] }, setViewState: ({ zoom: newZoom, target: target2 }) => {
232311
- setZoom(newZoom);
232312
- setTargetX(target2[0]);
232313
- setTargetY(target2[1]);
232314
- setTargetZ(target2[2] || 0);
232315
- }, obsEmbeddingIndex: obsIndex, obsEmbedding: obsXY, cellFilter, cellSelection, cellHighlight, cellColors, cellSetPolygons, cellSetLabelSize, cellSetLabelsVisible, cellSetPolygonsVisible, setCellFilter, setCellSelection: setCellSelectionProp, setCellHighlight, cellRadius, cellOpacity, cellColorEncoding, geneExpressionColormap, geneExpressionColormapRange, setComponentHover: () => {
232328
+ }, gatingFeatureValueTransformCoefficient: featureValueTransformCoefficient, setGatingFeatureValueTransformCoefficient: setFeatureValueTransformCoefficient, geneSelectOptions: featureIndex, transformOptions: VALUE_TRANSFORM_OPTIONS }) }), children: [jsxRuntimeExports.jsx(EmptyMessage, { visible: !(gatingFeatureSelectionX && gatingFeatureSelectionY), message: `Select two ${pluralize(featureType, 2)} in the plot settings.` }), jsxRuntimeExports.jsx(ScatterplotWrapper, { ref: deckRef, uuid: uuid2, theme, hideTools: !(gatingFeatureSelectionX && gatingFeatureSelectionY), hideRecenter: !(gatingFeatureSelectionX && gatingFeatureSelectionY), viewState: { zoom: zoom2, target: [targetX2, targetY2, targetZ] }, setViewState, originalViewState, obsEmbeddingIndex: obsIndex, obsEmbedding: obsXY, cellFilter, cellSelection, cellHighlight, cellColors, cellSetPolygons, cellSetLabelSize, cellSetLabelsVisible, cellSetPolygonsVisible, setCellFilter, setCellSelection: setCellSelectionProp, setCellHighlight, cellRadius, cellOpacity, cellColorEncoding, geneExpressionColormap, geneExpressionColormapRange, setComponentHover: () => {
232316
232329
  setComponentHover(uuid2);
232317
- }, updateViewInfo: setComponentViewInfo, getExpressionValue, getCellIsSelected }), !disableTooltip && jsxRuntimeExports.jsx(ScatterplotTooltipSubscriber, { parentUuid: uuid2, obsHighlight: cellHighlight, width: width2, height: height2, getObsInfo: getObsInfo2 })] });
232330
+ }, updateViewInfo: setComponentViewInfo, getExpressionValue, getCellIsSelected, embeddingPointsVisible: true }), !disableTooltip && jsxRuntimeExports.jsx(ScatterplotTooltipSubscriber, { parentUuid: uuid2, obsHighlight: cellHighlight, width: width2, height: height2, getObsInfo })] });
232318
232331
  }
232319
232332
  var DEFAULT_CONFIG = {
232320
232333
  // minimum relative difference between two compared values,
@@ -247297,13 +247310,16 @@ const getStatsForResolution = (loader2, resolution) => {
247297
247310
  const height2 = shape2[labels2.indexOf("y")];
247298
247311
  const width2 = shape2[labels2.indexOf("x")];
247299
247312
  const depth = shape2[labels2.indexOf("z")];
247313
+ const dims = Object.fromEntries(labels2.map((label2, i2) => [label2, shape2[i2]]));
247300
247314
  const depthDownsampled = Math.max(1, depth >> resolution);
247301
247315
  const totalBytes = 4 * height2 * width2 * depthDownsampled;
247302
247316
  return {
247303
247317
  height: height2,
247304
247318
  width: width2,
247319
+ depth,
247305
247320
  depthDownsampled,
247306
- totalBytes
247321
+ totalBytes,
247322
+ dims
247307
247323
  };
247308
247324
  };
247309
247325
  const canLoadResolution = (loader2, resolution) => {
@@ -251384,8 +251400,8 @@ function SpatialOptions(props) {
251384
251400
  return `${labelPrefix} for spatial gene expression colormap range`;
251385
251401
  }, id: `gene-expression-colormap-range-${spatialOptionsId}`, valueLabelDisplay: "auto", step: 5e-3, min: 0, max: 1 }) })] })] }) : null] });
251386
251402
  }
251387
- function SpatialTooltipSubscriber$1(props) {
251388
- const { parentUuid, obsHighlight, width: width2, height: height2, getObsInfo: getObsInfo2, hoverData, hoverCoord, hoverMode, useHoverInfoForTooltip, getObsIdFromHoverData, featureType, featureLabelsMap } = props;
251403
+ function SpatialTooltipSubscriber(props) {
251404
+ const { parentUuid, obsHighlight, width: width2, height: height2, getObsInfo, hoverData, hoverCoord, hoverMode, useHoverInfoForTooltip, getObsIdFromHoverData, featureType, featureLabelsMap } = props;
251389
251405
  const sourceUuid = useComponentHover();
251390
251406
  const viewInfo = useComponentViewInfo(parentUuid);
251391
251407
  let [cellInfo, x2, y2] = [null, null, null];
@@ -251393,7 +251409,7 @@ function SpatialTooltipSubscriber$1(props) {
251393
251409
  const obsId = getObsIdFromHoverData(hoverData);
251394
251410
  if (obsId) {
251395
251411
  [cellInfo, x2, y2] = [
251396
- getObsInfo2(obsId, hoverMode),
251412
+ getObsInfo(obsId, hoverMode),
251397
251413
  ...hoverCoord || [null, null]
251398
251414
  ];
251399
251415
  }
@@ -251401,14 +251417,14 @@ function SpatialTooltipSubscriber$1(props) {
251401
251417
  const obsId = getObsIdFromHoverData(hoverData);
251402
251418
  if (obsId) {
251403
251419
  [cellInfo, x2, y2] = [
251404
- getObsInfo2(obsId, hoverMode),
251420
+ getObsInfo(obsId, hoverMode),
251405
251421
  ...hoverCoord || [null, null]
251406
251422
  ];
251407
251423
  }
251408
- } else if (!useHoverInfoForTooltip && getObsInfo2 && obsHighlight) {
251424
+ } else if (!useHoverInfoForTooltip && getObsInfo && obsHighlight) {
251409
251425
  const obsId = obsHighlight;
251410
251426
  [cellInfo, x2, y2] = [
251411
- getObsInfo2(obsId, hoverMode),
251427
+ getObsInfo(obsId, hoverMode),
251412
251428
  ...viewInfo && viewInfo.projectFromId ? viewInfo.projectFromId(obsId) : [null, null]
251413
251429
  ];
251414
251430
  }
@@ -251582,7 +251598,7 @@ function SpatialSubscriber$1(props) {
251582
251598
  matrixObsIndex
251583
251599
  ]);
251584
251600
  const cellSelection = useMemo$1(() => Array.from(cellColors.keys()), [cellColors]);
251585
- const getObsInfo2 = useGetObsInfo(observationsLabel, obsLabelsTypes, obsLabelsData, obsSetsMembership);
251601
+ const getObsInfo = useGetObsInfo(observationsLabel, obsLabelsTypes, obsLabelsData, obsSetsMembership);
251586
251602
  const getTooltipObsInfo = useCallback((tooltipObsId, tooltipObsType) => {
251587
251603
  if (tooltipObsType === HOVER_MODE.MOLECULE_LAYER) {
251588
251604
  return {
@@ -251590,8 +251606,8 @@ function SpatialSubscriber$1(props) {
251590
251606
  "Molecule Name": obsLocationsLabels[tooltipObsId]
251591
251607
  };
251592
251608
  }
251593
- return getObsInfo2(tooltipObsId);
251594
- }, [getObsInfo2, obsLocationsLabels]);
251609
+ return getObsInfo(tooltipObsId);
251610
+ }, [getObsInfo, obsLocationsLabels]);
251595
251611
  const [hoverData, setHoverData] = useState(null);
251596
251612
  const [hoverCoord, setHoverCoord] = useState(null);
251597
251613
  const [hoverMode, setHoverMode] = useState(null);
@@ -251719,7 +251735,7 @@ function SpatialSubscriber$1(props) {
251719
251735
  orbitAxis
251720
251736
  }, setViewState, originalViewState, imageLayerDefs: imageLayers, obsSegmentationsLayerDefs: cellsLayer, obsLocationsLayerDefs: moleculesLayer, neighborhoodLayerDefs: neighborhoodsLayer, obsLocationsIndex, obsSegmentationsIndex, obsLocations, obsLocationsLabels, obsLocationsFeatureIndex, hasSegmentations: hasSegmentationsData, obsSegmentations, obsSegmentationsType, obsCentroids, obsCentroidsIndex, cellFilter, cellSelection, cellHighlight, cellColors, neighborhoods, imageLayerLoaders: resolutionFilteredImageLayerLoaders, setCellFilter, setCellSelection: setCellSelectionProp, setCellHighlight, setHoverInfo, setMoleculeHighlight, setComponentHover: () => {
251721
251737
  setComponentHover(uuid2);
251722
- }, updateViewInfo: setComponentViewInfo, imageLayerCallbacks, segmentationLayerCallbacks, spatialAxisFixed, geneExpressionColormap, geneExpressionColormapRange, expressionData: shiftedExpressionDataForBitmask, cellColorEncoding, getExpressionValue, theme, useFullResolutionImage, photometricInterpretation }), tooltipsVisible && jsxRuntimeExports.jsx(SpatialTooltipSubscriber$1, { parentUuid: uuid2, obsHighlight: cellHighlight || moleculeHighlight, width: width2, height: height2, getObsInfo: getTooltipObsInfo, useHoverInfoForTooltip, hoverData, hoverCoord, hoverMode, getObsIdFromHoverData, featureType, featureLabelsMap }), jsxRuntimeExports.jsx(Legend, {
251738
+ }, updateViewInfo: setComponentViewInfo, imageLayerCallbacks, segmentationLayerCallbacks, spatialAxisFixed, geneExpressionColormap, geneExpressionColormapRange, expressionData: shiftedExpressionDataForBitmask, cellColorEncoding, getExpressionValue, theme, useFullResolutionImage, photometricInterpretation }), tooltipsVisible && jsxRuntimeExports.jsx(SpatialTooltipSubscriber, { parentUuid: uuid2, obsHighlight: cellHighlight || moleculeHighlight, width: width2, height: height2, getObsInfo: getTooltipObsInfo, useHoverInfoForTooltip, hoverData, hoverCoord, hoverMode, getObsIdFromHoverData, featureType, featureLabelsMap }), jsxRuntimeExports.jsx(Legend, {
251723
251739
  visible: true,
251724
251740
  // Fix to dark theme due to black background of spatial plot.
251725
251741
  theme: "dark",
@@ -252980,117 +252996,6 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
252980
252996
  }
252981
252997
  }
252982
252998
  const SpatialWrapper = forwardRef$1((props, deckRef) => jsxRuntimeExports.jsx(Spatial2, { ...props, deckRef }));
252983
- function TooltipChild(props) {
252984
- const { x: x2, y: y2, parentUuid, sourceUuid, width: width2, height: height2, info: info2, tooltipsVisible, tooltipCrosshairsVisible, featureType, featureLabelsMap } = props;
252985
- const visible = parentUuid === sourceUuid ? tooltipsVisible : tooltipCrosshairsVisible;
252986
- return visible ? jsxRuntimeExports.jsx(Tooltip2D, { x: x2, y: y2, parentUuid, sourceUuid, parentWidth: width2, parentHeight: height2, children: jsxRuntimeExports.jsx(TooltipContent, { info: info2, featureType, featureLabelsMap }) }) : null;
252987
- }
252988
- function getXY(obsHighlight, viewInfo, obsIndex, obsLocations, useHoverInfoForTooltip, projectedHoverCoord) {
252989
- const hasObsCoordinates = useHoverInfoForTooltip ? true : obsIndex && obsLocations;
252990
- if (!hasObsCoordinates)
252991
- return null;
252992
- const obsI = obsIndex?.indexOf(obsHighlight);
252993
- if (obsI < 0)
252994
- return null;
252995
- if (useHoverInfoForTooltip) {
252996
- return [projectedHoverCoord?.[0], projectedHoverCoord?.[1]];
252997
- }
252998
- const obsCoord = [obsLocations?.data[0][obsI] || 0, obsLocations?.data[1][obsI] || 0, 0];
252999
- const projectedObsCoord = viewInfo?.project(obsCoord);
253000
- return [projectedObsCoord?.[0], projectedObsCoord?.[1]];
253001
- }
253002
- function getObsInfo(obsSetsData, obsType, obsId) {
253003
- let result = {
253004
- [`${capitalize$3(obsType)} ID`]: obsId
253005
- };
253006
- if (obsSetsData?.obsSetsMembership) {
253007
- const obsMembership = obsSetsData.obsSetsMembership.get(obsId) || [];
253008
- if (obsMembership) {
253009
- result = {
253010
- ...result,
253011
- ...Object.fromEntries(obsMembership.flatMap((path2) => path2.slice(1).map((pathEl, elLevel) => [
253012
- `${path2[0]}${path2.length > 2 ? ` L${elLevel + 1}` : ""}`,
253013
- pathEl
253014
- ])))
253015
- };
253016
- }
253017
- }
253018
- return result;
253019
- }
253020
- function SpatialTooltipSubscriber(props) {
253021
- const {
253022
- parentUuid,
253023
- width: width2,
253024
- height: height2,
253025
- hoverCoord,
253026
- featureType,
253027
- featureLabelsMap,
253028
- // Points
253029
- obsPoints,
253030
- pointLayerScopes,
253031
- pointLayerCoordination,
253032
- // Spots
253033
- obsSpots,
253034
- spotLayerScopes,
253035
- spotLayerCoordination,
253036
- // Segmentations
253037
- obsSegmentationsLocations,
253038
- segmentationLayerScopes,
253039
- segmentationChannelScopesByLayer,
253040
- segmentationChannelCoordination,
253041
- obsSegmentationsSetsData,
253042
- // Images
253043
- imageLayerScopes,
253044
- imageLayerCoordination
253045
- } = props;
253046
- const sourceUuid = useComponentHover();
253047
- const viewInfo = useComponentViewInfo(parentUuid);
253048
- const useHoverInfoForTooltip = sourceUuid === parentUuid && hoverCoord;
253049
- const projectedHoverCoord = useHoverInfoForTooltip ? viewInfo?.project(hoverCoord) : null;
253050
- let yOffset = -30;
253051
- return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [projectedHoverCoord && imageLayerScopes?.map((layerScope) => {
253052
- const { pixelHighlight, tooltipsVisible, spatialLayerVisible } = imageLayerCoordination?.[0]?.[layerScope] || {};
253053
- return tooltipsVisible && pixelHighlight && spatialLayerVisible ? jsxRuntimeExports.jsx(TooltipChild, { parentUuid, sourceUuid, width: width2, height: height2, info: {
253054
- "Pixel Value": JSON.stringify(pixelHighlight)
253055
- }, x: projectedHoverCoord?.[0], y: projectedHoverCoord?.[1] + (yOffset += 30), featureType, featureLabelsMap }, layerScope) : null;
253056
- }), segmentationLayerScopes?.flatMap((layerScope) => segmentationChannelScopesByLayer?.[layerScope]?.map((channelScope) => {
253057
- const { obsType, obsHighlight, tooltipsVisible, tooltipCrosshairsVisible, spatialChannelVisible } = segmentationChannelCoordination?.[0]?.[layerScope]?.[channelScope] || {};
253058
- const obsSetsData = obsSegmentationsSetsData?.[layerScope]?.[channelScope];
253059
- const obsInfo = getObsInfo(obsSetsData, obsType, obsHighlight);
253060
- if (!obsHighlight || !spatialChannelVisible || !tooltipsVisible && !tooltipCrosshairsVisible)
253061
- return null;
253062
- const { obsIndex, obsLocations } = obsSegmentationsLocations?.[layerScope]?.[channelScope] || {};
253063
- const xy = getXY(obsHighlight, viewInfo, obsIndex, obsLocations, useHoverInfoForTooltip, projectedHoverCoord);
253064
- if (!xy)
253065
- return null;
253066
- const [x2, y2] = xy;
253067
- return jsxRuntimeExports.jsx(TooltipChild, { parentUuid, sourceUuid, tooltipsVisible, tooltipCrosshairsVisible, width: width2, height: height2, info: obsInfo, x: x2, y: y2 + (yOffset += 20 + 15 * Object.keys(obsInfo).length), featureType, featureLabelsMap }, `${layerScope}-${channelScope}`);
253068
- })), spotLayerScopes?.map((layerScope) => {
253069
- const { obsType, obsHighlight, tooltipsVisible, tooltipCrosshairsVisible, spatialLayerVisible } = spotLayerCoordination?.[0]?.[layerScope] || {};
253070
- if (!obsHighlight || !spatialLayerVisible || !tooltipsVisible && !tooltipCrosshairsVisible)
253071
- return null;
253072
- const { obsIndex, obsSpots: obsLocations } = obsSpots?.[layerScope] || {};
253073
- const xy = getXY(obsHighlight, viewInfo, obsIndex, obsLocations, useHoverInfoForTooltip, projectedHoverCoord);
253074
- if (!xy)
253075
- return null;
253076
- const [x2, y2] = xy;
253077
- return jsxRuntimeExports.jsx(TooltipChild, { parentUuid, sourceUuid, tooltipsVisible, tooltipCrosshairsVisible, width: width2, height: height2, info: {
253078
- [`${capitalize$3(obsType)} ID`]: obsHighlight
253079
- }, x: x2, y: y2 + (yOffset += 30), featureType, featureLabelsMap }, layerScope);
253080
- }), pointLayerScopes?.map((layerScope) => {
253081
- const { obsType, obsHighlight, tooltipsVisible, tooltipCrosshairsVisible, spatialLayerVisible } = pointLayerCoordination?.[0]?.[layerScope] || {};
253082
- if (!obsHighlight || !spatialLayerVisible || !tooltipsVisible && !tooltipCrosshairsVisible)
253083
- return null;
253084
- const { obsIndex, obsPoints: obsLocations } = obsPoints?.[layerScope] || {};
253085
- const xy = getXY(obsHighlight, viewInfo, obsIndex, obsLocations, useHoverInfoForTooltip, projectedHoverCoord);
253086
- if (!xy)
253087
- return null;
253088
- const [x2, y2] = xy;
253089
- return jsxRuntimeExports.jsx(TooltipChild, { parentUuid, sourceUuid, tooltipsVisible, tooltipCrosshairsVisible, width: width2, height: height2, info: {
253090
- [`${capitalize$3(obsType)} ID`]: obsHighlight
253091
- }, x: x2, y: y2 + (yOffset += 30), featureType, featureLabelsMap }, layerScope);
253092
- })] });
253093
- }
253094
252999
  class ErrorBoundary extends React__default.Component {
253095
253000
  constructor(props) {
253096
253001
  super(props);
@@ -253109,10 +253014,15 @@ class ErrorBoundary extends React__default.Component {
253109
253014
  }
253110
253015
  }
253111
253016
  const LazySpatialThree = React__default.lazy(async () => {
253112
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DqDDC59y.js");
253017
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-D7Xl0b0t.js");
253113
253018
  return { default: SpatialWrapper2 };
253114
253019
  });
253115
253020
  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 }) }) }) }));
253021
+ const LazySpatialAccelerated = React__default.lazy(async () => {
253022
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CkinFFl6.js");
253023
+ return { default: SpatialWrapper2 };
253024
+ });
253025
+ 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 }) }) }) }));
253116
253026
  const DEFAULT_VIEW_STATE = {
253117
253027
  zoom: 0,
253118
253028
  target: [0, 0, 0],
@@ -253173,7 +253083,8 @@ function SpatialSubscriber(props) {
253173
253083
  title: title2 = "Spatial",
253174
253084
  bitmaskValueIsIndex = false,
253175
253085
  // TODO: move to coordination type
253176
- three: threeFor3d = false
253086
+ three: threeFor3d = false,
253087
+ accelerated: acceleratedFor3d = false
253177
253088
  } = props;
253178
253089
  const loaders = useLoaders();
253179
253090
  const setComponentHover = useSetComponentHover();
@@ -253274,7 +253185,8 @@ function SpatialSubscriber(props) {
253274
253185
  CoordinationType$1.SPATIAL_TARGET_C,
253275
253186
  CoordinationType$1.SPATIAL_CHANNEL_VISIBLE,
253276
253187
  CoordinationType$1.SPATIAL_CHANNEL_COLOR,
253277
- CoordinationType$1.SPATIAL_CHANNEL_WINDOW
253188
+ CoordinationType$1.SPATIAL_CHANNEL_WINDOW,
253189
+ CoordinationType$1.SPATIAL_MAX_RESOLUTION
253278
253190
  ], coordinationScopes, coordinationScopesBy, CoordinationType$1.IMAGE_LAYER, CoordinationType$1.IMAGE_CHANNEL);
253279
253191
  const spotLayerCoordination = useComplexCoordination([
253280
253192
  CoordinationType$1.OBS_TYPE,
@@ -253312,7 +253224,6 @@ function SpatialSubscriber(props) {
253312
253224
  CoordinationType$1.LEGEND_VISIBLE
253313
253225
  ], coordinationScopes, coordinationScopesBy, CoordinationType$1.POINT_LAYER);
253314
253226
  const is3dMode = spatialRenderingMode === "3D";
253315
- const shouldUseThree = threeFor3d && is3dMode;
253316
253227
  const [deckWidth, deckHeight, deckRef] = useDeckCanvasSize();
253317
253228
  const [threeWidth, threeHeight, threeRef] = useGridItemSize();
253318
253229
  const width2 = threeFor3d && deckWidth === void 0 ? threeWidth : deckWidth;
@@ -253581,138 +253492,22 @@ function SpatialSubscriber(props) {
253581
253492
  }
253582
253493
  }
253583
253494
  };
253584
- return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, errors, children: [shouldUseThree ? jsxRuntimeExports.jsx(SpatialThreeAdapter, {
253585
- ref: threeRef,
253586
- uuid: uuid2,
253587
- width: width2,
253588
- height: height2,
253589
- theme,
253590
- hideTools: !isSelectable,
253591
- rotation: [rotationX, rotationY, rotationZ],
253592
- setRotationX,
253593
- setRotationY,
253594
- setRotationZ,
253595
- // Global view state
253596
- targetT,
253597
- targetZ,
253598
- viewState: isValidViewState ? {
253599
- zoom: zoom2,
253600
- target: [targetX2, targetY2, targetZ],
253601
- rotationX,
253602
- rotationOrbit
253603
- } : DEFAULT_VIEW_STATE,
253604
- orbitAxis,
253605
- spatialAxisFixed,
253606
- setViewState: isValidViewState ? setViewState : SET_VIEW_STATE_NOOP,
253607
- originalViewState,
253608
- spatialRenderingMode,
253609
- updateViewInfo: setComponentViewInfo,
253610
- delegateHover,
253611
- onEntitySelected,
253612
- // Points
253613
- obsPoints: obsPointsData,
253614
- pointLayerScopes,
253615
- pointLayerCoordination,
253616
- pointMultiObsLabels: pointMultiObsLabelsData,
253617
- // Spots
253618
- obsSpots: obsSpotsData,
253619
- spotLayerScopes,
253620
- spotLayerCoordination,
253621
- obsSpotsSets: obsSpotsSetsData,
253622
- spotMatrixIndices: spotMultiIndicesData,
253623
- spotMultiExpressionData: spotMultiExpressionNormData,
253624
- // Segmentations
253625
- segmentationLayerScopes,
253626
- segmentationLayerCoordination,
253627
- segmentationChannelScopesByLayer,
253628
- segmentationChannelCoordination,
253629
- obsSegmentations: obsSegmentationsData,
253630
- obsSegmentationsLocations: obsSegmentationsLocationsData,
253631
- obsSegmentationsSets: obsSegmentationsSetsData,
253632
- segmentationMatrixIndices: segmentationMultiIndicesData,
253633
- segmentationMultiExpressionData: segmentationMultiExpressionNormData,
253634
- bitmaskValueIsIndex,
253635
- // Images
253636
- images: imageData,
253637
- imageLayerScopes,
253638
- imageLayerCoordination,
253639
- imageChannelScopesByLayer,
253640
- imageChannelCoordination
253641
- }) : jsxRuntimeExports.jsx(SpatialWrapper, {
253642
- ref: deckRef,
253643
- uuid: uuid2,
253644
- width: width2,
253645
- height: height2,
253646
- theme,
253647
- hideTools: !isSelectable,
253648
- // Global view state
253649
- targetT,
253650
- targetZ,
253651
- viewState: isValidViewState ? {
253652
- zoom: zoom2,
253653
- target: [targetX2, targetY2, targetZ],
253654
- rotationX,
253655
- rotationOrbit
253656
- } : DEFAULT_VIEW_STATE,
253657
- orbitAxis,
253658
- spatialAxisFixed,
253659
- setViewState: isValidViewState ? setViewState : SET_VIEW_STATE_NOOP,
253660
- originalViewState,
253661
- spatialRenderingMode,
253662
- updateViewInfo: setComponentViewInfo,
253663
- delegateHover,
253664
- // Points
253665
- obsPoints: obsPointsData,
253666
- pointLayerScopes,
253667
- pointLayerCoordination,
253668
- pointMultiObsLabels: pointMultiObsLabelsData,
253669
- // Spots
253670
- obsSpots: obsSpotsData,
253671
- spotLayerScopes,
253672
- spotLayerCoordination,
253673
- obsSpotsSets: obsSpotsSetsData,
253674
- spotMatrixIndices: spotMultiIndicesData,
253675
- spotMultiExpressionData: spotMultiExpressionNormData,
253676
- // Segmentations
253677
- segmentationLayerScopes,
253678
- segmentationLayerCoordination,
253679
- segmentationChannelScopesByLayer,
253680
- segmentationChannelCoordination,
253681
- obsSegmentations: obsSegmentationsData,
253682
- obsSegmentationsLocations: obsSegmentationsLocationsData,
253683
- obsSegmentationsSets: obsSegmentationsSetsData,
253684
- segmentationMatrixIndices: segmentationMultiIndicesData,
253685
- segmentationMultiExpressionData: segmentationMultiExpressionNormData,
253686
- bitmaskValueIsIndex,
253687
- // Images
253688
- images: imageData,
253689
- imageLayerScopes,
253690
- imageLayerCoordination,
253691
- imageChannelScopesByLayer,
253692
- imageChannelCoordination
253693
- }), !disableTooltip && jsxRuntimeExports.jsx(SpatialTooltipSubscriber, {
253694
- parentUuid: uuid2,
253695
- width: width2,
253696
- height: height2,
253697
- hoverCoord,
253698
- // Points
253699
- obsPoints: obsPointsData,
253700
- pointLayerScopes,
253701
- pointLayerCoordination,
253702
- // Spots
253703
- obsSpots: obsSpotsData,
253704
- spotLayerScopes,
253705
- spotLayerCoordination,
253706
- // Segmentations
253707
- obsSegmentationsLocations: obsSegmentationsLocationsData,
253708
- segmentationLayerScopes,
253709
- segmentationChannelScopesByLayer,
253710
- segmentationChannelCoordination,
253711
- obsSegmentationsSetsData,
253712
- // Images
253713
- imageLayerScopes,
253714
- imageLayerCoordination
253715
- }), jsxRuntimeExports.jsx(
253495
+ return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, errors, children: [is3dMode ? acceleratedFor3d ? jsxRuntimeExports.jsx(SpatialAcceleratedAdapter, { ref: threeRef, uuid: uuid2, width: width2, height: height2, theme, hideTools: !isSelectable, rotation: [rotationX, rotationY, rotationZ], setRotationX, setRotationY, setRotationZ, targetT, targetZ, viewState: isValidViewState ? {
253496
+ zoom: zoom2,
253497
+ target: [targetX2, targetY2, targetZ],
253498
+ rotationX,
253499
+ rotationOrbit
253500
+ } : DEFAULT_VIEW_STATE, orbitAxis, spatialAxisFixed, setViewState: isValidViewState ? setViewState : SET_VIEW_STATE_NOOP, originalViewState, spatialRenderingMode, updateViewInfo: setComponentViewInfo, delegateHover, onEntitySelected, obsPoints: obsPointsData, pointLayerScopes, pointLayerCoordination, pointMultiObsLabels: pointMultiObsLabelsData, obsSpots: obsSpotsData, spotLayerScopes, spotLayerCoordination, obsSpotsSets: obsSpotsSetsData, spotMatrixIndices: spotMultiIndicesData, spotMultiExpressionData: spotMultiExpressionNormData, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, obsSegmentations: obsSegmentationsData, obsSegmentationsLocations: obsSegmentationsLocationsData, obsSegmentationsSets: obsSegmentationsSetsData, segmentationMatrixIndices: segmentationMultiIndicesData, segmentationMultiExpressionData: segmentationMultiExpressionNormData, bitmaskValueIsIndex, images: imageData, imageLayerScopes, imageLayerCoordination, imageChannelScopesByLayer, imageChannelCoordination }) : jsxRuntimeExports.jsx(SpatialThreeAdapter, { ref: threeRef, uuid: uuid2, width: width2, height: height2, theme, hideTools: !isSelectable, rotation: [rotationX, rotationY, rotationZ], setRotationX, setRotationY, setRotationZ, targetT, targetZ, viewState: isValidViewState ? {
253501
+ zoom: zoom2,
253502
+ target: [targetX2, targetY2, targetZ],
253503
+ rotationX,
253504
+ rotationOrbit
253505
+ } : DEFAULT_VIEW_STATE, orbitAxis, spatialAxisFixed, setViewState: isValidViewState ? setViewState : SET_VIEW_STATE_NOOP, originalViewState, spatialRenderingMode, updateViewInfo: setComponentViewInfo, delegateHover, onEntitySelected, obsPoints: obsPointsData, pointLayerScopes, pointLayerCoordination, pointMultiObsLabels: pointMultiObsLabelsData, obsSpots: obsSpotsData, spotLayerScopes, spotLayerCoordination, obsSpotsSets: obsSpotsSetsData, spotMatrixIndices: spotMultiIndicesData, spotMultiExpressionData: spotMultiExpressionNormData, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, obsSegmentations: obsSegmentationsData, obsSegmentationsLocations: obsSegmentationsLocationsData, obsSegmentationsSets: obsSegmentationsSetsData, segmentationMatrixIndices: segmentationMultiIndicesData, segmentationMultiExpressionData: segmentationMultiExpressionNormData, bitmaskValueIsIndex, images: imageData, imageLayerScopes, imageLayerCoordination, imageChannelScopesByLayer, imageChannelCoordination }) : jsxRuntimeExports.jsx(SpatialWrapper, { ref: deckRef, uuid: uuid2, width: width2, height: height2, theme, hideTools: !isSelectable, targetT, targetZ, viewState: isValidViewState ? {
253506
+ zoom: zoom2,
253507
+ target: [targetX2, targetY2, targetZ],
253508
+ rotationX,
253509
+ rotationOrbit
253510
+ } : DEFAULT_VIEW_STATE, orbitAxis, spatialAxisFixed, setViewState: isValidViewState ? setViewState : SET_VIEW_STATE_NOOP, originalViewState, spatialRenderingMode, updateViewInfo: setComponentViewInfo, delegateHover, obsPoints: obsPointsData, pointLayerScopes, pointLayerCoordination, pointMultiObsLabels: pointMultiObsLabelsData, obsSpots: obsSpotsData, spotLayerScopes, spotLayerCoordination, obsSpotsSets: obsSpotsSetsData, spotMatrixIndices: spotMultiIndicesData, spotMultiExpressionData: spotMultiExpressionNormData, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, obsSegmentations: obsSegmentationsData, obsSegmentationsLocations: obsSegmentationsLocationsData, obsSegmentationsSets: obsSegmentationsSetsData, segmentationMatrixIndices: segmentationMultiIndicesData, segmentationMultiExpressionData: segmentationMultiExpressionNormData, bitmaskValueIsIndex, images: imageData, imageLayerScopes, imageLayerCoordination, imageChannelScopesByLayer, imageChannelCoordination }), jsxRuntimeExports.jsx(
253716
253511
  MultiLegend,
253717
253512
  {
253718
253513
  // Fix to dark theme due to black background of spatial plot.
@@ -254547,11 +254342,11 @@ const Heatmap$1 = forwardRef$1((props, deckRef) => {
254547
254342
  });
254548
254343
  Heatmap$1.displayName = "Heatmap";
254549
254344
  function HeatmapTooltipSubscriber(props) {
254550
- const { parentUuid, width: width2, height: height2, transpose: transpose2, getObsInfo: getObsInfo2, getFeatureInfo, obsHighlight, featureHighlight, featureType, featureLabelsMap } = props;
254345
+ const { parentUuid, width: width2, height: height2, transpose: transpose2, getObsInfo, getFeatureInfo, obsHighlight, featureHighlight, featureType, featureLabelsMap } = props;
254551
254346
  const sourceUuid = useComponentHover();
254552
254347
  const viewInfo = useComponentViewInfo(parentUuid);
254553
- const [cellInfo, cellCoord] = obsHighlight && getObsInfo2 ? [
254554
- getObsInfo2(obsHighlight),
254348
+ const [cellInfo, cellCoord] = obsHighlight && getObsInfo ? [
254349
+ getObsInfo(obsHighlight),
254555
254350
  viewInfo && viewInfo.projectFromId ? viewInfo.projectFromId(obsHighlight, null)[transpose2 ? 0 : 1] : null
254556
254351
  ] : [null, null];
254557
254352
  const [geneInfo, geneCoord] = featureHighlight && getFeatureInfo ? [
@@ -254659,7 +254454,7 @@ function HeatmapSubscriber(props) {
254659
254454
  cellSetSelection,
254660
254455
  obsIndex
254661
254456
  ]);
254662
- const getObsInfo2 = useGetObsInfo(observationsLabel, obsLabelsTypes, obsLabelsData, obsSetsMembership);
254457
+ const getObsInfo = useGetObsInfo(observationsLabel, obsLabelsTypes, obsLabelsData, obsSetsMembership);
254663
254458
  const getObsMembership = useGetObsMembership(obsSetsMembership);
254664
254459
  const getFeatureInfo = useCallback((featureId2) => {
254665
254460
  if (featureId2) {
@@ -254699,7 +254494,7 @@ function HeatmapSubscriber(props) {
254699
254494
  setTargetY(target2[1]);
254700
254495
  }, colormapRange: geneExpressionColormapRange, setColormapRange: setGeneExpressionColormapRange, height: height2, width: width2, theme, uuid: uuid2, uint8ObsFeatureMatrix: uint8ObsFeatureMatrix?.data, cellColors, colormap: geneExpressionColormap, setIsRendering, setCellHighlight, setGeneHighlight, featureLabelsMap, obsIndex, featureIndex, setTrackHighlight, setComponentHover: () => {
254701
254496
  setComponentHover(uuid2);
254702
- }, updateViewInfo: setComponentViewInfo, observationsTitle, variablesTitle, variablesDashes: false, observationsDashes: false, cellColorLabels, useDevicePixels: true, onHeatmapClick, setColorEncoding: setHoveredColorEncoding }), tooltipsVisible && jsxRuntimeExports.jsx(HeatmapTooltipSubscriber, { parentUuid: uuid2, width: width2, height: height2, transpose: transpose2, getObsInfo: getObsInfo2, getFeatureInfo, obsHighlight: cellHighlight, featureHighlight: geneHighlight, featureType, featureLabelsMap }), jsxRuntimeExports.jsx(Legend, { visible: true, theme, featureType, featureValueType, obsColorEncoding: "geneExpression", considerSelections: false, featureSelection: geneSelection, obsSetSelection: cellSetSelection, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, extent: obsFeatureMatrixExtent })] });
254497
+ }, updateViewInfo: setComponentViewInfo, observationsTitle, variablesTitle, variablesDashes: false, observationsDashes: false, cellColorLabels, useDevicePixels: true, onHeatmapClick, setColorEncoding: setHoveredColorEncoding }), tooltipsVisible && jsxRuntimeExports.jsx(HeatmapTooltipSubscriber, { parentUuid: uuid2, width: width2, height: height2, transpose: transpose2, getObsInfo, getFeatureInfo, obsHighlight: cellHighlight, featureHighlight: geneHighlight, featureType, featureLabelsMap }), jsxRuntimeExports.jsx(Legend, { visible: true, theme, featureType, featureValueType, obsColorEncoding: "geneExpression", considerSelections: false, featureSelection: geneSelection, obsSetSelection: cellSetSelection, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, extent: obsFeatureMatrixExtent })] });
254703
254498
  }
254704
254499
  function _classCallCheck(a2, n3) {
254705
254500
  if (!(a2 instanceof n3)) throw new TypeError("Cannot call a class as a function");
@@ -264021,7 +263816,7 @@ const useStyles$c = makeStyles()(() => ({
264021
263816
  }
264022
263817
  }));
264023
263818
  function ChannelOptions(props) {
264024
- const { onRemove: onRemove2, onResetWindowUsingIQR, showValueExtent, setShowValueExtent } = props;
263819
+ const { onRemove: onRemove2, onResetWindowUsingIQR, showValueExtent, setShowValueExtent, numResolutions, spatialMaxResolution, setSpatialMaxResolution } = props;
264025
263820
  const [open2, setOpen] = useState(false);
264026
263821
  const { classes: classes2 } = useStyles$c();
264027
263822
  const { classes: selectClasses2 } = useSelectStyles();
@@ -264034,7 +263829,7 @@ function ChannelOptions(props) {
264034
263829
  setShowValueExtent(event2.target.value === "Value Min/Max");
264035
263830
  }
264036
263831
  const domainTypeId = $bdb11010cef70236$export$f680877a34711e37();
264037
- return jsxRuntimeExports.jsxs(PopperMenu, { open: open2, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, { fontSize: "small" }), buttonClassName: classes2.channelMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, placement: "bottom-end", withPaper: true, "aria-label": "Open channel options menu", children: [jsxRuntimeExports.jsxs(MenuItem, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: domainTypeId, children: "Slider Extent: " }), jsxRuntimeExports.jsxs(NativeSelect, { onChange: handleDomainTypeChange, value: showValueExtent ? "Value Min/Max" : "Dtype Min/Max", inputProps: { id: domainTypeId, "aria-label": "Slider extent selector" }, classes: { root: selectClasses2.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "Value Min/Max", children: "Value Min/Max" }), jsxRuntimeExports.jsx("option", { value: "Dtype Min/Max", children: "Dtype Min/Max" })] })] }), jsxRuntimeExports.jsx(MenuItem, { dense: true, disableGutters: true, component: "button", onClick: onResetWindowUsingIQR, className: classes2.menuItemButton, "aria-label": "Click to use IQR for channel", children: "Reset window using IQR" }), jsxRuntimeExports.jsx(MenuItem, { dense: true, disableGutters: true, component: "button", onClick: handleRemove, className: classes2.menuItemButton, "aria-label": "Click to remove channel", children: "Remove channel" })] });
263832
+ return jsxRuntimeExports.jsxs(PopperMenu, { open: open2, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, { fontSize: "small" }), buttonClassName: classes2.channelMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, placement: "bottom-end", withPaper: true, "aria-label": "Open channel options menu", children: [jsxRuntimeExports.jsxs(MenuItem, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: domainTypeId, children: "Best Resolution: " }), jsxRuntimeExports.jsx(Slider, { value: spatialMaxResolution || 1, valueLabelDisplay: "auto", onChange: (e3, v) => setSpatialMaxResolution(v), min: 1, max: numResolutions - 1, step: 1, orientation: "horizontal" })] }), jsxRuntimeExports.jsxs(MenuItem, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: domainTypeId, children: "Slider Extent: " }), jsxRuntimeExports.jsxs(NativeSelect, { onChange: handleDomainTypeChange, value: showValueExtent ? "Value Min/Max" : "Dtype Min/Max", inputProps: { id: domainTypeId, "aria-label": "Slider extent selector" }, classes: { root: selectClasses2.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "Value Min/Max", children: "Value Min/Max" }), jsxRuntimeExports.jsx("option", { value: "Dtype Min/Max", children: "Dtype Min/Max" })] })] }), jsxRuntimeExports.jsx(MenuItem, { dense: true, disableGutters: true, component: "button", onClick: onResetWindowUsingIQR, className: classes2.menuItemButton, "aria-label": "Click to use IQR for channel", children: "Reset window using IQR" }), jsxRuntimeExports.jsx(MenuItem, { dense: true, disableGutters: true, component: "button", onClick: handleRemove, className: classes2.menuItemButton, "aria-label": "Click to remove channel", children: "Remove channel" })] });
264038
263833
  }
264039
263834
  const useStyles$b = makeStyles()(() => ({
264040
263835
  channelSlider: {
@@ -264121,7 +263916,10 @@ function ImageChannelController(props) {
264121
263916
  // The channel names.
264122
263917
  image: image2,
264123
263918
  // To get the channel window extent using image metadata.
264124
- spatialRenderingMode
263919
+ spatialRenderingMode,
263920
+ numResolutions,
263921
+ spatialMaxResolution,
263922
+ setSpatialMaxResolution
264125
263923
  } = props;
264126
263924
  const removeChannel = useRemoveImageChannelInMetaCoordinationScopes();
264127
263925
  const [showValueExtent, setShowValueExtent] = useState(true);
@@ -264158,7 +263956,7 @@ function ImageChannelController(props) {
264158
263956
  setWindow2(minMaxDomain);
264159
263957
  }
264160
263958
  }
264161
- return jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ChannelVisibilityCheckbox, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, colormapOn }) }), jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ChannelColorPickerMenu, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, isStaticColor: !colormapOn, palette: VIEWER_PALETTE }) }), jsxRuntimeExports.jsx(Grid$1, { size: 6, children: jsxRuntimeExports.jsx(ChannelSelectionDropdown, { featureIndex, targetC, setTargetC, setWindow: setWindow2, disabled: isLoading }) }), jsxRuntimeExports.jsx(Grid$1, { size: 3, children: jsxRuntimeExports.jsx(ChannelSlider, { image: image2, targetT, targetZ, targetC, window: window2, setWindow: setWindow2, disabled, color: color2, theme, colormapOn, showValueExtent, minMaxDomain }) }), jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ChannelOptions, { onRemove: onRemove2, showValueExtent, setShowValueExtent, onResetWindowUsingIQR: handleResetWindowUsingIQR }) })] });
263959
+ return jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ChannelVisibilityCheckbox, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, colormapOn }) }), jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ChannelColorPickerMenu, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, isStaticColor: !colormapOn, palette: VIEWER_PALETTE }) }), jsxRuntimeExports.jsx(Grid$1, { size: 6, children: jsxRuntimeExports.jsx(ChannelSelectionDropdown, { featureIndex, targetC, setTargetC, setWindow: setWindow2, disabled: isLoading }) }), jsxRuntimeExports.jsx(Grid$1, { size: 3, children: jsxRuntimeExports.jsx(ChannelSlider, { image: image2, targetT, targetZ, targetC, window: window2, setWindow: setWindow2, disabled, color: color2, theme, colormapOn, showValueExtent, minMaxDomain }) }), jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ChannelOptions, { onRemove: onRemove2, showValueExtent, setShowValueExtent, onResetWindowUsingIQR: handleResetWindowUsingIQR, numResolutions, spatialMaxResolution, setSpatialMaxResolution }) })] });
264162
263960
  }
264163
263961
  function DimensionSlider(props) {
264164
263962
  const { boundingSlice, sliceValue, setSliceValue, label: label2 } = props;
@@ -264261,10 +264059,11 @@ function ImageLayerController(props) {
264261
264059
  const { classes: controllerSectionClasses } = useControllerSectionStyles();
264262
264060
  const isMultiChannel = photometricInterpretation !== "RGB";
264263
264061
  return jsxRuntimeExports.jsx(Grid$1, { className: controllerSectionClasses.layerControllerGrid, children: jsxRuntimeExports.jsxs(Paper, { elevation: 4, className: controllerSectionClasses.layerControllerRoot, children: [jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(Button, { className: menuClasses.imageLayerVisibleButton, onClick: handleVisibleChange, "aria-label": "Toggle layer visibility", children: jsxRuntimeExports.jsx(Visibility, {}) }) }), jsxRuntimeExports.jsx(Grid$1, { size: 1 }), jsxRuntimeExports.jsx(Grid$1, { size: 6, children: jsxRuntimeExports.jsx(Typography, { className: menuClasses.imageLayerName, children: label2 }) }), jsxRuntimeExports.jsx(Grid$1, { size: 2, children: jsxRuntimeExports.jsx(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsxRuntimeExports.jsx(Grid$1, { size: 1, children: jsxRuntimeExports.jsx(ImageLayerEllipsisMenu, { colormap, setColormap, photometricInterpretation, setPhotometricInterpretation, spatialTargetResolution, setSpatialTargetResolution, volumetricRenderingAlgorithm, setVolumetricRenderingAlgorithm, spatialLayerTransparentColor, setSpatialLayerTransparentColor, spatialRenderingMode, image: image2, channelScopes, tooltipsVisible, setTooltipsVisible, channelLabelsVisible, setChannelLabelsVisible, channelLabelsOrientation, setChannelLabelsOrientation, channelLabelSize, setChannelLabelSize }) }), jsxRuntimeExports.jsxs(Grid$1, { size: 1, container: true, direction: "row", children: [jsxRuntimeExports.jsx(ImageIcon, { className: classes2.layerTypeImageIcon }), isMultiChannel ? jsxRuntimeExports.jsx(Button, { onClick: handleOpenChange, className: classes2.channelExpansionButton, "aria-label": "Expand or collapse channel controls", children: open2 ? jsxRuntimeExports.jsx(ExpandLess, {}) : jsxRuntimeExports.jsx(ExpandMoreIcon, {}) }) : null] })] }), isMultiChannel && open2 ? jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "column", justifyContent: "space-between", className: classes2.imageChannelControllerGrid, children: [channelScopes.map((cScope) => {
264264
- const { spatialTargetC, spatialChannelVisible, spatialChannelOpacity, spatialChannelColor, spatialChannelWindow } = channelCoordination[cScope];
264265
- const { setSpatialTargetC, setSpatialChannelVisible, setSpatialChannelOpacity, setSpatialChannelColor, setSpatialChannelWindow } = setChannelCoordination[cScope];
264062
+ const { spatialTargetC, spatialChannelVisible, spatialChannelOpacity, spatialChannelColor, spatialChannelWindow, spatialMaxResolution } = channelCoordination[cScope];
264063
+ const { setSpatialTargetC, setSpatialChannelVisible, setSpatialChannelOpacity, setSpatialChannelColor, setSpatialChannelWindow, setSpatialMaxResolution } = setChannelCoordination[cScope];
264266
264064
  const channelIndex = image2?.getChannelIndex(spatialTargetC);
264267
- return jsxRuntimeExports.jsx(ImageChannelController, { theme, coordinationScopesRaw, layerScope, channelScope: cScope, targetT, targetZ, targetC: channelIndex, setTargetC: setSpatialTargetC, visible: spatialChannelVisible, setVisible: setSpatialChannelVisible, opacity: spatialChannelOpacity, setOpacity: setSpatialChannelOpacity, color: spatialChannelColor, setColor: setSpatialChannelColor, window: spatialChannelWindow, setWindow: setSpatialChannelWindow, colormapOn: colormap !== null, featureIndex, image: image2, spatialRenderingMode }, cScope);
264065
+ const numResolutions = image2?.getNumResolutions();
264066
+ return jsxRuntimeExports.jsx(ImageChannelController, { theme, coordinationScopesRaw, layerScope, channelScope: cScope, targetT, targetZ, targetC: channelIndex, setTargetC: setSpatialTargetC, visible: spatialChannelVisible, setVisible: setSpatialChannelVisible, opacity: spatialChannelOpacity, setOpacity: setSpatialChannelOpacity, color: spatialChannelColor, setColor: setSpatialChannelColor, window: spatialChannelWindow, setWindow: setSpatialChannelWindow, colormapOn: colormap !== null, featureIndex, image: image2, spatialRenderingMode, numResolutions, spatialMaxResolution, setSpatialMaxResolution }, cScope);
264268
264067
  }), jsxRuntimeExports.jsx(Button, { disabled: channelScopes.length === MAX_CHANNELS$1 || channelScopes.length === imageNumChannels, onClick: handleChannelAdd, fullWidth: true, variant: "outlined", className: classes2.imageLayerButton, startIcon: jsxRuntimeExports.jsx(AddIcon, {}), size: "small", "aria-label": "Add a channel to this layer", children: "Add Channel" })] }) : null, is3dMode && image2 ? jsxRuntimeExports.jsxs(Grid$1, { container: true, direction: "column", justifyContent: "space-between", className: classes2.imageChannelControllerGrid, children: [jsxRuntimeExports.jsx(Typography, { className: classes2.clippingPanesLabel, children: "Clipping planes:" }), jsxRuntimeExports.jsx(Grid$1, { size: 12, className: classes2.clippingSliders, children: jsxRuntimeExports.jsx(ClippingSliders, { image: image2, spatialSliceX, spatialSliceY, spatialSliceZ, setSpatialSliceX, setSpatialSliceY, setSpatialSliceZ }) })] }) : null] }) });
264269
264068
  }
264270
264069
  const useStyles$7 = makeStyles()((theme) => ({
@@ -264369,7 +264168,8 @@ function LayerControllerSubscriber(props) {
264369
264168
  CoordinationType$1.SPATIAL_TARGET_C,
264370
264169
  CoordinationType$1.SPATIAL_CHANNEL_VISIBLE,
264371
264170
  CoordinationType$1.SPATIAL_CHANNEL_COLOR,
264372
- CoordinationType$1.SPATIAL_CHANNEL_WINDOW
264171
+ CoordinationType$1.SPATIAL_CHANNEL_WINDOW,
264172
+ CoordinationType$1.SPATIAL_MAX_RESOLUTION
264373
264173
  ], coordinationScopes, coordinationScopesBy, CoordinationType$1.IMAGE_LAYER, CoordinationType$1.IMAGE_CHANNEL);
264374
264174
  const spotLayerCoordination = useComplexCoordination([
264375
264175
  CoordinationType$1.OBS_TYPE,
@@ -266419,7 +266219,7 @@ function HiglassGlobalStyles(props) {
266419
266219
  }
266420
266220
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
266421
266221
  const LazyHiGlassComponent = React__default.lazy(async () => {
266422
- const { HiGlassComponent } = await import("./higlass-B5Yf-THY.js");
266222
+ const { HiGlassComponent } = await import("./higlass-0qSOunpw.js");
266423
266223
  return { default: HiGlassComponent };
266424
266224
  });
266425
266225
  const HG_SIZE = 800;
@@ -269366,7 +269166,7 @@ function NeuroglancerGlobalStyles(props) {
269366
269166
  const { classes: classes2 } = props;
269367
269167
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
269368
269168
  }
269369
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-CNzkD33k.js"));
269169
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-CebI6oJd.js"));
269370
269170
  function createWorker() {
269371
269171
  return new WorkerFactory();
269372
269172
  }
@@ -356890,6 +356690,10 @@ class ImageWrapper {
356890
356690
  const { labels: labels2, shape: shape2 } = Array.isArray(loader2.data) ? loader2.data[0] : loader2.data;
356891
356691
  return shape2[labels2.indexOf("c")];
356892
356692
  }
356693
+ getNumResolutions() {
356694
+ const loader2 = this.vivLoader;
356695
+ return Array.isArray(loader2.data) ? loader2.data.length : 1;
356696
+ }
356893
356697
  isMultiResolution() {
356894
356698
  const loader2 = this.vivLoader;
356895
356699
  const hasViewableResolutions = Boolean(Array.from({
@@ -356900,13 +356704,21 @@ class ImageWrapper {
356900
356704
  getMultiResolutionStats() {
356901
356705
  const loader2 = this.vivLoader;
356902
356706
  return Array.from({ length: loader2.data.length }).fill(0).map((_, resolution) => {
356903
- const { height: height2, width: width2, depthDownsampled, totalBytes } = getStatsForResolution(loader2.data, resolution);
356707
+ const { height: height2, width: width2, depth, depthDownsampled, totalBytes, dims } = getStatsForResolution(loader2.data, resolution);
356904
356708
  return {
356905
356709
  canLoad: canLoadResolution(loader2.data, resolution),
356906
356710
  height: height2,
356907
356711
  width: width2,
356712
+ depth,
356908
356713
  depthDownsampled,
356909
- totalBytes
356714
+ totalBytes,
356715
+ dims
356716
+ // chunkHeight
356717
+ // chunkWidth
356718
+ // chunkDepth
356719
+ // physicalSizeVoxel
356720
+ // eslint-disable-next-line max-len
356721
+ // physicalSizeTotal (physicalSizeVoxel * highest-resolution numPixels, for each dimension)
356910
356722
  };
356911
356723
  });
356912
356724
  }
@@ -373104,7 +372916,11 @@ class SpatialDataShapesSource extends SpatialDataTableSource {
373104
372916
  */
373105
372917
  // eslint-disable-next-line class-methods-use-this
373106
372918
  _isWkbColumn(arrowTable, columnName) {
373107
- return arrowTable.schema.fields.find((field2) => field2.name === columnName)?.metadata?.get("ARROW:extension:name") === "geoarrow.wkb";
372919
+ const geometryEncodingValue = arrowTable.schema.fields.find((field2) => field2.name === columnName)?.metadata?.get("ARROW:extension:name");
372920
+ if (!geometryEncodingValue) {
372921
+ return true;
372922
+ }
372923
+ return geometryEncodingValue === "geoarrow.wkb";
373108
372924
  }
373109
372925
  /**
373110
372926
  * Helper to decode WKB geometry column as flat coordinates (for points).
@@ -379539,6 +379355,7 @@ const baseCoordinationTypes = [
379539
379355
  new PluginCoordinationType(CoordinationType$1.SPATIAL_RENDERING_MODE, "2D", z.enum(["2D", "3D"]).nullable()),
379540
379356
  new PluginCoordinationType(CoordinationType$1.VOLUMETRIC_RENDERING_ALGORITHM, "additive", z.enum(["maximumIntensityProjection", "additive"])),
379541
379357
  new PluginCoordinationType(CoordinationType$1.SPATIAL_TARGET_RESOLUTION, 0, z.number().nullable()),
379358
+ new PluginCoordinationType(CoordinationType$1.SPATIAL_MAX_RESOLUTION, null, z.number().nullable()),
379542
379359
  new PluginCoordinationType(CoordinationType$1.SPATIAL_SLICE_X, null, z.array(z.number()).length(2).nullable()),
379543
379360
  new PluginCoordinationType(CoordinationType$1.SPATIAL_SLICE_Y, null, z.array(z.number()).length(2).nullable()),
379544
379361
  new PluginCoordinationType(CoordinationType$1.SPATIAL_SLICE_Z, null, z.array(z.number()).length(2).nullable()),
@@ -379653,170 +379470,176 @@ function Vitessce(props) {
379653
379470
  );
379654
379471
  }
379655
379472
  export {
379656
- LinearMipmapNearestFilter as $,
379657
- ACESFilmicToneMapping as A,
379658
- BasicShadowMap as B,
379659
- Clock as C,
379473
+ Bone as $,
379474
+ LineSegments as A,
379475
+ BufferAttribute as B,
379476
+ Color as C,
379660
379477
  DirectionalLight2 as D,
379661
- EventDispatcher as E,
379478
+ Line as E,
379662
379479
  FileLoader as F,
379663
379480
  Group$1 as G,
379664
- TextureLoader as H,
379481
+ LineLoop as H,
379665
379482
  InstancedMesh as I,
379666
- ImageBitmapLoader as J,
379667
- BufferAttribute as K,
379668
- Layers as L,
379669
- Material as M,
379670
- NoToneMapping as N,
379671
- OrthographicCamera as O,
379672
- PerspectiveCamera as P,
379483
+ Points as J,
379484
+ PerspectiveCamera as K,
379485
+ Loader as L,
379486
+ Matrix42 as M,
379487
+ NearestMipmapLinearFilter as N,
379488
+ Object3D as O,
379489
+ PointLight2 as P,
379673
379490
  Quaternion2 as Q,
379674
- Raycaster as R,
379675
- Scene as S,
379676
- Texture2 as T,
379677
- UnsignedByteType as U,
379678
- VSMShadowMap as V,
379679
- WebGLRenderer as W,
379680
- InterleavedBuffer as X,
379681
- LinearMipmapLinearFilter as Y,
379682
- NearestMipmapLinearFilter as Z,
379683
- _extends$c as _,
379684
- PCFSoftShadowMap as a,
379685
- require_cof as a$,
379686
- NearestMipmapNearestFilter as a0,
379687
- LinearFilter as a1,
379688
- NearestFilter as a2,
379689
- RepeatWrapping as a3,
379690
- MirroredRepeatWrapping as a4,
379691
- ClampToEdgeWrapping as a5,
379692
- PointsMaterial as a6,
379693
- LineBasicMaterial as a7,
379694
- MeshStandardMaterial as a8,
379695
- DoubleSide as a9,
379696
- ShaderMaterial as aA,
379697
- UniformsUtils as aB,
379698
- UniformsLib as aC,
379699
- Vector42 as aD,
379700
- Line3 as aE,
379701
- SphereGeometry2 as aF,
379702
- Triangle as aG,
379703
- BackSide as aH,
379704
- jsxRuntimeExports as aI,
379705
- Matrix32 as aJ,
379706
- CoordinationType$1 as aK,
379707
- Data3DTexture as aL,
379708
- RedFormat as aM,
379709
- FloatType as aN,
379710
- getImageSize as aO,
379711
- BaseDecoder as aP,
379712
- LercParameters as aQ,
379713
- LercAddCompression as aR,
379714
- commonjsGlobal$1 as aS,
379715
- requireObjectAssign$1 as aT,
379716
- earcut as aU,
379717
- requireAssign as aV,
379718
- require_export as aW,
379719
- require_core as aX,
379720
- require_fails as aY,
379721
- require_toObject as aZ,
379722
- require_objectKeys as a_,
379723
- MeshBasicMaterial as aa,
379724
- PropertyBinding as ab,
379725
- SkinnedMesh as ac,
379726
- Mesh as ad,
379727
- LineSegments as ae,
379728
- Line as af,
379729
- LineLoop as ag,
379730
- Points as ah,
379731
- MathUtils as ai,
379732
- Skeleton as aj,
379733
- InterpolateDiscrete as ak,
379734
- InterpolateLinear as al,
379735
- AnimationClip as am,
379736
- Bone as an,
379737
- InterleavedBufferAttribute as ao,
379738
- VectorKeyframeTrack as ap,
379739
- QuaternionKeyframeTrack as aq,
379740
- NumberKeyframeTrack as ar,
379741
- FrontSide as as,
379742
- Interpolant as at,
379743
- Box3 as au,
379744
- Sphere as av,
379745
- InstancedBufferGeometry as aw,
379746
- Float32BufferAttribute as ax,
379747
- InstancedInterleavedBuffer as ay,
379748
- WireframeGeometry as az,
379749
- PCFShadowMap as b,
379750
- require_wks as b0,
379751
- require_iterators as b1,
379752
- requireWeb_dom_iterable as b2,
379753
- requireEs6_string_iterator as b3,
379754
- require_anObject as b4,
379755
- require_hide as b5,
379756
- require_ctx as b6,
379757
- require_toLength as b7,
379758
- require_global as b8,
379759
- require_objectDp as b9,
379760
- MeshDepthMaterial as bA,
379761
- RGBADepthPacking as bB,
379762
- ShaderChunk as bC,
379763
- PlaneGeometry2 as bD,
379764
- InstancedBufferAttribute as bE,
379765
- Vitessce as bF,
379766
- PluginFileType as bG,
379767
- PluginViewType as bH,
379768
- PluginCoordinationType as bI,
379769
- PluginJointFileType as bJ,
379770
- PluginAsyncFunction as bK,
379771
- z as bL,
379772
- require_descriptors as ba,
379773
- require_isObject as bb,
379774
- require_objectCreate as bc,
379775
- require_iterDefine as bd,
379776
- require_iterStep as be,
379777
- require_meta as bf,
379778
- require_isArray as bg,
379779
- require_iobject as bh,
379780
- require_setToStringTag as bi,
379781
- require_aFunction as bj,
379782
- requireIterator as bk,
379783
- require_propertyDesc as bl,
379784
- requireEs6_symbol as bm,
379785
- requireDefineProperty$1 as bn,
379786
- require_toIobject as bo,
379787
- require_objectGopd as bp,
379788
- require_html as bq,
379789
- require_domCreate as br,
379790
- require_library as bs,
379791
- requireSymbol as bt,
379792
- require_objectPie as bu,
379793
- require_has as bv,
379794
- require_redefine as bw,
379795
- require_objectAssign as bx,
379796
- diffCameraState as by,
379797
- MeshDistanceMaterial as bz,
379798
- Vector32 as c,
379799
- Vector22 as d,
379800
- Camera as e,
379801
- BufferGeometry as f,
379802
- getDefaultExportFromCjs$1 as g,
379803
- RGBAFormat as h,
379804
- Color as i,
379805
- THREE as j,
379806
- Matrix42 as k,
379807
- TrianglesDrawMode as l,
379808
- TriangleFanDrawMode as m,
379809
- TriangleStripDrawMode as n,
379810
- REVISION as o,
379811
- MOUSE as p,
379812
- TOUCH as q,
379813
- Spherical as r,
379814
- Ray as s,
379815
- Plane2 as t,
379816
- Loader as u,
379817
- LoaderUtils as v,
379818
- MeshPhysicalMaterial as w,
379819
- SpotLight as x,
379820
- PointLight2 as y,
379821
- Object3D as z
379491
+ REVISION as R,
379492
+ SpotLight as S,
379493
+ TrianglesDrawMode as T,
379494
+ MathUtils as U,
379495
+ Vector22 as V,
379496
+ OrthographicCamera as W,
379497
+ Skeleton as X,
379498
+ InterpolateDiscrete as Y,
379499
+ InterpolateLinear as Z,
379500
+ AnimationClip as _,
379501
+ TriangleFanDrawMode as a,
379502
+ earcut as a$,
379503
+ InterleavedBufferAttribute as a0,
379504
+ Texture2 as a1,
379505
+ VectorKeyframeTrack as a2,
379506
+ QuaternionKeyframeTrack as a3,
379507
+ NumberKeyframeTrack as a4,
379508
+ FrontSide as a5,
379509
+ Interpolant as a6,
379510
+ Box3 as a7,
379511
+ Sphere as a8,
379512
+ InstancedBufferGeometry as a9,
379513
+ UnsignedIntType as aA,
379514
+ WebGLMultipleRenderTargets as aB,
379515
+ RGBAFormat as aC,
379516
+ PlaneGeometry2 as aD,
379517
+ GLSL3 as aE,
379518
+ getDefaultExportFromCjs$1 as aF,
379519
+ Raycaster as aG,
379520
+ PCFSoftShadowMap as aH,
379521
+ VSMShadowMap as aI,
379522
+ PCFShadowMap as aJ,
379523
+ BasicShadowMap as aK,
379524
+ NoToneMapping as aL,
379525
+ ACESFilmicToneMapping as aM,
379526
+ Clock as aN,
379527
+ WebGLRenderer as aO,
379528
+ Camera as aP,
379529
+ Layers as aQ,
379530
+ THREE as aR,
379531
+ EventDispatcher as aS,
379532
+ MOUSE as aT,
379533
+ TOUCH as aU,
379534
+ Spherical as aV,
379535
+ BaseDecoder as aW,
379536
+ LercParameters as aX,
379537
+ LercAddCompression as aY,
379538
+ commonjsGlobal$1 as aZ,
379539
+ requireObjectAssign$1 as a_,
379540
+ Float32BufferAttribute as aa,
379541
+ InstancedInterleavedBuffer as ab,
379542
+ WireframeGeometry as ac,
379543
+ ShaderMaterial as ad,
379544
+ UniformsUtils as ae,
379545
+ UniformsLib as af,
379546
+ Vector42 as ag,
379547
+ Line3 as ah,
379548
+ SphereGeometry2 as ai,
379549
+ _extends$c as aj,
379550
+ Plane2 as ak,
379551
+ Triangle as al,
379552
+ BackSide as am,
379553
+ Ray as an,
379554
+ jsxRuntimeExports as ao,
379555
+ Matrix32 as ap,
379556
+ CoordinationType$1 as aq,
379557
+ Data3DTexture as ar,
379558
+ RedFormat as as,
379559
+ FloatType as at,
379560
+ getImageSize as au,
379561
+ Scene as av,
379562
+ log$b as aw,
379563
+ isEqual$3 as ax,
379564
+ UnsignedByteType as ay,
379565
+ RedIntegerFormat as az,
379566
+ TriangleStripDrawMode as b,
379567
+ requireAssign as b0,
379568
+ require_export as b1,
379569
+ require_core as b2,
379570
+ require_fails as b3,
379571
+ require_toObject as b4,
379572
+ require_objectKeys as b5,
379573
+ require_cof as b6,
379574
+ require_wks as b7,
379575
+ require_iterators as b8,
379576
+ requireWeb_dom_iterable as b9,
379577
+ requireSymbol as bA,
379578
+ require_objectPie as bB,
379579
+ require_has as bC,
379580
+ require_redefine as bD,
379581
+ require_objectAssign as bE,
379582
+ diffCameraState as bF,
379583
+ MeshDistanceMaterial as bG,
379584
+ MeshDepthMaterial as bH,
379585
+ RGBADepthPacking as bI,
379586
+ ShaderChunk as bJ,
379587
+ InstancedBufferAttribute as bK,
379588
+ Vitessce as bL,
379589
+ PluginFileType as bM,
379590
+ PluginViewType as bN,
379591
+ PluginCoordinationType as bO,
379592
+ PluginJointFileType as bP,
379593
+ PluginAsyncFunction as bQ,
379594
+ z as bR,
379595
+ requireEs6_string_iterator as ba,
379596
+ require_anObject as bb,
379597
+ require_hide as bc,
379598
+ require_ctx as bd,
379599
+ require_toLength as be,
379600
+ require_global as bf,
379601
+ require_objectDp as bg,
379602
+ require_descriptors as bh,
379603
+ require_isObject as bi,
379604
+ require_objectCreate as bj,
379605
+ require_iterDefine as bk,
379606
+ require_iterStep as bl,
379607
+ require_meta as bm,
379608
+ require_isArray as bn,
379609
+ require_iobject as bo,
379610
+ require_setToStringTag as bp,
379611
+ require_aFunction as bq,
379612
+ requireIterator as br,
379613
+ require_propertyDesc as bs,
379614
+ requireEs6_symbol as bt,
379615
+ requireDefineProperty$1 as bu,
379616
+ require_toIobject as bv,
379617
+ require_objectGopd as bw,
379618
+ require_html as bx,
379619
+ require_domCreate as by,
379620
+ require_library as bz,
379621
+ LoaderUtils as c,
379622
+ MeshPhysicalMaterial as d,
379623
+ Vector32 as e,
379624
+ TextureLoader as f,
379625
+ ImageBitmapLoader as g,
379626
+ InterleavedBuffer as h,
379627
+ LinearMipmapLinearFilter as i,
379628
+ LinearMipmapNearestFilter as j,
379629
+ NearestMipmapNearestFilter as k,
379630
+ LinearFilter as l,
379631
+ NearestFilter as m,
379632
+ RepeatWrapping as n,
379633
+ MirroredRepeatWrapping as o,
379634
+ ClampToEdgeWrapping as p,
379635
+ PointsMaterial as q,
379636
+ Material as r,
379637
+ LineBasicMaterial as s,
379638
+ MeshStandardMaterial as t,
379639
+ DoubleSide as u,
379640
+ MeshBasicMaterial as v,
379641
+ PropertyBinding as w,
379642
+ BufferGeometry as x,
379643
+ SkinnedMesh as y,
379644
+ Mesh as z
379822
379645
  };