@vitessce/all 3.2.0 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-68f84e2a.js";
2
- import { B as BaseDecoder } from "./index-d4cd1fef.js";
2
+ import { B as BaseDecoder } from "./index-f665a5d4.js";
3
3
  import "react";
4
4
  import "@vitessce/vit-s";
5
5
  import "react-dom";
@@ -1,6 +1,6 @@
1
1
  import React__default from "react";
2
2
  import ReactDOM__default from "react-dom";
3
- import { c as commonjsGlobal, o as objectAssign, g as getDefaultExportFromCjs, e as earcut, b as getAugmentedNamespace } from "./index-d4cd1fef.js";
3
+ import { c as commonjsGlobal, o as objectAssign, g as getDefaultExportFromCjs, e as earcut, b as getAugmentedNamespace } from "./index-f665a5d4.js";
4
4
  function _mergeNamespaces(n, m) {
5
5
  for (var i = 0; i < m.length; i++) {
6
6
  const e = m[i];
@@ -5,7 +5,7 @@ var __publicField = (obj, key2, value2) => {
5
5
  return value2;
6
6
  };
7
7
  import * as React from "react";
8
- import React__default, { Children, isValidElement, cloneElement, useMemo, forwardRef, useRef, useImperativeHandle, useEffect, useLayoutEffect as useLayoutEffect$1, useState, PureComponent, Component as Component$1, useCallback, createElement, useId, useReducer, Suspense } from "react";
8
+ import React__default, { Children, isValidElement, cloneElement, useMemo, forwardRef, useRef, useImperativeHandle, useEffect, useLayoutEffect as useLayoutEffect$1, useState, PureComponent, Component as Component$1, useCallback, createElement, useContext, useReducer, Suspense } from "react";
9
9
  import { useLoaders, useCoordination, useDescription, useImageData, useReady, TitleInfo, useVitessceContainer, useSetWarning, useObsSetsData, useUrls, usePlotOptionsStyles, OptionsContainer, CellColorEncodingOption, OptionSelect, useComponentHover, useComponentViewInfo, useSetComponentHover, useSetComponentViewInfo, useInitialCoordination, useDeckCanvasSize, useMultiObsLabels, useObsEmbeddingData, useFeatureSelection, useObsFeatureMatrixIndices, useFeatureLabelsData, useGetObsInfo, useUint8FeatureSelection, useExpressionValueGetter, useAuxiliaryCoordination, useHasLoader, useObsLocationsData, useObsLabelsData, useObsSegmentationsData, useNeighborhoodsData, useCoordinationScopes, useCoordinationScopesBy, useMultiCoordinationScopesSecondaryNonNull, useMultiCoordinationScopesNonNull, useComplexCoordination, useComplexCoordinationSecondary, useMultiObsPoints, usePointMultiObsLabels, useMultiObsSpots, useSpotMultiObsSets, useSpotMultiFeatureSelection, useSpotMultiObsFeatureMatrixIndices, useSegmentationMultiObsLocations, useMultiObsSegmentations, useSegmentationMultiObsSets, useSegmentationMultiFeatureSelection, useSegmentationMultiObsFeatureMatrixIndices, useMultiImages, useObsFeatureMatrixData, useUint8ObsFeatureMatrix, useGetObsMembership, PopperMenu, useComponentLayout, useClosestVitessceContainerSize, useWindowDimensions, useRemoveImageChannelInMetaCoordinationScopes, useAddImageChannelInMetaCoordinationScopes, useWarning, useGridItemSize, useGenomicProfilesData, DataSourceFetchError, AbstractLoaderError, AbstractTwoStepLoader, LoaderResult, LoaderValidationError, logConfig, VitS } from "@vitessce/vit-s";
10
10
  import * as ReactDOM from "react-dom";
11
11
  import ReactDOM__default from "react-dom";
@@ -155975,16 +155975,16 @@ async function getDecoder(fileDirectory) {
155975
155975
  const Decoder = await importFn();
155976
155976
  return new Decoder(fileDirectory);
155977
155977
  }
155978
- addDecoder([void 0, 1], () => import("./raw-ed9deb25.js").then((m2) => m2.default));
155979
- addDecoder(5, () => import("./lzw-2b4715b3.js").then((m2) => m2.default));
155978
+ addDecoder([void 0, 1], () => import("./raw-8dc223b5.js").then((m2) => m2.default));
155979
+ addDecoder(5, () => import("./lzw-b35f334d.js").then((m2) => m2.default));
155980
155980
  addDecoder(6, () => {
155981
155981
  throw new Error("old style JPEG compression is not supported.");
155982
155982
  });
155983
- addDecoder(7, () => import("./jpeg-3b40fe93.js").then((m2) => m2.default));
155984
- addDecoder([8, 32946], () => import("./deflate-6b735acc.js").then((m2) => m2.default));
155985
- addDecoder(32773, () => import("./packbits-494352d8.js").then((m2) => m2.default));
155986
- addDecoder(34887, () => import("./lerc-e0d6f9e6.js").then((m2) => m2.default));
155987
- addDecoder(50001, () => import("./webimage-f9e0ebc3.js").then((m2) => m2.default));
155983
+ addDecoder(7, () => import("./jpeg-b55e77c5.js").then((m2) => m2.default));
155984
+ addDecoder([8, 32946], () => import("./deflate-432aacfa.js").then((m2) => m2.default));
155985
+ addDecoder(32773, () => import("./packbits-6e275aa4.js").then((m2) => m2.default));
155986
+ addDecoder(34887, () => import("./lerc-2523b21e.js").then((m2) => m2.default));
155987
+ addDecoder(50001, () => import("./webimage-917679ff.js").then((m2) => m2.default));
155988
155988
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
155989
155989
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
155990
155990
  }
@@ -170522,6 +170522,67 @@ function makeBoundingBox(viewState) {
170522
170522
  viewport.unproject([0, viewport.height])
170523
170523
  ];
170524
170524
  }
