@vitessce/all 4.0.3 → 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-CwGBUQIk.js";
6
+ import { g as getXRModule, i as isValidGeometrySize, M as MeasureLine, s as stringifyLineData } from "./index-JE2SuNrQ.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-B8FH88N6.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-BnKmchw3.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-Dhi1LSJi.js";
3
+ import { x as xrStore } from "./xrStore-D2rxhSUn.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-CwGBUQIk.js";
4
+ import { g as getXRModule } from "./index-JE2SuNrQ.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-CwGBUQIk.js";
3
- import { x as xrStore } from "./xrStore-Dhi1LSJi.js";
2
+ import { g as getXRModule } from "./index-JE2SuNrQ.js";
3
+ import { x as xrStore } from "./xrStore-D2rxhSUn.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-B8FH88N6.js";
2
+ import { B as BaseDecoder } from "./index-BnKmchw3.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-B8FH88N6.js";
3
+ import { r as requireObjectAssign, a as getDefaultExportFromCjs$1, c as commonjsGlobal, e as earcut } from "./index-BnKmchw3.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,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import React__default, { useContext, forwardRef as forwardRef$1, useRef, useMemo as useMemo$1, createContext, createElement, isValidElement, cloneElement, Children, PureComponent, useEffect, useState, version as version$6, useLayoutEffect as useLayoutEffect$1, useImperativeHandle, Component as Component$1, useCallback, Suspense, useReducer } from "react";
3
- 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 } from "@vitessce/vit-s";
3
+ 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 } from "@vitessce/vit-s";
4
4
  import { jsx as jsx$1, jsxs, Fragment } from "react/jsx-runtime";
5
5
  import * as ReactDOM from "react-dom";
6
6
  import ReactDOM__default, { createPortal } from "react-dom";
@@ -18376,7 +18376,7 @@ const { tss } = createTss({
18376
18376
  },
18377
18377
  "usePlugin": useMuiThemeStyleOverridesPlugin
18378
18378
  });
