@vitessce/all 3.6.13 → 3.6.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { g as getDefaultExportFromCjs, aV as requireAssign, aW as require_export, aX as require_core, aY as require_fails, aZ as require_toObject, a_ as require_objectKeys, a$ as require_cof, b0 as require_wks, b1 as require_iterators, b2 as requireWeb_dom_iterable, b3 as requireEs6_string_iterator, b4 as require_anObject, b5 as require_hide, b6 as require_ctx, b7 as require_toLength, b8 as require_global, b9 as require_objectDp, ba as require_descriptors, bb as require_isObject, bc as require_objectCreate, bd as require_iterDefine, be as require_iterStep, bf as require_meta, bg as require_isArray, bh as require_iobject, bi as require_setToStringTag, bj as require_aFunction, bk as requireIterator, bl as require_propertyDesc, aS as commonjsGlobal, bm as requireEs6_symbol, bn as requireDefineProperty, bo as require_toIobject, bp as require_objectGopd, bq as require_html, br as require_domCreate, bs as require_library, bt as requireSymbol, bu as require_objectPie, bv as require_has, bw as require_redefine, bx as require_objectAssign, by as getAugmentedNamespace, bz as requirePropTypes, aI as jsxRuntimeExports } from "./index-DcZv7teI.js";
1
+ import { g as getDefaultExportFromCjs, aV as requireAssign, aW as require_export, aX as require_core, aY as require_fails, aZ as require_toObject, a_ as require_objectKeys, a$ as require_cof, b0 as require_wks, b1 as require_iterators, b2 as requireWeb_dom_iterable, b3 as requireEs6_string_iterator, b4 as require_anObject, b5 as require_hide, b6 as require_ctx, b7 as require_toLength, b8 as require_global, b9 as require_objectDp, ba as require_descriptors, bb as require_isObject, bc as require_objectCreate, bd as require_iterDefine, be as require_iterStep, bf as require_meta, bg as require_isArray, bh as require_iobject, bi as require_setToStringTag, bj as require_aFunction, bk as requireIterator, bl as require_propertyDesc, aS as commonjsGlobal, bm as requireEs6_symbol, bn as requireDefineProperty, bo as require_toIobject, bp as require_objectGopd, bq as require_html, br as require_domCreate, bs as require_library, bt as requireSymbol, bu as require_objectPie, bv as require_has, bw as require_redefine, bx as require_objectAssign, by as getAugmentedNamespace, bz as requirePropTypes, aI as jsxRuntimeExports } from "./index-CHatE_p-.js";
2
2
  import React__default from "react";
3
3
  var lib = {};
4
4
  var assignExports = requireAssign();
@@ -1,5 +1,5 @@
1
1
  import { i as inflate_1 } from "./pako.esm-SxljTded.js";