170525
+ const TARGETS = [1, 2, 3, 4, 5, 10, 20, 25, 50, 100, 200, 250, 500, 1e3];
170526
+ const MIN_TARGET = TARGETS[0];
170527
+ const MAX_TARGET = TARGETS[TARGETS.length - 1];
170528
+ const SI_PREFIXES = [
170529
+ { symbol: "Y", exponent: 24 },
170530
+ { symbol: "Z", exponent: 21 },
170531
+ { symbol: "E", exponent: 18 },
170532
+ { symbol: "P", exponent: 15 },
170533
+ { symbol: "T", exponent: 12 },
170534
+ { symbol: "G", exponent: 9 },
170535
+ { symbol: "M", exponent: 6 },
170536
+ { symbol: "k", exponent: 3 },
170537
+ { symbol: "h", exponent: 2 },
170538
+ { symbol: "da", exponent: 1 },
170539
+ { symbol: "", exponent: 0 },
170540
+ { symbol: "d", exponent: -1 },
170541
+ { symbol: "c", exponent: -2 },
170542
+ { symbol: "m", exponent: -3 },
170543
+ { symbol: "µ", exponent: -6 },
170544
+ { symbol: "n", exponent: -9 },
170545
+ { symbol: "p", exponent: -12 },
170546
+ { symbol: "f", exponent: -15 },
170547
+ { symbol: "a", exponent: -18 },
170548
+ { symbol: "z", exponent: -21 },
170549
+ { symbol: "y", exponent: -24 }
170550
+ ];
170551
+ function sizeToMeters(size2, unit2) {
170552
+ if (!unit2 || unit2 === "m") {
170553
+ return size2;
170554
+ }
170555
+ if (unit2.length > 1) {
170556
+ let unitPrefix = unit2.substring(0, unit2.length - 1);
170557
+ if (unitPrefix === "u") {
170558
+ unitPrefix = "µ";
170559
+ }
170560
+ const unitObj = SI_PREFIXES.find((p) => p.symbol === unitPrefix);
170561
+ if (unitObj) {
170562
+ return size2 * 10 ** unitObj.exponent;
170563
+ }
170564
+ }
170565
+ throw new Error("Received unknown unit");
170566
+ }
170567
+ function snapValue(value2) {
170568
+ let magnitude = 0;
170569
+ if (value2 < MIN_TARGET || value2 > MAX_TARGET) {
170570
+ magnitude = Math.floor(Math.log10(value2));
170571
+ }
170572
+ let snappedUnit = SI_PREFIXES.find(
170573
+ (p) => p.exponent % 3 === 0 && p.exponent <= magnitude
170574
+ );
170575
+ let adjustedValue = value2 / 10 ** snappedUnit.exponent;
170576
+ if (adjustedValue > 500 && adjustedValue <= 1e3) {
170577
+ snappedUnit = SI_PREFIXES.find(
170578
+ (p) => p.exponent % 3 === 0 && p.exponent <= magnitude + 3
170579
+ );
170580
+ adjustedValue = value2 / 10 ** snappedUnit.exponent;
170581
+ }
170582
+ const targetNewUnits = TARGETS.find((t4) => t4 > adjustedValue);
170583
+ const targetOrigUnits = targetNewUnits * 10 ** snappedUnit.exponent;
170584
+ return [targetOrigUnits, targetNewUnits, snappedUnit.symbol];
170585
+ }
170525
170586
  const fs$1$1 = `#define SHADER_NAME xr-layer-fragment-shader
170526
170587
 
170527
170588
  precision highp float;
@@ -171289,26 +171350,27 @@ const OverviewLayer = class extends CompositeLayer {
171289
171350
  OverviewLayer.layerName = "OverviewLayer";
171290
171351
  OverviewLayer.defaultProps = defaultProps$3;
171291
171352
  function getPosition$1(boundingBox, position2, length2) {
171292
- const viewLength = boundingBox[2][0] - boundingBox[0][0];
171353
+ const viewWidth2 = boundingBox[2][0] - boundingBox[0][0];
171354
+ const viewHeight2 = boundingBox[2][1] - boundingBox[0][1];
171293
171355
  switch (position2) {
171294
171356
  case "bottom-right": {
171295
- const yCoord = boundingBox[2][1] - (boundingBox[2][1] - boundingBox[0][1]) * length2;
171296
- const xLeftCoord = boundingBox[2][0] - viewLength * length2;
171357
+ const yCoord = boundingBox[2][1] - viewHeight2 * length2;
171358
+ const xLeftCoord = boundingBox[2][0] - viewWidth2 * length2;
171297
171359
  return [yCoord, xLeftCoord];
171298
171360
  }
171299
171361
  case "top-right": {
171300
- const yCoord = (boundingBox[2][1] - boundingBox[0][1]) * length2;
171301
- const xLeftCoord = boundingBox[2][0] - viewLength * length2;
171362
+ const yCoord = boundingBox[0][1] + viewHeight2 * length2;
171363
+ const xLeftCoord = boundingBox[2][0] - viewWidth2 * length2;
171302
171364
  return [yCoord, xLeftCoord];
171303
171365
  }
171304
171366
  case "top-left": {
171305
- const yCoord = (boundingBox[2][1] - boundingBox[0][1]) * length2;
171306
- const xLeftCoord = viewLength * length2;
171367
+ const yCoord = boundingBox[0][1] + viewHeight2 * length2;
171368
+ const xLeftCoord = boundingBox[0][0] + viewWidth2 * length2;
171307
171369
  return [yCoord, xLeftCoord];
171308
171370
  }
171309
171371
  case "bottom-left": {
171310
- const yCoord = boundingBox[2][1] - (boundingBox[2][1] - boundingBox[0][1]) * length2;
171311
- const xLeftCoord = viewLength * length2;
171372
+ const yCoord = boundingBox[2][1] - viewHeight2 * length2;
171373
+ const xLeftCoord = boundingBox[0][0] + viewWidth2 * length2;
171312
171374
  return [yCoord, xLeftCoord];
171313
171375
  }
171314
171376
  default: {
@@ -171326,11 +171388,12 @@ const defaultProps$2 = {
171326
171388
  unit: { type: "string", value: "", compare: true },
171327
171389
  size: { type: "number", value: 1, compare: true },
171328
171390
  position: { type: "string", value: "bottom-right", compare: true },
171329
- length: { type: "number", value: 0.085, compare: true }
171391
+ length: { type: "number", value: 0.085, compare: true },
171392
+ snap: { type: "boolean", value: false, compare: true }
171330
171393
  };
171331
171394
  const ScaleBarLayer = class extends CompositeLayer {
171332
171395
  renderLayers() {
171333
- const { id: id2, unit: unit2, size: size2, position: position2, viewState, length: length2 } = this.props;
171396
+ const { id: id2, unit: unit2, size: size2, position: position2, viewState, length: length2, snap } = this.props;
171334
171397
  const boundingBox = makeBoundingBox(viewState);
171335
171398
  const { zoom: zoom2 } = viewState;
171336
171399
  const viewLength = boundingBox[2][0] - boundingBox[0][0];
@@ -171339,15 +171402,27 @@ const ScaleBarLayer = class extends CompositeLayer {
171339
171402
  2 ** (-zoom2 + 1.5),
171340
171403
  (boundingBox[2][1] - boundingBox[0][1]) * 7e-3
171341
171404
  );
171342
- const numUnits = barLength * size2;
171405
+ let adjustedBarLength = barLength;
171406
+ let displayNumber = (barLength * size2).toPrecision(5);
171407
+ let displayUnit = unit2;
171408
+ if (snap) {
171409
+ const meterSize = sizeToMeters(size2, unit2);
171410
+ const numUnits = barLength * meterSize;
171411
+ const [snappedOrigUnits, snappedNewUnits, snappedUnitPrefix] = snapValue(numUnits);
171412
+ adjustedBarLength = snappedOrigUnits / meterSize;
171413
+ displayNumber = snappedNewUnits;
171414
+ displayUnit = `${snappedUnitPrefix}m`;
171415
+ }
171343
171416
  const [yCoord, xLeftCoord] = getPosition$1(boundingBox, position2, length2);
171417
+ const xRightCoord = xLeftCoord + barLength;
171418
+ const isLeft = position2.endsWith("-left");
171344
171419
  const lengthBar = new LineLayer({
171345
171420
  id: `scale-bar-length-${id2}`,
171346
171421
  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
171347
171422
  data: [
171348
171423
  [
171349
- [xLeftCoord, yCoord],
171350
- [xLeftCoord + barLength, yCoord]
171424
+ [isLeft ? xLeftCoord : xRightCoord - adjustedBarLength, yCoord],
171425
+ [isLeft ? xLeftCoord + adjustedBarLength : xRightCoord, yCoord]
171351
171426
  ]
171352
171427
  ],
171353
171428
  getSourcePosition: (d) => d[0],
@@ -171360,8 +171435,14 @@ const ScaleBarLayer = class extends CompositeLayer {
171360
171435
  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
171361
171436
  data: [
171362
171437
  [
171363
- [xLeftCoord, yCoord - barHeight],
171364
- [xLeftCoord, yCoord + barHeight]
171438
+ [
171439
+ isLeft ? xLeftCoord : xRightCoord - adjustedBarLength,
171440
+ yCoord - barHeight
171441
+ ],
171442
+ [
171443
+ isLeft ? xLeftCoord : xRightCoord - adjustedBarLength,
171444
+ yCoord + barHeight
171445
+ ]
171365
171446
  ]
171366
171447
  ],
171367
171448
  getSourcePosition: (d) => d[0],
@@ -171374,8 +171455,14 @@ const ScaleBarLayer = class extends CompositeLayer {
171374
171455
  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
171375
171456
  data: [
171376
171457
  [
171377
- [xLeftCoord + barLength, yCoord - barHeight],
171378
- [xLeftCoord + barLength, yCoord + barHeight]
171458
+ [
171459
+ isLeft ? xLeftCoord + adjustedBarLength : xRightCoord,
171460
+ yCoord - barHeight
171461
+ ],
171462
+ [
171463
+ isLeft ? xLeftCoord + adjustedBarLength : xRightCoord,
171464
+ yCoord + barHeight
171465
+ ]
171379
171466
  ]
171380
171467
  ],
171381
171468
  getSourcePosition: (d) => d[0],
@@ -171388,8 +171475,11 @@ const ScaleBarLayer = class extends CompositeLayer {
171388
171475
  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
171389
171476
  data: [
171390
171477
  {
171391
- text: numUnits.toPrecision(5) + unit2,
171392
- position: [xLeftCoord + barLength * 0.5, yCoord + barHeight * 4]
171478
+ text: `${displayNumber}${displayUnit}`,
171479
+ position: [
171480
+ isLeft ? xLeftCoord + barLength * 0.5 : xRightCoord - barLength * 0.5,
171481
+ yCoord + barHeight * 4
171482
+ ]
171393
171483
  }
171394
171484
  ],
171395
171485
  getColor: [220, 220, 220, 255],
@@ -171398,7 +171488,7 @@ const ScaleBarLayer = class extends CompositeLayer {
171398
171488
  sizeUnits: "meters",
171399
171489
  sizeScale: 2 ** -zoom2,
171400
171490
  characterSet: [
171401
- ...unit2.split(""),
171491
+ ...displayUnit.split(""),
171402
171492
  ...range$5(10).map((i2) => String(i2)),
171403
171493
  ".",
171404
171494
  "e",
@@ -173717,9 +173807,135 @@ class Scatterplot extends AbstractSpatialOrScatterplot {
173717
173807
  }
173718
173808
  const ScatterplotWrapper = forwardRef((props2, deckRef) => jsxRuntimeExports.jsx(Scatterplot, { ...props2, deckRef }));
173719
173809
  ScatterplotWrapper.displayName = "ScatterplotWrapper";
173810
+ const $b5e257d569688ac6$var$defaultContext = {
173811
+ prefix: String(Math.round(Math.random() * 1e10)),
173812
+ current: 0
173813
+ };
173814
+ const $b5e257d569688ac6$var$SSRContext = /* @__PURE__ */ React__default.createContext($b5e257d569688ac6$var$defaultContext);
173815
+ const $b5e257d569688ac6$var$IsSSRContext = /* @__PURE__ */ React__default.createContext(false);
173816
+ let $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== "undefined" && window.document && window.document.createElement);
173817
+ let $b5e257d569688ac6$var$componentIds = /* @__PURE__ */ new WeakMap();
173818
+ function $b5e257d569688ac6$var$useCounter(isDisabled = false) {
173819
+ let ctx2 = useContext($b5e257d569688ac6$var$SSRContext);
173820
+ let ref2 = useRef(null);
173821
+ if (ref2.current === null && !isDisabled) {
173822
+ var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner;
173823
+ let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = React__default.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current;
173824
+ if (currentOwner) {
173825
+ let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner);
173826
+ if (prevComponentValue == null)
173827
+ $b5e257d569688ac6$var$componentIds.set(currentOwner, {
173828
+ id: ctx2.current,
173829
+ state: currentOwner.memoizedState
173830
+ });
173831
+ else if (currentOwner.memoizedState !== prevComponentValue.state) {
173832
+ ctx2.current = prevComponentValue.id;
173833
+ $b5e257d569688ac6$var$componentIds.delete(currentOwner);
173834
+ }
173835
+ }
173836
+ ref2.current = ++ctx2.current;
173837
+ }
173838
+ return ref2.current;
173839
+ }
173840
+ function $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId2) {
173841
+ let ctx2 = useContext($b5e257d569688ac6$var$SSRContext);
173842
+ if (ctx2 === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM)
173843
+ console.warn("When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.");
173844
+ let counter2 = $b5e257d569688ac6$var$useCounter(!!defaultId2);
173845
+ let prefix2 = ctx2 === $b5e257d569688ac6$var$defaultContext && false ? "react-aria" : `react-aria${ctx2.prefix}`;
173846
+ return defaultId2 || `${prefix2}-${counter2}`;
173847
+ }
173848
+ function $b5e257d569688ac6$var$useModernSSRSafeId(defaultId2) {
173849
+ let id2 = React__default.useId();
173850
+ let [didSSR] = useState($b5e257d569688ac6$export$535bd6ca7f90a273());
173851
+ let prefix2 = didSSR || false ? "react-aria" : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;
173852
+ return defaultId2 || `${prefix2}-${id2}`;
173853
+ }
173854
+ const $b5e257d569688ac6$export$619500959fc48b26 = typeof React__default["useId"] === "function" ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId;
173855
+ function $b5e257d569688ac6$var$getSnapshot() {
173856
+ return false;
173857
+ }
173858
+ function $b5e257d569688ac6$var$getServerSnapshot() {
173859
+ return true;
173860
+ }
173861
+ function $b5e257d569688ac6$var$subscribe(onStoreChange) {
173862
+ return () => {
173863
+ };
173864
+ }
173865
+ function $b5e257d569688ac6$export$535bd6ca7f90a273() {
173866
+ if (typeof React__default["useSyncExternalStore"] === "function")
173867
+ return React__default["useSyncExternalStore"]($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot);
173868
+ return useContext($b5e257d569688ac6$var$IsSSRContext);
173869
+ }
173870
+ const $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== "undefined" ? React__default.useLayoutEffect : () => {
173871
+ };
173872
+ let $bdb11010cef70236$var$idsUpdaterMap = /* @__PURE__ */ new Map();
173873
+ function $bdb11010cef70236$export$f680877a34711e37(defaultId2) {
173874
+ let [value2, setValue] = useState(defaultId2);
173875
+ let nextId = useRef(null);
173876
+ let res = $b5e257d569688ac6$export$619500959fc48b26(value2);
173877
+ let updateValue = useCallback((val) => {
173878
+ nextId.current = val;
173879
+ }, []);
173880
+ $bdb11010cef70236$var$idsUpdaterMap.set(res, updateValue);
173881
+ $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(() => {
173882
+ let r3 = res;
173883
+ return () => {
173884
+ $bdb11010cef70236$var$idsUpdaterMap.delete(r3);
173885
+ };
173886
+ }, [
173887
+ res
173888
+ ]);
173889
+ useEffect(() => {
173890
+ let newId = nextId.current;
173891
+ if (newId) {
173892
+ nextId.current = null;
173893
+ setValue(newId);
173894
+ }
173895
+ });
173896
+ return res;
173897
+ }
173898
+ let $bbed8b41f857bcc0$var$transitionsByElement = /* @__PURE__ */ new Map();
173899
+ let $bbed8b41f857bcc0$var$transitionCallbacks = /* @__PURE__ */ new Set();
173900
+ function $bbed8b41f857bcc0$var$setupGlobalEvents() {
173901
+ if (typeof window === "undefined")
173902
+ return;
173903
+ let onTransitionStart = (e3) => {
173904
+ let transitions2 = $bbed8b41f857bcc0$var$transitionsByElement.get(e3.target);
173905
+ if (!transitions2) {
173906
+ transitions2 = /* @__PURE__ */ new Set();
173907
+ $bbed8b41f857bcc0$var$transitionsByElement.set(e3.target, transitions2);
173908
+ e3.target.addEventListener("transitioncancel", onTransitionEnd);
173909
+ }
173910
+ transitions2.add(e3.propertyName);
173911
+ };
173912
+ let onTransitionEnd = (e3) => {
173913
+ let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e3.target);
173914
+ if (!properties)
173915
+ return;
173916
+ properties.delete(e3.propertyName);
173917
+ if (properties.size === 0) {
173918
+ e3.target.removeEventListener("transitioncancel", onTransitionEnd);
173919
+ $bbed8b41f857bcc0$var$transitionsByElement.delete(e3.target);
173920
+ }
173921
+ if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {
173922
+ for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)
173923
+ cb();
173924
+ $bbed8b41f857bcc0$var$transitionCallbacks.clear();
173925
+ }
173926
+ };
173927
+ document.body.addEventListener("transitionrun", onTransitionStart);
173928
+ document.body.addEventListener("transitionend", onTransitionEnd);
173929
+ }
173930
+ if (typeof document !== "undefined") {
173931
+ if (document.readyState !== "loading")
173932
+ $bbed8b41f857bcc0$var$setupGlobalEvents();
173933
+ else
173934
+ document.addEventListener("DOMContentLoaded", $bbed8b41f857bcc0$var$setupGlobalEvents);
173935
+ }
173720
173936
  function ScatterplotOptions(props2) {
173721
173937
  const { children: children2, observationsLabel, cellRadius, setCellRadius, cellRadiusMode, setCellRadiusMode, cellOpacity, setCellOpacity, cellOpacityMode, setCellOpacityMode, cellSetLabelsVisible, setCellSetLabelsVisible, tooltipsVisible, setTooltipsVisible, cellSetLabelSize, setCellSetLabelSize, cellSetPolygonsVisible, setCellSetPolygonsVisible, cellColorEncoding, setCellColorEncoding, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange } = props2;
173722
- const scatterplotOptionsId = useId();
173938
+ const scatterplotOptionsId = $bdb11010cef70236$export$f680877a34711e37();
173723
173939
  const observationsLabelNice = capitalize$2(observationsLabel);
173724
173940
  const classes = usePlotOptionsStyles();
173725
173941
  function handleCellRadiusModeChange(event2) {
@@ -176244,7 +176460,7 @@ function EmbeddingScatterplotSubscriber(props2) {
176244
176460
  }
176245
176461
  function GatingScatterplotOptions(props2) {
176246
176462
  const { featureType, gatingFeatureSelectionX, setGatingFeatureSelectionX, gatingFeatureSelectionY, setGatingFeatureSelectionY, gatingFeatureValueTransform, setGatingFeatureValueTransform, gatingFeatureValueTransformCoefficient, setGatingFeatureValueTransformCoefficient, geneSelectOptions, transformOptions } = props2;
176247
- const gatingScatterplotOptionsId = useId();
176463
+ const gatingScatterplotOptionsId = $bdb11010cef70236$export$f680877a34711e37();
176248
176464
  const classes = usePlotOptionsStyles();
176249
176465
  const handleGeneSelectChange = (event2) => {
176250
176466
  const { options } = event2.target;
@@ -192388,6 +192604,7 @@ let Spatial$1 = class Spatial extends AbstractSpatialOrScatterplot {
192388
192604
  id: "scalebar-layer",
192389
192605
  unit: unit2,
192390
192606
  size: size2,
192607
+ snap: true,
192391
192608
  viewState: { ...viewState, width: width2, height: height2 }
192392
192609
  });
192393
192610
  }
@@ -192735,7 +192952,7 @@ const useToggleStyles = makeStyles(() => ({
192735
192952
  }
192736
192953
  }));
192737
192954
  const ToggleFixedAxisButton = ({ setSpatialAxisFixed, spatialAxisFixed, use3d }) => {
192738
- const toggleAxisId = useId();
192955
+ const toggleAxisId = $bdb11010cef70236$export$f680877a34711e37();
192739
192956
  const classes = useToggleStyles();
192740
192957
  return jsxRuntimeExports.jsxs(TableRow$1, { children: [jsxRuntimeExports.jsx(TableCell$1, { className: classes.cameraLabel, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `spatial-camera-axis-${toggleAxisId}`, children: "Fix Camera Axis" }) }), jsxRuntimeExports.jsx(TableCell$1, { className: classes.toggleBox, variant: "body", children: jsxRuntimeExports.jsx(Checkbox$1, { onClick: () => setSpatialAxisFixed(!spatialAxisFixed), disabled: !use3d, checked: Boolean(spatialAxisFixed), inputProps: {
192741
192958
  "aria-label": "Fix or not fix spatial camera axis",
@@ -192744,7 +192961,7 @@ const ToggleFixedAxisButton = ({ setSpatialAxisFixed, spatialAxisFixed, use3d })
192744
192961
  };
192745
192962
  function SpatialOptions(props2) {
192746
192963
  const { observationsLabel, cellColorEncoding, setCellColorEncoding, setSpatialAxisFixed, spatialAxisFixed, use3d, tooltipsVisible, setTooltipsVisible, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, canShowExpressionOptions, canShowColorEncodingOption, canShow3DOptions } = props2;
192747
- const spatialOptionsId = useId();
192964
+ const spatialOptionsId = $bdb11010cef70236$export$f680877a34711e37();
192748
192965
  function handleGeneExpressionColormapChange(event2) {
192749
192966
  setGeneExpressionColormap(event2.target.value);
192750
192967
  }
@@ -193585,6 +193802,7 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
193585
193802
  id: "scalebar-layer",
193586
193803
  unit: "um",
193587
193804
  size: 1,
193805
+ snap: true,
193588
193806
  viewState: { ...viewState, width: width2, height: height2 }
193589
193807
  });
193590
193808
  }
@@ -195730,7 +195948,7 @@ function HeatmapTooltipSubscriber(props2) {
195730
195948
  function HeatmapOptions(props2) {
195731
195949
  const { geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, tooltipsVisible, setTooltipsVisible } = props2;
195732
195950
  const classes = usePlotOptionsStyles();
195733
- const heatmapOptionsId = useId();
195951
+ const heatmapOptionsId = $bdb11010cef70236$export$f680877a34711e37();
195734
195952
  function handleGeneExpressionColormapChange(event2) {
195735
195953
  setGeneExpressionColormap(event2.target.value);
195736
195954
  }
@@ -200222,7 +200440,7 @@ function FeatureList(props2) {
200222
200440
  }
200223
200441
  function FeatureListOptions(props2) {
200224
200442
  const { children: children2, featureListSort, setFeatureListSort, featureListSortKey, setFeatureListSortKey, showFeatureTable, setShowFeatureTable, hasFeatureLabels, primaryColumnName } = props2;
200225
- const featureListId = useId();
200443
+ const featureListId = $bdb11010cef70236$export$f680877a34711e37();
200226
200444
  function handleFeatureListSortChange(event2) {
200227
200445
  setFeatureListSort(event2.target.value);
200228
200446
  }
@@ -200672,11 +200890,11 @@ function LayerOptions({ colormap, opacity: opacity2, handleColormapChange, handl
200672
200890
  const hasViewableResolutions = Boolean(Array.from({
200673
200891
  length: loader2.data.length
200674
200892
  }).filter((_, res) => canLoadResolution(loader2.data, res)).length);
200675
- const globalSelectionSliderId = useId();
200676
- const colormapSelectId = useId();
200677
- const domainSelectorId = useId();
200678
- const opacitySliderId = useId();
200679
- const zeroTransparentId = useId();
200893
+ const globalSelectionSliderId = $bdb11010cef70236$export$f680877a34711e37();
200894
+ const colormapSelectId = $bdb11010cef70236$export$f680877a34711e37();
200895
+ const domainSelectorId = $bdb11010cef70236$export$f680877a34711e37();
200896
+ const opacitySliderId = $bdb11010cef70236$export$f680877a34711e37();
200897
+ const zeroTransparentId = $bdb11010cef70236$export$f680877a34711e37();
200680
200898
  return jsxRuntimeExports.jsxs(Grid$3, { container: true, direction: "column", style: { width: "100%" }, children: [hasZStack && !disable3d && hasViewableResolutions && jsxRuntimeExports.jsx(VolumeDropdown, { loader: loader2, handleSliderChange, handleDomainChange, channels: channels2, handleMultiPropertyChange, resolution, disable3d, setRasterLayerCallback, setAreAllChannelsLoading, setViewState, spatialHeight, spatialWidth, use3d, modelMatrix: modelMatrix2 }), hasDimensionsAndChannels && !use3d && globalControlLabels.map((field2) => shape2[labels2.indexOf(field2)] > 1 && jsxRuntimeExports.jsx(LayerOption, { name: field2, inputId: `${field2}-${globalSelectionSliderId}`, children: jsxRuntimeExports.jsx(GlobalSelectionSlider, { field: field2, inputId: `${field2}-${globalSelectionSliderId}`, value: globalLabelValues[field2], handleChange: handleGlobalChannelsSelectionChange, possibleValues: range$b(shape2[labels2.indexOf(field2)]) }) }, field2)), !disableChannelsIfRgbDetected ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [shouldShowColormap && jsxRuntimeExports.jsx(Grid$3, { item: true, children: jsxRuntimeExports.jsx(LayerOption, { name: "Colormap", inputId: colormapSelectId, children: jsxRuntimeExports.jsx(ColormapSelect, { value: colormap || "", inputId: colormapSelectId, handleChange: handleColormapChange }) }) }), shouldShowDomain && jsxRuntimeExports.jsx(Grid$3, { item: true, children: jsxRuntimeExports.jsx(LayerOption, { name: "Domain", inputId: domainSelectorId, children: jsxRuntimeExports.jsx(SliderDomainSelector, { value: domainType || DEFAULT_RASTER_DOMAIN_TYPE, inputId: domainSelectorId, handleChange: (value2) => {
200681
200899
  handleDomainChange(value2);
200682
200900
  } }) }) })] }) : null, !use3d && jsxRuntimeExports.jsx(Grid$3, { item: true, children: jsxRuntimeExports.jsx(LayerOption, { name: "Opacity", inputId: opacitySliderId, children: jsxRuntimeExports.jsx(OpacitySlider, { value: opacity2, handleChange: handleOpacityChange, inputId: opacitySliderId }) }) }), shouldShowTransparentColor && !use3d && jsxRuntimeExports.jsx(Grid$3, { item: true, children: jsxRuntimeExports.jsx(LayerOption, { name: "Zero Transparent", inputId: zeroTransparentId, children: jsxRuntimeExports.jsx(TransparentColorCheckbox, { value: transparentColor, handleChange: handleTransparentColorChange, inputId: zeroTransparentId }) }) })] });
@@ -200779,7 +200997,7 @@ function LayerController$1(props2) {
200779
200997
  channelRef.current = channels2;
200780
200998
  return void 0;
200781
200999
  }, [channels2]);
200782
- const layerControlsId = useId();
201000
+ const layerControlsId = $bdb11010cef70236$export$f680877a34711e37();
200783
201001
  const firstSelection = ((_a2 = channels2[0]) == null ? void 0 : _a2.selection) || {};
200784
201002
  const { data: data2, channels: channelOptions } = loader2;
200785
201003
  const [tab, setTab] = useState(0);
@@ -201419,13 +201637,13 @@ function SpotLayerEllipsisMenu(props2) {
201419
201637
  useStyles$c();
201420
201638
  const selectClasses = useSelectStyles();
201421
201639
  const menuClasses = useEllipsisMenuStyles();
201422
- const filledId = useId();
201423
- const strokeWidthId = useId();
201424
- const quantitativeColormapId = useId();
201425
- const colormapRangeId = useId();
201426
- const tooltipsVisibleId = useId();
201427
- const crosshairsVisibleId = useId();
201428
- const legendVisibleId = useId();
201640
+ const filledId = $bdb11010cef70236$export$f680877a34711e37();
201641
+ const strokeWidthId = $bdb11010cef70236$export$f680877a34711e37();
201642
+ const quantitativeColormapId = $bdb11010cef70236$export$f680877a34711e37();
201643
+ const colormapRangeId = $bdb11010cef70236$export$f680877a34711e37();
201644
+ const tooltipsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201645
+ const crosshairsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201646
+ const legendVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201429
201647
  return jsxRuntimeExports.jsxs(PopperMenu, { open, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, {}), buttonClassName: menuClasses.imageLayerMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, withPaper: true, "aria-label": "Open spot layer options menu", children: [jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: filledId, children: "Filled: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: filled, onChange: (e3, v) => setFilled(v), inputProps: { id: filledId, "aria-label": "Toggle between filled and stroked spots" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: strokeWidthId, children: "Stroke Width:" }), jsxRuntimeExports.jsx(Slider$1, { disabled: filled, value: strokeWidth, min: 0.01, max: 5, step: 0.01, onChange: (e3, v) => setStrokeWidth(v), className: menuClasses.menuItemSlider, orientation: "horizontal", id: strokeWidthId, "aria-label": "Stroke width slider" })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: quantitativeColormapId, children: "Color Encoding: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, onChange: (e3) => setObsColorEncoding(e3.target.value), value: obsColorEncoding, inputProps: { id: quantitativeColormapId, "aria-label": "Color encoding selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "spatialLayerColor", children: "Static Color" }), jsxRuntimeExports.jsx("option", { value: "geneSelection", children: "Feature Value" }), jsxRuntimeExports.jsx("option", { value: "cellSetSelection", children: "Set Selection" })] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: colormapRangeId, children: "Colormap Range: " }), jsxRuntimeExports.jsx(Slider$1, { disabled: obsColorEncoding !== "geneSelection", value: featureValueColormapRange, min: 0, max: 1, step: 0.01, onChange: (e3, v) => setFeatureValueColormapRange(v), className: menuClasses.menuItemSlider, orientation: "horizontal", id: colormapRangeId, getAriaLabel: (index2) => index2 === 0 ? "Low value colormap range slider" : "High value colormap range slider" })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: tooltipsVisibleId, children: "Tooltips Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipsVisible, onChange: (e3, v) => setTooltipsVisible(v), inputProps: { id: tooltipsVisibleId, "aria-label": "Toggle tooltip visibility" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: crosshairsVisibleId, children: "Tooltip Crosshairs Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipCrosshairsVisible, onChange: (e3, v) => setTooltipCrosshairsVisible(v), inputProps: { id: crosshairsVisibleId, "aria-label": "Toggle tooltip crosshair visibility" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: legendVisibleId, children: "Legend Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: legendVisible, onChange: (e3, v) => setLegendVisible(v), inputProps: { id: legendVisibleId, "aria-label": "Toggle legend visibility" } })] })] });
201430
201648
  }
201431
201649
  function SpotLayerController(props2) {
@@ -201462,11 +201680,11 @@ function PointLayerEllipsisMenu(props2) {
201462
201680
  const [open, setOpen] = useState(false);
201463
201681
  const selectClasses = useSelectStyles();
201464
201682
  const menuClasses = useEllipsisMenuStyles();
201465
- const quantitativeColormapId = useId();
201466
- const colormapRangeId = useId();
201467
- const tooltipsVisibleId = useId();
201468
- const crosshairsVisibleId = useId();
201469
- const legendVisibleId = useId();
201683
+ const quantitativeColormapId = $bdb11010cef70236$export$f680877a34711e37();
201684
+ const colormapRangeId = $bdb11010cef70236$export$f680877a34711e37();
201685
+ const tooltipsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201686
+ const crosshairsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201687
+ const legendVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201470
201688
  return jsxRuntimeExports.jsxs(PopperMenu, { open, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, {}), buttonClassName: menuClasses.imageLayerMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, withPaper: true, "aria-label": "Open point layer options menu", children: [jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: quantitativeColormapId, children: "Color Encoding: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, onChange: (e3) => setObsColorEncoding(e3.target.value), value: obsColorEncoding, inputProps: { id: quantitativeColormapId, "aria-label": "Color encoding selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "spatialLayerColor", children: "Static Color" }), jsxRuntimeExports.jsx("option", { value: "obsLabels", children: "Label Value" })] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: colormapRangeId, children: "Colormap Range: " }), jsxRuntimeExports.jsx(Slider$1, { disabled: obsColorEncoding !== "geneSelection", value: featureValueColormapRange, min: 0, max: 1, step: 0.01, onChange: (e3, v) => setFeatureValueColormapRange(v), className: menuClasses.menuItemSlider, orientation: "horizontal", id: colormapRangeId, getAriaLabel: (index2) => index2 === 0 ? "Low value colormap range slider" : "High value colormap range slider" })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: tooltipsVisibleId, children: "Tooltips Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipsVisible, onChange: (e3, v) => setTooltipsVisible(v), inputProps: { id: tooltipsVisibleId, "aria-label": "Toggle tooltip visibility" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: crosshairsVisibleId, children: "Tooltip Crosshairs Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipCrosshairsVisible, onChange: (e3, v) => setTooltipCrosshairsVisible(v), inputProps: { id: crosshairsVisibleId, "aria-label": "Toggle tooltip crosshair visibility" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: legendVisibleId, children: "Legend Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: legendVisible, onChange: (e3, v) => setLegendVisible(v), inputProps: { id: legendVisibleId, "aria-label": "Toggle legend visibility" } })] })] });
201471
201689
  }
201472
201690
  function PointLayerController(props2) {
@@ -201504,13 +201722,13 @@ function SegmentationChannelEllipsisMenu(props2) {
201504
201722
  useStyles$a();
201505
201723
  const selectClasses = useSelectStyles();
201506
201724
  const menuClasses = useEllipsisMenuStyles();
201507
- const filledId = useId();
201508
- const strokeWidthId = useId();
201509
- const quantitativeColormapId = useId();
201510
- const colormapRangeId = useId();
201511
- const tooltipsVisibleId = useId();
201512
- const crosshairsVisibleId = useId();
201513
- const legendVisibleId = useId();
201725
+ const filledId = $bdb11010cef70236$export$f680877a34711e37();
201726
+ const strokeWidthId = $bdb11010cef70236$export$f680877a34711e37();
201727
+ const quantitativeColormapId = $bdb11010cef70236$export$f680877a34711e37();
201728
+ const colormapRangeId = $bdb11010cef70236$export$f680877a34711e37();
201729
+ const tooltipsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201730
+ const crosshairsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201731
+ const legendVisibleId = $bdb11010cef70236$export$f680877a34711e37();
201514
201732
  return jsxRuntimeExports.jsxs(PopperMenu, { open, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, {}), buttonClassName: menuClasses.imageLayerMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, withPaper: true, "aria-label": "Open segmentation channel options menu", children: [jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: filledId, children: "Filled: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: filled, onChange: (e3, v) => setFilled(v), inputProps: { id: filledId, "aria-label": "Toggle between filled and stroked segmentations" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: strokeWidthId, children: "Stroke Width:" }), jsxRuntimeExports.jsx(Slider$1, { disabled: filled, value: strokeWidth, min: 0.01, max: 5, step: 0.01, onChange: (e3, v) => setStrokeWidth(v), className: menuClasses.menuItemSlider, orientation: "horizontal", id: strokeWidthId, "aria-label": "Stroke width slider" })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: quantitativeColormapId, children: "Color Encoding: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, onChange: (e3) => setObsColorEncoding(e3.target.value), value: obsColorEncoding, inputProps: { id: quantitativeColormapId, "aria-label": "Color encoding selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "spatialChannelColor", children: "Static Color" }), jsxRuntimeExports.jsx("option", { value: "geneSelection", children: "Feature Value" }), jsxRuntimeExports.jsx("option", { value: "cellSetSelection", children: "Set Selection" })] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: colormapRangeId, children: "Colormap Range: " }), jsxRuntimeExports.jsx(Slider$1, { disabled: obsColorEncoding !== "geneSelection", value: featureValueColormapRange, min: 0, max: 1, step: 0.01, onChange: (e3, v) => setFeatureValueColormapRange(v), className: menuClasses.menuItemSlider, orientation: "horizontal", id: colormapRangeId, getAriaLabel: (index2) => index2 === 0 ? "Low value colormap range slider" : "High value colormap range slider" })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: tooltipsVisibleId, children: "Tooltips Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipsVisible, onChange: (e3, v) => setTooltipsVisible(v), inputProps: { id: tooltipsVisibleId, "aria-label": "Toggle tooltip visibility" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: crosshairsVisibleId, children: "Tooltip Crosshairs Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipCrosshairsVisible, onChange: (e3, v) => setTooltipCrosshairsVisible(v), inputProps: { id: crosshairsVisibleId, "aria-label": "Toggle tooltip crosshair visibility" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: legendVisibleId, children: "Legend Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: legendVisible, onChange: (e3, v) => setLegendVisible(v), inputProps: { id: legendVisibleId, "aria-label": "Toggle legend visibility" } })] })] });
201515
201733
  }
201516
201734
  function SegmentationChannelController(props2) {
@@ -202611,7 +202829,7 @@ function ChannelOptions(props2) {
202611
202829
  function handleDomainTypeChange(event2) {
202612
202830
  setShowValueExtent(event2.target.value === "Value Min/Max");
202613
202831
  }
202614
- const domainTypeId = useId();
202832
+ const domainTypeId = $bdb11010cef70236$export$f680877a34711e37();
202615
202833
  return jsxRuntimeExports.jsxs(PopperMenu, { open, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, { fontSize: "small" }), buttonClassName: classes.channelMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, placement: "bottom-end", withPaper: true, "aria-label": "Open channel options menu", children: [jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: domainTypeId, children: "Slider Extent: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, onChange: handleDomainTypeChange, value: showValueExtent ? "Value Min/Max" : "Dtype Min/Max", inputProps: { id: domainTypeId, "aria-label": "Slider extent selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "Value Min/Max", children: "Value Min/Max" }), jsxRuntimeExports.jsx("option", { value: "Dtype Min/Max", children: "Dtype Min/Max" })] })] }), jsxRuntimeExports.jsx(MenuItem$1, { dense: true, disableGutters: true, component: "button", onClick: onResetWindowUsingIQR, className: classes.menuItemButton, "aria-label": "Click to use IQR for channel", children: "Reset window using IQR" }), jsxRuntimeExports.jsx(MenuItem$1, { dense: true, disableGutters: true, component: "button", onClick: handleRemove, className: classes.menuItemButton, "aria-label": "Click to remove channel", children: "Remove channel" })] });
202616
202834
  }
202617
202835
  const useStyles$8 = makeStyles(() => ({
@@ -202795,15 +203013,15 @@ function ImageLayerEllipsisMenu(props2) {
202795
203013
  function handleChannelLabelsOrientationChange(event2) {
202796
203014
  setChannelLabelsOrientation(event2.target.value);
202797
203015
  }
202798
- const colormapId = useId();
202799
- const interpretationId = useId();
202800
- const transparentId = useId();
202801
- const volumetricId = useId();
202802
- const resolutionId = useId();
202803
- const tooltipsVisibleId = useId();
202804
- const channelLabelsVisibleId = useId();
202805
- const channelLabelsOrientationId = useId();
202806
- const channelLabelSizeId = useId();
203016
+ const colormapId = $bdb11010cef70236$export$f680877a34711e37();
203017
+ const interpretationId = $bdb11010cef70236$export$f680877a34711e37();
203018
+ const transparentId = $bdb11010cef70236$export$f680877a34711e37();
203019
+ const volumetricId = $bdb11010cef70236$export$f680877a34711e37();
203020
+ const resolutionId = $bdb11010cef70236$export$f680877a34711e37();
203021
+ const tooltipsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
203022
+ const channelLabelsVisibleId = $bdb11010cef70236$export$f680877a34711e37();
203023
+ const channelLabelsOrientationId = $bdb11010cef70236$export$f680877a34711e37();
203024
+ const channelLabelSizeId = $bdb11010cef70236$export$f680877a34711e37();
202807
203025
  return jsxRuntimeExports.jsxs(PopperMenu, { open, setOpen, buttonIcon: jsxRuntimeExports.jsx(MoreVertIcon, {}), buttonClassName: menuClasses.imageLayerMenuButton, containerClassName: menuClasses.imageLayerPopperContainer, withPaper: true, "aria-label": "Open image layer options menu", children: [jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: colormapId, children: "Colormap: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, disabled: photometricInterpretation === "RGB", onChange: handleColormapChange, value: colormap === null ? "" : colormap, inputProps: { id: colormapId, "aria-label": "Colormap selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { "aria-label": "None", value: "", children: "None" }), COLORMAP_OPTIONS.map((name2) => jsxRuntimeExports.jsx("option", { value: name2, children: name2 }, name2))] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: interpretationId, children: "Photometric Interpretation: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, onChange: handleInterpretationChange, value: photometricInterpretation, inputProps: { id: interpretationId, "aria-label": "Photometric interpretation selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { "aria-label": "RGB", value: "RGB", children: "RGB" }), channelScopes.length > 0 ? jsxRuntimeExports.jsx("option", { "aria-label": "BlackIsZero", value: "BlackIsZero", children: "BlackIsZero" }) : null] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: transparentId, children: "Zero Transparent: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: spatialLayerTransparentColor !== null, onChange: (e3, v) => setSpatialLayerTransparentColor(v ? [0, 0, 0] : null), inputProps: { id: transparentId, "aria-label": "Render zero-value pixels as transparent" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: volumetricId, children: "Volumetric Rendering: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, onChange: handleVolumetricChange, value: volumetricRenderingAlgorithm, inputProps: { id: volumetricId, "aria-label": "Volumetric rendering algorithm selector" }, classes: { root: selectClasses.selectRoot }, disabled: !is3dMode, children: [jsxRuntimeExports.jsx("option", { "aria-label": "Additive", value: "additive", children: "Additive" }), jsxRuntimeExports.jsx("option", { "aria-label": "Maximum Intensity Projection", value: "maximumIntensityProjection", children: "Maximum Intensity Projection" })] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: resolutionId, children: "Volume Resolution: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, disabled: !is3dMode || !isMultiResolution, onChange: handleResolutionChange, value: spatialTargetResolution === null ? "auto" : spatialTargetResolution, inputProps: { id: resolutionId, "aria-label": "Volumetric resolution selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { value: "auto", children: "Auto" }), Array.isArray(multiResolutionStats) ? multiResolutionStats.map((stats, resolution) => stats.canLoad ? jsxRuntimeExports.jsx("option", { value: resolution, children: `3D: ${resolution}x Downsampled, ~${formatBytes(stats.totalBytes)} per channel, (${stats.height}, ${stats.width}, ${stats.depthDownsampled})` }, `(${stats.height}, ${stats.width}, ${stats.depthDownsampled})`) : null) : null] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: tooltipsVisibleId, children: "Tooltips Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { color: "primary", checked: tooltipsVisible, onChange: (e3, v) => setTooltipsVisible(v), inputProps: { id: tooltipsVisibleId, "aria-label": "Render pixel value tooltips" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: channelLabelsVisibleId, children: "Channel Labels Visible: " }), jsxRuntimeExports.jsx(Checkbox$1, { disabled: photometricInterpretation === "RGB", color: "primary", checked: channelLabelsVisible, onChange: (e3, v) => setChannelLabelsVisible(v), inputProps: { id: channelLabelsVisibleId, "aria-label": "Render channel labels" } })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: channelLabelsOrientationId, children: "Channel Labels Orientation: " }), jsxRuntimeExports.jsxs(Select$1, { native: true, disabled: photometricInterpretation === "RGB", onChange: handleChannelLabelsOrientationChange, value: channelLabelsOrientation, inputProps: { id: channelLabelsOrientationId, "aria-label": "Channel labels orientation selector" }, classes: { root: selectClasses.selectRoot }, children: [jsxRuntimeExports.jsx("option", { "aria-label": "Vertical", value: "vertical", children: "Vertical" }), jsxRuntimeExports.jsx("option", { "aria-label": "Horizontal", value: "horizontal", children: "Horizontal" })] })] }), jsxRuntimeExports.jsxs(MenuItem$1, { dense: true, disableGutters: true, children: [jsxRuntimeExports.jsx("label", { className: menuClasses.imageLayerMenuLabel, htmlFor: channelLabelSizeId, children: "Channel Labels Size: " }), jsxRuntimeExports.jsx(Slider$1, { disabled: photometricInterpretation === "RGB", value: channelLabelSize, min: 8, max: 36, step: 1, onChange: (e3, v) => setChannelLabelSize(v), className: menuClasses.menuItemSlider, orientation: "horizontal", id: channelLabelSizeId, "aria-label": "Channel labels text size slider" })] })] });
202808
203026
  }
202809
203027
  function ImageLayerController(props2) {
@@ -203541,7 +203759,7 @@ const HIGLASS_BUNDLE_VERSION = "1.11.13";
203541
203759
  const HIGLASS_CSS_URL = `https://unpkg.com/${HIGLASS_PKG_NAME}@${HIGLASS_BUNDLE_VERSION}/dist/hglib.css`;