18379
- const useStyles$y = tss.create({});
18379
+ const useStyles$z = tss.create({});
18380
18380
  function createChainedFunction$1(...funcs) {
18381
18381
  return funcs.reduce((acc, func) => {
18382
18382
  if (func == null) {
@@ -72664,7 +72664,7 @@ const Popper = React.forwardRef((props, ref2) => {
72664
72664
  }, [handlePopperRef]);
72665
72665
  React.useImperativeHandle(popperRefProp, () => popperRef.current, []);
72666
72666
  const [exited, setExited] = React.useState(true);
72667
- const { theme } = useStyles$y();
72667
+ const { theme } = useStyles$z();
72668
72668
  const rtlPlacement = flipPlacement(initialPlacement, theme);
72669
72669
  const [placement, setPlacement] = React.useState(rtlPlacement);
72670
72670
  React.useEffect(() => {
@@ -73398,7 +73398,7 @@ var VariableSizeList$1 = /* @__PURE__ */ createListComponent({
73398
73398
  });
73399
73399
  const VariableSizeList = VariableSizeList$1;
73400
73400
  const LIST_ROW_HEIGHT$1 = 48;
73401
- const useStyles$x = makeStyles()(() => ({
73401
+ const useStyles$y = makeStyles()(() => ({
73402
73402
  searchInput: {
73403
73403
  lineHeight: "initial",
73404
73404
  height: "auto !important"
@@ -73438,7 +73438,7 @@ const ListboxComponent$1 = React__default.forwardRef((props, ref2) => {
73438
73438
  });
73439
73439
  function SimpleAutocomplete(props) {
73440
73440
  const { getMatches, onChange, textInputLabel = "Enter a gene", getItemLabel = (option) => option.label } = props;
73441
- const { classes: classes2 } = useStyles$x();
73441
+ const { classes: classes2 } = useStyles$y();
73442
73442
  const [potentialItems, setPotentialItems] = useState([]);
73443
73443
  const handleInputChange = async (_event, value2) => {
73444
73444
  if (!value2) {
@@ -82988,7 +82988,7 @@ function defaultUrlTransform(value2) {
82988
82988
  }
82989
82989
  return "";
82990
82990
  }
82991
- const useStyles$w = makeStyles()((theme) => ({
82991
+ const useStyles$x = makeStyles()((theme) => ({
82992
82992
  description: {
82993
82993
  "& p, details, table": {
82994
82994
  fontSize: "80%",
@@ -83025,7 +83025,7 @@ const useStyles$w = makeStyles()((theme) => ({
83025
83025
  }));
83026
83026
  function Description(props) {
83027
83027
  const { description: description2, metadata: metadata2, descriptionType } = props;
83028
- const { classes: classes2 } = useStyles$w();
83028
+ const { classes: classes2 } = useStyles$x();
83029
83029
  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)] });
83030
83030
  }
83031
83031
  function DescriptionSubscriber(props) {
@@ -98135,7 +98135,7 @@ const Tooltip$2 = /* @__PURE__ */ React.forwardRef((props, ref2) => {
98135
98135
  }, extraProps), getChildren());
98136
98136
  });
98137
98137
  const nodeHeight = 32;
98138
- const useStyles$v = makeStyles()((theme) => ({
98138
+ const useStyles$w = makeStyles()((theme) => ({
98139
98139
  setsManager: {
98140
98140
  position: "relative",
98141
98141
  width: "100%",
@@ -98302,7 +98302,7 @@ const useStyles$v = makeStyles()((theme) => ({
98302
98302
  }));
98303
98303
  function SetsManagerTreeGlobalStyles(props) {
98304
98304
  const { classes: classes2 } = props;
98305
- const { theme } = useStyles$y();
98305
+ const { theme } = useStyles$z();
98306
98306
  return jsx$1(ScopedGlobalStyles, { parentClassName: classes2.setsManagerTree, styles: {
98307
98307
  ".rc-tree": {
98308
98308
  paddingLeft: "0",
@@ -98643,7 +98643,7 @@ function HelpTooltipGlobalStyles(props) {
98643
98643
  }
98644
98644
  function PopoverGlobalStyles(props) {
98645
98645
  const { classes: classes2 } = props;
98646
- const { theme } = useStyles$y();
98646
+ const { theme } = useStyles$z();
98647
98647
  return jsx$1(ScopedGlobalStyles, { parentClassName: classes2.popover, styles: {
98648
98648
  ".rc-tooltip-inner": {
98649
98649
  boxSizing: "border-box",
@@ -103327,7 +103327,7 @@ function NamedSetNodeStatic(props) {
103327
103327
  const onClick = level === 0 && !expanded ? () => onCheckLevel(nodeKey, nextLevelToCheck) : () => onNodeView(path2);
103328
103328
  const tooltipProps = disableTooltip ? { visible: false } : {};
103329
103329
  const popoverMenuConfig = makeNodeViewMenuConfig(props);
103330
- const { classes: classes2 } = useStyles$v();
103330
+ const { classes: classes2 } = useStyles$w();
103331
103331
  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 })] });
103332
103332
  }
103333
103333
  function NamedSetNodeEditing(props) {
@@ -103339,7 +103339,7 @@ function NamedSetNodeEditing(props) {
103339
103339
  onNodeSetName(path2, currentTitle, true);
103340
103340
  }
103341
103341
  }
103342
- const { classes: classes2 } = useStyles$v();
103342
+ const { classes: classes2 } = useStyles$w();
103343
103343
  return jsxs("span", { className: classes2.titleButtonWithInput, children: [jsx$1("input", {
103344
103344
  // eslint-disable-next-line jsx-a11y/no-autofocus
103345
103345
  autoFocus: true,
@@ -103365,7 +103365,7 @@ function LevelsButtons(props) {
103365
103365
  onCheckLevel(nodeKey, newLevel);
103366
103366
  }
103367
103367
  }
103368
- const { classes: classes2 } = useStyles$v();
103368
+ const { classes: classes2 } = useStyles$w();
103369
103369
  return jsx$1("div", { className: classes2.levelButtonsContainer, children: range$e(1, height2 + 1).map((i2) => {
103370
103370
  const isChecked = isEqual$3(path2, checkedLevelPath) && i2 === checkedLevelIndex;
103371
103371
  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);
@@ -103449,7 +103449,7 @@ let TreeNode$1 = class TreeNode extends TreeNode$2 {
103449
103449
  };
103450
103450
  function PlusButton(props) {
103451
103451
  const { datatype, onError, onImportTree, onCreateLevelZeroNode, importable, editable } = props;
103452
- const { classes: classes2 } = useStyles$v();
103452
+ const { classes: classes2 } = useStyles$w();
103453
103453
  const onImport = useCallback((importHandler, mimeType) => () => {
103454
103454
  const uploadInputNode = document.createElement("input");
103455
103455
  uploadInputNode.setAttribute("type", "file");
@@ -103566,7 +103566,7 @@ function SetsManager(props) {
103566
103566
  }, onNodeCheckNewName, onNodeSetIsEditing: setIsEditingNodeName, onNodeRemove, onExportLevelZeroNodeJSON, onExportLevelZeroNodeTabular, onExportSetJSON, disableTooltip: isDragging, onDragStart: () => setIsDragging(true), onDragEnd: () => setIsDragging(false), children: renderTreeNodes(node2.children, readOnly, newPath) }, pathToKey(newPath));
103567
103567
  });
103568
103568
  }
103569
- const { classes: classes2 } = useStyles$v();
103569
+ const { classes: classes2 } = useStyles$w();
103570
103570
  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) => {
103571
103571
  const { eventKey: dropKey } = info2.node.props;
103572
103572
  const { eventKey: dragKey } = info2.dragNode.props;
@@ -209531,22 +209531,22 @@ async function getDecoder(fileDirectory) {
209531
209531
  const Decoder = await importFn();
209532
209532
  return new Decoder(fileDirectory);
209533
209533
  }
209534
- addDecoder([void 0, 1], () => import("./raw-UWcztCkw.js").then((m2) => m2.default));
209535
- addDecoder(5, () => import("./lzw-xVcb3-tK.js").then((m2) => m2.default));
209534
+ addDecoder([void 0, 1], () => import("./raw-Y5j8FDrQ.js").then((m2) => m2.default));
209535
+ addDecoder(5, () => import("./lzw-B1XPe-af.js").then((m2) => m2.default));
209536
209536
  addDecoder(6, () => {
209537
209537
  throw new Error("old style JPEG compression is not supported.");
209538
209538
  });
209539
- addDecoder(7, () => import("./jpeg-9VJS3-Bw.js").then((m2) => m2.default));
209540
- addDecoder([8, 32946], () => import("./deflate-BnG3V84V.js").then((m2) => m2.default));
209541
- addDecoder(32773, () => import("./packbits-Dm4fdK8S.js").then((m2) => m2.default));
209539
+ addDecoder(7, () => import("./jpeg-DOW9md97.js").then((m2) => m2.default));
209540
+ addDecoder([8, 32946], () => import("./deflate-BtdFXYzo.js").then((m2) => m2.default));
209541
+ addDecoder(32773, () => import("./packbits-DI5XXjyK.js").then((m2) => m2.default));
209542
209542
  addDecoder(
209543
209543
  34887,
209544
- () => import("./lerc-D1J26SPX.js").then(async (m2) => {
209544
+ () => import("./lerc-udUVD1VM.js").then(async (m2) => {
209545
209545
  await m2.zstd.init();
209546
209546
  return m2;
209547
209547
  }).then((m2) => m2.default)
209548
209548
  );
209549
- addDecoder(50001, () => import("./webimage-C-QWVV-f.js").then((m2) => m2.default));
209549
+ addDecoder(50001, () => import("./webimage-C8U2Oy62.js").then((m2) => m2.default));
209550
209550
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
209551
209551
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
209552
209552
  }
@@ -226320,7 +226320,7 @@ class ContourLayerWithText extends ContourLayer {
226320
226320
  }
226321
226321
  ContourLayerWithText.layerName = "ContourLayerWithText";
226322
226322
  ContourLayerWithText.defaultProps = defaultProps;
226323
- const useStyles$u = makeStyles()(() => ({
226323
+ const useStyles$v = makeStyles()(() => ({
226324
226324
  toolButton: {
226325
226325
  display: "inline-flex",
226326
226326
  "&:active": {
@@ -226382,12 +226382,12 @@ const useStyles$u = makeStyles()(() => ({
226382
226382
  }));
226383
226383
  function IconTool(props) {
226384
226384
  const { alt, onClick, isActive: isActive2, children: children3 } = props;
226385
- const { classes: classes2 } = useStyles$u();
226385
+ const { classes: classes2 } = useStyles$v();
226386
226386
  return jsx$1("button", { className: clsx(classes2.toolIcon, { [classes2.toolActive]: isActive2 }), onClick, type: "button", title: alt, children: children3 });
226387
226387
  }
226388
226388
  function IconButton(props) {
226389
226389
  const { alt, onClick, children: children3 } = props;
226390
- const { classes: classes2 } = useStyles$u();
226390
+ const { classes: classes2 } = useStyles$v();
226391
226391
  return jsx$1("button", { className: clsx(classes2.toolIcon, classes2.toolButton), onClick, type: "button", title: alt, children: children3 });
226392
226392
  }
226393
226393
  function ToolMenu(props) {
@@ -226395,7 +226395,7 @@ function ToolMenu(props) {
226395
226395
  const lassoIconAltText = "Select lasso";
226396
226396
  const { setActiveTool, activeTool, visibleTools = { pan: true, selectLasso: true, recenter: true }, recenterOnClick = () => {
226397
226397
  } } = props;
226398
- const { classes: classes2 } = useStyles$u();
226398
+ const { classes: classes2 } = useStyles$v();
226399
226399
  const onRecenterButtonCLick = () => {
226400
226400
  recenterOnClick();
226401
226401
  };
@@ -227552,7 +227552,7 @@ function ScatterplotOptions(props) {
227552
227552
  id: `feature-aggregation-strategy-${scatterplotOptionsId}`
227553
227553
  }, children: FEATURE_AGGREGATION_STRATEGIES$2.map((opt) => jsx$1("option", { value: opt, children: capitalize$3(opt) }, opt)) }) })] }) : null] });
227554
227554
  }
227555
- const useStyles$t = makeStyles()((theme) => ({
227555
+ const useStyles$u = makeStyles()((theme) => ({
227556
227556
  tooltipAnchor: {
227557
227557
  position: "relative",
227558
227558
  width: "0px",
@@ -227583,7 +227583,7 @@ const useStyles$t = makeStyles()((theme) => ({
227583
227583
  function Tooltip3(props) {
227584
227584
  const { x: x2, y: y2, parentWidth, parentHeight, children: children3 } = props;
227585
227585
  const ref2 = useRef();
227586
- const { classes: classes2 } = useStyles$t();
227586
+ const { classes: classes2 } = useStyles$u();
227587
227587
  const [placementX, setPlacementX] = useState("start");
227588
227588
  const [placementY, setPlacementY] = useState("bottom");
227589
227589
  const getTooltipContainer = useVitessceContainer(ref2);
@@ -227599,7 +227599,7 @@ function Tooltip3(props) {
227599
227599
  }, [x2, y2, parentWidth, parentHeight]);
227600
227600
  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 });
227601
227601
  }
227602
- const useStyles$s = makeStyles()((theme) => ({
227602
+ const useStyles$t = makeStyles()((theme) => ({
227603
227603
  cellEmphasisCrosshair: {
227604
227604
  zIndex: 50,
227605
227605
  position: "absolute",
@@ -227610,7 +227610,7 @@ const useStyles$s = makeStyles()((theme) => ({
227610
227610
  }));
227611
227611
  function Tooltip2D(props) {
227612
227612
  const { parentUuid, sourceUuid, x: x2, y: y2, parentWidth, parentHeight, children: children3 } = props;
227613
- const { classes: classes2 } = useStyles$s();
227613
+ const { classes: classes2 } = useStyles$t();
227614
227614
  if (x2 < 0 || x2 > parentWidth || y2 < 0 || y2 > parentHeight) {
227615
227615
  return null;
227616
227616
  }
@@ -231522,7 +231522,7 @@ function getXlinkHref(cmap) {
231522
231522
  const xlinkHref = ramp(color2.copy().domain(quantize$3(interpolate$1$1(0, 1), n3))).toDataURL();
231523
231523
  return xlinkHref;
231524
231524
  }
231525
- const useStyles$r = makeStyles()(() => ({
231525
+ const useStyles$s = makeStyles()(() => ({
231526
231526
  legend: {
231527
231527
  position: "relative",
231528
231528
  // Needed for absolute positioning of slider overlay
@@ -231719,7 +231719,7 @@ function Legend(props) {
231719
231719
  contourThresholds
231720
231720
  } = props;
231721
231721
  const svgRef = useRef(null);
231722
- const { classes: classes2 } = useStyles$r();
231722
+ const { classes: classes2 } = useStyles$s();
231723
231723
  const [localRange, setLocalRange] = useState(featureValueColormapRange);
231724
231724
  useEffect(() => {
231725
231725
  setLocalRange(featureValueColormapRange);
@@ -232053,7 +232053,7 @@ function Legend(props) {
232053
232053
  }
232054
232054
  } })] })] });
232055
232055
  }
232056
- const useStyles$q = makeStyles()(() => ({
232056
+ const useStyles$r = makeStyles()(() => ({
232057
232057
  multiLegend: {
232058
232058
  position: "absolute",
232059
232059
  top: "0px",
@@ -232080,7 +232080,7 @@ function MultiLegend(props) {
232080
232080
  pointLayerCoordination,
232081
232081
  pointMultiIndicesData
232082
232082
  } = props;
232083
- const { classes: classes2 } = useStyles$q();
232083
+ const { classes: classes2 } = useStyles$r();
232084
232084
  const reversedSegmentationLayerScopes = useMemo$1(() => [...segmentationLayerScopes || []].reverse(), [segmentationLayerScopes]);
232085
232085
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
232086
232086
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].reverse(), [pointLayerScopes]);
@@ -232173,7 +232173,7 @@ function MultiLegend(props) {
232173
232173
  }) : null;
232174
232174
  }) : null] });
232175
232175
  }
232176
- const useStyles$p = makeStyles()(() => ({
232176
+ const useStyles$q = makeStyles()(() => ({
232177
232177
  channelNamesLegendContainer: {
232178
232178
  position: "absolute",
232179
232179
  bottom: "0px",
@@ -232196,7 +232196,7 @@ const useStyles$p = makeStyles()(() => ({
232196
232196
  }));
232197
232197
  function ChannelNamesLegend(props) {
232198
232198
  const { images, imageLayerScopes, imageLayerCoordination, imageChannelScopesByLayer, imageChannelCoordination } = props;
232199
- const { classes: classes2 } = useStyles$p();
232199
+ const { classes: classes2 } = useStyles$q();
232200
232200
  const reversedImageLayerScopes = useMemo$1(() => [...imageLayerScopes || []].reverse(), [imageLayerScopes]);
232201
232201
  return jsx$1("div", { className: classes2.channelNamesLegendContainer, children: imageLayerScopes ? reversedImageLayerScopes.map((layerScope) => {
232202
232202
  const layerCoordination = imageLayerCoordination[0][layerScope];
@@ -252002,7 +252002,7 @@ const ToggleFixedAxisButton = ({ setSpatialAxisFixed, spatialAxisFixed, use3d })
252002
252002
  id: `spatial-camera-axis-${toggleAxisId}`
252003
252003
  } } }) })] });
252004
252004
  };
252005
- function SpatialOptions(props) {
252005
+ function SpatialOptions$1(props) {
252006
252006
  const { observationsLabel, cellColorEncoding, setCellColorEncoding, setSpatialAxisFixed, spatialAxisFixed, use3d, tooltipsVisible, setTooltipsVisible, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, canShowExpressionOptions, canShowColorEncodingOption, canShow3DOptions, featureAggregationStrategy, setFeatureAggregationStrategy } = props;
252007
252007
  const spatialOptionsId = $bdb11010cef70236$export$f680877a34711e37();
252008
252008
  function handleGeneExpressionColormapChange(event2) {
@@ -252316,7 +252316,7 @@ function SpatialSubscriber$1(props) {
252316
252316
  const canShow3DOptions = canLoad3DLayers && !(disable3d?.length === imageLayerLoaders.length) && !globalDisable3d;
252317
252317
  const options = useMemo$1(() => {
252318
252318
  if (canShow3DOptions || hasExpressionData) {
252319
- 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 });
252319
+ 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 });
252320
252320
  }
252321
252321
  return null;
252322
252322
  }, [
@@ -252405,6 +252405,12 @@ function SpatialSubscriber$1(props) {
252405
252405
  featureAggregationStrategy: featureAggregationStrategyToUse
252406
252406
  })] });
252407
252407
  }
252408
+ function getVolumeModelMatrix(data2, modelMatrix2) {
252409
+ const source2 = Array.isArray(data2) ? data2[0] : data2;
252410
+ const vivPhysicalSizeScalingMatrix = getPhysicalSizeScalingMatrix(source2);
252411
+ const base2 = Array.isArray(modelMatrix2) && modelMatrix2.length === 16 ? new Matrix4(modelMatrix2) : new Matrix4().identity();
252412
+ return base2.multiplyRight(vivPhysicalSizeScalingMatrix.invert());
252413
+ }
252408
252414
  function getInitialSpatialTargets({ width: width2, height: height2, obsPoints, obsSpots, obsSegmentations, obsSegmentationsLocations, segmentationChannelScopesByLayer, images, is3dMode: use3d, isReady }) {
252409
252415
  let globalXMin = null;
252410
252416
  let globalXMax = null;
@@ -252418,7 +252424,8 @@ function getInitialSpatialTargets({ width: width2, height: height2, obsPoints, o
252418
252424
  const modelMatrix2 = layerData?.image?.instance.getModelMatrix();
252419
252425
  if (imageLayerLoader) {
252420
252426
  const viewSize = { height: height2, width: width2 };
252421
- const { target: target2, zoom: newViewStateZoom } = getDefaultInitialViewState(imageLayerLoader, viewSize, zoomBackoff, use3d, new Matrix4(modelMatrix2));
252427
+ const viewStateModelMatrix = use3d ? getVolumeModelMatrix(imageLayerLoader, modelMatrix2) : new Matrix4(modelMatrix2);
252428
+ const { target: target2, zoom: newViewStateZoom } = getDefaultInitialViewState(imageLayerLoader, viewSize, zoomBackoff, use3d, viewStateModelMatrix);
252422
252429
  const maxExtent = Math.max(width2 / 2 ** newViewStateZoom, height2 / 2 ** newViewStateZoom);
252423
252430
  const xMin = target2[0] - maxExtent / 2;
252424
252431
  const xMax = target2[0] + maxExtent / 2;
@@ -252523,6 +252530,9 @@ function getInitialSpatialTargets({ width: width2, height: height2, obsPoints, o
252523
252530
  initialTargetZ
252524
252531
  };
252525
252532
  }
252533
+ function isLayerVisible(spatialLayerVisible) {
252534
+ return spatialLayerVisible !== false;
252535
+ }
252526
252536
  function getLayerLoaderTuple(data2, use3d) {
252527
252537
  const loader2 = Array.isArray(data2) && data2.length > 1 || !Array.isArray(data2) ? data2 : data2[0];
252528
252538
  if (use3d) {
@@ -253265,6 +253275,9 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
253265
253275
  const visible = layerCoordination[CoordinationType$1.SPATIAL_LAYER_VISIBLE];
253266
253276
  const transparentColor = layerCoordination[CoordinationType$1.SPATIAL_LAYER_TRANSPARENT_COLOR];
253267
253277
  const useTransparentColor = Array.isArray(transparentColor) && transparentColor.length === 3;
253278
+ if (is3dMode && !isLayerVisible(visible)) {
253279
+ return null;
253280
+ }
253268
253281
  const extensions = getVivLayerExtensions(is3dMode, colormap, renderingMode);
253269
253282
  const rgbInterleavedProps = {};
253270
253283
  if (imageWrapperInstance.isInterleaved()) {
@@ -254054,15 +254067,32 @@ class ErrorBoundary extends React__default.Component {
254054
254067
  }
254055
254068
  }
254056
254069
  const LazySpatialThree = React__default.lazy(async () => {
254057
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CwGBUQIk.js").then((n3) => n3.a);
254070
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-JE2SuNrQ.js").then((n3) => n3.a);
254058
254071
  return { default: SpatialWrapper2 };
254059
254072
  });
254060
254073
  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 }) }) }) }));
254061
254074
  const LazySpatialAccelerated = React__default.lazy(async () => {
254062
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-B9h9IQaz.js");
254075
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-CMYlENbA.js");
254063
254076
  return { default: SpatialWrapper2 };
254064
254077
  });
254065
254078
  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 }) }) }) }));
254079
+ const useStyles$p = makeStyles()(() => ({
254080
+ spatialBetaCameraLabel: {
254081
+ padding: "0px 0px 0px 16px"
254082
+ },
254083
+ spatialBetaToggleBox: {
254084
+ padding: "0px"
254085
+ }
254086
+ }));
254087
+ function SpatialOptions(props) {
254088
+ const { spatialAxisFixed, setSpatialAxisFixed, use3d } = props;
254089
+ const toggleAxisId = $bdb11010cef70236$export$f680877a34711e37();
254090
+ const { classes: classes2 } = useStyles$p();
254091
+ 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: {
254092
+ "aria-label": "Fix or not fix spatial camera axis",
254093
+ id: `spatial-camera-axis-${toggleAxisId}`
254094
+ } } }) })] }) });
254095
+ }
254066
254096
  const DEFAULT_FEATURE_AGGREGATION_STRATEGY$1 = "first";
254067
254097
  function useAggregatedNormalizedExpressionDataForLayers({ multiExpressionData: spotMultiExpressionData, layerScopes: spotLayerScopes, layerCoordination: spotLayerCoordination }) {
254068
254098
  const [spotMultiExpressionNormDataAggregated, spotMultiExpressionExtentsAggregated] = useMemo$1(() => {
@@ -254276,6 +254306,8 @@ function SpatialSubscriber(props) {
254276
254306
  setSpatialRotationY: setRotationY,
254277
254307
  setSpatialRotationZ: setRotationZ,
254278
254308
  setSpatialRotationOrbit: setRotationOrbit,
254309
+ setSpatialOrbitAxis: setOrbitAxis,
254310
+ setSpatialAxisFixed,
254279
254311
  // TODO: get obsSets per-layer or per-channel
254280
254312
  setAdditionalObsSets,
254281
254313
  setObsSetColor,
@@ -254531,7 +254563,23 @@ function SpatialSubscriber(props) {
254531
254563
  initialTargetZ,
254532
254564
  initialZoom
254533
254565
  ]);
254534
- const setViewState = ({ zoom: newZoom, target: target2, rotationX: newRotationX, rotationOrbit: newRotationOrbit }) => {
254566
+ const prevIs3dMode = useRef(is3dMode);
254567
+ useEffect(() => {
254568
+ if (prevIs3dMode.current === is3dMode) {
254569
+ return;
254570
+ }
254571
+ if (typeof defaultTargetX !== "number" || typeof defaultTargetY !== "number") {
254572
+ return;
254573
+ }
254574
+ prevIs3dMode.current = is3dMode;
254575
+ setTargetX(defaultTargetX);
254576
+ setTargetY(defaultTargetY);
254577
+ setTargetZ(defaultTargetZ);
254578
+ setZoom(defaultZoom);
254579
+ setRotationX(is3dMode ? 0 : null);
254580
+ setRotationOrbit(is3dMode ? 0 : null);
254581
+ }, [is3dMode, defaultTargetX, defaultTargetY, defaultTargetZ, defaultZoom]);
254582
+ const setViewState = ({ zoom: newZoom, target: target2, rotationX: newRotationX, rotationOrbit: newRotationOrbit, orbitAxis: newOrbitAxis }) => {
254535
254583
  setZoom(newZoom);
254536
254584
  setTargetX(target2[0]);
254537
254585
  setTargetY(target2[1]);
@@ -254541,6 +254589,9 @@ function SpatialSubscriber(props) {
254541
254589
  }
254542
254590
  setRotationX(newRotationX);
254543
254591
  setRotationOrbit(newRotationOrbit);
254592
+ if (newOrbitAxis !== void 0) {
254593
+ setOrbitAxis(newOrbitAxis);
254594
+ }
254544
254595
  }
254545
254596
  };
254546
254597
  const subtitle = useMemo$1(() => {
@@ -254681,7 +254732,7 @@ function SpatialSubscriber(props) {
254681
254732
  }
254682
254733
  }
254683
254734
  };
254684
- 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 ? {
254735
+ 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 ? {
254685
254736
  zoom: zoom2,
254686
254737
  target: [targetX2, targetY2, targetZ],
254687
254738
  rotationX,
@@ -263533,7 +263584,12 @@ const useEllipsisMenuStyles = makeStyles()(() => ({
263533
263584
  padding: 0,
263534
263585
  marginBottom: "0 !important",
263535
263586
  marginLeft: "4px",
263536
- marginTop: "12px !important"
263587
+ marginTop: "12px !important",
263588
+ // Truncate rather than widening the row's label cell, which would push the
263589
+ // options menu and layer type icon onto a second line in narrow containers.
263590
+ overflow: "hidden",
263591
+ textOverflow: "ellipsis",
263592
+ whiteSpace: "nowrap"
263537
263593
  },
263538
263594
  imageLayerOpacitySlider: {
263539
263595
  marginTop: "7px"
@@ -263546,6 +263602,31 @@ const useEllipsisMenuStyles = makeStyles()(() => ({
263546
263602
  padding: "4px"
263547
263603
  }
263548
263604
  }));
263605
+ const CHANNEL_ROW_WRAP_WIDTH = 450;
263606
+ const wrapQuery = `@container (max-width: ${CHANNEL_ROW_WRAP_WIDTH}px)`;
263607
+ const channelRowContainerSx = { containerType: "inline-size" };
263608
+ const channelSliderCellSx = {
263609
+ [wrapQuery]: {
263610
+ width: "100%",
263611
+ order: 1,
263612
+ paddingLeft: "12px",
263613
+ paddingRight: "12px"
263614
+ }
263615
+ };
263616
+ const channelSelectorCellSx = {
263617
+ [wrapQuery]: {
263618
+ flexBasis: 0,
263619
+ flexGrow: 1
263620
+ }
263621
+ };
263622
+ const channelControlCellSx = {
263623
+ [wrapQuery]: {
263624
+ width: "auto",
263625
+ flexGrow: 0,
263626
+ flexShrink: 0
263627
+ }
263628
+ };
263629
+ const channelSpacerCellSx = { flexShrink: 0, minWidth: "44px" };
263549
263630
  const useStyles$i = makeStyles()(() => ({
263550
263631
  colorPickerPaper: {
263551
263632
  overflow: "hidden",
@@ -263781,7 +263862,7 @@ const useStyles$f = makeStyles()(() => ({
263781
263862
  fill: "currentColor",
263782
263863
  fontSize: "14px",
263783
263864
  width: "50%",
263784
- maxWidth: "16px"
263865
+ maxWidth: "20px"
263785
263866
  }
263786
263867
  }));
263787
263868
  function PointLayerEllipsisMenu(props) {
@@ -263900,15 +263981,21 @@ function PointLayerController(props) {
263900
263981
  setFeatureColor(nextFeatureColor);
263901
263982
  }
263902
263983
  }, [featureSelection, obsColorEncoding, featureIndex, featureColor]);
263903
- 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] });
263984
+ 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] });
263904
263985
  }
263905
263986
  const useStyles$e = makeStyles()(() => ({
263987
+ // Cap the channel name's width; imageLayerName ellipsizes the overflow.
263988
+ channelName: {
263989
+ overflow: "hidden",
263990
+ textOverflow: "ellipsis",
263991
+ whiteSpace: "nowrap"
263992
+ },
263906
263993
  layerTypeSegmentationIcon: {
263907
263994
  height: "100%",
263908
263995
  marginLeft: "1px",
263909
263996
  fill: "currentColor",
263910
263997
  fontSize: "24px",
263911
- width: "50%",
263998
+ width: "24px",
263912
263999
  maxWidth: "24px"
263913
264000
  }
263914
264001
  }));
@@ -263942,7 +264029,7 @@ function SegmentationChannelController(props) {
263942
264029
  setVisible(nextVisible);
263943
264030
  }, [visible, setVisible]);
263944
264031
  const handleOpacityChange = useCallback((e3, v) => setOpacity2(v), [setOpacity2]);
263945
- 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 }) })] }) }) });
264032
+ 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 }) })] }) }) });
263946
264033
  }
263947
264034
  function SegmentationLayerController(props) {
263948
264035
  const { theme, layerScope, layerCoordination, setLayerCoordination, channelScopes, channelCoordination, setChannelCoordination } = props;
@@ -265334,7 +265421,7 @@ function ImageChannelController(props) {
265334
265421
  setWindow2(minMaxDomain);
265335
265422
  }
265336
265423
  }
265337
- 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 }) })] });
265424
+ 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 }) })] });
265338
265425
  }
