@vitessce/launcher 4.0.2 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { useRef, useEffect, useState } from "react";
3
3
  import { useThree, useFrame } from "@react-three/fiber";
4
4
  import { Bvh } from "@react-three/drei";
5
5
  import { Matrix4, Vector3, Box3, FrontSide } from "three";
6
- import { g as getXRModule, i as isValidGeometrySize, M as MeasureLine, s as stringifyLineData } from "./index-CA6Y_Dls.js";
6
+ import { g as getXRModule, i as isValidGeometrySize, M as MeasureLine, s as stringifyLineData } from "./index-CHThyhx2.js";
7
7
  const { useXR, useXRInputSourceState } = getXRModule();
8
8
  function getHandJoint(hand, jointName) {
9
9
  return hand.get(jointName);
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import React__default from "react";
3
- import { a as getDefaultExportFromCjs, d as requireAssign, f as require_export, h as require_core, j as require_fails, k as require_toObject, m as require_objectKeys, n as require_cof, o as require_wks, p as require_iterators, q as requireWeb_dom_iterable, s as requireEs6_string_iterator, t as require_anObject, v as require_hide, w as require_ctx, x as require_toLength, y as require_global, z as require_objectDp, A as require_descriptors, D as require_isObject, E as require_objectCreate, F as require_iterDefine, G as require_iterStep, H as require_meta, I as require_isArray, J as require_iobject, K as require_setToStringTag, M as require_aFunction, N as requireIterator, O as require_propertyDesc, c as commonjsGlobal, P as requireEs6_symbol, Q as requireDefineProperty, R as require_toIobject, S as require_objectGopd, T as require_html, U as require_domCreate, V as require_library, W as requireSymbol, X as require_objectPie, Y as require_has, Z as require_redefine, _ as require_objectAssign, $ as GREY_HEX, a0 as diffCameraState } from "./index-D-cJewP-.js";
3
+ import { a as getDefaultExportFromCjs, d as requireAssign, f as require_export, h as require_core, j as require_fails, k as require_toObject, m as require_objectKeys, n as require_cof, o as require_wks, p as require_iterators, q as requireWeb_dom_iterable, s as requireEs6_string_iterator, t as require_anObject, v as require_hide, w as require_ctx, x as require_toLength, y as require_global, z as require_objectDp, A as require_descriptors, D as require_isObject, E as require_objectCreate, F as require_iterDefine, G as require_iterStep, H as require_meta, I as require_isArray, J as require_iobject, K as require_setToStringTag, M as require_aFunction, N as requireIterator, O as require_propertyDesc, c as commonjsGlobal, P as requireEs6_symbol, Q as requireDefineProperty, R as require_toIobject, S as require_objectGopd, T as require_html, U as require_domCreate, V as require_library, W as requireSymbol, X as require_objectPie, Y as require_has, Z as require_redefine, _ as require_objectAssign, $ as GREY_HEX, a0 as diffCameraState } from "./index-BMSAuguS.js";
4
4
  var assignExports = requireAssign();
5
5
  const _Object$assign = /* @__PURE__ */ getDefaultExportFromCjs(assignExports);
6
6
  var es6_object_keys = {};
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useState, useEffect } from "react";
3
- import { x as xrStore } from "./xrStore-CDyKy5UF.js";
3
+ import { x as xrStore } from "./xrStore-KQZ5nMcp.js";
4
4
  function XREnterButton() {
5
5
  const [supported, setSupported] = useState(false);
6
6
  const [entered, setEntered] = useState(false);
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
2
  import { useRef } from "react";
3
3
  import { useThree, useFrame } from "@react-three/fiber";
4
- import { g as getXRModule } from "./index-CA6Y_Dls.js";
4
+ import { g as getXRModule } from "./index-CHThyhx2.js";
5
5
  const { useXRInputSourceState } = getXRModule();
6
6
  function getHandJoint(hand, jointName) {
7
7
  return hand.get(jointName);
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { g as getXRModule } from "./index-CA6Y_Dls.js";
3
- import { x as xrStore } from "./xrStore-CDyKy5UF.js";
2
+ import { g as getXRModule } from "./index-CHThyhx2.js";
3
+ import { x as xrStore } from "./xrStore-KQZ5nMcp.js";
4
4
  const { XR } = getXRModule();
5
5
  function XRWrapper({ children }) {
6
6
  return jsx(XR, { store: xrStore, children });
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-SxljTded.js";
2
- import { B as BaseDecoder } from "./index-D-cJewP-.js";
2
+ import { B as BaseDecoder } from "./index-BMSAuguS.js";
3
3
  class DeflateDecoder extends BaseDecoder {
4
4
  decodeBlock(buffer) {
5
5
  return inflate_1(new Uint8Array(buffer)).buffer;
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import React__default, { createContext, isValidElement, PureComponent, Component, useMemo, useState, useRef, useEffect, useCallback, memo, useContext, useReducer, useLayoutEffect } from "react";
3
- import { r as requireObjectAssign, a as getDefaultExportFromCjs$1, c as commonjsGlobal, e as earcut } from "./index-D-cJewP-.js";
3
+ import { r as requireObjectAssign, a as getDefaultExportFromCjs$1, c as commonjsGlobal, e as earcut } from "./index-BMSAuguS.js";
4
4
  import ReactDOM__default, { unstable_batchedUpdates, createPortal } from "react-dom";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  function finallyConstructor(callback) {
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import React__default, { useState, useEffect, useCallback, useContext, forwardRef as forwardRef$1, useRef, useMemo as useMemo$1, createContext, createElement, isValidElement, cloneElement, Children, PureComponent, version as version$6, useLayoutEffect as useLayoutEffect$1, useImperativeHandle, Component as Component$1, Suspense, useReducer } from "react";
3
3
  import { jsx as jsx$1, jsxs, Fragment } from "react/jsx-runtime";
4
- import { useLoaders, useCoordinationScopes, useCoordination, useDescription, useImageData, useReady, TitleInfo, useVitessceContainer, useSetWarning, useObsSetsData, useUrls, usePlotOptionsStyles, OptionsContainer, CellColorEncodingOption, OptionSelect, useComponentHover, useComponentViewInfo, useSetComponentHover, useSetComponentViewInfo, useInitialCoordination, useDeckCanvasSize, useMultiObsLabels, useObsEmbeddingData, useFeatureSelection, useObsFeatureMatrixIndices, useFeatureLabelsData, useExpandedFeatureLabelsMap, useSampleSetsData, useSampleEdgesData, useGetObsInfo, useUint8FeatureSelection, useExpressionValueGetter, useAuxiliaryCoordination, useHasLoader, useObsLocationsData, useObsLabelsData, useObsSegmentationsData, useNeighborhoodsData, useMergeCoordination, useCoordinationScopesBy, useMultiCoordinationScopesSecondaryNonNull, useMultiCoordinationScopesNonNull, useComplexCoordination, useComplexCoordinationSecondary, useGridItemSize, useMultiObsPoints, usePointMultiObsLabels, usePointMultiObsFeatureMatrixIndices, useMultiObsSpots, useSpotMultiObsSets, useSpotMultiFeatureLabels, useSpotMultiFeatureSelection, useSpotMultiObsFeatureMatrixIndices, useSegmentationMultiObsLocations, useMultiObsSegmentations, useSegmentationMultiObsSets, useSegmentationMultiFeatureSelection, useSegmentationMultiObsFeatureMatrixIndices, useMultiImages, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useGetObsMembership, PopperMenu, useComponentLayout, useClosestVitessceContainerSize, useWindowDimensions, useRemoveImageChannelInMetaCoordinationScopes, useAddImageChannelInMetaCoordinationScopes, useViewConfigStoreApi, useViewConfig, useSetViewConfig, createLoaders, useWarning, useGenomicProfilesData, useMatchingLoader, useColumnNameMapping, useFeatureStatsData, useObsSetStatsData, useAsyncFunction, useFeatureSetStatsData, useComparisonMetadata, logConfig, VitSContainer, createOnDrop } from "@vitessce/vit-s";
4
+ import { useLoaders, useCoordinationScopes, useCoordination, useDescription, useImageData, useReady, TitleInfo, useVitessceContainer, useSetWarning, useObsSetsData, useUrls, usePlotOptionsStyles, OptionsContainer, CellColorEncodingOption, OptionSelect, useComponentHover, useComponentViewInfo, useSetComponentHover, useSetComponentViewInfo, useInitialCoordination, useDeckCanvasSize, useMultiObsLabels, useObsEmbeddingData, useFeatureSelection, useObsFeatureMatrixIndices, useFeatureLabelsData, useExpandedFeatureLabelsMap, useSampleSetsData, useSampleEdgesData, useGetObsInfo, useUint8FeatureSelection, useExpressionValueGetter, useAuxiliaryCoordination, useHasLoader, useObsLocationsData, useObsLabelsData, useObsSegmentationsData, useNeighborhoodsData, useMergeCoordination, useCoordinationScopesBy, useMultiCoordinationScopesSecondaryNonNull, useMultiCoordinationScopesNonNull, useComplexCoordination, useComplexCoordinationSecondary, useGridItemSize, useMultiObsPoints, usePointMultiObsLabels, usePointMultiObsFeatureMatrixIndices, useMultiObsSpots, useSpotMultiObsSets, useSpotMultiFeatureLabels, useSpotMultiFeatureSelection, useSpotMultiObsFeatureMatrixIndices, useSegmentationMultiObsLocations, useMultiObsSegmentations, useSegmentationMultiObsSets, useSegmentationMultiFeatureSelection, useSegmentationMultiObsFeatureMatrixIndices, useMultiImages, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useGetObsMembership, PopperMenu, useComponentLayout, useClosestVitessceContainerSize, useWindowDimensions, useRemoveImageChannelInMetaCoordinationScopes, useAddImageChannelInMetaCoordinationScopes, useViewConfigStoreApi, useViewConfig, useSetViewConfig, createLoaders, useWarning, useGenomicProfilesData, shallowDiff, shallowDiffByChannelWithKeys, shallowDiffByChannelCoordinationWithKeys, shallowDiffByChannel, shallowDiffByLayer, shallowDiffByLayerCoordinationWithKeys, useMemoCustomComparison, useMatchingLoader, useColumnNameMapping, useFeatureStatsData, useObsSetStatsData, useAsyncFunction, useFeatureSetStatsData, useComparisonMetadata, logConfig, VitSContainer, createOnDrop } from "@vitessce/vit-s";
5
5
  import * as ReactDOM from "react-dom";
6
6
  import ReactDOM__default, { createPortal } from "react-dom";
7
7
  function _mergeNamespaces(n3, m2) {
@@ -19322,7 +19322,7 @@ const { tss } = createTss({
19322
19322
  },
19323
19323
  "usePlugin": useMuiThemeStyleOverridesPlugin
19324
19324
  });
19325
- const useStyles$z = tss.create({});
19325
+ const useStyles$A = tss.create({});
19326
19326
  function createChainedFunction$1(...funcs) {
19327
19327
  return funcs.reduce((acc, func) => {
19328
19328
  if (func == null) {
@@ -74132,7 +74132,7 @@ const Popper = React.forwardRef((props, ref2) => {
74132
74132
  }, [handlePopperRef]);
74133
74133
  React.useImperativeHandle(popperRefProp, () => popperRef.current, []);
74134
74134
  const [exited, setExited] = React.useState(true);
74135
- const { theme } = useStyles$z();
74135
+ const { theme } = useStyles$A();
74136
74136
  const rtlPlacement = flipPlacement(initialPlacement, theme);
74137
74137
  const [placement, setPlacement] = React.useState(rtlPlacement);
74138
74138
  React.useEffect(() => {
@@ -74866,7 +74866,7 @@ var VariableSizeList$1 = /* @__PURE__ */ createListComponent({
74866
74866
  });
74867
74867
  const VariableSizeList = VariableSizeList$1;
74868
74868
  const LIST_ROW_HEIGHT$1 = 48;
74869
- const useStyles$y = makeStyles()(() => ({
74869
+ const useStyles$z = makeStyles()(() => ({
74870
74870
  searchInput: {
74871
74871
  lineHeight: "initial",
74872
74872
  height: "auto !important"
@@ -74906,7 +74906,7 @@ const ListboxComponent$1 = React__default.forwardRef((props, ref2) => {
74906
74906
  });
74907
74907
  function SimpleAutocomplete(props) {
74908
74908
  const { getMatches, onChange, textInputLabel = "Enter a gene", getItemLabel = (option) => option.label } = props;
74909
- const { classes: classes2 } = useStyles$y();
74909
+ const { classes: classes2 } = useStyles$z();
74910
74910
  const [potentialItems, setPotentialItems] = useState([]);
74911
74911
  const handleInputChange = async (_event, value2) => {
74912
74912
  if (!value2) {
@@ -84456,7 +84456,7 @@ function defaultUrlTransform(value2) {
84456
84456
  }
84457
84457
  return "";
84458
84458
  }
84459
- const useStyles$x = makeStyles()((theme) => ({
84459
+ const useStyles$y = makeStyles()((theme) => ({
84460
84460
  description: {
84461
84461
  "& p, details, table": {
84462
84462
  fontSize: "80%",
@@ -84493,7 +84493,7 @@ const useStyles$x = makeStyles()((theme) => ({
84493
84493
  }));
84494
84494
  function Description(props) {
84495
84495
  const { description: description2, metadata: metadata2, descriptionType } = props;
84496
- const { classes: classes2 } = useStyles$x();
84496
+ const { classes: classes2 } = useStyles$y();
84497
84497
  return jsxs("div", { className: classes2.description, children: [descriptionType && descriptionType === DescriptionType.MARKDOWN ? jsx$1(Markdown, { children: description2 }) : jsx$1("p", { children: description2 }), metadata2 && Array.from(metadata2.entries()).map(([layerIndex, { name: layerName, metadata: metadataRecord }]) => metadataRecord && Object.entries(metadataRecord).length > 0 ? jsxs("details", { children: [jsx$1("summary", { children: layerName }), jsx$1("div", { className: classes2.metadataContainer, children: jsx$1("table", { children: jsx$1("tbody", { children: Object.entries(metadataRecord).map(([key2, value2]) => jsxs("tr", { children: [jsx$1("th", { title: key2, children: key2 }), jsx$1("td", { title: value2, children: value2 })] }, key2)) }) }) })] }, layerIndex) : null)] });
84498
84498
  }
84499
84499
  function DescriptionSubscriber(props) {
@@ -99603,7 +99603,7 @@ const Tooltip$2 = /* @__PURE__ */ React.forwardRef((props, ref2) => {
99603
99603
  }, extraProps), getChildren());
99604
99604
  });
99605
99605
  const nodeHeight = 32;
99606
- const useStyles$w = makeStyles()((theme) => ({
99606
+ const useStyles$x = makeStyles()((theme) => ({
99607
99607
  setsManager: {
99608
99608
  position: "relative",
99609
99609
  width: "100%",
@@ -99770,7 +99770,7 @@ const useStyles$w = makeStyles()((theme) => ({
99770
99770
  }));
99771
99771
  function SetsManagerTreeGlobalStyles(props) {
99772
99772
  const { classes: classes2 } = props;
99773
- const { theme } = useStyles$z();
99773
+ const { theme } = useStyles$A();
99774
99774
  return jsx$1(ScopedGlobalStyles, { parentClassName: classes2.setsManagerTree, styles: {
99775
99775
  ".rc-tree": {
99776
99776
  paddingLeft: "0",
@@ -100111,7 +100111,7 @@ function HelpTooltipGlobalStyles(props) {
100111
100111
  }
100112
100112
  function PopoverGlobalStyles(props) {
100113
100113
  const { classes: classes2 } = props;
100114
- const { theme } = useStyles$z();
100114
+ const { theme } = useStyles$A();
100115
100115
  return jsx$1(ScopedGlobalStyles, { parentClassName: classes2.popover, styles: {
100116
100116
  ".rc-tooltip-inner": {
100117
100117
  boxSizing: "border-box",
@@ -104795,7 +104795,7 @@ function NamedSetNodeStatic(props) {
104795
104795
  const onClick = level === 0 && !expanded ? () => onCheckLevel(nodeKey, nextLevelToCheck) : () => onNodeView(path2);
104796
104796
  const tooltipProps = disableTooltip ? { visible: false } : {};
104797
104797
  const popoverMenuConfig = makeNodeViewMenuConfig(props);
104798
- const { classes: classes2 } = useStyles$w();
104798
+ const { classes: classes2 } = useStyles$x();
104799
104799
  return jsxs("span", { children: [jsx$1(HelpTooltip, { title: tooltipText, ...tooltipProps, children: jsx$1("button", { type: "button", onClick, onKeyPress: (e3) => callbackOnKeyPress(e3, "v", () => onNodeView(path2)), className: classes2.titleButton, children: title2 }) }), popoverMenuConfig.length > 0 ? jsx$1(PopoverMenu, { menuConfig: makeNodeViewMenuConfig(props), color: level > 0 && editable ? color2 || getDefaultColor(theme) : null, setColor: (c2) => onNodeSetColor(path2, c2), children: jsx$1("span", { children: jsx$1(SvgMenu, { className: classes2.nodeMenuIcon, "aria-label": "Open Node View Menu" }) }) }) : null, level > 0 && isChecking ? checkbox2 : null, level > 0 && jsx$1("span", { className: classes2.nodeSizeLabel, children: niceSize })] });
104800
104800
  }
104801
104801
  function NamedSetNodeEditing(props) {
@@ -104807,7 +104807,7 @@ function NamedSetNodeEditing(props) {
104807
104807
  onNodeSetName(path2, currentTitle, true);
104808
104808
  }
104809
104809
  }
104810
- const { classes: classes2 } = useStyles$w();
104810
+ const { classes: classes2 } = useStyles$x();
104811
104811
  return jsxs("span", { className: classes2.titleButtonWithInput, children: [jsx$1("input", {
104812
104812
  // eslint-disable-next-line jsx-a11y/no-autofocus
104813
104813
  autoFocus: true,
@@ -104833,7 +104833,7 @@ function LevelsButtons(props) {
104833
104833
  onCheckLevel(nodeKey, newLevel);
104834
104834
  }
104835
104835
  }
104836
- const { classes: classes2 } = useStyles$w();
104836
+ const { classes: classes2 } = useStyles$x();
104837
104837
  return jsx$1("div", { className: classes2.levelButtonsContainer, children: range$e(1, height2 + 1).map((i2) => {
104838
104838
  const isChecked = isEqual$3(path2, checkedLevelPath) && i2 === checkedLevelIndex;
104839
104839
  return jsx$1("div", { children: jsx$1(HelpTooltip, { title: getLevelTooltipText(i2), children: jsx$1("input", { className: clsx(classes2.levelRadioButton, { [classes2.levelRadioButtonChecked]: isChecked && !hasColorEncoding }), type: "checkbox", value: i2, checked: isChecked && hasColorEncoding, onChange: onCheck }) }) }, i2);
@@ -104917,7 +104917,7 @@ let TreeNode$1 = class TreeNode extends TreeNode$2 {
104917
104917
  };
104918
104918
  function PlusButton(props) {
104919
104919
  const { datatype, onError, onImportTree, onCreateLevelZeroNode, importable, editable } = props;
104920
- const { classes: classes2 } = useStyles$w();
104920
+ const { classes: classes2 } = useStyles$x();
104921
104921
  const onImport = useCallback((importHandler, mimeType) => () => {
104922
104922
  const uploadInputNode = document.createElement("input");
104923
104923
  uploadInputNode.setAttribute("type", "file");
@@ -105034,7 +105034,7 @@ function SetsManager(props) {
105034
105034
  }, onNodeCheckNewName, onNodeSetIsEditing: setIsEditingNodeName, onNodeRemove, onExportLevelZeroNodeJSON, onExportLevelZeroNodeTabular, onExportSetJSON, disableTooltip: isDragging, onDragStart: () => setIsDragging(true), onDragEnd: () => setIsDragging(false), children: renderTreeNodes(node2.children, readOnly, newPath) }, pathToKey(newPath));
105035
105035
  });
105036
105036
  }
105037
- const { classes: classes2 } = useStyles$w();
105037
+ const { classes: classes2 } = useStyles$x();
105038
105038
  return jsxs("div", { className: classes2.setsManager, children: [jsx$1(SetsManagerTreeGlobalStyles, { classes: classes2 }), jsxs("div", { className: classes2.setsManagerTree, children: [jsx$1(Tree$1, { draggable: false, checkable, checkedKeys: setSelectionKeys, expandedKeys: setExpansionKeys, autoExpandParent, onCheck: (checkedKeys, info2) => onCheckNode(info2.node.props.nodeKey, info2.checked), onExpand: (expandedKeys, info2) => onExpandNode(expandedKeys, info2.node.props.nodeKey, info2.expanded), children: renderTreeNodes(processedSets.tree, true, []) }), jsx$1(Tree$1, { draggable: true, checkable, checkedKeys: additionalSetSelectionKeys, expandedKeys: additionalSetExpansionKeys, autoExpandParent, onCheck: (checkedKeys, info2) => onCheckNode(info2.node.props.nodeKey, info2.checked), onExpand: (expandedKeys, info2) => onExpandNode(expandedKeys, info2.node.props.nodeKey, info2.expanded), onDrop: (info2) => {
105039
105039
  const { eventKey: dropKey } = info2.node.props;
105040
105040
  const { eventKey: dragKey } = info2.dragNode.props;
@@ -210999,22 +210999,22 @@ async function getDecoder(fileDirectory) {
210999
210999
  const Decoder = await importFn();
211000
211000
  return new Decoder(fileDirectory);
211001
211001
  }
211002
- addDecoder([void 0, 1], () => import("./raw-DMNeLVd7.js").then((m2) => m2.default));
211003
- addDecoder(5, () => import("./lzw-BmHVONBc.js").then((m2) => m2.default));
211002
+ addDecoder([void 0, 1], () => import("./raw-ChPsOdRa.js").then((m2) => m2.default));
211003
+ addDecoder(5, () => import("./lzw-D9h9_zZT.js").then((m2) => m2.default));
211004
211004
  addDecoder(6, () => {
211005
211005
  throw new Error("old style JPEG compression is not supported.");
211006
211006
  });
211007
- addDecoder(7, () => import("./jpeg-BGB-_EKG.js").then((m2) => m2.default));
211008
- addDecoder([8, 32946], () => import("./deflate-38TS7div.js").then((m2) => m2.default));
211009
- addDecoder(32773, () => import("./packbits-DKF2IGBX.js").then((m2) => m2.default));
211007
+ addDecoder(7, () => import("./jpeg-CYCae93J.js").then((m2) => m2.default));
211008
+ addDecoder([8, 32946], () => import("./deflate-D151aqHi.js").then((m2) => m2.default));
211009
+ addDecoder(32773, () => import("./packbits-DRjLsg7B.js").then((m2) => m2.default));
211010
211010
  addDecoder(
211011
211011
  34887,
211012
- () => import("./lerc-Db0ZEZ3c.js").then(async (m2) => {
211012
+ () => import("./lerc-Hctfsv2W.js").then(async (m2) => {
211013
211013
  await m2.zstd.init();
211014
211014
  return m2;
211015
211015
  }).then((m2) => m2.default)
211016
211016
  );
211017
- addDecoder(50001, () => import("./webimage-BTp31_-j.js").then((m2) => m2.default));
211017
+ addDecoder(50001, () => import("./webimage-COV6Flgm.js").then((m2) => m2.default));
211018
211018
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
211019
211019
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
211020
211020
  }
@@ -227788,7 +227788,7 @@ class ContourLayerWithText extends ContourLayer {
227788
227788
  }
227789
227789
  ContourLayerWithText.layerName = "ContourLayerWithText";
227790
227790
  ContourLayerWithText.defaultProps = defaultProps;
227791
- const useStyles$v = makeStyles()(() => ({
227791
+ const useStyles$w = makeStyles()(() => ({
227792
227792
  toolButton: {
227793
227793
  display: "inline-flex",
227794
227794
  "&:active": {
@@ -227850,12 +227850,12 @@ const useStyles$v = makeStyles()(() => ({
227850
227850
  }));
227851
227851
  function IconTool(props) {
227852
227852
  const { alt, onClick, isActive: isActive2, children: children3 } = props;
227853
- const { classes: classes2 } = useStyles$v();
227853
+ const { classes: classes2 } = useStyles$w();
227854
227854
  return jsx$1("button", { className: clsx(classes2.toolIcon, { [classes2.toolActive]: isActive2 }), onClick, type: "button", title: alt, children: children3 });
227855
227855
  }
227856
227856
  function IconButton(props) {
227857
227857
  const { alt, onClick, children: children3 } = props;
227858
- const { classes: classes2 } = useStyles$v();
227858
+ const { classes: classes2 } = useStyles$w();
227859
227859
  return jsx$1("button", { className: clsx(classes2.toolIcon, classes2.toolButton), onClick, type: "button", title: alt, children: children3 });
227860
227860
  }
227861
227861
  function ToolMenu(props) {
@@ -227863,7 +227863,7 @@ function ToolMenu(props) {
227863
227863
  const lassoIconAltText = "Select lasso";
227864
227864
  const { setActiveTool, activeTool, visibleTools = { pan: true, selectLasso: true, recenter: true }, recenterOnClick = () => {
227865
227865
  } } = props;
227866
- const { classes: classes2 } = useStyles$v();
227866
+ const { classes: classes2 } = useStyles$w();
227867
227867
  const onRecenterButtonCLick = () => {
227868
227868
  recenterOnClick();
227869
227869
  };
@@ -229020,7 +229020,7 @@ function ScatterplotOptions(props) {
229020
229020
  id: `feature-aggregation-strategy-${scatterplotOptionsId}`
229021
229021
  }, children: FEATURE_AGGREGATION_STRATEGIES$2.map((opt) => jsx$1("option", { value: opt, children: capitalize$3(opt) }, opt)) }) })] }) : null] });
229022
229022
  }
229023
- const useStyles$u = makeStyles()((theme) => ({
229023
+ const useStyles$v = makeStyles()((theme) => ({
229024
229024
  tooltipAnchor: {
229025
229025
  position: "relative",
229026
229026
  width: "0px",
@@ -229051,7 +229051,7 @@ const useStyles$u = makeStyles()((theme) => ({
229051
229051
  function Tooltip3(props) {
229052
229052
  const { x: x2, y: y2, parentWidth, parentHeight, children: children3 } = props;
229053
229053
  const ref2 = useRef();
229054
- const { classes: classes2 } = useStyles$u();
229054
+ const { classes: classes2 } = useStyles$v();
229055
229055
  const [placementX, setPlacementX] = useState("start");
229056
229056
  const [placementY, setPlacementY] = useState("bottom");
229057
229057
  const getTooltipContainer = useVitessceContainer(ref2);
@@ -229067,7 +229067,7 @@ function Tooltip3(props) {
229067
229067
  }, [x2, y2, parentWidth, parentHeight]);
229068
229068
  return jsx$1("div", { ref: ref2, className: classes2.tooltipAnchor, children: ref2 && ref2.current ? jsx$1(Popper, { open: true, anchorEl: ref2.current, container: getTooltipContainer, transition: true, placement: `${placementY}-${placementX}`, children: jsx$1(Paper, { elevation: 8, className: classes2.tooltipContent, children: children3 }) }) : null });
229069
229069
  }
229070
- const useStyles$t = makeStyles()((theme) => ({
229070
+ const useStyles$u = makeStyles()((theme) => ({
229071
229071
  cellEmphasisCrosshair: {
229072
229072
  zIndex: 50,
229073
229073
  position: "absolute",
@@ -229078,7 +229078,7 @@ const useStyles$t = makeStyles()((theme) => ({
229078
229078
  }));
229079
229079
  function Tooltip2D(props) {
229080
229080
  const { parentUuid, sourceUuid, x: x2, y: y2, parentWidth, parentHeight, children: children3 } = props;
229081
- const { classes: classes2 } = useStyles$t();
229081
+ const { classes: classes2 } = useStyles$u();
229082
229082
  if (x2 < 0 || x2 > parentWidth || y2 < 0 || y2 > parentHeight) {
229083
229083
  return null;
229084
229084
  }
@@ -232990,7 +232990,7 @@ function getXlinkHref(cmap) {
232990
232990
  const xlinkHref = ramp(color2.copy().domain(quantize$3(interpolate$1$1(0, 1), n3))).toDataURL();
232991
232991
  return xlinkHref;
232992
232992
  }
232993
- const useStyles$s = makeStyles()(() => ({
232993
+ const useStyles$t = makeStyles()(() => ({
232994
232994
  legend: {
232995
232995
  position: "relative",
232996
232996
  // Needed for absolute positioning of slider overlay
@@ -233187,7 +233187,7 @@ function Legend(props) {
233187
233187
  contourThresholds
233188
233188
  } = props;
233189
233189
  const svgRef = useRef(null);
233190
- const { classes: classes2 } = useStyles$s();
233190
+ const { classes: classes2 } = useStyles$t();
233191
233191
  const [localRange, setLocalRange] = useState(featureValueColormapRange);
233192
233192
  useEffect(() => {
233193
233193
  setLocalRange(featureValueColormapRange);
@@ -233521,7 +233521,7 @@ function Legend(props) {
233521
233521
  }
233522
233522
  } })] })] });
233523
233523
  }
233524
- const useStyles$r = makeStyles()(() => ({
233524
+ const useStyles$s = makeStyles()(() => ({
233525
233525
  multiLegend: {
233526
233526
  position: "absolute",
233527
233527
  top: "0px",
@@ -233548,7 +233548,7 @@ function MultiLegend(props) {
233548
233548
  pointLayerCoordination,
233549
233549
  pointMultiIndicesData
233550
233550
  } = props;
233551
- const { classes: classes2 } = useStyles$r();
233551
+ const { classes: classes2 } = useStyles$s();
233552
233552
  const reversedSegmentationLayerScopes = useMemo$1(() => [...segmentationLayerScopes || []].reverse(), [segmentationLayerScopes]);
233553
233553
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
233554
233554
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].reverse(), [pointLayerScopes]);
@@ -233641,7 +233641,7 @@ function MultiLegend(props) {
233641
233641
  }) : null;
233642
233642
  }) : null] });
233643
233643
  }
233644
- const useStyles$q = makeStyles()(() => ({
233644
+ const useStyles$r = makeStyles()(() => ({
233645
233645
  channelNamesLegendContainer: {
233646
233646
  position: "absolute",
233647
233647
  bottom: "0px",
@@ -233664,7 +233664,7 @@ const useStyles$q = makeStyles()(() => ({
233664
233664
  }));
233665
233665
  function ChannelNamesLegend(props) {
233666
233666
  const { images, imageLayerScopes, imageLayerCoordination, imageChannelScopesByLayer, imageChannelCoordination } = props;
233667
- const { classes: classes2 } = useStyles$q();
233667
+ const { classes: classes2 } = useStyles$r();
233668
233668
  const reversedImageLayerScopes = useMemo$1(() => [...imageLayerScopes || []].reverse(), [imageLayerScopes]);
233669
233669
  return jsx$1("div", { className: classes2.channelNamesLegendContainer, children: imageLayerScopes ? reversedImageLayerScopes.map((layerScope) => {
233670
233670
  const layerCoordination = imageLayerCoordination[0][layerScope];
@@ -253533,7 +253533,7 @@ const ToggleFixedAxisButton = ({ setSpatialAxisFixed, spatialAxisFixed, use3d })
253533
253533
  id: `spatial-camera-axis-${toggleAxisId}`
253534
253534
  } } }) })] });
253535
253535
  };
253536
- function SpatialOptions(props) {
253536
+ function SpatialOptions$1(props) {
253537
253537
  const { observationsLabel, cellColorEncoding, setCellColorEncoding, setSpatialAxisFixed, spatialAxisFixed, use3d, tooltipsVisible, setTooltipsVisible, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, canShowExpressionOptions, canShowColorEncodingOption, canShow3DOptions, featureAggregationStrategy, setFeatureAggregationStrategy } = props;
253538
253538
  const spatialOptionsId = $bdb11010cef70236$export$f680877a34711e37();
253539
253539
  function handleGeneExpressionColormapChange(event2) {
@@ -253847,7 +253847,7 @@ function SpatialSubscriber$1(props) {
253847
253847
  const canShow3DOptions = canLoad3DLayers && !(disable3d?.length === imageLayerLoaders.length) && !globalDisable3d;
253848
253848
  const options = useMemo$1(() => {
253849
253849
  if (canShow3DOptions || hasExpressionData) {
253850
- return jsx$1(SpatialOptions, { observationsLabel, cellColorEncoding, setCellColorEncoding, setSpatialAxisFixed, spatialAxisFixed, use3d, tooltipsVisible, setTooltipsVisible, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, canShowExpressionOptions: hasExpressionData, canShowColorEncodingOption: (hasLocationsData || hasSegmentationsData) && hasExpressionData, canShow3DOptions, featureSelection: geneSelection, featureAggregationStrategy, setFeatureAggregationStrategy });
253850
+ return jsx$1(SpatialOptions$1, { observationsLabel, cellColorEncoding, setCellColorEncoding, setSpatialAxisFixed, spatialAxisFixed, use3d, tooltipsVisible, setTooltipsVisible, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, canShowExpressionOptions: hasExpressionData, canShowColorEncodingOption: (hasLocationsData || hasSegmentationsData) && hasExpressionData, canShow3DOptions, featureSelection: geneSelection, featureAggregationStrategy, setFeatureAggregationStrategy });
253851
253851
  }
253852
253852
  return null;
253853
253853
  }, [
@@ -253936,6 +253936,12 @@ function SpatialSubscriber$1(props) {
253936
253936
  featureAggregationStrategy: featureAggregationStrategyToUse
253937
253937
  })] });
253938
253938
  }
253939
+ function getVolumeModelMatrix(data2, modelMatrix2) {
253940
+ const source2 = Array.isArray(data2) ? data2[0] : data2;
253941
+ const vivPhysicalSizeScalingMatrix = getPhysicalSizeScalingMatrix(source2);
253942
+ const base2 = Array.isArray(modelMatrix2) && modelMatrix2.length === 16 ? new Matrix4(modelMatrix2) : new Matrix4().identity();
253943
+ return base2.multiplyRight(vivPhysicalSizeScalingMatrix.invert());
253944
+ }
253939
253945
  function getInitialSpatialTargets({ width: width2, height: height2, obsPoints, obsSpots, obsSegmentations, obsSegmentationsLocations, segmentationChannelScopesByLayer, images, is3dMode: use3d, isReady }) {
253940
253946
  let globalXMin = null;
253941
253947
  let globalXMax = null;
@@ -253949,7 +253955,8 @@ function getInitialSpatialTargets({ width: width2, height: height2, obsPoints, o
253949
253955
  const modelMatrix2 = layerData?.image?.instance.getModelMatrix();
253950
253956
  if (imageLayerLoader) {
253951
253957
  const viewSize = { height: height2, width: width2 };
253952
- const { target: target2, zoom: newViewStateZoom } = getDefaultInitialViewState(imageLayerLoader, viewSize, zoomBackoff, use3d, new Matrix4(modelMatrix2));
253958
+ const viewStateModelMatrix = use3d ? getVolumeModelMatrix(imageLayerLoader, modelMatrix2) : new Matrix4(modelMatrix2);
253959
+ const { target: target2, zoom: newViewStateZoom } = getDefaultInitialViewState(imageLayerLoader, viewSize, zoomBackoff, use3d, viewStateModelMatrix);
253953
253960
  const maxExtent = Math.max(width2 / 2 ** newViewStateZoom, height2 / 2 ** newViewStateZoom);
253954
253961
  const xMin = target2[0] - maxExtent / 2;
253955
253962
  const xMax = target2[0] + maxExtent / 2;
@@ -254054,6 +254061,9 @@ function getInitialSpatialTargets({ width: width2, height: height2, obsPoints, o
254054
254061
  initialTargetZ
254055
254062
  };
254056
254063
  }
254064
+ function isLayerVisible(spatialLayerVisible) {
254065
+ return spatialLayerVisible !== false;
254066
+ }
254057
254067
  function getLayerLoaderTuple(data2, use3d) {
254058
254068
  const loader2 = Array.isArray(data2) && data2.length > 1 || !Array.isArray(data2) ? data2 : data2[0];
254059
254069
  if (use3d) {
@@ -254796,6 +254806,9 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
254796
254806
  const visible = layerCoordination[CoordinationType$1.SPATIAL_LAYER_VISIBLE];
254797
254807
  const transparentColor = layerCoordination[CoordinationType$1.SPATIAL_LAYER_TRANSPARENT_COLOR];
254798
254808
  const useTransparentColor = Array.isArray(transparentColor) && transparentColor.length === 3;
254809
+ if (is3dMode && !isLayerVisible(visible)) {
254810
+ return null;
254811
+ }
254799
254812
  const extensions = getVivLayerExtensions(is3dMode, colormap, renderingMode);
254800
254813
  const rgbInterleavedProps = {};
254801
254814
  if (imageWrapperInstance.isInterleaved()) {
@@ -255585,15 +255598,32 @@ class ErrorBoundary extends React__default.Component {
255585
255598
  }
255586
255599
  }
255587
255600
  const LazySpatialThree = React__default.lazy(async () => {
255588
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CA6Y_Dls.js").then((n3) => n3.a);
255601
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CHThyhx2.js").then((n3) => n3.a);
255589
255602
  return { default: SpatialWrapper2 };
255590
255603
  });
255591
255604
  const SpatialThreeAdapter = React__default.forwardRef((props, ref2) => jsx$1("div", { ref: ref2, style: { width: "100%", height: "100%" }, children: jsx$1(ErrorBoundary, { fallback: jsx$1("div", { children: "3D spatial view is not available in this environment." }), children: jsx$1(Suspense, { fallback: jsx$1("div", { children: "Loading..." }), children: jsx$1(LazySpatialThree, { ...props }) }) }) }));
255592
255605
  const LazySpatialAccelerated = React__default.lazy(async () => {
255593
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-gStG4FEQ.js");
255606
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-D3nIHwEl.js");
255594
255607
  return { default: SpatialWrapper2 };
255595
255608
  });
255596
255609
  const SpatialAcceleratedAdapter = React__default.forwardRef((props, ref2) => jsx$1("div", { ref: ref2, style: { width: "100%", height: "100%" }, children: jsx$1(ErrorBoundary, { fallback: jsx$1("div", { children: "3D spatial view is not available in this environment." }), children: jsx$1(Suspense, { fallback: jsx$1("div", { children: "Loading..." }), children: jsx$1(LazySpatialAccelerated, { ...props }) }) }) }));
255610
+ const useStyles$q = makeStyles()(() => ({
255611
+ spatialBetaCameraLabel: {
255612
+ padding: "0px 0px 0px 16px"
255613
+ },
255614
+ spatialBetaToggleBox: {
255615
+ padding: "0px"
255616
+ }
255617
+ }));
255618
+ function SpatialOptions(props) {
255619
+ const { spatialAxisFixed, setSpatialAxisFixed, use3d } = props;
255620
+ const toggleAxisId = $bdb11010cef70236$export$f680877a34711e37();
255621
+ const { classes: classes2 } = useStyles$q();
255622
+ return jsx$1(OptionsContainer, { children: jsxs(TableRow, { children: [jsx$1(TableCell, { className: classes2.spatialBetaCameraLabel, variant: "head", scope: "row", children: jsx$1("label", { htmlFor: `spatial-camera-axis-${toggleAxisId}`, children: "Fix Camera Axis" }) }), jsx$1(TableCell, { className: classes2.spatialBetaToggleBox, variant: "body", children: jsx$1(Checkbox$1, { onClick: () => setSpatialAxisFixed(!spatialAxisFixed), disabled: !use3d, checked: Boolean(spatialAxisFixed), slotProps: { input: {
255623
+ "aria-label": "Fix or not fix spatial camera axis",
255624
+ id: `spatial-camera-axis-${toggleAxisId}`
255625
+ } } }) })] }) });
255626
+ }
255597
255627
  const DEFAULT_FEATURE_AGGREGATION_STRATEGY$1 = "first";
255598
255628
  function useAggregatedNormalizedExpressionDataForLayers({ multiExpressionData: spotMultiExpressionData, layerScopes: spotLayerScopes, layerCoordination: spotLayerCoordination }) {
255599
255629
  const [spotMultiExpressionNormDataAggregated, spotMultiExpressionExtentsAggregated] = useMemo$1(() => {
@@ -255807,6 +255837,8 @@ function SpatialSubscriber(props) {
255807
255837
  setSpatialRotationY: setRotationY,
255808
255838
  setSpatialRotationZ: setRotationZ,
255809
255839
  setSpatialRotationOrbit: setRotationOrbit,
255840
+ setSpatialOrbitAxis: setOrbitAxis,
255841
+ setSpatialAxisFixed,
255810
255842
  // TODO: get obsSets per-layer or per-channel
255811
255843
  setAdditionalObsSets,
255812
255844
  setObsSetColor,
@@ -256062,7 +256094,23 @@ function SpatialSubscriber(props) {
256062
256094
  initialTargetZ,
256063
256095
  initialZoom
256064
256096
  ]);
256065
- const setViewState = ({ zoom: newZoom, target: target2, rotationX: newRotationX, rotationOrbit: newRotationOrbit }) => {
256097
+ const prevIs3dMode = useRef(is3dMode);
256098
+ useEffect(() => {
256099
+ if (prevIs3dMode.current === is3dMode) {
256100
+ return;
256101
+ }
256102
+ if (typeof defaultTargetX !== "number" || typeof defaultTargetY !== "number") {
256103
+ return;
256104
+ }
256105
+ prevIs3dMode.current = is3dMode;
256106
+ setTargetX(defaultTargetX);
256107
+ setTargetY(defaultTargetY);
256108
+ setTargetZ(defaultTargetZ);
256109
+ setZoom(defaultZoom);
256110
+ setRotationX(is3dMode ? 0 : null);
256111
+ setRotationOrbit(is3dMode ? 0 : null);
256112
+ }, [is3dMode, defaultTargetX, defaultTargetY, defaultTargetZ, defaultZoom]);
256113
+ const setViewState = ({ zoom: newZoom, target: target2, rotationX: newRotationX, rotationOrbit: newRotationOrbit, orbitAxis: newOrbitAxis }) => {
256066
256114
  setZoom(newZoom);
256067
256115
  setTargetX(target2[0]);
256068
256116
  setTargetY(target2[1]);
@@ -256072,6 +256120,9 @@ function SpatialSubscriber(props) {
256072
256120
  }
256073
256121
  setRotationX(newRotationX);
256074
256122
  setRotationOrbit(newRotationOrbit);
256123
+ if (newOrbitAxis !== void 0) {
256124
+ setOrbitAxis(newOrbitAxis);
256125
+ }
256075
256126
  }
256076
256127
  };
256077
256128
  const subtitle = useMemo$1(() => {
@@ -256212,7 +256263,7 @@ function SpatialSubscriber(props) {
256212
256263
  }
256213
256264
  }
256214
256265
  };
256215
- return jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, errors, helpText, children: [shouldUseThree ? acceleratedFor3d ? jsx$1(SpatialAcceleratedAdapter, { ref: threeRef, uuid: uuid2, width: width2, height: height2, theme, hideTools: !isSelectable, rotation: [rotationX, rotationY, rotationZ], setRotationX, setRotationY, setRotationZ, targetT, targetZ, viewState: isValidViewState ? {
256266
+ return jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, errors, helpText, options: jsx$1(SpatialOptions, { spatialAxisFixed, setSpatialAxisFixed, use3d: is3dMode }), children: [shouldUseThree ? acceleratedFor3d ? jsx$1(SpatialAcceleratedAdapter, { ref: threeRef, uuid: uuid2, width: width2, height: height2, theme, hideTools: !isSelectable, rotation: [rotationX, rotationY, rotationZ], setRotationX, setRotationY, setRotationZ, targetT, targetZ, viewState: isValidViewState ? {
256216
256267
  zoom: zoom2,
256217
256268
  target: [targetX2, targetY2, targetZ],
256218
256269
  rotationX,
@@ -265064,7 +265115,12 @@ const useEllipsisMenuStyles = makeStyles()(() => ({
265064
265115
  padding: 0,
265065
265116
  marginBottom: "0 !important",
265066
265117
  marginLeft: "4px",
265067
- marginTop: "12px !important"
265118
+ marginTop: "12px !important",
265119
+ // Truncate rather than widening the row's label cell, which would push the
265120
+ // options menu and layer type icon onto a second line in narrow containers.
265121
+ overflow: "hidden",
265122
+ textOverflow: "ellipsis",
265123
+ whiteSpace: "nowrap"
265068
265124
  },
265069
265125
  imageLayerOpacitySlider: {
265070
265126
  marginTop: "7px"
@@ -265077,6 +265133,31 @@ const useEllipsisMenuStyles = makeStyles()(() => ({
265077
265133
  padding: "4px"
265078
265134
  }
265079
265135
  }));
265136
+ const CHANNEL_ROW_WRAP_WIDTH = 450;
265137
+ const wrapQuery = `@container (max-width: ${CHANNEL_ROW_WRAP_WIDTH}px)`;
265138
+ const channelRowContainerSx = { containerType: "inline-size" };
265139
+ const channelSliderCellSx = {
265140
+ [wrapQuery]: {
265141
+ width: "100%",
265142
+ order: 1,
265143
+ paddingLeft: "12px",
265144
+ paddingRight: "12px"
265145
+ }
265146
+ };
265147
+ const channelSelectorCellSx = {
265148
+ [wrapQuery]: {
265149
+ flexBasis: 0,
265150
+ flexGrow: 1
265151
+ }
265152
+ };
265153
+ const channelControlCellSx = {
265154
+ [wrapQuery]: {
265155
+ width: "auto",
265156
+ flexGrow: 0,
265157
+ flexShrink: 0
265158
+ }
265159
+ };
265160
+ const channelSpacerCellSx = { flexShrink: 0, minWidth: "44px" };
265080
265161
  const useStyles$j = makeStyles()(() => ({
265081
265162
  colorPickerPaper: {
265082
265163
  overflow: "hidden",
@@ -265312,7 +265393,7 @@ const useStyles$g = makeStyles()(() => ({
265312
265393
  fill: "currentColor",
265313
265394
  fontSize: "14px",
265314
265395
  width: "50%",
265315
- maxWidth: "16px"
265396
+ maxWidth: "20px"
265316
265397
  }
265317
265398
  }));
265318
265399
  function PointLayerEllipsisMenu(props) {
@@ -265431,15 +265512,21 @@ function PointLayerController(props) {
265431
265512
  setFeatureColor(nextFeatureColor);
265432
265513
  }
265433
265514
  }, [featureSelection, obsColorEncoding, featureIndex, featureColor]);
265434
- return jsxs(Grid$1, { className: lcClasses.layerControllerGrid, children: [jsxs(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: [jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(Button, { onClick: handleVisibleChange, className: menuClasses.imageLayerVisibleButton, "aria-label": "Toggle layer visibility", children: jsx$1(Visibility, {}) }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelColorPickerMenu, { theme, color: color2, setColor: setColor2, palette, isStaticColor, isColormap, featureValueColormap, visible }) }), jsx$1(Grid$1, { size: 6, children: jsx$1(Typography, { className: menuClasses.imageLayerName, children: label2 }) }), jsx$1(Grid$1, { size: 2, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(PointLayerEllipsisMenu, { featureSelection, obsColorEncoding, setObsColorEncoding, featureValueColormapRange, setFeatureValueColormapRange, tooltipsVisible, setTooltipsVisible, tooltipCrosshairsVisible, setTooltipCrosshairsVisible, legendVisible, setLegendVisible, featureFilterMode, setFeatureFilterMode, featureValueColormap, setFeatureValueColormap }) }), jsxs(Grid$1, { size: 1, container: true, direction: "row", children: [jsx$1(SvgPoints, { className: classes2.layerTypePointIcon }), null] })] }), loadingDoneFraction < 1 ? jsx$1(Grid$1, { size: 12, container: true, direction: "column", justifyContent: "space-between", className: classes2.pointFeatureControllerGrid, children: jsx$1(LinearProgress, { variant: loadingDoneFraction === 0 ? "indeterminate" : "determinate", value: loadingDoneFraction * 100 }) }) : null, null] }), layerPerFeatureForPoints && hasSelectedFeatures ? jsxs(Fragment, { children: [featureSelection.map((featureName) => jsx$1(LayerPerFeatureController, { theme, featureName, featureColor, setFeatureColor, spatialLayerColor, featureIndex, featureValueColormap, featureSelection, setFeatureSelection, obsColorEncoding, loadingDoneFraction, opacity: opacity2, handleOpacityChange }, featureName)), jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 2, className: lcClasses.layerControllerSubRow, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(Button, { onClick: () => setFeatureFilterMode(featureFilterMode === "featureSelection" ? null : "featureSelection"), className: menuClasses.imageLayerVisibleButton, "aria-label": "Toggle visibility of unselected points", children: featureFilterMode === "featureSelection" ? jsx$1(VisibilityOffIcon, {}) : jsx$1(VisibilityIcon, {}) }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelColorPickerMenu, { theme, color: getDefaultColor("dark"), setColor: null, isStaticColor: true, isColormap: false, visible: true }) }), jsx$1(Grid$1, { size: 6, children: jsx$1(Typography, { className: menuClasses.imageLayerName, children: "Unselected" }) }), jsx$1(Grid$1, { size: 2, sx: { paddingRight: "12px", overflow: "visible" }, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": "Adjust opacity for unselected layer" }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(SvgPoints, { className: classes2.layerTypePointIcon }) })] }) }) })] }) : null] });
265515
+ return jsxs(Grid$1, { className: lcClasses.layerControllerGrid, children: [jsxs(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: [jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", sx: channelRowContainerSx, children: [jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(Button, { onClick: handleVisibleChange, className: menuClasses.imageLayerVisibleButton, "aria-label": "Toggle layer visibility", children: jsx$1(Visibility, {}) }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(ChannelColorPickerMenu, { theme, color: color2, setColor: setColor2, palette, isStaticColor, isColormap, featureValueColormap, visible }) }), jsx$1(Grid$1, { size: 6, sx: channelSelectorCellSx, children: jsx$1(Typography, { className: menuClasses.imageLayerName, title: label2, children: label2 }) }), jsx$1(Grid$1, { size: 2, sx: channelSliderCellSx, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(PointLayerEllipsisMenu, { featureSelection, obsColorEncoding, setObsColorEncoding, featureValueColormapRange, setFeatureValueColormapRange, tooltipsVisible, setTooltipsVisible, tooltipCrosshairsVisible, setTooltipCrosshairsVisible, legendVisible, setLegendVisible, featureFilterMode, setFeatureFilterMode, featureValueColormap, setFeatureValueColormap }) }), jsxs(Grid$1, { size: 1, container: true, direction: "row", sx: channelControlCellSx, children: [jsx$1(SvgPoints, { className: classes2.layerTypePointIcon }), null] })] }), loadingDoneFraction < 1 ? jsx$1(Grid$1, { size: 12, container: true, direction: "column", justifyContent: "space-between", className: classes2.pointFeatureControllerGrid, children: jsx$1(LinearProgress, { variant: loadingDoneFraction === 0 ? "indeterminate" : "determinate", value: loadingDoneFraction * 100 }) }) : null, null] }), layerPerFeatureForPoints && hasSelectedFeatures ? jsxs(Fragment, { children: [featureSelection.map((featureName) => jsx$1(LayerPerFeatureController, { theme, featureName, featureColor, setFeatureColor, spatialLayerColor, featureIndex, featureValueColormap, featureSelection, setFeatureSelection, obsColorEncoding, loadingDoneFraction, opacity: opacity2, handleOpacityChange }, featureName)), jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 2, className: lcClasses.layerControllerSubRow, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(Button, { onClick: () => setFeatureFilterMode(featureFilterMode === "featureSelection" ? null : "featureSelection"), className: menuClasses.imageLayerVisibleButton, "aria-label": "Toggle visibility of unselected points", children: featureFilterMode === "featureSelection" ? jsx$1(VisibilityOffIcon, {}) : jsx$1(VisibilityIcon, {}) }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelColorPickerMenu, { theme, color: getDefaultColor("dark"), setColor: null, isStaticColor: true, isColormap: false, visible: true }) }), jsx$1(Grid$1, { size: 6, children: jsx$1(Typography, { className: menuClasses.imageLayerName, children: "Unselected" }) }), jsx$1(Grid$1, { size: 2, sx: { paddingRight: "12px", overflow: "visible" }, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": "Adjust opacity for unselected layer" }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(SvgPoints, { className: classes2.layerTypePointIcon }) })] }) }) })] }) : null] });
265435
265516
  }
265436
265517
  const useStyles$f = makeStyles()(() => ({
265518
+ // Cap the channel name's width; imageLayerName ellipsizes the overflow.
265519
+ channelName: {
265520
+ overflow: "hidden",
265521
+ textOverflow: "ellipsis",
265522
+ whiteSpace: "nowrap"
265523
+ },
265437
265524
  layerTypeSegmentationIcon: {
265438
265525
  height: "100%",
265439
265526
  marginLeft: "1px",
265440
265527
  fill: "currentColor",
265441
265528
  fontSize: "24px",
265442
- width: "50%",
265529
+ width: "24px",
265443
265530
  maxWidth: "24px"
265444
265531
  }
265445
265532
  }));
@@ -265473,7 +265560,7 @@ function SegmentationChannelController(props) {
265473
265560
  setVisible(nextVisible);
265474
265561
  }, [visible, setVisible]);
265475
265562
  const handleOpacityChange = useCallback((e3, v) => setOpacity2(v), [setOpacity2]);
265476
- return jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(Button, { onClick: handleVisibleChange, className: menuClasses.imageLayerVisibleButton, "aria-label": "Toggle channel visibility", children: jsx$1(Visibility, {}) }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelColorPickerMenu, { theme, color: color2, setColor: setColor2, palette, isStaticColor, isColormap, featureValueColormap, visible }) }), jsx$1(Grid$1, { size: 6, children: jsx$1(Typography, { className: menuClasses.imageLayerName, children: capitalize$3(label2) }) }), jsx$1(Grid$1, { size: 2, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(SegmentationChannelEllipsisMenu, { obsType, featureType, featureValueType, strokeWidth, setStrokeWidth, filled, setFilled, featureSelection, obsColorEncoding, setObsColorEncoding, featureValueColormap, setFeatureValueColormap, featureValueColormapRange, setFeatureValueColormapRange, tooltipsVisible, setTooltipsVisible, tooltipCrosshairsVisible, setTooltipCrosshairsVisible, legendVisible, setLegendVisible }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(SvgVector, { className: classes2.layerTypeSegmentationIcon }) })] }) }) });
265563
+ return jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", sx: channelRowContainerSx, children: [jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(Button, { onClick: handleVisibleChange, className: menuClasses.imageLayerVisibleButton, "aria-label": "Toggle channel visibility", children: jsx$1(Visibility, {}) }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(ChannelColorPickerMenu, { theme, color: color2, setColor: setColor2, palette, isStaticColor, isColormap, featureValueColormap, visible }) }), jsx$1(Grid$1, { size: 6, sx: channelSelectorCellSx, children: jsx$1(Typography, { className: clsx(menuClasses.imageLayerName, classes2.channelName), title: capitalize$3(label2), children: capitalize$3(label2) }) }), jsx$1(Grid$1, { size: 2, sx: channelSliderCellSx, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(SegmentationChannelEllipsisMenu, { obsType, featureType, featureValueType, strokeWidth, setStrokeWidth, filled, setFilled, featureSelection, obsColorEncoding, setObsColorEncoding, featureValueColormap, setFeatureValueColormap, featureValueColormapRange, setFeatureValueColormapRange, tooltipsVisible, setTooltipsVisible, tooltipCrosshairsVisible, setTooltipCrosshairsVisible, legendVisible, setLegendVisible }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(SvgVector, { className: classes2.layerTypeSegmentationIcon }) })] }) }) });
265477
265564
  }
265478
265565
  function SegmentationLayerController(props) {
265479
265566
  const { theme, layerScope, layerCoordination, setLayerCoordination, channelScopes, channelCoordination, setChannelCoordination } = props;
@@ -268342,7 +268429,7 @@ function ImageChannelController(props) {
268342
268429
  setWindow2(minMaxDomain);
268343
268430
  }
268344
268431
  }
268345
- return jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelVisibilityCheckbox, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, colormapOn }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelColorPickerMenu, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, isStaticColor: !colormapOn, palette: VIEWER_PALETTE }) }), jsx$1(Grid$1, { size: 6, children: jsx$1(ChannelSelectionDropdown, { featureIndex, targetC, setTargetC, setWindow: setWindow2, disabled: isLoading, channelsSortOrder }) }), jsx$1(Grid$1, { size: 3, children: jsx$1(ChannelSlider, { image: image2, targetT, targetZ, targetC, window: window2, setWindow: setWindow2, disabled, color: color2, theme, colormapOn, showValueExtent, minMaxDomain }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ChannelOptions, { onRemove: onRemove2, showValueExtent, setShowValueExtent, onResetWindowUsingIQR: handleResetWindowUsingIQR, numResolutions, spatialMaxResolution, setSpatialMaxResolution }) })] });
268432
+ return jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", sx: channelRowContainerSx, children: [jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(ChannelVisibilityCheckbox, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, colormapOn }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(ChannelColorPickerMenu, { color: color2, setColor: setColor2, visible, setVisible, disabled: isLoading, theme, isStaticColor: !colormapOn, palette: VIEWER_PALETTE }) }), jsx$1(Grid$1, { size: 6, sx: channelSelectorCellSx, children: jsx$1(ChannelSelectionDropdown, { featureIndex, targetC, setTargetC, setWindow: setWindow2, disabled: isLoading, channelsSortOrder }) }), jsx$1(Grid$1, { size: 3, sx: channelSliderCellSx, children: jsx$1(ChannelSlider, { image: image2, targetT, targetZ, targetC, window: window2, setWindow: setWindow2, disabled, color: color2, theme, colormapOn, showValueExtent, minMaxDomain }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(ChannelOptions, { onRemove: onRemove2, showValueExtent, setShowValueExtent, onResetWindowUsingIQR: handleResetWindowUsingIQR, numResolutions, spatialMaxResolution, setSpatialMaxResolution }) })] });
268346
268433
  }
268347
268434
  function DimensionSlider(props) {
268348
268435
  const { boundingSlice, sliceValue, setSliceValue, label: label2 } = props;
@@ -268543,7 +268630,7 @@ function ImageLayerController(props) {
268543
268630
  const { classes: menuClasses } = useEllipsisMenuStyles();
268544
268631
  const { classes: controllerSectionClasses } = useControllerSectionStyles();
268545
268632
  const isMultiChannel = photometricInterpretation !== "RGB";
268546
- return jsx$1(Grid$1, { className: controllerSectionClasses.layerControllerGrid, children: jsxs(Paper, { elevation: 4, className: controllerSectionClasses.layerControllerRoot, children: [jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(Button, { className: menuClasses.imageLayerVisibleButton, onClick: handleVisibleChange, "aria-label": "Toggle layer visibility", children: jsx$1(Visibility, {}) }) }), jsx$1(Grid$1, { size: 1 }), jsx$1(Grid$1, { size: 6, children: jsx$1(Typography, { className: menuClasses.imageLayerName, children: label2 }) }), jsx$1(Grid$1, { size: 2, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(ImageLayerEllipsisMenu, { colormap, setColormap, photometricInterpretation, setPhotometricInterpretation, spatialTargetResolution, setSpatialTargetResolution, spatialLodFactor, setSpatialLodFactor, volumetricRenderingAlgorithm, setVolumetricRenderingAlgorithm, spatialLayerTransparentColor, setSpatialLayerTransparentColor, spatialRenderingMode, image: image2, channelScopes, tooltipsVisible, setTooltipsVisible, channelLabelsVisible, setChannelLabelsVisible, channelLabelsOrientation, setChannelLabelsOrientation, channelLabelSize, setChannelLabelSize, channelsSortOrder, setChannelsSortOrder }) }), jsxs(Grid$1, { size: 1, container: true, direction: "row", children: [jsx$1(ImageIcon, { className: classes2.layerTypeImageIcon }), isMultiChannel ? jsx$1(Button, { onClick: handleOpenChange, className: classes2.channelExpansionButton, "aria-label": "Expand or collapse channel controls", children: open2 ? jsx$1(ExpandLess, {}) : jsx$1(ExpandMore, {}) }) : null] })] }), isMultiChannel && open2 ? jsxs(Grid$1, { container: true, direction: "column", justifyContent: "space-between", className: classes2.imageChannelControllerGrid, children: [channelScopes.map((cScope) => {
268633
+ return jsx$1(Grid$1, { className: controllerSectionClasses.layerControllerGrid, children: jsxs(Paper, { elevation: 4, className: controllerSectionClasses.layerControllerRoot, children: [jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", sx: channelRowContainerSx, children: [jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(Button, { className: menuClasses.imageLayerVisibleButton, onClick: handleVisibleChange, "aria-label": "Toggle layer visibility", children: jsx$1(Visibility, {}) }) }), jsx$1(Grid$1, { size: 1, sx: channelSpacerCellSx }), jsx$1(Grid$1, { size: 6, sx: channelSelectorCellSx, children: jsx$1(Typography, { className: menuClasses.imageLayerName, title: label2, children: label2 }) }), jsx$1(Grid$1, { size: 2, sx: channelSliderCellSx, children: jsx$1(Slider, { value: opacity2, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", "aria-label": `Adjust opacity for layer ${label2}` }) }), jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(ImageLayerEllipsisMenu, { colormap, setColormap, photometricInterpretation, setPhotometricInterpretation, spatialTargetResolution, setSpatialTargetResolution, spatialLodFactor, setSpatialLodFactor, volumetricRenderingAlgorithm, setVolumetricRenderingAlgorithm, spatialLayerTransparentColor, setSpatialLayerTransparentColor, spatialRenderingMode, image: image2, channelScopes, tooltipsVisible, setTooltipsVisible, channelLabelsVisible, setChannelLabelsVisible, channelLabelsOrientation, setChannelLabelsOrientation, channelLabelSize, setChannelLabelSize, channelsSortOrder, setChannelsSortOrder }) }), jsxs(Grid$1, { size: 1, container: true, direction: "row", sx: channelControlCellSx, children: [jsx$1(ImageIcon, { className: classes2.layerTypeImageIcon }), isMultiChannel ? jsx$1(Button, { onClick: handleOpenChange, className: classes2.channelExpansionButton, "aria-label": "Expand or collapse channel controls", children: open2 ? jsx$1(ExpandLess, {}) : jsx$1(ExpandMore, {}) }) : null] })] }), isMultiChannel && open2 ? jsxs(Grid$1, { container: true, direction: "column", justifyContent: "space-between", className: classes2.imageChannelControllerGrid, children: [channelScopes.map((cScope) => {
268547
268634
  const { spatialTargetC, spatialChannelVisible, spatialChannelOpacity, spatialChannelColor, spatialChannelWindow, spatialMaxResolution } = channelCoordination[cScope];
268548
268635
  const { setSpatialTargetC, setSpatialChannelVisible, setSpatialChannelOpacity, setSpatialChannelColor, setSpatialChannelWindow, setSpatialMaxResolution } = setChannelCoordination[cScope];
268549
268636
  const channelIndex = image2?.getChannelIndex(spatialTargetC);
@@ -268573,7 +268660,7 @@ const useStyles$9 = makeStyles()((theme) => ({
268573
268660
  }
268574
268661
  }));
268575
268662
  function GlobalDimensionSlider(props) {
268576
- const { label: label2, targetValue, setTargetValue, min: min2 = 0, max: max2 = 0, spatialRenderingMode = null, setSpatialRenderingMode = null } = props;
268663
+ const { label: label2, targetValue, setTargetValue, min: min2 = 0, max: max2 = 0, spatialRenderingMode = null, setSpatialRenderingMode = null, enable3d = true } = props;
268577
268664
  const { classes: lcClasses } = useControllerSectionStyles();
268578
268665
  const { classes: classes2 } = useStyles$9();
268579
268666
  const isForZ = spatialRenderingMode !== null;
@@ -268584,7 +268671,7 @@ function GlobalDimensionSlider(props) {
268584
268671
  setTargetValue(Math.floor(targetValue));
268585
268672
  }
268586
268673
  }
268587
- return jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", children: [jsx$1(Grid$1, { size: 1, children: jsx$1(SvgDimensions, { className: classes2.dimensionsIcon }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(Typography, { className: classes2.dimensionLabel, children: label2 }) }), jsx$1(Grid$1, { size: 8, children: !is3dMode ? jsx$1(Slider, { value: targetValue, min: min2, max: max2, step: 1, onChange: (e3, v) => setTargetValue(v), className: classes2.dimensionSlider, valueLabelDisplay: "auto", orientation: "horizontal", disabled: spatialRenderingMode === "3D", "aria-label": `${label2}-slice slider` }) : null }), jsx$1(Grid$1, { size: 2, children: isForZ ? jsx$1(FormGroup, { row: true, className: classes2.switchFormGroup, children: jsx$1(FormControlLabel$1, { control: jsx$1(Switch, { color: "primary", checked: spatialRenderingMode === "3D", onChange: handleRenderingModeChange, name: "is3dMode" }), label: "3D" }) }) : null })] }) }) });
268674
+ return jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", sx: channelRowContainerSx, children: [jsx$1(Grid$1, { size: 1, sx: channelControlCellSx, children: jsx$1(SvgDimensions, { className: classes2.dimensionsIcon }) }), jsx$1(Grid$1, { size: 1, sx: channelSelectorCellSx, children: jsx$1(Typography, { className: classes2.dimensionLabel, children: label2 }) }), jsx$1(Grid$1, { size: 8, sx: channelSliderCellSx, children: !is3dMode ? jsx$1(Slider, { value: targetValue, min: min2, max: max2, step: 1, onChange: (e3, v) => setTargetValue(v), className: classes2.dimensionSlider, valueLabelDisplay: "auto", orientation: "horizontal", disabled: spatialRenderingMode === "3D", "aria-label": `${label2}-slice slider` }) : null }), jsx$1(Grid$1, { size: 2, sx: channelControlCellSx, children: isForZ && enable3d ? jsx$1(FormGroup, { row: true, className: classes2.switchFormGroup, children: jsx$1(FormControlLabel$1, { control: jsx$1(Switch, { color: "primary", checked: spatialRenderingMode === "3D", onChange: handleRenderingModeChange, name: "is3dMode" }), label: "3D" }) }) : null })] }) }) });
268588
268675
  }
268589
268676
  const useStyles$8 = makeStyles()(() => ({
268590
268677
  layerTypeCentroidSegmentationIcon: {
@@ -268682,7 +268769,7 @@ function SegmentationCentroidsController(props) {
268682
268769
  return jsx$1(Grid$1, { className: lcClasses.layerControllerGrid, children: jsx$1(Paper, { elevation: 4, className: lcClasses.layerControllerRoot, children: jsxs(Grid$1, { container: true, direction: "row", justifyContent: "space-between", alignItems: "center", children: [jsxs(Grid$1, { size: "grow", style: { display: "flex", alignItems: "center", minWidth: 0 }, children: [jsx$1(Button, { onClick: handleSegVisibleChange, className: menuClasses.imageLayerVisibleButton, getAriaLabel: () => "Toggle mesh visibility", children: jsx$1(SegVisibility, {}) }), jsx$1(ChannelColorPickerMenu, { theme, color: segColor, setColor: setSegColor, isStaticColor, isColormap, featureValueColormap, visible: segVisibleSetting }), jsx$1(Typography, { className: `${menuClasses.imageLayerName} ${classes2.inlineLabel}`, children: "Cell" }), jsx$1("div", { className: classes2.divider }), jsx$1(Button, { onClick: handlePointVisibleChange, className: menuClasses.imageLayerVisibleButton, getAriaLabel: () => "Toggle centroid visibility", children: jsx$1(PointVisibility, {}) }), jsx$1(ChannelColorPickerMenu, { theme, color: pointColor, setColor: setPointColor, isStaticColor: pointIsStaticColor, isColormap: pointIsColormap, featureValueColormap: pointFeatureValueColormap, visible: pointVisibleSetting }), jsx$1(Typography, { className: `${menuClasses.imageLayerName} ${classes2.inlineLabel}`, children: "Point" })] }), jsx$1(Grid$1, { size: 2, children: jsx$1(Slider, { value: sharedOpacity, min: 0, max: 1, step: 1e-3, onChange: handleOpacityChange, className: menuClasses.imageLayerOpacitySlider, orientation: "horizontal", getAriaLabel: () => "Adjust shared opacity" }) }), jsx$1(Grid$1, { size: 1, children: jsx$1(CombinedEllipsisMenu, { obsType, featureType, featureValueType, filled, setFilled, strokeWidth, setStrokeWidth, obsColorEncoding, setObsColorEncoding, featureValueColormap, setFeatureValueColormap, featureValueColormapRange, setFeatureValueColormapRange, tooltipsVisible, setTooltipsVisible, tooltipCrosshairsVisible, setTooltipCrosshairsVisible, legendVisible, setLegendVisible, setPointObsColorEncoding, setPointFeatureValueColormap, setPointFeatureValueColormapRange, onColorEncodingChange: handleColorEncodingChange }) }), jsx$1(Grid$1, { size: 1, className: classes2.iconCell, children: jsx$1(SvgVector, { className: classes2.layerTypeCentroidSegmentationIcon }) })] }) }) });
268683
268770
  }
268684
268771
  function LayerController(props) {
268685
- const { theme, coordinationScopesRaw, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, images, imageLayerScopes, imageLayerCoordination, targetT, targetZ, setTargetT, setTargetZ, spatialRenderingMode, setSpatialRenderingMode, imageChannelScopesByLayer, imageChannelCoordination, spotLayerScopes, spotLayerCoordination, pointLayerScopes, pointLayerCoordination, pointMultiIndicesData, volumeLoadingStatus, tiledPointsLoadingProgress, layerPerFeatureForPoints, centroidSegmentationPairs = [], pairedSegScopes = /* @__PURE__ */ new Set(), pairedPointScopes = /* @__PURE__ */ new Set() } = props;
268772
+ const { theme, coordinationScopesRaw, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, images, imageLayerScopes, imageLayerCoordination, targetT, targetZ, setTargetT, setTargetZ, spatialRenderingMode, setSpatialRenderingMode, imageChannelScopesByLayer, imageChannelCoordination, spotLayerScopes, spotLayerCoordination, pointLayerScopes, pointLayerCoordination, pointMultiIndicesData, volumeLoadingStatus, tiledPointsLoadingProgress, layerPerFeatureForPoints, globalDisable3d, centroidSegmentationPairs = [], pairedSegScopes = /* @__PURE__ */ new Set(), pairedPointScopes = /* @__PURE__ */ new Set() } = props;
268686
268773
  const anyLayerHasT = Object.values(images || {}).some((image2) => image2?.image?.instance.hasTStack());
268687
268774
  const anyLayerHasZ = Object.values(images || {}).some((image2) => image2?.image?.instance.hasZStack());
268688
268775
  const maxT = Object.values(images || {}).reduce((a2, h2) => Math.max(a2, h2?.image?.instance.getNumT()), 1) - 1;
@@ -268691,10 +268778,10 @@ function LayerController(props) {
268691
268778
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
268692
268779
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].filter((scope) => !pairedPointScopes.has(scope)).reverse(), [pointLayerScopes, pairedPointScopes]);
268693
268780
  const reversedSegmentationLayerScopes = useMemo$1(() => [...segmentationLayerScopes || []].filter((scope) => !pairedSegScopes.has(scope)).reverse(), [segmentationLayerScopes, pairedSegScopes]);
268694
- return jsxs("div", { children: [anyLayerHasZ ? jsx$1(GlobalDimensionSlider, { label: "Z", targetValue: targetZ, setTargetValue: setTargetZ, max: maxZ, spatialRenderingMode, setSpatialRenderingMode }) : null, anyLayerHasT ? jsx$1(GlobalDimensionSlider, { label: "T", targetValue: targetT, setTargetValue: setTargetT, max: maxT }) : null, centroidSegmentationPairs.map(({ pointScope, segScope }) => jsx$1(SegmentationCentroidsController, { theme, segScope, segLayerCoordination: segmentationLayerCoordination, segChannelScopesByLayer: segmentationChannelScopesByLayer, segChannelCoordination: segmentationChannelCoordination, pointScope, pointLayerCoordination }, `combined-${segScope}-${pointScope}`)), pointLayerScopes && reversedPointLayerScopes.map((layerScope) => jsx$1(PointLayerController, { theme, layerScope, layerCoordination: pointLayerCoordination[0][layerScope], setLayerCoordination: pointLayerCoordination[1][layerScope], pointMatrixIndicesData: pointMultiIndicesData?.[layerScope], tiledPointsLoadingProgress, layerPerFeatureForPoints }, layerScope)), spotLayerScopes && reversedSpotLayerScopes.map((layerScope) => jsx$1(SpotLayerController, { theme, layerScope, layerCoordination: spotLayerCoordination[0][layerScope], setLayerCoordination: spotLayerCoordination[1][layerScope] }, layerScope)), segmentationLayerScopes && reversedSegmentationLayerScopes.map((layerScope) => jsx$1(SegmentationLayerController, { theme, layerScope, layerCoordination: segmentationLayerCoordination[0][layerScope], setLayerCoordination: segmentationLayerCoordination[1][layerScope], channelScopes: segmentationChannelScopesByLayer[layerScope], channelCoordination: segmentationChannelCoordination[0][layerScope], setChannelCoordination: segmentationChannelCoordination[1][layerScope] }, layerScope)), imageLayerScopes && reversedImageLayerScopes.map((layerScope) => jsx$1(ImageLayerController, { theme, coordinationScopesRaw, layerScope, layerCoordination: imageLayerCoordination[0][layerScope], setLayerCoordination: imageLayerCoordination[1][layerScope], channelScopes: imageChannelScopesByLayer[layerScope], channelCoordination: imageChannelCoordination[0][layerScope], setChannelCoordination: imageChannelCoordination[1][layerScope], image: images[layerScope]?.image?.instance, featureIndex: images[layerScope]?.featureIndex, targetT, targetZ, spatialRenderingMode, volumeLoadingProgress: volumeLoadingStatus?.loadingProgress, onStopVolumeLoading: volumeLoadingStatus?.onStopLoading, onRestartVolumeLoading: volumeLoadingStatus?.onRestartLoading, volumeStillRef: volumeLoadingStatus?.stillRef }, layerScope))] });
268781
+ return jsxs("div", { children: [anyLayerHasZ ? jsx$1(GlobalDimensionSlider, { label: "Z", targetValue: targetZ, setTargetValue: setTargetZ, max: maxZ, spatialRenderingMode, setSpatialRenderingMode, enable3d: !globalDisable3d }) : null, anyLayerHasT ? jsx$1(GlobalDimensionSlider, { label: "T", targetValue: targetT, setTargetValue: setTargetT, max: maxT }) : null, centroidSegmentationPairs.map(({ pointScope, segScope }) => jsx$1(SegmentationCentroidsController, { theme, segScope, segLayerCoordination: segmentationLayerCoordination, segChannelScopesByLayer: segmentationChannelScopesByLayer, segChannelCoordination: segmentationChannelCoordination, pointScope, pointLayerCoordination }, `combined-${segScope}-${pointScope}`)), pointLayerScopes && reversedPointLayerScopes.map((layerScope) => jsx$1(PointLayerController, { theme, layerScope, layerCoordination: pointLayerCoordination[0][layerScope], setLayerCoordination: pointLayerCoordination[1][layerScope], pointMatrixIndicesData: pointMultiIndicesData?.[layerScope], tiledPointsLoadingProgress, layerPerFeatureForPoints }, layerScope)), spotLayerScopes && reversedSpotLayerScopes.map((layerScope) => jsx$1(SpotLayerController, { theme, layerScope, layerCoordination: spotLayerCoordination[0][layerScope], setLayerCoordination: spotLayerCoordination[1][layerScope] }, layerScope)), segmentationLayerScopes && reversedSegmentationLayerScopes.map((layerScope) => jsx$1(SegmentationLayerController, { theme, layerScope, layerCoordination: segmentationLayerCoordination[0][layerScope], setLayerCoordination: segmentationLayerCoordination[1][layerScope], channelScopes: segmentationChannelScopesByLayer[layerScope], channelCoordination: segmentationChannelCoordination[0][layerScope], setChannelCoordination: segmentationChannelCoordination[1][layerScope] }, layerScope)), imageLayerScopes && reversedImageLayerScopes.map((layerScope) => jsx$1(ImageLayerController, { theme, coordinationScopesRaw, layerScope, layerCoordination: imageLayerCoordination[0][layerScope], setLayerCoordination: imageLayerCoordination[1][layerScope], channelScopes: imageChannelScopesByLayer[layerScope], channelCoordination: imageChannelCoordination[0][layerScope], setChannelCoordination: imageChannelCoordination[1][layerScope], image: images[layerScope]?.image?.instance, featureIndex: images[layerScope]?.featureIndex, targetT, targetZ, spatialRenderingMode, volumeLoadingProgress: volumeLoadingStatus?.loadingProgress, onStopVolumeLoading: volumeLoadingStatus?.onStopLoading, onRestartVolumeLoading: volumeLoadingStatus?.onRestartLoading, volumeStillRef: volumeLoadingStatus?.stillRef }, layerScope))] });
268695
268782
  }
268696
268783
  function LayerControllerSubscriber(props) {
268697
- const { coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: title2 = "Spatial Layers", uuid: uuid2, layerPerFeatureForPoints = false, cameraPresets, helpText = ViewHelpMapping.LAYER_CONTROLLER_BETA } = props;
268784
+ const { coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: title2 = "Spatial Layers", uuid: uuid2, layerPerFeatureForPoints = false, globalDisable3d = false, cameraPresets, helpText = ViewHelpMapping.LAYER_CONTROLLER_BETA } = props;
268698
268785
  const loaders = useLoaders();
268699
268786
  const mergeCoordination = useMergeCoordination();
268700
268787
  const coordinationScopes = useCoordinationScopes(coordinationScopesRaw);
@@ -268885,7 +268972,7 @@ function LayerControllerSubscriber(props) {
268885
268972
  imageDataStatus,
268886
268973
  pointMultiIndicesDataStatus
268887
268974
  ]);
268888
- return jsx$1(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, isReady, errors, helpText, children: jsx$1(LayerController, { theme, coordinationScopesRaw, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, images: imageData, imageLayerScopes, imageLayerCoordination, targetT, targetZ, setTargetT, setTargetZ, spatialRenderingMode, setSpatialRenderingMode, imageChannelScopesByLayer, imageChannelCoordination, spotLayerScopes, spotLayerCoordination, pointLayerScopes, pointLayerCoordination, pointMultiIndicesData, layerPerFeatureForPoints, volumeLoadingStatus, tiledPointsLoadingProgress, centroidSegmentationPairs: centroidSegmentationPairs.pairs, pairedSegScopes: centroidSegmentationPairs.pairedSegScopes, pairedPointScopes: centroidSegmentationPairs.pairedPointScopes }) });
268975
+ return jsx$1(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, isReady, errors, helpText, children: jsx$1(LayerController, { theme, coordinationScopesRaw, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, images: imageData, imageLayerScopes, imageLayerCoordination, targetT, targetZ, setTargetT, setTargetZ, spatialRenderingMode, setSpatialRenderingMode, imageChannelScopesByLayer, imageChannelCoordination, spotLayerScopes, spotLayerCoordination, pointLayerScopes, pointLayerCoordination, pointMultiIndicesData, layerPerFeatureForPoints, globalDisable3d, volumeLoadingStatus, tiledPointsLoadingProgress, centroidSegmentationPairs: centroidSegmentationPairs.pairs, pairedSegScopes: centroidSegmentationPairs.pairedSegScopes, pairedPointScopes: centroidSegmentationPairs.pairedPointScopes }) });
268889
268976
  }
268890
268977
  const isIterable$2 = (obj) => Symbol.iterator in obj;
268891
268978
  const hasIterableEntries = (value2) => (
@@ -270800,7 +270887,7 @@ function HiglassGlobalStyles(props) {
270800
270887
  }
270801
270888
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
270802
270889
  const LazyHiGlassComponent = React__default.lazy(async () => {
270803
- const { HiGlassComponent } = await import("./higlass-CKuPDg4y.js");
270890
+ const { HiGlassComponent } = await import("./higlass-BAzAjF0O.js");
270804
270891
  return { default: HiGlassComponent };
270805
270892
  });
270806
270893
  const HG_SIZE = 800;
@@ -273757,7 +273844,7 @@ function NeuroglancerGlobalStyles(props) {
273757
273844
  const { classes: classes2 } = props;
273758
273845
  return jsxs(Fragment, { children: [jsx$1(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsx$1(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
273759
273846
  }
273760
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-C2C-vEVu.js"));
273847
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BIKD9asK.js"));
273761
273848
  function createWorker() {
273762
273849
  const worker = new WorkerFactory$1();
273763
273850
  worker.AsyncComputationWorker = WorkerFactory;
@@ -273851,22 +273938,6 @@ class NeuroglancerComp extends PureComponent {
273851
273938
  return jsxs(Fragment, { children: [jsx$1(NeuroglancerGlobalStyles, { classes: classes2 }), jsx$1("div", { className: classes2.neuroglancerWrapper, children: jsx$1(Suspense, { fallback: jsx$1("div", { children: "Loading..." }), children: jsx$1(LazyReactNeuroglancer, { brainMapsClientId: "NOT_A_VALID_ID", viewerState, onViewerStateChanged: this.onViewerStateChanged, onLayerLoadingChange, bundleRoot: this.bundleRoot, cellColorMapping, ref: this.onRef, onAnnotationSourceReady, onViewerReady, meshOpacity }) }) })] });
273852
273939
  }
273853
273940
  }
273854
- function useMemoCustomComparison(factory2, dependencies2, customIsEqual) {
273855
- const ref2 = useRef(
273856
- /** @type {{ deps: any; value: T } | undefined} */
273857
- void 0
273858
- );
273859
- if (ref2.current === void 0 || !customIsEqual(ref2.current.deps, dependencies2)) {
273860
- ref2.current = { deps: dependencies2, value: factory2() };
273861
- }
273862
- return ref2.current.value;
273863
- }
273864
- const shallowDiff = (prevDeps, nextDeps, depName) => prevDeps[depName] !== nextDeps[depName];
273865
- const shallowDiffByLayer = (prevDeps, nextDeps, depName, scopeName) => prevDeps?.[depName]?.[scopeName] !== nextDeps?.[depName]?.[scopeName];
273866
- const shallowDiffByChannel = (prevDeps, nextDeps, depName, firstName, secondName) => prevDeps?.[depName]?.[firstName]?.[secondName] !== nextDeps?.[depName]?.[firstName]?.[secondName];
273867
- const shallowDiffByChannelWithKeys = (prevDeps, nextDeps, depName, firstName, secondName, keys2) => keys2.some((k) => prevDeps?.[depName]?.[firstName]?.[secondName]?.[k] !== nextDeps?.[depName]?.[firstName]?.[secondName]?.[k]);
273868
- const shallowDiffByLayerCoordinationWithKeys = (prevDeps, nextDeps, depName, layerScope, keys2) => keys2.some((k) => prevDeps?.[depName]?.[0]?.[layerScope]?.[k] !== nextDeps?.[depName]?.[0]?.[layerScope]?.[k]);
273869
- const shallowDiffByChannelCoordinationWithKeys = (prevDeps, nextDeps, depName, layerScope, channelScope, keys2) => keys2.some((k) => prevDeps?.[depName]?.[0]?.[layerScope]?.[channelScope]?.[k] !== nextDeps?.[depName]?.[0]?.[layerScope]?.[channelScope]?.[k]);
273870
273941
  function customIsEqualForCellColors(prevDeps, nextDeps) {
273871
273942
  let forceUpdate = false;
273872
273943
  const curriedShallowDiff = (depName) => shallowDiff(prevDeps, nextDeps, depName);
@@ -328013,7 +328084,7 @@ const VEGA_THEMES = {
328013
328084
  };
328014
328085
  const DATASET_NAME = "table";
328015
328086
  function VegaGlobalStyles() {
328016
- const { theme } = useStyles$z();
328087
+ const { theme } = useStyles$A();
328017
328088
  return jsx$1(GlobalStyles$3, { styles: {
328018
328089
  "#vg-tooltip-element.vg-tooltip.custom-theme": {
328019
328090
  boxShadow: "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)",
@@ -328047,7 +328118,7 @@ function renderTooltipContents(tooltipText) {
328047
328118
  }
328048
328119
  function VegaPlot(props) {
328049
328120
  const { spec: partialSpec, data: data2, getTooltipText, signalListeners, renderer = "svg", onNewView } = props;
328050
- const { classes: tooltipClasses2 } = useStyles$u();
328121
+ const { classes: tooltipClasses2 } = useStyles$v();
328051
328122
  const tooltipHandler = useMemo$1(() => {
328052
328123
  if (typeof getTooltipText === "function") {
328053
328124
  const tooltipConfig = {
@@ -333626,7 +333697,26 @@ class ImageWrapper {
333626
333697
  }
333627
333698
  return true;
333628
333699
  }
333629
- getData() {
333700
+ // TODO: make stripPhysicalSizes the default behavior,
333701
+ // and remove it as a parameter, once it is no longer
333702
+ // used by spatial-accelerated and spatial-three.
333703
+ getData(stripPhysicalSizes = true) {
333704
+ if (stripPhysicalSizes) {
333705
+ const { data: data2 } = this.vivLoader;
333706
+ const newData = data2.map((d) => {
333707
+ if ("meta" in d) {
333708
+ const { meta } = d;
333709
+ if (meta && "physicalSizes" in meta) {
333710
+ const newMeta = { ...meta, physicalSizes: void 0 };
333711
+ const clone2 = Object.create(Object.getPrototypeOf(d));
333712
+ Object.assign(clone2, d, { meta: newMeta });
333713
+ return clone2;
333714
+ }
333715
+ }
333716
+ return d;
333717
+ });
333718
+ return newData;
333719
+ }
333630
333720
  return this.vivLoader.data;
333631
333721
  }
333632
333722
  getModelMatrix() {
@@ -3,7 +3,7 @@ import React__default, { useRef, useState, useEffect, Suspense, forwardRef } fro
3
3
  import { Canvas } from "@react-three/fiber";
4
4
  import { Center, Text, Line, Bvh, OrbitControls } from "@react-three/drei";
5
5
  import { Matrix3, Matrix4, Vector3, Vector2, UniformsUtils, Data3DTexture, RedFormat, FloatType, LinearFilter, FrontSide, Scene, Group, MeshPhysicalMaterial, MeshBasicMaterial, MeshStandardMaterial, BackSide } from "three";
6
- import { C as CoordinationType, g as getImageSize } from "./index-D-cJewP-.js";
6
+ import { C as CoordinationType, g as getImageSize } from "./index-BMSAuguS.js";
7
7
  function MeasureLine({ currentLine, scale }) {
8
8
  const textRef = useRef(null);
9
9
  return jsxs("group", { children: [jsx(Center, { bottom: true, right: true, position: [currentLine.midPoint.x, currentLine.midPoint.y, currentLine.midPoint.z], rotation: [0, 0, 0], children: jsx(Text, { color: "gray", scale: 0.05, ref: textRef, children: `${(currentLine.startPoint.distanceTo(currentLine.endPoint) * scale).toFixed(2)} µm` }) }), jsx(Line, {
@@ -581,7 +581,8 @@ const renderingModeMap = {
581
581
  };
582
582
  function extractInformationFromProps(layerScope, layerCoordination, channelScopes, channelCoordination, image, props) {
583
583
  const { spatialRenderingMode } = props;
584
- const data = image?.image?.instance?.getData();
584
+ const stripPhysicalSizes = false;
585
+ const data = image?.image?.instance?.getData(stripPhysicalSizes);
585
586
  if (!data) {
586
587
  return {
587
588
  channelsVisible: null,
@@ -944,8 +945,8 @@ function GeometryAndMesh(props) {
944
945
  setObsHighlight(e.object.name);
945
946
  }, onPointerOut: () => setObsHighlight(null) }) })] }) : null, renderingSettings.uniforms && renderingSettings.shader && renderingSettings.meshScale && renderingSettings.geometrySize ? jsx("group", { children: jsxs("mesh", { scale: renderingSettings.meshScale, ref: materialRef, children: [jsx("boxGeometry", { args: renderingSettings.geometrySize }), jsx("shaderMaterial", { customProgramCacheKey: () => "1", side: FrontSide, uniforms: renderingSettings.uniforms, needsUpdate: true, transparent: true, vertexShader: renderingSettings.shader.vertexShader, fragmentShader: renderingSettings.shader.fragmentShader })] }) }) : null] }), jsx("group", { name: "lines", children: lines.map((object) => jsx(MeasureLine, { currentLine: object, scale: 1 }, stringifyLineData(object))) })] });
946
947
  }
947
- const LazyGeometryAndMeshXR = React__default.lazy(() => import("./GeometryAndMeshXR-DsObDSMF.js").catch(() => ({ default: GeometryAndMesh })));
948
- const LazyXRSceneComponents = React__default.lazy(() => import("./XRSceneComponents-BgZ4J_JS.js").catch(() => ({ default: () => null })));
948
+ const LazyGeometryAndMeshXR = React__default.lazy(() => import("./GeometryAndMeshXR-CkzTsWCM.js").catch(() => ({ default: GeometryAndMesh })));
949
+ const LazyXRSceneComponents = React__default.lazy(() => import("./XRSceneComponents-BXLKYaoc.js").catch(() => ({ default: () => null })));
949
950
  function SpatialThree(props) {
950
951
  const materialRef = useRef(null);
951
952
  const orbitRef = useRef(null);
@@ -1302,13 +1303,13 @@ function getXRModule() {
1302
1303
  }
1303
1304
  const LazyXRWrapper = React__default.lazy(
1304
1305
  // eslint-disable-next-line implicit-arrow-linebreak, function-paren-newline
1305
- () => import("./XRWrapper-BLKqjWwm.js").catch(() => ({
1306
+ () => import("./XRWrapper-Bn2BWlKq.js").catch(() => ({
1306
1307
  default: ({ children }) => children
1307
1308
  }))
1308
1309
  );
1309
1310
  const LazyXREnterButton = React__default.lazy(
1310
1311
  // eslint-disable-next-line implicit-arrow-linebreak, function-paren-newline
1311
- () => import("./XREnterButton-B6j_tE1d.js").catch(() => ({
1312
+ () => import("./XREnterButton-BW9c-kaX.js").catch(() => ({
1312
1313
  default: () => null
1313
1314
  }))
1314
1315
  );
@@ -4,7 +4,7 @@ import { useThree, useFrame, Canvas } from "@react-three/fiber";
4
4
  import { OrbitControls } from "@react-three/drei";
5
5
  import * as THREE from "three";
6
6
  import { Data3DTexture, RedFormat, UnsignedByteType, LinearFilter, RedIntegerFormat, UnsignedIntType, NearestFilter, Vector3, Vector2, Vector4, UniformsUtils } from "three";
7
- import { l as log, i as isEqual, C as CoordinationType, u as useEventCallback } from "./index-D-cJewP-.js";
7
+ import { l as log, i as isEqual, C as CoordinationType, u as useEventCallback } from "./index-BMSAuguS.js";
8
8
  const LogLevel = {
9
9
  INFO: "info",
10
10
  WARN: "warn",
@@ -537,7 +537,8 @@ class VolumeDataManager {
537
537
  const shapes = _resolutionStatsToShapes(multiResolutionStats);
538
538
  const resolutions = multiResolutionStats.length;
539
539
  this.zarrStore.resolutions = resolutions;
540
- const vivData = imageWrapper.getData();
540
+ const stripPhysicalSizes = false;
541
+ const vivData = imageWrapper.getData(stripPhysicalSizes);
541
542
  if (!Array.isArray(vivData) || vivData.length < 1) {
542
543
  throw new Error("Not a multiresolution loader");
543
544
  }
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a2, a1 } from "./index-D-cJewP-.js";
1
+ import { a2, a1 } from "./index-BMSAuguS.js";
2
2
  export {
3
3
  a2 as ControlledLauncher,
4
4
  a1 as UncontrolledLauncher
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-D-cJewP-.js";
1
+ import { B as BaseDecoder } from "./index-BMSAuguS.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 { a as getDefaultExportFromCjs, B as BaseDecoder, L as LercParameters, b as LercAddCompression } from "./index-D-cJewP-.js";
2
+ import { a as getDefaultExportFromCjs, B as BaseDecoder, L as LercParameters, b as LercAddCompression } from "./index-BMSAuguS.js";
3
3
  var LercDecode = { exports: {} };
4
4
  var hasRequiredLercDecode;
5
5
  function requireLercDecode() {
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-D-cJewP-.js";
1
+ import { B as BaseDecoder } from "./index-BMSAuguS.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 { B as BaseDecoder } from "./index-D-cJewP-.js";
1
+ import { B as BaseDecoder } from "./index-BMSAuguS.js";
2
2
  class PackbitsDecoder extends BaseDecoder {
3
3
  decodeBlock(buffer) {
4
4
  const dataView = new DataView(buffer);
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-D-cJewP-.js";
1
+ import { B as BaseDecoder } from "./index-BMSAuguS.js";
2
2
  class RawDecoder extends BaseDecoder {
3
3
  decodeBlock(buffer) {
4
4
  return buffer;
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-D-cJewP-.js";
1
+ import { B as BaseDecoder } from "./index-BMSAuguS.js";
2
2
  class WebImageDecoder extends BaseDecoder {
3
3
  constructor() {
4
4
  super();
@@ -1,4 +1,4 @@
1
- import { g as getXRModule } from "./index-CA6Y_Dls.js";
1
+ import { g as getXRModule } from "./index-CHThyhx2.js";
2
2
  const xrStore = getXRModule().createXRStore({
3
3
  handTracking: true,
4
4
  emulate: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/launcher",
3
- "version": "4.0.2",
3
+ "version": "4.0.4",
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/constants-internal": "4.0.2",
24
- "@vitessce/example-configs": "4.0.2",
25
- "@vitessce/example-plugins": "4.0.2",
26
- "@vitessce/all": "4.0.2",
27
- "@vitessce/globals": "4.0.2",
28
- "@vitessce/config": "4.0.2",
29
- "@vitessce/styles": "4.0.2",
30
- "@vitessce/vit-s": "4.0.2"
23
+ "@vitessce/all": "4.0.4",
24
+ "@vitessce/constants-internal": "4.0.4",
25
+ "@vitessce/example-configs": "4.0.4",
26
+ "@vitessce/globals": "4.0.4",
27
+ "@vitessce/example-plugins": "4.0.4",
28
+ "@vitessce/styles": "4.0.4",
29
+ "@vitessce/vit-s": "4.0.4",
30
+ "@vitessce/config": "4.0.4"
31
31
  },
32
32
  "devDependencies": {
33
33
  "react": "19.2.6",