2
- import { aP as BaseDecoder } from "./index-DcZv7teI.js";
2
+ import { aP as BaseDecoder } from "./index-CHatE_p-.js";
3
3
  class DeflateDecoder extends BaseDecoder {
4
4
  decodeBlock(buffer) {
5
5
  return inflate_1(new Uint8Array(buffer)).buffer;
@@ -1,7 +1,7 @@
1
1
  import * as React$7 from "react";
2
2
  import React__default, { isValidElement, PureComponent, Component, createElement, createContext, createRef } from "react";
3
3
  import ReactDOM__default, { findDOMNode as findDOMNode$1 } from "react-dom";
4
- import { aS as commonjsGlobal$1, aT as requireObjectAssign, g as getDefaultExportFromCjs$1, aU as earcut } from "./index-DcZv7teI.js";
4
+ import { aS as commonjsGlobal$1, aT as requireObjectAssign, g as getDefaultExportFromCjs$1, aU as earcut } from "./index-CHatE_p-.js";
5
5
  var promise = {};
6
6
  var hasRequiredPromise;
7
7
  function requirePromise() {
@@ -1,4 +1,4 @@
1
- import { g as getDefaultExportFromCjs, R as Raycaster, O as OrthographicCamera, P as PerspectiveCamera, S as Scene, a as PCFSoftShadowMap, V as VSMShadowMap, b as PCFShadowMap, B as BasicShadowMap, N as NoToneMapping, A as ACESFilmicToneMapping, c as Vector3, d as Vector2, C as Clock, W as WebGLRenderer, e as Camera, f as BufferGeometry, M as Material, L as Layers, T as Texture, h as RGBAFormat, U as UnsignedByteType, i as Color, _ as _extends, j as THREE, G as Group, k as Matrix4, l as TrianglesDrawMode, m as TriangleFanDrawMode, n as TriangleStripDrawMode, o as REVISION, E as EventDispatcher, p as MOUSE, q as TOUCH, r as Spherical, Q as Quaternion, s as Ray$1, t as Plane, u as Loader, v as LoaderUtils, F as FileLoader, w as MeshPhysicalMaterial, x as SpotLight, y as PointLight, D as DirectionalLight, I as InstancedMesh, z as Object3D, H as TextureLoader, J as ImageBitmapLoader, K as BufferAttribute, X as InterleavedBuffer, Y as LinearMipmapLinearFilter, Z as NearestMipmapLinearFilter, $ as LinearMipmapNearestFilter, a0 as NearestMipmapNearestFilter, a1 as LinearFilter, a2 as NearestFilter, a3 as RepeatWrapping, a4 as MirroredRepeatWrapping, a5 as ClampToEdgeWrapping, a6 as PointsMaterial, a7 as LineBasicMaterial, a8 as MeshStandardMaterial, a9 as DoubleSide, aa as MeshBasicMaterial, ab as PropertyBinding, ac as SkinnedMesh, ad as Mesh, ae as LineSegments, af as Line$1, ag as LineLoop, ah as Points, ai as MathUtils, aj as Skeleton, ak as InterpolateDiscrete, al as InterpolateLinear, am as AnimationClip, an as Bone, ao as InterleavedBufferAttribute, ap as VectorKeyframeTrack, aq as QuaternionKeyframeTrack, ar as NumberKeyframeTrack, as as FrontSide, at as Interpolant, au as Box3, av as Sphere, aw as InstancedBufferGeometry, ax as Float32BufferAttribute, ay as InstancedInterleavedBuffer, az as WireframeGeometry, aA as ShaderMaterial, aB as UniformsUtils, aC as UniformsLib, aD as Vector4, aE as Line3, aF as SphereGeometry, aG as Triangle, aH as BackSide, aI as jsxRuntimeExports, aJ as Matrix3, aK as CoordinationType, aL as Data3DTexture, aM as RedFormat, aN as FloatType, aO as getImageSize } from "./index-DcZv7teI.js";
1
+ import { g as getDefaultExportFromCjs, R as Raycaster, O as OrthographicCamera, P as PerspectiveCamera, S as Scene, a as PCFSoftShadowMap, V as VSMShadowMap, b as PCFShadowMap, B as BasicShadowMap, N as NoToneMapping, A as ACESFilmicToneMapping, c as Vector3, d as Vector2, C as Clock, W as WebGLRenderer, e as Camera, f as BufferGeometry, M as Material, L as Layers, T as Texture, h as RGBAFormat, U as UnsignedByteType, i as Color, _ as _extends, j as THREE, G as Group, k as Matrix4, l as TrianglesDrawMode, m as TriangleFanDrawMode, n as TriangleStripDrawMode, o as REVISION, E as EventDispatcher, p as MOUSE, q as TOUCH, r as Spherical, Q as Quaternion, s as Ray$1, t as Plane, u as Loader, v as LoaderUtils, F as FileLoader, w as MeshPhysicalMaterial, x as SpotLight, y as PointLight, D as DirectionalLight, I as InstancedMesh, z as Object3D, H as TextureLoader, J as ImageBitmapLoader, K as BufferAttribute, X as InterleavedBuffer, Y as LinearMipmapLinearFilter, Z as NearestMipmapLinearFilter, $ as LinearMipmapNearestFilter, a0 as NearestMipmapNearestFilter, a1 as LinearFilter, a2 as NearestFilter, a3 as RepeatWrapping, a4 as MirroredRepeatWrapping, a5 as ClampToEdgeWrapping, a6 as PointsMaterial, a7 as LineBasicMaterial, a8 as MeshStandardMaterial, a9 as DoubleSide, aa as MeshBasicMaterial, ab as PropertyBinding, ac as SkinnedMesh, ad as Mesh, ae as LineSegments, af as Line$1, ag as LineLoop, ah as Points, ai as MathUtils, aj as Skeleton, ak as InterpolateDiscrete, al as InterpolateLinear, am as AnimationClip, an as Bone, ao as InterleavedBufferAttribute, ap as VectorKeyframeTrack, aq as QuaternionKeyframeTrack, ar as NumberKeyframeTrack, as as FrontSide, at as Interpolant, au as Box3, av as Sphere, aw as InstancedBufferGeometry, ax as Float32BufferAttribute, ay as InstancedInterleavedBuffer, az as WireframeGeometry, aA as ShaderMaterial, aB as UniformsUtils, aC as UniformsLib, aD as Vector4, aE as Line3, aF as SphereGeometry, aG as Triangle, aH as BackSide, aI as jsxRuntimeExports, aJ as Matrix3, aK as CoordinationType, aL as Data3DTexture, aM as RedFormat, aN as FloatType, aO as getImageSize } from "./index-CHatE_p-.js";
2
2
  import * as React from "react";
3
3
  import React__default, { useReducer, useRef, useEffect, useLayoutEffect, useDebugValue, useState, useMemo, forwardRef } from "react";
4
4
  var constants = { exports: {} };
@@ -23637,7 +23637,7 @@ const Text = /* @__PURE__ */ React.forwardRef(({
23637
23637
  const {
23638
23638
  Text: TextMeshImpl,
23639
23639
  preloadFont
23640
- } = suspend(async () => import("./troika-three-text.esm-DLsbwboO.js"), []);
23640
+ } = suspend(async () => import("./troika-three-text.esm-CheqkRn_.js"), []);
23641
23641
  const invalidate2 = useThree(({
23642
23642
  invalidate: invalidate3
23643
23643
  }) => invalidate3);
@@ -9169,6 +9169,7 @@ const FileType$1 = {
9169
9169
  OBS_SPOTS_SPATIALDATA_ZARR: "obsSpots.spatialdata.zarr",
9170
9170
  FEATURE_LABELS_SPATIALDATA_ZARR: "featureLabels.spatialdata.zarr",
9171
9171
  OBS_POINTS_SPATIALDATA_ZARR: "obsPoints.spatialdata.zarr",
9172
+ OBS_EMBEDDING_SPATIALDATA_ZARR: "obsEmbedding.spatialdata.zarr",
9172
9173
  // SpatialData - zipped
9173
9174
  IMAGE_SPATIALDATA_ZARR_ZIP: "image.spatialdata.zarr.zip",
9174
9175
  LABELS_SPATIALDATA_ZARR_ZIP: "labels.spatialdata.zarr.zip",
@@ -9178,6 +9179,7 @@ const FileType$1 = {
9178
9179
  OBS_SPOTS_SPATIALDATA_ZARR_ZIP: "obsSpots.spatialdata.zarr.zip",
9179
9180
  FEATURE_LABELS_SPATIALDATA_ZARR_ZIP: "featureLabels.spatialdata.zarr.zip",
9180
9181
  OBS_POINTS_SPATIALDATA_ZARR_ZIP: "obsPoints.spatialdata.zarr.zip",
9182
+ OBS_EMBEDDING_SPATIALDATA_ZARR_ZIP: "obsEmbedding.spatialdata.zarr.zip",
9181
9183
  // MuData
9182
9184
  OBS_FEATURE_MATRIX_MUDATA_ZARR: "obsFeatureMatrix.mudata.zarr",
9183
9185
  OBS_SETS_MUDATA_ZARR: "obsSets.mudata.zarr",
@@ -9455,6 +9457,7 @@ const ViewHelpMapping = {
9455
9457
  [FileType$1.OBS_SETS_SPATIALDATA_ZARR]: DataType$3.OBS_SETS,
9456
9458
  [FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR]: DataType$3.FEATURE_LABELS,
9457
9459
  [FileType$1.OBS_POINTS_SPATIALDATA_ZARR]: DataType$3.OBS_POINTS,
9460
+ [FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR]: DataType$3.OBS_EMBEDDING,
9458
9461
  // For new file types to support old file types
9459
9462
  [FileType$1.OBS_EMBEDDING_CELLS_JSON]: DataType$3.OBS_EMBEDDING,
9460
9463
  [FileType$1.OBS_LOCATIONS_CELLS_JSON]: DataType$3.OBS_LOCATIONS,
@@ -9631,6 +9634,9 @@ const ALT_ZARR_STORE_TYPES = {
9631
9634
  },
9632
9635
  [FileType$1.OBS_POINTS_SPATIALDATA_ZARR]: {
9633
9636
  zip: FileType$1.OBS_POINTS_SPATIALDATA_ZARR_ZIP
9637
+ },
9638
+ [FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR]: {
9639
+ zip: FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR_ZIP
9634
9640
  }
9635
9641
  };
9636
9642
  [
@@ -10744,6 +10750,16 @@ const obsSetsSpatialdataSchema = z.object({
10744
10750
  tablePath: z.string().optional().describe("The path to a table which contains the index for the set values."),
10745
10751
  obsSets: annDataObsSetsArr
10746
10752
  });
10753
+ const obsEmbeddingSpatialdataSchema = annDataObsEmbedding.extend({
10754
+ // We extend anndataObsEmbedding which already has properties like `dims` and `path`.
10755
+ region: z.string().describe("The name of a region to use to filter instances (i.e., rows) in the table").optional(),
10756
+ tablePath: z.string().optional().describe("The path to a table which contains the index for the set values.")
10757
+ });
10758
+ const obsEmbeddingSpatialdataSchemaConvenience = z.union([
10759
+ annDataObsEmbedding,
10760
+ // For convenience, allow an array of items with `embeddingType` properties.
10761
+ z.array(annDataConvenienceObsEmbeddingItem)
10762
+ ]);
10747
10763
  const meshGlbSchema = z.object({
10748
10764
  targetX: z.number(),
10749
10765
  targetY: z.number(),
@@ -10868,9 +10884,10 @@ const spatialdataZarrSchema = z.object({
10868
10884
  // TODO: obsPoints
10869
10885
  // TODO: obsLocations
10870
10886
  obsSets: obsSetsSpatialdataSchema,
10871
- // TODO: obsEmbedding
10887
+ obsEmbedding: obsEmbeddingSpatialdataSchemaConvenience,
10872
10888
  // TODO: obsLabels
10873
10889
  // TODO: featureLabels
10890
+ // TODO: allow specifying tablePath and region at the top-level here.
10874
10891
  coordinateSystem: z.string().optional().describe("The name of a coordinate transformation output used to transform all elements which lack a per-element coordinateSystem property.")
10875
10892
  }).partial();
10876
10893
  const cellsJsonSchema = z.object({
@@ -19082,7 +19099,7 @@ const { tss } = createTss({
19082
19099
  },
19083
19100
  "usePlugin": useMuiThemeStyleOverridesPlugin
19084
19101
  });
19085
- const useStyles$u = tss.create({});
19102
+ const useStyles$v = tss.create({});
19086
19103
  function chainPropTypes(propType1, propType2) {
19087
19104
  return function validate2(...args) {
19088
19105
  return propType1(...args) || propType2(...args);
@@ -73141,7 +73158,7 @@ const Popper = React.forwardRef((props, ref2) => {
73141
73158
  }, [handlePopperRef]);
73142
73159
  React.useImperativeHandle(popperRefProp, () => popperRef.current, []);
73143
73160
  const [exited, setExited] = React.useState(true);
73144
- const { theme } = useStyles$u();
73161
+ const { theme } = useStyles$v();
73145
73162
  const rtlPlacement = flipPlacement(initialPlacement, theme);
73146
73163
  const [placement, setPlacement] = React.useState(rtlPlacement);
73147
73164
  React.useEffect(() => {
@@ -82788,7 +82805,7 @@ function defaultUrlTransform(value2) {
82788
82805
  }
82789
82806
  return "";
82790
82807
  }
82791
- const useStyles$t = makeStyles()((theme) => ({
82808
+ const useStyles$u = makeStyles()((theme) => ({
82792
82809
  description: {
82793
82810
  "& p, details, table": {
82794
82811
  fontSize: "80%",
@@ -82825,7 +82842,7 @@ const useStyles$t = makeStyles()((theme) => ({
82825
82842
  }));
82826
82843
  function Description(props) {
82827
82844
  const { description: description2, metadata: metadata2, descriptionType } = props;
82828
- const { classes: classes2 } = useStyles$t();
82845
+ const { classes: classes2 } = useStyles$u();
82829
82846
  return jsxRuntimeExports.jsxs("div", { className: classes2.description, children: [descriptionType && descriptionType === DescriptionType.MARKDOWN ? jsxRuntimeExports.jsx(Markdown, { children: description2 }) : jsxRuntimeExports.jsx("p", { children: description2 }), metadata2 && Array.from(metadata2.entries()).map(([layerIndex, { name: layerName, metadata: metadataRecord }]) => metadataRecord && Object.entries(metadataRecord).length > 0 ? jsxRuntimeExports.jsxs("details", { children: [jsxRuntimeExports.jsx("summary", { children: layerName }), jsxRuntimeExports.jsx("div", { className: classes2.metadataContainer, children: jsxRuntimeExports.jsx("table", { children: jsxRuntimeExports.jsx("tbody", { children: Object.entries(metadataRecord).map(([key2, value2]) => jsxRuntimeExports.jsxs("tr", { children: [jsxRuntimeExports.jsx("th", { title: key2, children: key2 }), jsxRuntimeExports.jsx("td", { title: value2, children: value2 })] }, key2)) }) }) })] }, layerIndex) : null)] });
82830
82847
  }
82831
82848
  function DescriptionSubscriber(props) {
@@ -97924,7 +97941,7 @@ const Tooltip$2 = /* @__PURE__ */ React.forwardRef((props, ref2) => {
97924
97941
  }, extraProps), getChildren());
97925
97942
  });
97926
97943
  const nodeHeight = 32;
97927
- const useStyles$s = makeStyles()((theme) => ({
97944
+ const useStyles$t = makeStyles()((theme) => ({
97928
97945
  setsManager: {
97929
97946
  position: "relative",
97930
97947
  width: "100%",
@@ -98091,7 +98108,7 @@ const useStyles$s = makeStyles()((theme) => ({
98091
98108
  }));
98092
98109
  function SetsManagerTreeGlobalStyles(props) {
98093
98110
  const { classes: classes2 } = props;
98094
- const { theme } = useStyles$u();
98111
+ const { theme } = useStyles$v();
98095
98112
  return jsxRuntimeExports.jsx(ScopedGlobalStyles, { parentClassName: classes2.setsManagerTree, styles: {
98096
98113
  ".rc-tree": {
98097
98114
  paddingLeft: "0",
@@ -98432,7 +98449,7 @@ function HelpTooltipGlobalStyles(props) {
98432
98449
  }
98433
98450
  function PopoverGlobalStyles(props) {
98434
98451
  const { classes: classes2 } = props;
98435
- const { theme } = useStyles$u();
98452
+ const { theme } = useStyles$v();
98436
98453
  return jsxRuntimeExports.jsx(ScopedGlobalStyles, { parentClassName: classes2.popover, styles: {
98437
98454
  ".rc-tooltip-inner": {
98438
98455
  boxSizing: "border-box",
@@ -103116,7 +103133,7 @@ function NamedSetNodeStatic(props) {
103116
103133
  const onClick = level === 0 && !expanded ? () => onCheckLevel(nodeKey, nextLevelToCheck) : () => onNodeView(path2);
103117
103134
  const tooltipProps = disableTooltip ? { visible: false } : {};
103118
103135
  const popoverMenuConfig = makeNodeViewMenuConfig(props);
103119
- const { classes: classes2 } = useStyles$s();
103136
+ const { classes: classes2 } = useStyles$t();
103120
103137
  return jsxRuntimeExports.jsxs("span", { children: [jsxRuntimeExports.jsx(HelpTooltip, { title: tooltipText, ...tooltipProps, children: jsxRuntimeExports.jsx("button", { type: "button", onClick, onKeyPress: (e3) => callbackOnKeyPress(e3, "v", () => onNodeView(path2)), className: classes2.titleButton, children: title2 }) }), popoverMenuConfig.length > 0 ? jsxRuntimeExports.jsx(PopoverMenu, { menuConfig: makeNodeViewMenuConfig(props), color: level > 0 && editable ? color2 || getDefaultColor(theme) : null, setColor: (c2) => onNodeSetColor(path2, c2), children: jsxRuntimeExports.jsx("span", { children: jsxRuntimeExports.jsx(SvgMenu, { className: classes2.nodeMenuIcon, "aria-label": "Open Node View Menu" }) }) }) : null, level > 0 && isChecking ? checkbox2 : null, level > 0 && jsxRuntimeExports.jsx("span", { className: classes2.nodeSizeLabel, children: niceSize })] });
103121
103138
  }
103122
103139
  function NamedSetNodeEditing(props) {
@@ -103128,7 +103145,7 @@ function NamedSetNodeEditing(props) {
103128
103145
  onNodeSetName(path2, currentTitle, true);
103129
103146
  }
103130
103147
  }
103131
- const { classes: classes2 } = useStyles$s();
103148
+ const { classes: classes2 } = useStyles$t();
103132
103149
  return jsxRuntimeExports.jsxs("span", { className: classes2.titleButtonWithInput, children: [jsxRuntimeExports.jsx("input", {
103133
103150
  // eslint-disable-next-line jsx-a11y/no-autofocus
103134
103151
  autoFocus: true,
@@ -103154,7 +103171,7 @@ function LevelsButtons(props) {
103154
103171
  onCheckLevel(nodeKey, newLevel);
103155
103172
  }
103156
103173
  }
103157
- const { classes: classes2 } = useStyles$s();
103174
+ const { classes: classes2 } = useStyles$t();
103158
103175
  return jsxRuntimeExports.jsx("div", { className: classes2.levelButtonsContainer, children: range$e(1, height2 + 1).map((i2) => {
103159
103176
  const isChecked = isEqual$3(path2, checkedLevelPath) && i2 === checkedLevelIndex;
103160
103177
  return jsxRuntimeExports.jsx("div", { children: jsxRuntimeExports.jsx(HelpTooltip, { title: getLevelTooltipText(i2), children: jsxRuntimeExports.jsx("input", { className: clsx(classes2.levelRadioButton, { [classes2.levelRadioButtonChecked]: isChecked && !hasColorEncoding }), type: "checkbox", value: i2, checked: isChecked && hasColorEncoding, onChange: onCheck }) }) }, i2);
@@ -103241,7 +103258,7 @@ let TreeNode$1 = class TreeNode extends TreeNode$2 {
103241
103258
  };
103242
103259
  function PlusButton(props) {
103243
103260
  const { datatype, onError, onImportTree, onCreateLevelZeroNode, importable, editable } = props;
103244
- const { classes: classes2 } = useStyles$s();
103261
+ const { classes: classes2 } = useStyles$t();
103245
103262
  const onImport = useCallback((importHandler, mimeType) => () => {
103246
103263
  const uploadInputNode = document.createElement("input");
103247
103264
  uploadInputNode.setAttribute("type", "file");
@@ -103359,7 +103376,7 @@ function SetsManager(props) {
103359
103376
  }, onNodeCheckNewName, onNodeSetIsEditing: setIsEditingNodeName, onNodeRemove, onExportLevelZeroNodeJSON, onExportLevelZeroNodeTabular, onExportSetJSON, disableTooltip: isDragging, onDragStart: () => setIsDragging(true), onDragEnd: () => setIsDragging(false), children: renderTreeNodes(node2.children, readOnly, newPath) }, pathToKey(newPath));
103360
103377
  });
103361
103378
  }
103362
- const { classes: classes2 } = useStyles$s();
103379
+ const { classes: classes2 } = useStyles$t();
103363
103380
  return jsxRuntimeExports.jsxs("div", { className: classes2.setsManager, children: [jsxRuntimeExports.jsx(SetsManagerTreeGlobalStyles, { classes: classes2 }), jsxRuntimeExports.jsxs("div", { className: classes2.setsManagerTree, children: [jsxRuntimeExports.jsx(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, []) }), jsxRuntimeExports.jsx(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) => {
103364
103381
  const { eventKey: dropKey } = info2.node.props;
103365
103382
  const { eventKey: dragKey } = info2.dragNode.props;
@@ -209669,22 +209686,22 @@ async function getDecoder(fileDirectory) {
209669
209686
  const Decoder = await importFn();
209670
209687
  return new Decoder(fileDirectory);
209671
209688
  }
209672
- addDecoder([void 0, 1], () => import("./raw-DqALOEt-.js").then((m2) => m2.default));
209673
- addDecoder(5, () => import("./lzw-kKlj6Pam.js").then((m2) => m2.default));
209689
+ addDecoder([void 0, 1], () => import("./raw-C7WxxrTS.js").then((m2) => m2.default));
209690
+ addDecoder(5, () => import("./lzw-DfqXKt2J.js").then((m2) => m2.default));
209674
209691
  addDecoder(6, () => {
209675
209692
  throw new Error("old style JPEG compression is not supported.");
209676
209693
  });
209677
- addDecoder(7, () => import("./jpeg-DY_DkYi3.js").then((m2) => m2.default));
209678
- addDecoder([8, 32946], () => import("./deflate-B2CAUF5S.js").then((m2) => m2.default));
209679
- addDecoder(32773, () => import("./packbits-DzhxlAeC.js").then((m2) => m2.default));
209694
+ addDecoder(7, () => import("./jpeg-D4jHWX80.js").then((m2) => m2.default));
209695
+ addDecoder([8, 32946], () => import("./deflate-Bt_dyQeb.js").then((m2) => m2.default));
209696
+ addDecoder(32773, () => import("./packbits-DefNknXY.js").then((m2) => m2.default));
209680
209697
  addDecoder(
209681
209698
  34887,
209682
- () => import("./lerc-Bz6jtDu9.js").then(async (m2) => {
209699
+ () => import("./lerc-B8-eHLyr.js").then(async (m2) => {
209683
209700
  await m2.zstd.init();
209684
209701
  return m2;
209685
209702
  }).then((m2) => m2.default)
209686
209703
  );
209687
- addDecoder(50001, () => import("./webimage-B46sb8Pc.js").then((m2) => m2.default));
209704
+ addDecoder(50001, () => import("./webimage-DIFjmNJy.js").then((m2) => m2.default));
209688
209705
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
209689
209706
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
209690
209707
  }
@@ -226453,7 +226470,7 @@ class ContourLayerWithText extends ContourLayer {
226453
226470
  }
226454
226471
  ContourLayerWithText.layerName = "ContourLayerWithText";
226455
226472
  ContourLayerWithText.defaultProps = defaultProps;
226456
- const useStyles$r = makeStyles()(() => ({
226473
+ const useStyles$s = makeStyles()(() => ({
226457
226474
  toolButton: {
226458
226475
  display: "inline-flex",
226459
226476
  "&:active": {
@@ -226515,12 +226532,12 @@ const useStyles$r = makeStyles()(() => ({
226515
226532
  }));
226516
226533
  function IconTool(props) {
226517
226534
  const { alt, onClick, isActive: isActive2, children: children3 } = props;
226518
- const { classes: classes2 } = useStyles$r();
226535
+ const { classes: classes2 } = useStyles$s();
226519
226536
  return jsxRuntimeExports.jsx("button", { className: clsx(classes2.toolIcon, { [classes2.toolActive]: isActive2 }), onClick, type: "button", title: alt, children: children3 });
226520
226537
  }
226521
226538
  function IconButton(props) {
226522
226539
  const { alt, onClick, children: children3 } = props;
226523
- const { classes: classes2 } = useStyles$r();
226540
+ const { classes: classes2 } = useStyles$s();
226524
226541
  return jsxRuntimeExports.jsx("button", { className: clsx(classes2.toolIcon, classes2.toolButton), onClick, type: "button", title: alt, children: children3 });
226525
226542
  }
226526
226543
  function ToolMenu(props) {
@@ -226528,7 +226545,7 @@ function ToolMenu(props) {
226528
226545
  const lassoIconAltText = "Select lasso";
226529
226546
  const { setActiveTool, activeTool, visibleTools = { pan: true, selectLasso: true }, recenterOnClick = () => {
226530
226547
  } } = props;
226531
- const { classes: classes2 } = useStyles$r();
226548
+ const { classes: classes2 } = useStyles$s();
226532
226549
  const onRecenterButtonCLick = () => {
226533
226550
  recenterOnClick();
226534
226551
  };
@@ -227697,7 +227714,7 @@ function ScatterplotOptions(props) {
227697
227714
  id: `feature-aggregation-strategy-${scatterplotOptionsId}`
227698
227715
  }, children: FEATURE_AGGREGATION_STRATEGIES$1.map((opt) => jsxRuntimeExports.jsx("option", { value: opt, children: capitalize$3(opt) }, opt)) }) })] }) : null] });
227699
227716
  }
227700
- const useStyles$q = makeStyles()((theme) => ({
227717
+ const useStyles$r = makeStyles()((theme) => ({
227701
227718
  tooltipAnchor: {
227702
227719
  position: "relative",
227703
227720
  width: "0px",
@@ -227728,7 +227745,7 @@ const useStyles$q = makeStyles()((theme) => ({
227728
227745
  function Tooltip3(props) {
227729
227746
  const { x: x2, y: y2, parentWidth, parentHeight, children: children3 } = props;
227730
227747
  const ref2 = useRef();
227731
- const { classes: classes2 } = useStyles$q();
227748
+ const { classes: classes2 } = useStyles$r();
227732
227749
  const [placementX, setPlacementX] = useState("start");
227733
227750
  const [placementY, setPlacementY] = useState("bottom");
227734
227751
  const getTooltipContainer = useVitessceContainer(ref2);
@@ -227744,7 +227761,7 @@ function Tooltip3(props) {
227744
227761
  }, [x2, y2, parentWidth, parentHeight]);
227745
227762
  return jsxRuntimeExports.jsx("div", { ref: ref2, className: classes2.tooltipAnchor, children: ref2 && ref2.current ? jsxRuntimeExports.jsx(Popper, { open: true, anchorEl: ref2.current, container: getTooltipContainer, transition: true, placement: `${placementY}-${placementX}`, children: jsxRuntimeExports.jsx(Paper, { elevation: 8, className: classes2.tooltipContent, children: children3 }) }) : null });
227746
227763
  }
227747
- const useStyles$p = makeStyles()((theme) => ({
227764
+ const useStyles$q = makeStyles()((theme) => ({
227748
227765
  cellEmphasisCrosshair: {
227749
227766
  zIndex: 50,
227750
227767
  position: "absolute",
@@ -227755,7 +227772,7 @@ const useStyles$p = makeStyles()((theme) => ({
227755
227772
  }));
227756
227773
  function Tooltip2D(props) {
227757
227774
  const { parentUuid, sourceUuid, x: x2, y: y2, parentWidth, parentHeight, children: children3 } = props;
227758
- const { classes: classes2 } = useStyles$p();
227775
+ const { classes: classes2 } = useStyles$q();
227759
227776
  if (x2 < 0 || x2 > parentWidth || y2 < 0 || y2 > parentHeight) {
227760
227777
  return null;
227761
227778
  }
@@ -231642,7 +231659,7 @@ function getXlinkHref(cmap) {
231642
231659
  const xlinkHref = ramp(color2.copy().domain(quantize$3(interpolate$1$1(0, 1), n3))).toDataURL();
231643
231660
  return xlinkHref;
231644
231661
  }
231645
- const useStyles$o = makeStyles()(() => ({
231662
+ const useStyles$p = makeStyles()(() => ({
231646
231663
  legend: {
231647
231664
  top: "2px",
231648
231665
  right: "2px",
@@ -231730,7 +231747,7 @@ function combineMissings(missings, featureAggregationStrategy) {
231730
231747
  function Legend(props) {
231731
231748
  const { visible: visibleProp, positionRelative = false, highContrast = false, obsType, featureValueType, considerSelections = true, obsColorEncoding, featureSelection, featureLabelsMap, featureValueColormap, featureValueColormapRange, spatialChannelColor, spatialLayerColor, obsSetSelection, obsSetColor, featureAggregationStrategy, extent: extent2, missing, width: width2 = 100, height: height2 = 36, theme, showObsLabel = false, pointsVisible = true, contoursVisible = false, contoursFilled, contourPercentiles, contourThresholds } = props;
231732
231749
  const svgRef = useRef();
231733
- const { classes: classes2 } = useStyles$o();
231750
+ const { classes: classes2 } = useStyles$p();
231734
231751
  const isDarkTheme = theme === "dark";
231735
231752
  const isStaticColor = obsColorEncoding === "spatialChannelColor" || obsColorEncoding === "spatialLayerColor";
231736
231753
  const isSetColor = obsColorEncoding === "cellSetSelection";
@@ -231825,6 +231842,8 @@ function Legend(props) {
231825
231842
  featureSelectionLabelRawStr = "Sum of features";
231826
231843
  } else if (featureAggregationStrategy === "mean") {
231827
231844
  featureSelectionLabelRawStr = "Mean of features";
231845
+ } else {
231846
+ featureSelectionLabelRawStr = featureSelectionLabelRaw == null ? void 0 : featureSelectionLabelRaw[0];
231828
231847
  }
231829
231848
  const combinedMissing = combineMissings(missing, featureAggregationStrategy);
231830
231849
  const featureSelectionLabel = combinedMissing ? `${featureSelectionLabelRawStr} (${Math.round(combinedMissing * 100)}% NaN)` : featureSelectionLabelRawStr;
@@ -231875,7 +231894,7 @@ function Legend(props) {
231875
231894
  height: `${dynamicHeight}px`
231876
231895
  } }) });
231877
231896
  }
231878
- const useStyles$n = makeStyles()(() => ({
231897
+ const useStyles$o = makeStyles()(() => ({
231879
231898
  multiLegend: {
231880
231899
  position: "absolute",
231881
231900
  top: "0px",
@@ -231900,7 +231919,7 @@ function MultiLegend(props) {
231900
231919
  pointLayerScopes,
231901
231920
  pointLayerCoordination
231902
231921
  } = props;
231903
- const { classes: classes2 } = useStyles$n();
231922
+ const { classes: classes2 } = useStyles$o();
231904
231923
  const reversedSegmentationLayerScopes = useMemo$1(() => [...segmentationLayerScopes || []].reverse(), [segmentationLayerScopes]);
231905
231924
  const reversedSpotLayerScopes = useMemo$1(() => [...spotLayerScopes || []].reverse(), [spotLayerScopes]);
231906
231925
  const reversedPointLayerScopes = useMemo$1(() => [...pointLayerScopes || []].reverse(), [pointLayerScopes]);
@@ -231974,7 +231993,7 @@ function MultiLegend(props) {
231974
231993
  }) : null;
231975
231994
  }) : null] });
231976
231995
  }
231977
- const useStyles$m = makeStyles()(() => ({
231996
+ const useStyles$n = makeStyles()(() => ({
231978
231997
  channelNamesLegendContainer: {
231979
231998
  position: "absolute",
231980
231999
  bottom: "0px",
@@ -231997,7 +232016,7 @@ const useStyles$m = makeStyles()(() => ({
231997
232016
  }));
231998
232017
  function ChannelNamesLegend(props) {
231999
232018
  const { images, imageLayerScopes, imageLayerCoordination, imageChannelScopesByLayer, imageChannelCoordination } = props;
232000
- const { classes: classes2 } = useStyles$m();
232019
+ const { classes: classes2 } = useStyles$n();
232001
232020
  const reversedImageLayerScopes = useMemo$1(() => [...imageLayerScopes || []].reverse(), [imageLayerScopes]);
232002
232021
  return jsxRuntimeExports.jsx("div", { className: classes2.channelNamesLegendContainer, children: imageLayerScopes ? reversedImageLayerScopes.map((layerScope) => {
232003
232022
  const layerCoordination = imageLayerCoordination[0][layerScope];
@@ -252465,11 +252484,11 @@ class Spatial2 extends AbstractSpatialOrScatterplot {
252465
252484
  obsColorEncoding,
252466
252485
  staticColor,
252467
252486
  layerColors
252468
- ]
252487
+ ],
252488
+ getExpressionValue: [getExpressionValue]
252469
252489
  /*
252470
252490
  getLineWidth: [stroked],
252471
252491
  isSelected: cellSelection,
252472
- getExpressionValue,
252473
252492
  getFillColor: [opacity, cellColorEncoding, cellSelection, cellColors],
252474
252493
  getLineColor: [cellColorEncoding, cellSelection, cellColors],
252475
252494
  getPolygon: [radius],
@@ -253560,7 +253579,7 @@ class ErrorBoundary extends React__default.Component {
253560
253579
  }
253561
253580
  }
253562
253581
  const LazySpatialThree = React__default.lazy(async () => {
253563
- const { SpatialWrapper: SpatialWrapper2 } = await import("./index-DG6RbZza.js");
253582
+ const { SpatialWrapper: SpatialWrapper2 } = await import("./index-07ia_ScM.js");
253564
253583
  return { default: SpatialWrapper2 };
253565
253584
  });
253566
253585
  const SpatialThreeAdapter = React__default.forwardRef((props, ref2) => jsxRuntimeExports.jsx("div", { ref: ref2, style: { width: "100%", height: "100%" }, children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(Suspense, { fallback: jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: jsxRuntimeExports.jsx(LazySpatialThree, { ...props }) }) }) }));
@@ -261636,7 +261655,7 @@ _defineProperty$3(WindowScroller, "defaultProps", {
261636
261655
  serverHeight: 0,
261637
261656
  serverWidth: 0
261638
261657
  });
261639
- const useStyles$l = makeStyles()((theme) => ({
261658
+ const useStyles$m = makeStyles()((theme) => ({
261640
261659
  selectableTable: {
261641
261660
  flex: "1 1 auto",
261642
261661
  outline: "none"
@@ -261669,7 +261688,8 @@ const useStyles$l = makeStyles()((theme) => ({
261669
261688
  flexBasis: 0,
261670
261689
  flexGrow: 1,
261671
261690
  textOverflow: "ellipsis",
261672
- whiteSpace: "nowrap"
261691
+ whiteSpace: "nowrap",
261692
+ paddingLeft: "10px"
261673
261693
  },
261674
261694
  inputContainer: {
261675
261695
  width: "1em",
@@ -261713,7 +261733,7 @@ const useStyles$l = makeStyles()((theme) => ({
261713
261733
  }));
261714
261734
  const SHIFT_KEYCODE = 16;
261715
261735
  function SelectableTable(props) {
261716
- const { hasColorEncoding, columns: columns2, columnLabels, data: data2, onChange, idKey = "id", valueKey = "value", allowMultiple = false, allowUncheck = false, showTableHead = true, showTableInputs = false, testHeight = void 0, testWidth = void 0 } = props;
261736
+ const { hasColorEncoding, columns: columns2, columnLabels, data: data2, onChange, idKey = "id", valueKey = "value", allowMultiple = false, allowUncheck = false, showTableHead = true, showTableInputs = false, testHeight = void 0, testWidth = void 0, width: width2, height: height2 } = props;
261717
261737
  const [selectedRows, setSelectedRows] = useState(null);
261718
261738
  const [isCheckingMultiple, setIsCheckingMultiple] = useState(false);
261719
261739
  useEffect(() => {
@@ -261784,14 +261804,14 @@ function SelectableTable(props) {
261784
261804
  onChange(null);
261785
261805
  }
261786
261806
  }, [selectedRows, allowMultiple]);
261787
- const { classes: classes2 } = useStyles$l();
261807
+ const { classes: classes2 } = useStyles$m();
261788
261808
  const inputUuid = v4$1();
261789
261809
  const rowRenderer = ({ index: index2, style: style2 }) => (
261790
261810
  // eslint-disable-next-line jsx-a11y/interactive-supports-focus
261791
261811
  jsxRuntimeExports.jsxs("div", { className: clsx(classes2.tableItem, classes2.tableRow, { "row-checked": isSelected(data2[index2][idKey]) }), style: style2, role: "button", onClick: () => onSelectRow(data2[index2][idKey], !isSelected(data2[index2][idKey]) || !hasColorEncoding), children: [jsxRuntimeExports.jsx("div", { className: clsx(classes2.inputContainer, classes2.tableCell, { [classes2.hiddenInputColumn]: !showTableInputs }), children: jsxRuntimeExports.jsx("label", { htmlFor: `${inputUuid}_${data2[index2][idKey]}`, children: jsxRuntimeExports.jsx("input", { id: `${inputUuid}_${data2[index2][idKey]}`, type: "checkbox", className: clsx(classes2.radioOrCheckbox, isCheckingMultiple ? classes2.tableCheckbox : classes2.tableRadio), name: inputUuid, value: data2[index2][idKey], onChange: handleInputChange, checked: isSelected(data2[index2][idKey]) }) }) }), columns2.map((column2) => jsxRuntimeExports.jsx("div", { className: classes2.tableCell, children: data2[index2][column2] }, column2))] }, data2[index2][idKey])
261792
261812
  );
261793
261813
  const headerRowRenderer = ({ style: style2 }) => jsxRuntimeExports.jsx("div", { className: classes2.tableRow, style: style2, children: columnLabels.map((columnLabel) => jsxRuntimeExports.jsx("div", { className: classes2.tableCell, style: { fontWeight: "bold" }, children: columnLabel }, columnLabel)) });
261794
- return jsxRuntimeExports.jsx("div", { className: classes2.selectableTable, children: jsxRuntimeExports.jsx(AutoSizer, { children: ({ width: width2, height: height2 }) => jsxRuntimeExports.jsx(Table$1, {
261814
+ return jsxRuntimeExports.jsx("div", { className: classes2.selectableTable, children: jsxRuntimeExports.jsx(Table$1, {
261795
261815
  height: testHeight || height2,
261796
261816
  gridStyle: { outline: "none" },
261797
261817
  rowCount: data2.length,
@@ -261802,15 +261822,18 @@ function SelectableTable(props) {
261802
261822
  width: testWidth || width2,
261803
261823
  headerRowRenderer: showTableHead ? headerRowRenderer : void 0,
261804
261824
  rowGetter: ({ index: index2 }) => data2[index2]
261805
- }) }) });
261825
+ }) });
261806
261826
  }
261807
261827
  const FEATURELIST_SORT_OPTIONS = [
261808
261828
  "alphabetical",
261809
261829
  "original"
261810
261830
  ];
261811
261831
  const ALT_COLNAME = "Alternate ID";
261812
- const useStyles$k = makeStyles()(() => ({
261832
+ const useStyles$l = makeStyles()(() => ({
261813
261833
  searchBar: {
261834
+ marginTop: "10px",
261835
+ marginLeft: "10px",
261836
+ marginRight: "10px",
261814
261837
  marginBottom: "4px",
261815
261838
  border: "0",
261816
261839
  padding: "2px",
@@ -261818,8 +261841,8 @@ const useStyles$k = makeStyles()(() => ({
261818
261841
  }
261819
261842
  }));
261820
261843
  function FeatureList(props) {
261821
- const { hasColorEncoding, geneList = [], featureLabelsMap, geneSelection = [], geneFilter = null, setGeneSelection, enableMultiSelect, showFeatureTable, featureListSort, featureListSortKey, hasFeatureLabels, primaryColumnName } = props;
261822
- const { classes: classes2 } = useStyles$k();
261844
+ const { width: width2, height: height2, hasColorEncoding, geneList = [], featureLabelsMap, geneSelection = [], geneFilter = null, setGeneSelection, enableMultiSelect, showFeatureTable, featureListSort, featureListSortKey, hasFeatureLabels, primaryColumnName } = props;
261845
+ const { classes: classes2 } = useStyles$l();
261823
261846
  const [searchTerm, setSearchTerm] = useState("");
261824
261847
  const [searchResults, setSearchResults] = useState(geneList);
261825
261848
  const selectableTableSortKey = featureListSortKey === "featureIndex" ? "key" : "name";
@@ -261876,7 +261899,7 @@ function FeatureList(props) {
261876
261899
  [primaryColumnName]
261877
261900
  ];
261878
261901
  }, [showFeatureTable, primaryColumnName, hasFeatureLabels]);
261879
- return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("input", { className: classes2.searchBar, type: "text", placeholder: "Search", value: searchTerm, onChange: handleChange }), jsxRuntimeExports.jsx(SelectableTable, { columns: columns2, columnLabels, data: data2, hasColorEncoding, idKey: "key", valueKey: "value", onChange, allowMultiple: enableMultiSelect, allowUncheck: enableMultiSelect, showTableHead: columnLabels.length > 1 })] });
261902
+ return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("input", { className: classes2.searchBar, type: "text", placeholder: "Search", value: searchTerm, onChange: handleChange }), jsxRuntimeExports.jsx(SelectableTable, { columns: columns2, columnLabels, data: data2, hasColorEncoding, idKey: "key", valueKey: "value", onChange, allowMultiple: enableMultiSelect, allowUncheck: enableMultiSelect, showTableHead: columnLabels.length > 1, width: width2, height: height2 - 34 })] });
261880
261903
  }
261881
261904
  function FeatureListOptions(props) {
261882
261905
  const { children: children3, featureListSort, setFeatureListSort, featureListSortKey, setFeatureListSortKey, showFeatureTable, setShowFeatureTable, hasFeatureLabels, primaryColumnName } = props;
@@ -261901,9 +261924,21 @@ function FeatureListOptions(props) {
261901
261924
  id: `feature-list-show-alternative-ids-${featureListId}`
261902
261925
  } } }) })] })] }) : null] });
261903
261926
  }
261927
+ const useStyles$k = makeStyles()((theme) => ({
261928
+ featureListContainer: {
261929
+ width: "100%",
261930
+ height: "100%",
261931
+ display: "flex",
261932
+ flexDirection: "column",
261933
+ backgroundColor: theme.palette.primaryBackground,
261934
+ color: theme.palette.primaryForeground
261935
+ }
261936
+ }));
261904
261937
  function FeatureListSubscriber(props) {
261905
261938
  const { coordinationScopes, removeGridComponent, variablesLabelOverride, theme, title: titleOverride, enableMultiSelect = false, showTable = false, sort: sort2 = "alphabetical", sortKey: sortKey2 = null, closeButtonVisible, downloadButtonVisible, helpText = ViewHelpMapping.FEATURE_LIST } = props;
261906
261939
  const loaders = useLoaders();
261940
+ const [width2, height2, containerRef] = useGridItemSize();
261941
+ const { classes: classes2 } = useStyles$k();
261907
261942
  const [{ dataset, obsType, featureType, featureSelection: geneSelection, featureFilter: geneFilter, obsColorEncoding: cellColorEncoding }, { setFeatureSelection: setGeneSelection, setFeatureFilter: setGeneFilter, setFeatureHighlight: setGeneHighlight, setObsColorEncoding: setCellColorEncoding }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.FEATURE_LIST], coordinationScopes);
261908
261943
  const variablesLabel = variablesLabelOverride || featureType;
261909
261944
  const title2 = titleOverride || `${capitalize$3(variablesLabel)} List`;
@@ -261935,24 +261970,7 @@ function FeatureListSubscriber(props) {
261935
261970
  const [featureListSortKey, setFeatureListSortKey] = useState(null);
261936
261971
  const initialSortKey = sortKey2 || (hasFeatureLabels ? "featureLabels" : "featureIndex");
261937
261972
  const primaryColumnName = `${capitalize$3(featureType)} ID`;
261938
- return jsxRuntimeExports.jsx(TitleInfo, {
261939
- title: title2,
261940
- info: `${commaNumber(numGenes)} ${pluralize(variablesLabel, numGenes)}`,
261941
- theme,
261942
- // Virtual scroll is used but this allows for the same styling as a scroll component
261943
- // even though this no longer uses the TitleInfo component's
261944
- // scroll css (SelectableTable is virtual scroll).
261945
- isScroll: true,
261946
- closeButtonVisible,
261947
- downloadButtonVisible,
261948
- removeGridComponent,
261949
- isReady,
261950
- urls: urls2,
261951
- helpText,
261952
- errors,
261953
- options: jsxRuntimeExports.jsx(FeatureListOptions, { featureListSort, setFeatureListSort, featureListSortKey: featureListSortKey || initialSortKey, setFeatureListSortKey, showFeatureTable, setShowFeatureTable, hasFeatureLabels, primaryColumnName }),
261954
- children: jsxRuntimeExports.jsx(FeatureList, { hasColorEncoding: cellColorEncoding === "geneSelection", showFeatureTable, geneList, featureListSort, featureListSortKey: featureListSortKey || initialSortKey, featureLabelsMap: expandedFeatureLabelsMap, featureType, geneSelection, geneFilter, setGeneSelection: setGeneSelectionAndColorEncoding, setGeneFilter, setGeneHighlight, enableMultiSelect, hasFeatureLabels, primaryColumnName })
261955
- });
261973
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, info: `${commaNumber(numGenes)} ${pluralize(variablesLabel, numGenes)}`, theme, withPadding: false, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, urls: urls2, helpText, errors, options: jsxRuntimeExports.jsx(FeatureListOptions, { featureListSort, setFeatureListSort, featureListSortKey: featureListSortKey || initialSortKey, setFeatureListSortKey, showFeatureTable, setShowFeatureTable, hasFeatureLabels, primaryColumnName }), children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes2.featureListContainer, children: jsxRuntimeExports.jsx(FeatureList, { width: width2, height: height2, hasColorEncoding: cellColorEncoding === "geneSelection", showFeatureTable, geneList, featureListSort, featureListSortKey: featureListSortKey || initialSortKey, featureLabelsMap: expandedFeatureLabelsMap, featureType, geneSelection, geneFilter, setGeneSelection: setGeneSelectionAndColorEncoding, setGeneFilter, setGeneHighlight, enableMultiSelect, hasFeatureLabels, primaryColumnName }) }) });
261956
261974
  }
261957
261975
  const useSpanStyles = makeStyles()(() => ({
261958
261976
  span: {
@@ -265401,7 +265419,7 @@ function HiglassGlobalStyles(props) {
265401
265419
  }
265402
265420
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
265403
265421
  const LazyHiGlassComponent = React__default.lazy(async () => {
265404
- const { HiGlassComponent } = await import("./higlass-DNEa7gM7.js");
265422
+ const { HiGlassComponent } = await import("./higlass-DISnb5Ei.js");
265405
265423
  return { default: HiGlassComponent };
265406
265424
  });
265407
265425
  const HG_SIZE = 800;
@@ -268345,7 +268363,7 @@ function NeuroglancerGlobalStyles(props) {
268345
268363
  const { classes: classes2 } = props;
268346
268364
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(GlobalStyles$3, { styles: globalNeuroglancerCss }), jsxRuntimeExports.jsx(ScopedGlobalStyles, { styles: globalNeuroglancerStyles, parentClassName: classes2.neuroglancerWrapper })] });
268347
268365
  }
268348
- const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-D4Xivd2K.js"));
268366
+ const LazyReactNeuroglancer = React__default.lazy(() => import("./ReactNeuroglancer-BCLqTed3.js"));
268349
268367
  function createWorker() {
268350
268368
  return new WorkerFactory();
268351
268369
  }
@@ -321471,7 +321489,7 @@ const VEGA_THEMES = {
321471
321489
  };
321472
321490
  const DATASET_NAME = "table";
321473
321491
  function VegaGlobalStyles() {
321474
- const { theme } = useStyles$u();
321492
+ const { theme } = useStyles$v();
321475
321493
  return jsxRuntimeExports.jsx(GlobalStyles$3, { styles: {
321476
321494
  "#vg-tooltip-element.vg-tooltip.custom-theme": {
321477
321495
  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)",
@@ -321505,7 +321523,7 @@ function renderTooltipContents(tooltipText) {
321505
321523
  }
321506
321524
  function VegaPlot(props) {
321507
321525
  const { spec: partialSpec, data: data2, getTooltipText, signalListeners, renderer = "svg", onNewView } = props;
321508
- const { classes: tooltipClasses2 } = useStyles$q();
321526
+ const { classes: tooltipClasses2 } = useStyles$r();
321509
321527
  const tooltipHandler = useMemo$1(() => {
321510
321528
  if (typeof getTooltipText === "function") {
321511
321529
  const tooltipConfig = {
@@ -326712,6 +326730,13 @@ class SpatialDataObsSetsLoader extends ObsSetsAnndataLoader {
326712
326730
  this.tablePath = this.options.tablePath;
326713
326731
  }
326714
326732
  }
326733
+ class SpatialDataObsEmbeddingLoader extends ObsEmbeddingAnndataLoader {
326734
+ constructor(dataSource, params2) {
326735
+ super(dataSource, params2);
326736
+ this.region = this.options.region;
326737
+ this.tablePath = this.options.tablePath;
326738
+ }
326739
+ }
326715
326740
  const decoder = new TextDecoder("utf-8");
326716
326741
  const decodeUtf8 = (buffer2) => decoder.decode(buffer2);
326717
326742
  const encoder = new TextEncoder();
@@ -377634,7 +377659,39 @@ function expandSpatialdataZarr(fileDef) {
377634
377659
  // TODO: obsLocations?
377635
377660
  // TODO: obsLabels
377636
377661
  // TODO: featureLabels
377637
- // TODO: obsEmbedding
377662
+ // obsEmbedding
377663
+ // eslint-disable-next-line no-nested-ternary
377664
+ ...options.obsEmbedding ? Array.isArray(options.obsEmbedding) ? options.obsEmbedding.map((oe) => ({
377665
+ // obsEmbedding was an array, process each element.
377666
+ ...baseFileDef,
377667
+ fileType: getFileType(FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR),
377668
+ options: {
377669
+ path: oe.path,
377670
+ dims: oe.dims,
377671
+ tablePath: options.tablePath,
377672
+ region: options.region
377673
+ },
377674
+ coordinationValues: {
377675
+ ...extraCoordinationValues,
377676
+ obsType: baseFileDef.coordinationValues.obsType,
377677
+ // Move embedding type property out of options and into coordinationValues.
377678
+ embeddingType: oe.embeddingType
377679
+ }
377680
+ })) : [{
377681
+ // obsEmbedding was an object.
377682
+ ...baseFileDef,
377683
+ fileType: getFileType(FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR),
377684
+ options: {
377685
+ ...options.obsEmbedding,
377686
+ tablePath: options.tablePath,
377687
+ region: options.region
377688
+ },
377689
+ coordinationValues: {
377690
+ ...extraCoordinationValues,
377691
+ obsType: baseFileDef.coordinationValues.obsType,
377692
+ embeddingType: baseFileDef.coordinationValues.embeddingType
377693
+ }
377694
+ }] : [],
377638
377695
  // image
377639
377696
  // TODO: handle multiple image elements?
377640
377697
  ...options.image ? [{
@@ -378061,6 +378118,7 @@ const baseFileTypes = [
378061
378118
  ...makeZarrFileTypes(FileType$1.OBS_POINTS_SPATIALDATA_ZARR, DataType$3.OBS_POINTS, SpatialDataObsPointsLoader, SpatialDataPointsSource, obsPointsSpatialdataSchema),
378062
378119
  ...makeZarrFileTypes(FileType$1.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR, DataType$3.OBS_FEATURE_MATRIX, ObsFeatureMatrixAnndataLoader, SpatialDataTableSource, obsFeatureMatrixSpatialdataSchema),
378063
378120
  ...makeZarrFileTypes(FileType$1.OBS_SETS_SPATIALDATA_ZARR, DataType$3.OBS_SETS, SpatialDataObsSetsLoader, SpatialDataTableSource, obsSetsSpatialdataSchema),
378121
+ ...makeZarrFileTypes(FileType$1.OBS_EMBEDDING_SPATIALDATA_ZARR, DataType$3.OBS_EMBEDDING, SpatialDataObsEmbeddingLoader, SpatialDataTableSource, obsEmbeddingSpatialdataSchema),
378064
378122
  ...makeZarrFileTypes(FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR, DataType$3.FEATURE_LABELS, FeatureLabelsAnndataLoader, SpatialDataTableSource, featureLabelsAnndataSchema),
378065
378123
  makeFileType(FileType$1.OBS_SEGMENTATIONS_GLB, DataType$3.OBS_SEGMENTATIONS, GlbDataLoader, GlbSource, meshGlbSchema),
378066
378124
  // All legacy file types
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { bL, bJ, bH, bK, bI, bG, bM } from "./index-DcZv7teI.js";
1
+ import { bL, bJ, bH, bK, bI, bG, bM } from "./index-CHatE_p-.js";
2
2
  import { useComplexCoordination, useComplexCoordinationSecondary, useCoordination, useCoordinationScopes, useCoordinationScopesBy, useGridItemSize, useMultiCoordinationScopesNonNull, useMultiCoordinationScopesSecondaryNonNull, usePageModeView } from "@vitessce/vit-s";
3
3
  export {
4
4
  bL as PluginAsyncFunction,
@@ -1,4 +1,4 @@
1
- import { aP as BaseDecoder } from "./index-DcZv7teI.js";
1
+ import { aP as BaseDecoder } from "./index-CHatE_p-.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 { g as getDefaultExportFromCjs, aP as BaseDecoder, aQ as LercParameters, aR as LercAddCompression } from "./index-DcZv7teI.js";
2
+ import { g as getDefaultExportFromCjs, aP as BaseDecoder, aQ as LercParameters, aR as LercAddCompression } from "./index-CHatE_p-.js";
3
3
  var LercDecode = { exports: {} };
4
4
  var hasRequiredLercDecode;
5
5
  function requireLercDecode() {
@@ -1,4 +1,4 @@
1
- import { aP as BaseDecoder } from "./index-DcZv7teI.js";
1
+ import { aP as BaseDecoder } from "./index-CHatE_p-.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 { aP as BaseDecoder } from "./index-DcZv7teI.js";
1
+ import { aP as BaseDecoder } from "./index-CHatE_p-.js";
2
2
  class PackbitsDecoder extends BaseDecoder {
3
3
  decodeBlock(buffer) {
4
4
  const dataView = new DataView(buffer);
@@ -1,4 +1,4 @@
1
- import { aP as BaseDecoder } from "./index-DcZv7teI.js";
1
+ import { aP as BaseDecoder } from "./index-CHatE_p-.js";
2
2
  class RawDecoder extends BaseDecoder {
3
3
  decodeBlock(buffer) {
4
4
  return buffer;
@@ -1,4 +1,4 @@
1
- import { bA as MeshDistanceMaterial, bB as MeshDepthMaterial, bC as RGBADepthPacking, aB as UniformsUtils, bD as ShaderChunk, aw as InstancedBufferGeometry, av as Sphere, au as Box3, aH as BackSide, a9 as DoubleSide, ad as Mesh, as as FrontSide, aa as MeshBasicMaterial, i as Color, c as Vector3, k as Matrix4, d as Vector2, aJ as Matrix3, aD as Vector4, T as Texture, a1 as LinearFilter, bE as PlaneGeometry, f as BufferGeometry, ax as Float32BufferAttribute, bF as InstancedBufferAttribute } from "./index-DcZv7teI.js";
1
+ import { bA as MeshDistanceMaterial, bB as MeshDepthMaterial, bC as RGBADepthPacking, aB as UniformsUtils, bD as ShaderChunk, aw as InstancedBufferGeometry, av as Sphere, au as Box3, aH as BackSide, a9 as DoubleSide, ad as Mesh, as as FrontSide, aa as MeshBasicMaterial, i as Color, c as Vector3, k as Matrix4, d as Vector2, aJ as Matrix3, aD as Vector4, T as Texture, a1 as LinearFilter, bE as PlaneGeometry, f as BufferGeometry, ax as Float32BufferAttribute, bF as InstancedBufferAttribute } from "./index-CHatE_p-.js";
2
2
  function workerBootstrap() {
3
3
  var modules = /* @__PURE__ */ Object.create(null);
4
4
  function registerModule(ref, callback) {
@@ -1,4 +1,4 @@
1
- import { aP as BaseDecoder } from "./index-DcZv7teI.js";
1
+ import { aP as BaseDecoder } from "./index-CHatE_p-.js";
2
2
  class WebImageDecoder extends BaseDecoder {
3
3
  constructor() {
4
4
  super();
@@ -341,6 +341,28 @@ export declare const baseJointFileTypes: (PluginJointFileType<z.ZodObject<{
341
341
  region?: string | undefined;
342
342
  tablePath?: string | undefined;
343
343
  }>>;
344
+ obsEmbedding: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
345
+ path: z.ZodString;
346
+ dims: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
347
+ }, "strip", z.ZodTypeAny, {
348
+ path: string;
349
+ dims?: number[] | undefined;
350
+ }, {
351
+ path: string;
352
+ dims?: number[] | undefined;
353
+ }>, z.ZodArray<z.ZodObject<{
354
+ path: z.ZodString;
355
+ dims: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
356
+ embeddingType: z.ZodString;
357
+ }, "strip", z.ZodTypeAny, {
358
+ path: string;
359
+ embeddingType: string;
360
+ dims?: number[] | undefined;
361
+ }, {
362
+ path: string;
363
+ embeddingType: string;
364
+ dims?: number[] | undefined;
365
+ }>, "many">]>>;
344
366
  coordinateSystem: z.ZodOptional<z.ZodOptional<z.ZodString>>;
345
367
  }, "strip", z.ZodTypeAny, {
346
368
  image?: {
@@ -378,6 +400,14 @@ export declare const baseJointFileTypes: (PluginJointFileType<z.ZodObject<{
378
400
  region?: string | undefined;
379
401
  tablePath?: string | undefined;
380
402
  } | undefined;
403
+ obsEmbedding?: {
404
+ path: string;
405
+ dims?: number[] | undefined;
406
+ } | {
407
+ path: string;
408
+ embeddingType: string;
409
+ dims?: number[] | undefined;
410
+ }[] | undefined;
381
411
  coordinateSystem?: string | undefined;
382
412
  }, {
383
413
  image?: {
@@ -415,6 +445,14 @@ export declare const baseJointFileTypes: (PluginJointFileType<z.ZodObject<{
415
445
  region?: string | undefined;
416
446
  tablePath?: string | undefined;
417
447
  } | undefined;
448
+ obsEmbedding?: {
449
+ path: string;
450
+ dims?: number[] | undefined;
451
+ } | {
452
+ path: string;
453
+ embeddingType: string;
454
+ dims?: number[] | undefined;
455
+ }[] | undefined;
418
456
  coordinateSystem?: string | undefined;
419
457
  }>> | PluginJointFileType<z.ZodObject<{
420
458
  xy: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"base-plugins.d.ts","sourceRoot":"","sources":["../src/base-plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-plugins.d.ts","sourceRoot":"","sources":["../src/base-plugins.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { FileType, DataType, ViewType, CoordinationType, AsyncFunctionType, COMPONENT_COORDINATION_TYPES, ALT_ZARR_STORE_TYPES, } from '@vitessce/constants-internal';
2
2
  import { PluginFileType, PluginJointFileType, PluginViewType, PluginCoordinationType, PluginAsyncFunction, } from '@vitessce/plugins';
3
- import { z, obsEmbeddingCsvSchema, obsSetsCsvSchema, obsSpotsCsvSchema, obsPointsCsvSchema, obsLocationsCsvSchema, obsLabelsCsvSchema, featureLabelsCsvSchema, sampleSetsCsvSchema, obsSetsAnndataSchema, sampleSetsAnndataSchema, obsEmbeddingAnndataSchema, obsSpotsAnndataSchema, obsPointsAnndataSchema, obsLocationsAnndataSchema, obsLabelsAnndataSchema, obsFeatureMatrixAnndataSchema, obsFeatureColumnsAnndataSchema, obsSegmentationsAnndataSchema, featureLabelsAnndataSchema, sampleEdgesAnndataSchema, comparisonMetadataAnndataSchema, featureStatsAnndataSchema, featureSetStatsAnndataSchema, obsSetStatsAnndataSchema, rasterJsonSchema, anndataZarrSchema, anndataH5adSchema, spatialdataZarrSchema, anndataCellsZarrSchema, anndataCellSetsZarrSchema, anndataExpressionMatrixZarrSchema, cellsJsonSchema, imageOmeZarrSchema, imageOmeTiffSchema, imageSpatialdataSchema, obsSegmentationsOmeTiffSchema, obsSegmentationsOmeZarrSchema, obsSegmentationsSpatialdataSchema, obsFeatureMatrixSpatialdataSchema, obsSpotsSpatialdataSchema, obsPointsSpatialdataSchema, obsSetsSpatialdataSchema, obsSetPath, rgbArray, obsSetsSchema, imageLayerObj, cellsLayerObj, neighborhoodsLayerObj, moleculesLayerObj, meshGlbSchema, } from '@vitessce/schemas';
3
+ import { z, obsEmbeddingCsvSchema, obsSetsCsvSchema, obsSpotsCsvSchema, obsPointsCsvSchema, obsLocationsCsvSchema, obsLabelsCsvSchema, featureLabelsCsvSchema, sampleSetsCsvSchema, obsSetsAnndataSchema, sampleSetsAnndataSchema, obsEmbeddingAnndataSchema, obsSpotsAnndataSchema, obsPointsAnndataSchema, obsLocationsAnndataSchema, obsLabelsAnndataSchema, obsFeatureMatrixAnndataSchema, obsFeatureColumnsAnndataSchema, obsSegmentationsAnndataSchema, featureLabelsAnndataSchema, sampleEdgesAnndataSchema, comparisonMetadataAnndataSchema, featureStatsAnndataSchema, featureSetStatsAnndataSchema, obsSetStatsAnndataSchema, rasterJsonSchema, anndataZarrSchema, anndataH5adSchema, spatialdataZarrSchema, anndataCellsZarrSchema, anndataCellSetsZarrSchema, anndataExpressionMatrixZarrSchema, cellsJsonSchema, imageOmeZarrSchema, imageOmeTiffSchema, imageSpatialdataSchema, obsSegmentationsOmeTiffSchema, obsSegmentationsOmeZarrSchema, obsSegmentationsSpatialdataSchema, obsFeatureMatrixSpatialdataSchema, obsSpotsSpatialdataSchema, obsPointsSpatialdataSchema, obsSetsSpatialdataSchema, obsEmbeddingSpatialdataSchema, obsSetPath, rgbArray, obsSetsSchema, imageLayerObj, cellsLayerObj, neighborhoodsLayerObj, moleculesLayerObj, meshGlbSchema, } from '@vitessce/schemas';
4
4
  // Register view type plugins
5
5
  import { DescriptionSubscriber } from '@vitessce/description';
6
6
  import { ObsSetsManagerSubscriber } from '@vitessce/obs-sets-manager';
@@ -37,7 +37,7 @@ import {
37
37
  // OME
38
38
  OmeZarrLoader, OmeZarrAsObsSegmentationsLoader,
39
39
  // SpatialData
40
- SpatialDataTableSource, SpatialDataShapesSource, SpatialDataPointsSource, SpatialDataImageLoader, SpatialDataLabelsLoader, SpatialDataObsSpotsLoader, SpatialDataObsPointsLoader, SpatialDataObsSegmentationsLoader, SpatialDataObsSetsLoader, } from '@vitessce/spatial-zarr';
40
+ SpatialDataTableSource, SpatialDataShapesSource, SpatialDataPointsSource, SpatialDataImageLoader, SpatialDataLabelsLoader, SpatialDataObsSpotsLoader, SpatialDataObsPointsLoader, SpatialDataObsSegmentationsLoader, SpatialDataObsSetsLoader, SpatialDataObsEmbeddingLoader, } from '@vitessce/spatial-zarr';
41
41
  import { OmeTiffAsObsSegmentationsLoader, OmeTiffLoader, OmeTiffSource, } from '@vitessce/ome-tiff';
42
42
  import { GlbSource, GlbLoader, } from '@vitessce/glb';
43
43
  // Joint file types
@@ -154,6 +154,7 @@ export const baseFileTypes = [
154
154
  ...makeZarrFileTypes(FileType.OBS_POINTS_SPATIALDATA_ZARR, DataType.OBS_POINTS, SpatialDataObsPointsLoader, SpatialDataPointsSource, obsPointsSpatialdataSchema),
155
155
  ...makeZarrFileTypes(FileType.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR, DataType.OBS_FEATURE_MATRIX, ObsFeatureMatrixAnndataLoader, SpatialDataTableSource, obsFeatureMatrixSpatialdataSchema),
156
156
  ...makeZarrFileTypes(FileType.OBS_SETS_SPATIALDATA_ZARR, DataType.OBS_SETS, SpatialDataObsSetsLoader, SpatialDataTableSource, obsSetsSpatialdataSchema),
157
+ ...makeZarrFileTypes(FileType.OBS_EMBEDDING_SPATIALDATA_ZARR, DataType.OBS_EMBEDDING, SpatialDataObsEmbeddingLoader, SpatialDataTableSource, obsEmbeddingSpatialdataSchema),
157
158
  ...makeZarrFileTypes(FileType.FEATURE_LABELS_SPATIALDATA_ZARR, DataType.FEATURE_LABELS, FeatureLabelsAnndataLoader, SpatialDataTableSource, featureLabelsAnndataSchema),
158
159
  makeFileType(FileType.OBS_SEGMENTATIONS_GLB, DataType.OBS_SEGMENTATIONS, GlbLoader, GlbSource, meshGlbSchema),
159
160
  // All legacy file types
@@ -1,31 +1,5 @@
1
1
  import type { z } from 'zod';
2
2
  import type { latestFileDefSchema } from '@vitessce/schemas';
3
3
  export declare function expandAnndataZarr(fileDef: z.infer<typeof latestFileDefSchema>): any[];
4
- export declare function expandSpatialdataZarr(fileDef: z.infer<typeof latestFileDefSchema>): ({
5
- fileType: string;
6
- options: any;
7
- coordinationValues: {
8
- obsType: string;
9
- featureType: string;
10
- featureValueType: string;
11
- };
12
- url?: string;
13
- requestInit?: any;
14
- } | {
15
- fileType: string;
16
- options: any;
17
- coordinationValues: {
18
- obsType: string;
19
- };
20
- url?: string;
21
- requestInit?: any;
22
- } | {
23
- fileType: string;
24
- options: any;
25
- coordinationValues: {
26
- featureType: string;
27
- };
28
- url?: string;
29
- requestInit?: any;
30
- })[];
4
+ export declare function expandSpatialdataZarr(fileDef: z.infer<typeof latestFileDefSchema>): any[];
31
5
  //# sourceMappingURL=joint-file-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"joint-file-types.d.ts","sourceRoot":"","sources":["../src/joint-file-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA6B7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,SAsO7E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;;;;;;UAjQ1E,MAAM;kBACE,GAAG;;;;;;;UADX,MAAM;kBACE,GAAG;;;;;;;UADX,MAAM;kBACE,GAAG;KAkXlB"}
1
+ {"version":3,"file":"joint-file-types.d.ts","sourceRoot":"","sources":["../src/joint-file-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA6B7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,SAsO7E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,SAoJjF"}
@@ -304,7 +304,39 @@ export function expandSpatialdataZarr(fileDef) {
304
304
  // TODO: obsLocations?
305
305
  // TODO: obsLabels
306
306
  // TODO: featureLabels
307
- // TODO: obsEmbedding
307
+ // obsEmbedding
308
+ // eslint-disable-next-line no-nested-ternary
309
+ ...(options.obsEmbedding ? (Array.isArray(options.obsEmbedding) ? options.obsEmbedding.map((oe) => ({
310
+ // obsEmbedding was an array, process each element.
311
+ ...baseFileDef,
312
+ fileType: getFileType(FileType.OBS_EMBEDDING_SPATIALDATA_ZARR),
313
+ options: {
314
+ path: oe.path,
315
+ dims: oe.dims,
316
+ tablePath: options.tablePath,
317
+ region: options.region,
318
+ },
319
+ coordinationValues: {
320
+ ...extraCoordinationValues,
321
+ obsType: baseFileDef.coordinationValues.obsType,
322
+ // Move embedding type property out of options and into coordinationValues.
323
+ embeddingType: oe.embeddingType,
324
+ },
325
+ })) : [{
326
+ // obsEmbedding was an object.
327
+ ...baseFileDef,
328
+ fileType: getFileType(FileType.OBS_EMBEDDING_SPATIALDATA_ZARR),
329
+ options: {
330
+ ...options.obsEmbedding,
331
+ tablePath: options.tablePath,
332
+ region: options.region,
333
+ },
334
+ coordinationValues: {
335
+ ...extraCoordinationValues,
336
+ obsType: baseFileDef.coordinationValues.obsType,
337
+ embeddingType: baseFileDef.coordinationValues.embeddingType,
338
+ },
339
+ }]) : []),
308
340
  // image
309
341
  // TODO: handle multiple image elements?
310
342
  ...(options.image ? [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/all",
3
- "version": "3.6.13",
3
+ "version": "3.6.14",
4
4
  "author": "HIDIVE Lab at HMS",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -17,37 +17,37 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "zod": "^3.21.4",
20
- "@vitessce/styles": "3.6.13",
21
- "@vitessce/constants-internal": "3.6.13",
22
- "@vitessce/abstract": "3.6.13",
23
- "@vitessce/error": "3.6.13",
24
- "@vitessce/csv": "3.6.13",
25
- "@vitessce/description": "3.6.13",
26
- "@vitessce/feature-list": "3.6.13",
27
- "@vitessce/genomic-profiles": "3.6.13",
28
- "@vitessce/heatmap": "3.6.13",
29
- "@vitessce/glb": "3.6.13",
30
- "@vitessce/json": "3.6.13",
31
- "@vitessce/layer-controller": "3.6.13",
32
- "@vitessce/layer-controller-beta": "3.6.13",
33
- "@vitessce/link-controller": "3.6.13",
34
- "@vitessce/obs-sets-manager": "3.6.13",
35
- "@vitessce/ome-tiff": "3.6.13",
36
- "@vitessce/plugins": "3.6.13",
37
- "@vitessce/scatterplot-embedding": "3.6.13",
38
- "@vitessce/scatterplot-gating": "3.6.13",
39
- "@vitessce/schemas": "3.6.13",
40
- "@vitessce/spatial": "3.6.13",
41
- "@vitessce/spatial-beta": "3.6.13",
42
- "@vitessce/statistical-plots": "3.6.13",
43
- "@vitessce/status": "3.6.13",
44
- "@vitessce/vit-s": "3.6.13",
45
- "@vitessce/zarr": "3.6.13",
46
- "@vitessce/globals": "3.6.13",
47
- "@vitessce/spatial-zarr": "3.6.13",
48
- "@vitessce/spatial-three": "3.6.13",
49
- "@vitessce/biomarker-select": "3.6.13",
50
- "@vitessce/neuroglancer": "3.6.13"
20
+ "@vitessce/styles": "3.6.14",
21
+ "@vitessce/constants-internal": "3.6.14",
22
+ "@vitessce/abstract": "3.6.14",
23
+ "@vitessce/error": "3.6.14",
24
+ "@vitessce/csv": "3.6.14",
25
+ "@vitessce/description": "3.6.14",
26
+ "@vitessce/feature-list": "3.6.14",
27
+ "@vitessce/genomic-profiles": "3.6.14",
28
+ "@vitessce/heatmap": "3.6.14",
29
+ "@vitessce/glb": "3.6.14",
30
+ "@vitessce/json": "3.6.14",
31
+ "@vitessce/layer-controller": "3.6.14",
32
+ "@vitessce/layer-controller-beta": "3.6.14",
33
+ "@vitessce/link-controller": "3.6.14",
34
+ "@vitessce/obs-sets-manager": "3.6.14",
35
+ "@vitessce/ome-tiff": "3.6.14",
36
+ "@vitessce/plugins": "3.6.14",
37
+ "@vitessce/scatterplot-embedding": "3.6.14",
38
+ "@vitessce/scatterplot-gating": "3.6.14",
39
+ "@vitessce/schemas": "3.6.14",
40
+ "@vitessce/spatial": "3.6.14",
41
+ "@vitessce/spatial-beta": "3.6.14",
42
+ "@vitessce/statistical-plots": "3.6.14",
43
+ "@vitessce/status": "3.6.14",
44
+ "@vitessce/vit-s": "3.6.14",
45
+ "@vitessce/zarr": "3.6.14",
46
+ "@vitessce/globals": "3.6.14",
47
+ "@vitessce/spatial-zarr": "3.6.14",
48
+ "@vitessce/spatial-three": "3.6.14",
49
+ "@vitessce/biomarker-select": "3.6.14",
50
+ "@vitessce/neuroglancer": "3.6.14"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/react": "^18.0.28",
@@ -64,6 +64,7 @@ import {
64
64
  obsSpotsSpatialdataSchema,
65
65
  obsPointsSpatialdataSchema,
66
66
  obsSetsSpatialdataSchema,
67
+ obsEmbeddingSpatialdataSchema,
67
68
  obsSetPath,
68
69
  rgbArray,
69
70
  obsSetsSchema,
@@ -178,6 +179,7 @@ import {
178
179
  SpatialDataObsPointsLoader,
179
180
  SpatialDataObsSegmentationsLoader,
180
181
  SpatialDataObsSetsLoader,
182
+ SpatialDataObsEmbeddingLoader,
181
183
  } from '@vitessce/spatial-zarr';
182
184
 
183
185
  import {
@@ -333,6 +335,7 @@ export const baseFileTypes = [
333
335
  ...makeZarrFileTypes(FileType.OBS_POINTS_SPATIALDATA_ZARR, DataType.OBS_POINTS, SpatialDataObsPointsLoader, SpatialDataPointsSource, obsPointsSpatialdataSchema),
334
336
  ...makeZarrFileTypes(FileType.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR, DataType.OBS_FEATURE_MATRIX, ObsFeatureMatrixAnndataLoader, SpatialDataTableSource, obsFeatureMatrixSpatialdataSchema),
335
337
  ...makeZarrFileTypes(FileType.OBS_SETS_SPATIALDATA_ZARR, DataType.OBS_SETS, SpatialDataObsSetsLoader, SpatialDataTableSource, obsSetsSpatialdataSchema),
338
+ ...makeZarrFileTypes(FileType.OBS_EMBEDDING_SPATIALDATA_ZARR, DataType.OBS_EMBEDDING, SpatialDataObsEmbeddingLoader, SpatialDataTableSource, obsEmbeddingSpatialdataSchema),
336
339
  ...makeZarrFileTypes(FileType.FEATURE_LABELS_SPATIALDATA_ZARR, DataType.FEATURE_LABELS, FeatureLabelsAnndataLoader, SpatialDataTableSource, featureLabelsAnndataSchema),
337
340
 
338
341
  makeFileType(FileType.OBS_SEGMENTATIONS_GLB, DataType.OBS_SEGMENTATIONS, GlbLoader, GlbSource, meshGlbSchema),
@@ -323,7 +323,41 @@ export function expandSpatialdataZarr(fileDef: z.infer<typeof latestFileDefSchem
323
323
  // TODO: obsLocations?
324
324
  // TODO: obsLabels
325
325
  // TODO: featureLabels
326
- // TODO: obsEmbedding
326
+ // obsEmbedding
327
+ // eslint-disable-next-line no-nested-ternary
328
+ ...(options.obsEmbedding ? (
329
+ Array.isArray(options.obsEmbedding) ? options.obsEmbedding.map((oe: any) => ({
330
+ // obsEmbedding was an array, process each element.
331
+ ...baseFileDef,
332
+ fileType: getFileType(FileType.OBS_EMBEDDING_SPATIALDATA_ZARR),
333
+ options: {
334
+ path: oe.path,
335
+ dims: oe.dims,
336
+ tablePath: options.tablePath,
337
+ region: options.region,
338
+ },
339
+ coordinationValues: {
340
+ ...extraCoordinationValues,
341
+ obsType: baseFileDef.coordinationValues.obsType,
342
+ // Move embedding type property out of options and into coordinationValues.
343
+ embeddingType: oe.embeddingType,
344
+ },
345
+ })) : [{
346
+ // obsEmbedding was an object.
347
+ ...baseFileDef,
348
+ fileType: getFileType(FileType.OBS_EMBEDDING_SPATIALDATA_ZARR),
349
+ options: {
350
+ ...options.obsEmbedding,
351
+ tablePath: options.tablePath,
352
+ region: options.region,
353
+ },
354
+ coordinationValues: {
355
+ ...extraCoordinationValues,
356
+ obsType: baseFileDef.coordinationValues.obsType,
357
+ embeddingType: baseFileDef.coordinationValues.embeddingType,
358
+ },
359
+ }]
360
+ ) : []),
327
361
  // image
328
362
  // TODO: handle multiple image elements?
329
363
  ...(options.image ? [{