265339
265426
  function DimensionSlider(props) {
265340
265427
  const { boundingSlice, sliceValue, setSliceValue, label: label2 } = props;
@@ -265535,7 +265622,7 @@ function ImageLayerController(props) {
265535
265622
  const { classes: menuClasses } = useEllipsisMenuStyles();
265536
265623
  const { classes: controllerSectionClasses } = useControllerSectionStyles();
265537
265624
  const isMultiChannel = photometricInterpretation !== "RGB";
265538
- 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(ExpandMoreIcon, {}) }) : null] })] }), isMultiChannel && open2 ? jsxs(Grid$1, { container: true, direction: "column", justifyContent: "space-between", className: classes2.imageChannelControllerGrid, children: [channelScopes.map((cScope) => {
265625
+ 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(ExpandMoreIcon, {}) }) : null] })] }), isMultiChannel && open2 ? jsxs(Grid$1, { container: true, direction: "column", justifyContent: "space-between", className: classes2.imageChannelControllerGrid, children: [channelScopes.map((cScope) => {
265539
265626
  const { spatialTargetC, spatialChannelVisible, spatialChannelOpacity, spatialChannelColor, spatialChannelWindow, spatialMaxResolution } = channelCoordination[cScope];
265540
265627
  const { setSpatialTargetC, setSpatialChannelVisible, setSpatialChannelOpacity, setSpatialChannelColor, setSpatialChannelWindow, setSpatialMaxResolution } = setChannelCoordination[cScope];
265541
265628
  const channelIndex = image2?.getChannelIndex(spatialTargetC);
@@ -265565,7 +265652,7 @@ const useStyles$8 = makeStyles()((theme) => ({
265565
265652
  }
265566
265653
  }));
265567
265654
  function GlobalDimensionSlider(props) {
265568
- const { label: label2, targetValue, setTargetValue, min: min2 = 0, max: max2 = 0, spatialRenderingMode = null, setSpatialRenderingMode = null } = props;
265655
+ const { label: label2, targetValue, setTargetValue, min: min2 = 0, max: max2 = 0, spatialRenderingMode = null, setSpatialRenderingMode = null, enable3d = true } = props;
265569
265656
  const { classes: lcClasses } = useControllerSectionStyles();
265570
265657
  const { classes: classes2 } = useStyles$8();
265571
265658
  const isForZ = spatialRenderingMode !== null;
@@ -265576,7 +265663,7 @@ function GlobalDimensionSlider(props) {
265576
265663
  setTargetValue(Math.floor(targetValue));
265577
265664
  }
265578
265665
  }
265579
- 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 })] }) }) });
265666
+ 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 })] }) }) });
265580
265667
  }