203542
203760
  register({ dataFetcher: ZarrMultivecDataFetcher, config: ZarrMultivecDataFetcher.config }, { pluginType: "dataFetcher" });
203543
203761
  const LazyHiGlassComponent = React__default.lazy(async () => {
203544
- const { HiGlassComponent } = await import("./hglib-2b8cd9d8.js").then((n3) => n3.h);
203762
+ const { HiGlassComponent } = await import("./hglib-1bae5754.js").then((n3) => n3.h);
203545
203763
  return { default: HiGlassComponent };
203546
203764
  });
203547
203765
  const HG_SIZE = 800;
@@ -203829,7 +204047,7 @@ function GenomicProfilesSubscriber(props2) {
203829
204047
  }
203830
204048
  function CellSetExpressionPlotOptions(props2) {
203831
204049
  const { featureValueTransform, setFeatureValueTransform, featureValueTransformCoefficient, setFeatureValueTransformCoefficient, transformOptions } = props2;
203832
- const cellSetExpressionPlotOptionsId = useId();
204050
+ const cellSetExpressionPlotOptionsId = $bdb11010cef70236$export$f680877a34711e37();
203833
204051
  const classes = usePlotOptionsStyles();
203834
204052
  const handleTransformChange = (event2) => {
203835
204053
  setFeatureValueTransform(event2.target.value === "" ? null : event2.target.value);
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { f, P, h, d, V, z } from "./index-d4cd1fef.js";
1
+ import { f, P, h, d, V, z } from "./index-f665a5d4.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-d4cd1fef.js";
1
+ import { B as BaseDecoder } from "./index-f665a5d4.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-68f84e2a.js";
2
- import { g as getDefaultExportFromCjs, B as BaseDecoder, L as LercParameters, a as LercAddCompression } from "./index-d4cd1fef.js";
2
+ import { g as getDefaultExportFromCjs, B as BaseDecoder, L as LercParameters, a as LercAddCompression } from "./index-f665a5d4.js";
3
3
  import "react";
4
4
  import "@vitessce/vit-s";
5
5
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-d4cd1fef.js";
1
+ import { B as BaseDecoder } from "./index-f665a5d4.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-d4cd1fef.js";
1
+ import { B as BaseDecoder } from "./index-f665a5d4.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-d4cd1fef.js";
1
+ import { B as BaseDecoder } from "./index-f665a5d4.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
@@ -1,4 +1,4 @@
1
- import { B as BaseDecoder } from "./index-d4cd1fef.js";
1
+ import { B as BaseDecoder } from "./index-f665a5d4.js";
2
2
  import "react";
3
3
  import "@vitessce/vit-s";
4
4
  import "react-dom";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/all",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "author": "Gehlenborg Lab",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -18,27 +18,27 @@
18
18
  "dependencies": {
19
19
  "@material-ui/core": "~4.12.3",
20
20
  "zod": "^3.21.4",
21
- "@vitessce/constants-internal": "3.2.0",
22
- "@vitessce/csv": "3.2.0",
23
- "@vitessce/description": "3.2.0",
24
- "@vitessce/feature-list": "3.2.0",
25
- "@vitessce/genomic-profiles": "3.2.0",
26
- "@vitessce/heatmap": "3.2.0",
27
- "@vitessce/json": "3.2.0",
28
- "@vitessce/layer-controller": "3.2.0",
29
- "@vitessce/layer-controller-beta": "3.2.0",
30
- "@vitessce/obs-sets-manager": "3.2.0",
31
- "@vitessce/ome-tiff": "3.2.0",
32
- "@vitessce/plugins": "3.2.0",
33
- "@vitessce/scatterplot-embedding": "3.2.0",
34
- "@vitessce/scatterplot-gating": "3.2.0",
35
- "@vitessce/schemas": "3.2.0",
36
- "@vitessce/spatial": "3.2.0",
37
- "@vitessce/spatial-beta": "3.2.0",
38
- "@vitessce/statistical-plots": "3.2.0",
39
- "@vitessce/status": "3.2.0",
40
- "@vitessce/vit-s": "3.2.0",
41
- "@vitessce/zarr": "3.2.0"
21
+ "@vitessce/constants-internal": "3.2.2",
22
+ "@vitessce/description": "3.2.2",
23
+ "@vitessce/csv": "3.2.2",
24
+ "@vitessce/genomic-profiles": "3.2.2",
25
+ "@vitessce/feature-list": "3.2.2",
26
+ "@vitessce/json": "3.2.2",
27
+ "@vitessce/heatmap": "3.2.2",
28
+ "@vitessce/layer-controller": "3.2.2",
29
+ "@vitessce/layer-controller-beta": "3.2.2",
30
+ "@vitessce/obs-sets-manager": "3.2.2",
31
+ "@vitessce/ome-tiff": "3.2.2",
32
+ "@vitessce/plugins": "3.2.2",
33
+ "@vitessce/scatterplot-embedding": "3.2.2",
34
+ "@vitessce/scatterplot-gating": "3.2.2",
35
+ "@vitessce/schemas": "3.2.2",
36
+ "@vitessce/spatial": "3.2.2",
37
+ "@vitessce/statistical-plots": "3.2.2",
38
+ "@vitessce/spatial-beta": "3.2.2",
39
+ "@vitessce/vit-s": "3.2.2",
40
+ "@vitessce/status": "3.2.2",
41
+ "@vitessce/zarr": "3.2.2"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/react": "^18.0.28",