265581
265668
  const useStyles$7 = makeStyles()(() => ({
265582
265669
  layerTypeCentroidSegmentationIcon: {
@@ -265674,7 +265761,7 @@ function SegmentationCentroidsController(props) {
265674
265761
  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 }) })] }) }) });
265675
265762
  }
265676
265763
  function LayerController(props) {
265677
- 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;
265764
+ 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;
265678
265765
  const anyLayerHasT = Object.values(images || {}).some((image2) => image2?.image?.instance.hasTStack());
265679
265766
  const anyLayerHasZ = Object.values(images || {}).some((image2) => image2?.image?.instance.hasZStack());
265680
265767
  const maxT = Object.values(images || {}).reduce((a2, h2) => Math.max(a2, h2?.image?.instance.getNumT()), 1) - 1;
@@ -265683,10 +265770,10 @@ function LayerController(props) {
265683
265770
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
265684
265771
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].filter((scope) => !pairedPointScopes.has(scope)).reverse(), [pointLayerScopes, pairedPointScopes]);
265685
265772
  const reversedSegmentationLayerScopes = useMemo$1(() => [...segmentationLayerScopes || []].filter((scope) => !pairedSegScopes.has(scope)).reverse(), [segmentationLayerScopes, pairedSegScopes]);
265686
- 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))] });
265773
+ 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))] });
265687
265774
  }
265688
265775
  function LayerControllerSubscriber(props) {
265689
- const { coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: title2 = "Spatial Layers", uuid: uuid2, layerPerFeatureForPoints = false, cameraPresets, helpText = ViewHelpMapping.LAYER_CONTROLLER_BETA } = props;
265776
+ 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;
265690
265777
  const loaders = useLoaders();
265691
265778
  const mergeCoordination = useMergeCoordination();
265692
265779
  const coordinationScopes = useCoordinationScopes(coordinationScopesRaw);
@@ -265877,7 +265964,7 @@ function LayerControllerSubscriber(props) {
265877
265964
  imageDataStatus,
265878
265965
  pointMultiIndicesDataStatus
265879
265966
  ]);
265880
- 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 }) });
265967
+ 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 }) });
265881
265968
  }
265882
265969
  const isIterable$2 = (obj) => Symbol.iterator in obj;
265883
265970
  const hasIterableEntries = (value2) => (
@@ -267792,7 +267879,7 @@ function HiglassGlobalStyles(props) {
267792
267879
  }
267793
267880
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
267794
267881
  const LazyHiGlassComponent = React__default.lazy(async () => {
267795
- const { HiGlassComponent } = await import("./higlass-4OKx7mdy.js");
267882
+ const { HiGlassComponent } = await import("./higlass-BnXDiYjj.js");
267796
267883
  return { default: HiGlassComponent };
267797
267884
  });
267798
267885
  const HG_SIZE = 800;
@@ -270749,7 +270836,7 @@ function NeuroglancerGlobalStyles(props) {
270749
270836
  const { classes: classes2 } = props;
270750
270837
  return jsxs(Fragment, { children: [jsx$1(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsx$1(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
270751
270838
  }
270752
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-DSiLDSuM.js"));
270839
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-D4iTpbeC.js"));
270753
270840
  function createWorker() {
270754
270841
  const worker = new WorkerFactory$1();
270755
270842
  worker.AsyncComputationWorker = WorkerFactory;
@@ -270843,22 +270930,6 @@ class NeuroglancerComp extends PureComponent {
270843
270930
  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 }) }) })] });
270844
270931
  }
270845
270932
  }
270846
- function useMemoCustomComparison(factory2, dependencies2, customIsEqual) {
270847
- const ref2 = useRef(
270848
- /** @type {{ deps: any; value: T } | undefined} */
270849
- void 0
270850
- );
270851
- if (ref2.current === void 0 || !customIsEqual(ref2.current.deps, dependencies2)) {
270852
- ref2.current = { deps: dependencies2, value: factory2() };
270853
- }
270854
- return ref2.current.value;
270855
- }
270856
- const shallowDiff = (prevDeps, nextDeps, depName) => prevDeps[depName] !== nextDeps[depName];
270857
- const shallowDiffByLayer = (prevDeps, nextDeps, depName, scopeName) => prevDeps?.[depName]?.[scopeName] !== nextDeps?.[depName]?.[scopeName];
270858
- const shallowDiffByChannel = (prevDeps, nextDeps, depName, firstName, secondName) => prevDeps?.[depName]?.[firstName]?.[secondName] !== nextDeps?.[depName]?.[firstName]?.[secondName];
270859
- const shallowDiffByChannelWithKeys = (prevDeps, nextDeps, depName, firstName, secondName, keys2) => keys2.some((k) => prevDeps?.[depName]?.[firstName]?.[secondName]?.[k] !== nextDeps?.[depName]?.[firstName]?.[secondName]?.[k]);
270860
- const shallowDiffByLayerCoordinationWithKeys = (prevDeps, nextDeps, depName, layerScope, keys2) => keys2.some((k) => prevDeps?.[depName]?.[0]?.[layerScope]?.[k] !== nextDeps?.[depName]?.[0]?.[layerScope]?.[k]);
270861
- const shallowDiffByChannelCoordinationWithKeys = (prevDeps, nextDeps, depName, layerScope, channelScope, keys2) => keys2.some((k) => prevDeps?.[depName]?.[0]?.[layerScope]?.[channelScope]?.[k] !== nextDeps?.[depName]?.[0]?.[layerScope]?.[channelScope]?.[k]);
270862
270933
  function customIsEqualForCellColors(prevDeps, nextDeps) {
270863
270934
  let forceUpdate = false;
270864
270935
  const curriedShallowDiff = (depName) => shallowDiff(prevDeps, nextDeps, depName);
@@ -325005,7 +325076,7 @@ const VEGA_THEMES = {
325005
325076
  };
325006
325077
  const DATASET_NAME = "table";
325007
325078
  function VegaGlobalStyles() {
325008
- const { theme } = useStyles$y();
325079
+ const { theme } = useStyles$z();
325009
325080
  return jsx$1(GlobalStyles$3, { styles: {
325010
325081
  "#vg-tooltip-element.vg-tooltip.custom-theme": {
325011
325082
  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)",
@@ -325039,7 +325110,7 @@ function renderTooltipContents(tooltipText) {
325039
325110
  }
325040
325111
  function VegaPlot(props) {
325041
325112
  const { spec: partialSpec, data: data2, getTooltipText, signalListeners, renderer = "svg", onNewView } = props;
325042
- const { classes: tooltipClasses2 } = useStyles$t();
325113
+ const { classes: tooltipClasses2 } = useStyles$u();
325043
325114
  const tooltipHandler = useMemo$1(() => {
325044
325115
  if (typeof getTooltipText === "function") {
325045
325116
  const tooltipConfig = {
@@ -329777,7 +329848,26 @@ class ImageWrapper {
329777
329848
  }
329778
329849
  return true;
329779
329850
  }
329780
- getData() {
329851
+ // TODO: make stripPhysicalSizes the default behavior,
329852
+ // and remove it as a parameter, once it is no longer
329853
+ // used by spatial-accelerated and spatial-three.
329854
+ getData(stripPhysicalSizes = true) {
329855
+ if (stripPhysicalSizes) {
329856
+ const { data: data2 } = this.vivLoader;
329857
+ const newData = data2.map((d) => {
329858
+ if ("meta" in d) {
329859
+ const { meta } = d;
329860
+ if (meta && "physicalSizes" in meta) {
329861
+ const newMeta = { ...meta, physicalSizes: void 0 };
329862
+ const clone2 = Object.create(Object.getPrototypeOf(d));
329863
+ Object.assign(clone2, d, { meta: newMeta });
329864
+ return clone2;
329865
+ }
329866
+ }
329867
+ return d;
329868
+ });
329869
+ return newData;
329870
+ }
329781
329871
  return this.vivLoader.data;
329782
329872
  }
329783
329873
  getModelMatrix() {
@@ -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-B8FH88N6.js";
7
+ import { l as log, i as isEqual, C as CoordinationType, u as useEventCallback } from "./index-BnKmchw3.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
  }
@@ -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-B8FH88N6.js";
6
+ import { C as CoordinationType, g as getImageSize } from "./index-BnKmchw3.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-DngaDWBF.js").catch(() => ({ default: GeometryAndMesh })));
948
- const LazyXRSceneComponents = React__default.lazy(() => import("./XRSceneComponents-CNuqVsYi.js").catch(() => ({ default: () => null })));
948
+ const LazyGeometryAndMeshXR = React__default.lazy(() => import("./GeometryAndMeshXR-CvjW5GGO.js").catch(() => ({ default: GeometryAndMesh })));
949
+ const LazyXRSceneComponents = React__default.lazy(() => import("./XRSceneComponents-DEj-tQkm.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-BsV3wgJG.js").catch(() => ({
1306
+ () => import("./XRWrapper-DIEbbPAq.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-Beha7PBD.js").catch(() => ({
1312
+ () => import("./XREnterButton-pTH1jk6g.js").catch(() => ({
1312
1313
  default: () => null
1313
1314
  }))
1314
1315
  );
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a6, a4, a2, a5, a3, a1, a7 } from "./index-B8FH88N6.js";
1
+ import { a6, a4, a2, a5, a3, a1, a7 } from "./index-BnKmchw3.js";
2
2
  import { useComplexCoordination, useComplexCoordinationSecondary, useCoordination, useCoordinationScopes, useCoordinationScopesBy, useGridItemSize, useMultiCoordinationScopesNonNull, useMultiCoordinationScopesSecondaryNonNull, usePageModeView } from "@vitessce/vit-s";
3
3
  export {
4
4
  a6 as PluginAsyncFunction,
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-B8FH88N6.js";
1
+ import { B as BaseDecoder } from "./index-BnKmchw3.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-B8FH88N6.js";
2
+ import { a as getDefaultExportFromCjs, B as BaseDecoder, L as LercParameters, b as LercAddCompression } from "./index-BnKmchw3.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-B8FH88N6.js";
1
+ import { B as BaseDecoder } from "./index-BnKmchw3.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-B8FH88N6.js";
1
+ import { B as BaseDecoder } from "./index-BnKmchw3.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-B8FH88N6.js";
1
+ import { B as BaseDecoder } from "./index-BnKmchw3.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-B8FH88N6.js";
1
+ import { B as BaseDecoder } from "./index-BnKmchw3.js";
2
2
  class WebImageDecoder extends BaseDecoder {
3
3
  constructor() {
4
4
  super();
@@ -1,4 +1,4 @@
1
- import { g as getXRModule } from "./index-CwGBUQIk.js";
1
+ import { g as getXRModule } from "./index-JE2SuNrQ.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/all",
3
- "version": "4.0.3",
3
+ "version": "4.0.4",
4
4
  "author": "HIDIVE Lab at HMS",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -17,38 +17,38 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "zod": "^3.21.4",
20
- "@vitessce/styles": "4.0.3",
21
- "@vitessce/error": "4.0.3",
22
- "@vitessce/constants-internal": "4.0.3",
23
- "@vitessce/description": "4.0.3",
24
- "@vitessce/abstract": "4.0.3",
25
- "@vitessce/feature-list": "4.0.3",
26
- "@vitessce/csv": "4.0.3",
27
- "@vitessce/genomic-profiles": "4.0.3",
28
- "@vitessce/glb": "4.0.3",
29
- "@vitessce/heatmap": "4.0.3",
30
- "@vitessce/json": "4.0.3",
31
- "@vitessce/layer-controller": "4.0.3",
32
- "@vitessce/link-controller": "4.0.3",
33
- "@vitessce/layer-controller-beta": "4.0.3",
34
- "@vitessce/obs-sets-manager": "4.0.3",
35
- "@vitessce/ome-tiff": "4.0.3",
36
- "@vitessce/plugins": "4.0.3",
37
- "@vitessce/scatterplot-gating": "4.0.3",
38
- "@vitessce/scatterplot-embedding": "4.0.3",
39
- "@vitessce/spatial": "4.0.3",
40
- "@vitessce/schemas": "4.0.3",
41
- "@vitessce/spatial-beta": "4.0.3",
42
- "@vitessce/statistical-plots": "4.0.3",
43
- "@vitessce/vit-s": "4.0.3",
44
- "@vitessce/globals": "4.0.3",
45
- "@vitessce/zarr": "4.0.3",
46
- "@vitessce/status": "4.0.3",
47
- "@vitessce/spatial-zarr": "4.0.3",
48
- "@vitessce/spatial-three": "4.0.3",
49
- "@vitessce/biomarker-select": "4.0.3",
50
- "@vitessce/neuroglancer": "4.0.3",
51
- "@vitessce/spatial-accelerated": "4.0.3"
20
+ "@vitessce/styles": "4.0.4",
21
+ "@vitessce/constants-internal": "4.0.4",
22
+ "@vitessce/abstract": "4.0.4",
23
+ "@vitessce/description": "4.0.4",
24
+ "@vitessce/csv": "4.0.4",
25
+ "@vitessce/feature-list": "4.0.4",
26
+ "@vitessce/heatmap": "4.0.4",
27
+ "@vitessce/glb": "4.0.4",
28
+ "@vitessce/genomic-profiles": "4.0.4",
29
+ "@vitessce/error": "4.0.4",
30
+ "@vitessce/json": "4.0.4",
31
+ "@vitessce/layer-controller": "4.0.4",
32
+ "@vitessce/layer-controller-beta": "4.0.4",
33
+ "@vitessce/ome-tiff": "4.0.4",
34
+ "@vitessce/link-controller": "4.0.4",
35
+ "@vitessce/scatterplot-embedding": "4.0.4",
36
+ "@vitessce/obs-sets-manager": "4.0.4",
37
+ "@vitessce/scatterplot-gating": "4.0.4",
38
+ "@vitessce/spatial": "4.0.4",
39
+ "@vitessce/spatial-beta": "4.0.4",
40
+ "@vitessce/plugins": "4.0.4",
41
+ "@vitessce/schemas": "4.0.4",
42
+ "@vitessce/statistical-plots": "4.0.4",
43
+ "@vitessce/status": "4.0.4",
44
+ "@vitessce/globals": "4.0.4",
45
+ "@vitessce/spatial-zarr": "4.0.4",
46
+ "@vitessce/zarr": "4.0.4",
47
+ "@vitessce/vit-s": "4.0.4",
48
+ "@vitessce/spatial-accelerated": "4.0.4",
49
+ "@vitessce/spatial-three": "4.0.4",
50
+ "@vitessce/biomarker-select": "4.0.4",
51
+ "@vitessce/neuroglancer": "4.0.4"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/react": "^19.0.0",