@vitessce/all 3.3.0 → 3.3.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-bef59a57.js";
2
+ import { B as BaseDecoder } from "./index-e1f3ff32.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-bef59a57.js";
3
+ import { c as commonjsGlobal, o as objectAssign, g as getDefaultExportFromCjs, e as earcut, b as getAugmentedNamespace } from "./index-e1f3ff32.js";
4
4
  function _mergeNamespaces(n, m) {
5
5
  for (var i = 0; i < m.length; i++) {
6
6
  const e = m[i];
@@ -38827,7 +38827,7 @@ function Description(props2) {
38827
38827
  return jsxRuntimeExports.jsxs("div", { className: classes.description, children: [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: classes.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)] });
38828
38828
  }
38829
38829
  function DescriptionSubscriber(props2) {
38830
- const { coordinationScopes, description: descriptionOverride, removeGridComponent, theme, title: title2 = "Description" } = props2;
38830
+ const { coordinationScopes, description: descriptionOverride, removeGridComponent, theme, title: title2 = "Description", closeButtonVisible } = props2;
38831
38831
  const loaders = useLoaders();
38832
38832
  const [{ dataset, spatialImageLayer: rasterLayers }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.DESCRIPTION], coordinationScopes);
38833
38833
  const [description2] = useDescription(loaders, dataset);
@@ -38849,7 +38849,7 @@ function DescriptionSubscriber(props2) {
38849
38849
  }
38850
38850
  return result;
38851
38851
  }, [rasterLayers, imageLayerMeta, imageLayerLoaders]);
38852
- return jsxRuntimeExports.jsx(TitleInfo, { title: title2, removeGridComponent, isScroll: true, theme, isReady, children: jsxRuntimeExports.jsx(Description, { description: descriptionOverride || description2, metadata: metadata2 }) });
38852
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, closeButtonVisible, removeGridComponent, isScroll: true, theme, isReady, children: jsxRuntimeExports.jsx(Description, { description: descriptionOverride || description2, metadata: metadata2 }) });
38853
38853
  }
38854
38854
  var _global = { exports: {} };
38855
38855
  var global$6 = _global.exports = typeof window != "undefined" && window.Math == Math ? window : typeof self != "undefined" && self.Math == Math ? self : Function("return this")();
@@ -52163,7 +52163,7 @@ function SetsManager(props2) {
52163
52163
  }
52164
52164
  const packageJson = { name: "vitessce" };
52165
52165
  function ObsSetsManagerSubscriber(props2) {
52166
- const { coordinationScopes, removeGridComponent, theme, title: titleOverride } = props2;
52166
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: titleOverride } = props2;
52167
52167
  const loaders = useLoaders();
52168
52168
  const setWarning = useSetWarning();
52169
52169
  const [{ dataset, obsType, obsSetSelection: cellSetSelection, obsSetExpansion: cellSetExpansion, obsSetColor: cellSetColor, additionalObsSets: additionalCellSets, obsColorEncoding: cellColorEncoding }, { setObsSetSelection: setCellSetSelection, setObsColorEncoding: setCellColorEncoding, setObsSetColor: setCellSetColor, setObsSetExpansion: setCellSetExpansion, setAdditionalObsSets: setAdditionalCellSets }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.OBS_SETS], coordinationScopes);
@@ -52556,7 +52556,7 @@ function ObsSetsManagerSubscriber(props2) {
52556
52556
  setWarning,
52557
52557
  theme
52558
52558
  ]);
52559
- return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, removeGridComponent, urls: urls2, theme, isReady, children: manager });
52559
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, children: manager });
52560
52560
  }
52561
52561
  function ascending$6(a2, b2) {
52562
52562
  return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
@@ -56356,7 +56356,7 @@ const jsonLoader = {
56356
56356
  testText: isJSON,
56357
56357
  parseTextSync: JSON.parse
56358
56358
  };
56359
- const version$5 = "8.8.20";
56359
+ const version$5 = "8.8.27";
56360
56360
  const existingVersion = globalThis.deck && globalThis.deck.VERSION;
56361
56361
  if (existingVersion && existingVersion !== version$5) {
56362
56362
  throw new Error("deck.gl - multiple versions detected: ".concat(existingVersion, " vs ").concat(version$5));
@@ -57555,9 +57555,8 @@ function cssToDeviceRatio(gl) {
57555
57555
  luma
57556
57556
  } = gl;
57557
57557
  if (gl.canvas && luma) {
57558
- const {
57559
- clientWidth
57560
- } = luma.canvasSizeInfo;
57558
+ const cachedSize = luma.canvasSizeInfo;
57559
+ const clientWidth = "clientWidth" in cachedSize ? cachedSize.clientWidth : gl.canvas.clientWidth;
57561
57560
  return clientWidth ? gl.drawingBufferWidth / clientWidth : 1;
57562
57561
  }
57563
57562
  return 1;
@@ -57813,7 +57812,7 @@ function setDevicePixelRatio(gl, devicePixelRatio2, options) {
57813
57812
  });
57814
57813
  }
57815
57814
  }
57816
- const VERSION$8 = "8.5.16";
57815
+ const VERSION$8 = "8.5.21";
57817
57816
  const STARTUP_MESSAGE = "set luma.log.level=1 (or higher) to trace rendering";
57818
57817
  class StatsManager {
57819
57818
  constructor() {
@@ -57934,7 +57933,6 @@ let Resource$1 = class Resource {
57934
57933
  this._handle = this._createHandle();
57935
57934
  }
57936
57935
  this.byteLength = 0;
57937
- this._initStats();
57938
57936
  this._addStats();
57939
57937
  }
57940
57938
  toString() {
@@ -58070,9 +58068,6 @@ let Resource$1 = class Resource {
58070
58068
  this.gl.luma = this.gl.luma || {};
58071
58069
  return this.gl.luma;
58072
58070
  }
58073
- _initStats() {
58074
- this.gl.stats = this.gl.stats || new StatsManager();
58075
- }
58076
58071
  _addStats() {
58077
58072
  const name2 = this[Symbol.toStringTag];
58078
58073
  const stats = lumaStats.get("Resource Counts");
@@ -58087,27 +58082,29 @@ let Resource$1 = class Resource {
58087
58082
  }
58088
58083
  _trackAllocatedMemory(bytes) {
58089
58084
  let name2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this[Symbol.toStringTag];
58090
- this._doTrackAllocatedMemory(bytes, name2);
58091
- this._doTrackAllocatedMemory(bytes, name2, this.gl.stats.get("Memory Usage"));
58085
+ this._trackAllocatedMemoryForContext(bytes, name2);
58086
+ this._trackAllocatedMemoryForContext(bytes, name2, this.gl.canvas && this.gl.canvas.id);
58087
+ this.byteLength = bytes;
58092
58088
  }
58093
- _doTrackAllocatedMemory(bytes) {
58089
+ _trackAllocatedMemoryForContext(bytes) {
58094
58090
  let name2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this[Symbol.toStringTag];
58095
- let stats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : lumaStats.get("Memory Usage");
58091
+ let id2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "";
58092
+ const stats = lumaStats.get("Memory Usage".concat(id2));
58096
58093
  stats.get("GPU Memory").addCount(bytes);
58097
58094
  stats.get("".concat(name2, " Memory")).addCount(bytes);
58098
- this.byteLength = bytes;
58099
58095
  }
58100
58096
  _trackDeallocatedMemory() {
58101
58097
  let name2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this[Symbol.toStringTag];
58102
- this._doTrackDeallocatedMemory(name2);
58103
- this._doTrackDeallocatedMemory(name2, this.gl.stats.get("Memory Usage"));
58098
+ this._trackDeallocatedMemoryForContext(name2);
58099
+ this._trackDeallocatedMemoryForContext(name2, this.gl.canvas && this.gl.canvas.id);
58100
+ this.byteLength = 0;
58104
58101
  }
58105
- _doTrackDeallocatedMemory() {
58102
+ _trackDeallocatedMemoryForContext() {
58106
58103
  let name2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this[Symbol.toStringTag];
58107
- let stats = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : lumaStats.get("Memory Usage");
58104
+ let id2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
58105
+ const stats = lumaStats.get("Memory Usage".concat(id2));
58108
58106
  stats.get("GPU Memory").subtractCount(this.byteLength);
58109
58107
  stats.get("".concat(name2, " Memory")).subtractCount(this.byteLength);
58110
- this.byteLength = 0;
58111
58108
  }
58112
58109
  };
58113
58110
  const ERR_TYPE_DEDUCTION = "Failed to deduce GL constant from typed array";
@@ -71323,6 +71320,7 @@ const picking = {
71323
71320
  inject: {
71324
71321
  "vs:DECKGL_FILTER_GL_POSITION": "\n // for picking depth values\n picking_setPickingAttribute(position.z / position.w);\n ",
71325
71322
  "vs:DECKGL_FILTER_COLOR": "\n picking_setPickingColor(geometry.pickingColor);\n ",
71323
+ "fs:#decl": "\nuniform bool picking_uAttribute;\n ",
71326
71324
  "fs:DECKGL_FILTER_COLOR": {
71327
71325
  order: 99,
71328
71326
  injection: "\n // use highlight color if this fragment belongs to the selected object.\n color = picking_filterHighlightColor(color);\n\n // use picking color if rendering to picking FBO.\n color = picking_filterPickingColor(color);\n "
@@ -72133,6 +72131,9 @@ class Viewport {
72133
72131
  this.projectFlat = this.projectFlat.bind(this);
72134
72132
  this.unprojectFlat = this.unprojectFlat.bind(this);
72135
72133
  }
72134
+ get subViewports() {
72135
+ return null;
72136
+ }
72136
72137
  get metersPerPixel() {
72137
72138
  return this.distanceScales.metersPerUnit[2] / this.scale;
72138
72139
  }
@@ -81024,7 +81025,7 @@ class Attribute extends DataColumn {
81024
81025
  const {
81025
81026
  startIndices
81026
81027
  } = this;
81027
- const vertexIndex = startIndices ? startIndices[row] : row;
81028
+ const vertexIndex = startIndices ? row < startIndices.length ? startIndices[row] : this.numInstances : row;
81028
81029
  return vertexIndex * this.size;
81029
81030
  }
81030
81031
  getShaderAttributes() {
@@ -83668,7 +83669,7 @@ class Layer extends Component {
83668
83669
  if (Array.isArray(highlightColor)) {
83669
83670
  parameters.pickingHighlightColor = highlightColor;
83670
83671
  }
83671
- if (Number.isInteger(highlightedObjectIndex)) {
83672
+ if (forceUpdate || highlightedObjectIndex !== oldProps.highlightedObjectIndex) {
83672
83673
  parameters.pickingSelectedColor = Number.isFinite(highlightedObjectIndex) && highlightedObjectIndex >= 0 ? this.encodePickingColor(highlightedObjectIndex) : null;
83673
83674
  }
83674
83675
  this.setModuleParameters(parameters);
@@ -85031,7 +85032,7 @@ function interpolateQuad(quad2, ut, vt) {
85031
85032
  }
85032
85033
  const vs$g = "\n#define SHADER_NAME bitmap-layer-vertex-shader\n\nattribute vec2 texCoords;\nattribute vec3 positions;\nattribute vec3 positions64Low;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float coordinateConversion;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n\n if (coordinateConversion < -0.5) {\n vTexPos = geometry.position.xy + project_uCommonOrigin.xy;\n } else if (coordinateConversion > 0.5) {\n vTexPos = geometry.worldPosition.xy;\n }\n\n vec4 color = vec4(0.0);\n DECKGL_FILTER_COLOR(color, geometry);\n}\n";
85033
85034
  const packUVsIntoRGB = "\nvec3 packUVsIntoRGB(vec2 uv) {\n // Extract the top 8 bits. We want values to be truncated down so we can add a fraction\n vec2 uv8bit = floor(uv * 256.);\n\n // Calculate the normalized remainders of u and v parts that do not fit into 8 bits\n // Scale and clamp to 0-1 range\n vec2 uvFraction = fract(uv * 256.);\n vec2 uvFraction4bit = floor(uvFraction * 16.);\n\n // Remainder can be encoded in blue channel, encode as 4 bits for pixel coordinates\n float fractions = uvFraction4bit.x + uvFraction4bit.y * 16.;\n\n return vec3(uv8bit, fractions) / 255.;\n}\n";
85034
- const fs$i = "\n#define SHADER_NAME bitmap-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D bitmapTexture;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float desaturate;\nuniform vec4 transparentColor;\nuniform vec3 tintColor;\nuniform float opacity;\n\nuniform float coordinateConversion;\nuniform vec4 bounds;\n\n/* projection utils */\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / PI / 2.0;\n\n// from degrees to Web Mercator\nvec2 lnglat_to_mercator(vec2 lnglat) {\n float x = lnglat.x;\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// from Web Mercator to degrees\nvec2 mercator_to_lnglat(vec2 xy) {\n xy /= WORLD_SCALE;\n return degrees(vec2(\n xy.x - PI,\n atan(exp(xy.y - PI)) * 2.0 - PI * 0.5\n ));\n}\n/* End projection utils */\n\n// apply desaturation\nvec3 color_desaturate(vec3 color) {\n float luminance = (color.r + color.g + color.b) * 0.333333333;\n return mix(color, vec3(luminance), desaturate);\n}\n\n// apply tint\nvec3 color_tint(vec3 color) {\n return color * tintColor;\n}\n\n// blend with background color\nvec4 apply_opacity(vec3 color, float alpha) {\n return mix(transparentColor, vec4(color, 1.0), alpha);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - bounds[0]) / (bounds[2] - bounds[0]),\n (pos.y - bounds[3]) / (bounds[1] - bounds[3])\n );\n}\n\n".concat(packUVsIntoRGB, "\n\nvoid main(void) {\n vec2 uv = vTexCoord;\n if (coordinateConversion < -0.5) {\n vec2 lnglat = mercator_to_lnglat(vTexPos);\n uv = getUV(lnglat);\n } else if (coordinateConversion > 0.5) {\n vec2 commonPos = lnglat_to_mercator(vTexPos);\n uv = getUV(commonPos);\n }\n vec4 bitmapColor = texture2D(bitmapTexture, uv);\n\n gl_FragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * opacity);\n\n geometry.uv = uv;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n\n if (picking_uActive) {\n // Since instance information is not used, we can use picking color for pixel index\n gl_FragColor.rgb = packUVsIntoRGB(uv);\n }\n}\n");
85035
+ const fs$i = "\n#define SHADER_NAME bitmap-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D bitmapTexture;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float desaturate;\nuniform vec4 transparentColor;\nuniform vec3 tintColor;\nuniform float opacity;\n\nuniform float coordinateConversion;\nuniform vec4 bounds;\n\n/* projection utils */\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / PI / 2.0;\n\n// from degrees to Web Mercator\nvec2 lnglat_to_mercator(vec2 lnglat) {\n float x = lnglat.x;\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// from Web Mercator to degrees\nvec2 mercator_to_lnglat(vec2 xy) {\n xy /= WORLD_SCALE;\n return degrees(vec2(\n xy.x - PI,\n atan(exp(xy.y - PI)) * 2.0 - PI * 0.5\n ));\n}\n/* End projection utils */\n\n// apply desaturation\nvec3 color_desaturate(vec3 color) {\n float luminance = (color.r + color.g + color.b) * 0.333333333;\n return mix(color, vec3(luminance), desaturate);\n}\n\n// apply tint\nvec3 color_tint(vec3 color) {\n return color * tintColor;\n}\n\n// blend with background color\nvec4 apply_opacity(vec3 color, float alpha) {\n return mix(transparentColor, vec4(color, 1.0), alpha);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - bounds[0]) / (bounds[2] - bounds[0]),\n (pos.y - bounds[3]) / (bounds[1] - bounds[3])\n );\n}\n\n".concat(packUVsIntoRGB, "\n\nvoid main(void) {\n vec2 uv = vTexCoord;\n if (coordinateConversion < -0.5) {\n vec2 lnglat = mercator_to_lnglat(vTexPos);\n uv = getUV(lnglat);\n } else if (coordinateConversion > 0.5) {\n vec2 commonPos = lnglat_to_mercator(vTexPos);\n uv = getUV(commonPos);\n }\n vec4 bitmapColor = texture2D(bitmapTexture, uv);\n\n gl_FragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * opacity);\n\n geometry.uv = uv;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n\n if (picking_uActive && !picking_uAttribute) {\n // Since instance information is not used, we can use picking color for pixel index\n gl_FragColor.rgb = packUVsIntoRGB(uv);\n }\n}\n");
85035
85036
  const defaultProps$I = {
85036
85037
  image: {
85037
85038
  type: "image",
@@ -93171,18 +93172,22 @@ function getBoundingBox(viewport, zRange, extent2) {
93171
93172
  }
93172
93173
  function getCullBounds({
93173
93174
  viewport,
93174
- z: z2,
93175
+ z: z2 = 0,
93175
93176
  cullRect
93176
93177
  }) {
93177
- const x2 = cullRect.x - viewport.x;
93178
- const y2 = cullRect.y - viewport.y;
93179
- const {
93180
- width: width2,
93181
- height: height2
93182
- } = cullRect;
93178
+ const subViewports = viewport.subViewports || [viewport];
93179
+ return subViewports.map((v) => getCullBoundsInViewport(v, z2, cullRect));
93180
+ }
93181
+ function getCullBoundsInViewport(viewport, z2, cullRect) {
93183
93182
  if (!Array.isArray(z2)) {
93183
+ const x2 = cullRect.x - viewport.x;
93184
+ const y2 = cullRect.y - viewport.y;
93185
+ const {
93186
+ width: width2,
93187
+ height: height2
93188
+ } = cullRect;
93184
93189
  const unprojectOption = {
93185
- targetZ: z2 || 0
93190
+ targetZ: z2
93186
93191
  };
93187
93192
  const topLeft = viewport.unproject([x2, y2], unprojectOption);
93188
93193
  const topRight = viewport.unproject([x2 + width2, y2], unprojectOption);
@@ -93190,16 +93195,8 @@ function getCullBounds({
93190
93195
  const bottomRight = viewport.unproject([x2 + width2, y2 + height2], unprojectOption);
93191
93196
  return [Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]), Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]), Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]), Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])];
93192
93197
  }
93193
- const bounds0 = getCullBounds({
93194
- viewport,
93195
- z: z2[0],
93196
- cullRect
93197
- });
93198
- const bounds1 = getCullBounds({
93199
- viewport,
93200
- z: z2[1],
93201
- cullRect
93202
- });
93198
+ const bounds0 = getCullBoundsInViewport(viewport, z2[0], cullRect);
93199
+ const bounds1 = getCullBoundsInViewport(viewport, z2[1], cullRect);
93203
93200
  return [Math.min(bounds0[0], bounds1[0]), Math.min(bounds0[1], bounds1[1]), Math.max(bounds0[2], bounds1[2]), Math.max(bounds0[3], bounds1[3])];
93204
93201
  }
93205
93202
  function getIndexingCoords(bbox2, scale2, modelMatrixInverse) {
@@ -93429,7 +93426,7 @@ class Tileset2D {
93429
93426
  return false;
93430
93427
  }
93431
93428
  if (cullRect && this._viewport) {
93432
- const [minX, minY, maxX, maxY2] = getCullBounds({
93429
+ const boundsArr = this._getCullBounds({
93433
93430
  viewport: this._viewport,
93434
93431
  z: this._zRange,
93435
93432
  cullRect
@@ -93437,12 +93434,20 @@ class Tileset2D {
93437
93434
  const {
93438
93435
  bbox: bbox2
93439
93436
  } = tile;
93440
- if ("west" in bbox2) {
93441
- return bbox2.west < maxX && bbox2.east > minX && bbox2.south < maxY2 && bbox2.north > minY;
93437
+ for (const [minX, minY, maxX, maxY2] of boundsArr) {
93438
+ let overlaps;
93439
+ if ("west" in bbox2) {
93440
+ overlaps = bbox2.west < maxX && bbox2.east > minX && bbox2.south < maxY2 && bbox2.north > minY;
93441
+ } else {
93442
+ const y02 = Math.min(bbox2.top, bbox2.bottom);
93443
+ const y12 = Math.max(bbox2.top, bbox2.bottom);
93444
+ overlaps = bbox2.left < maxX && bbox2.right > minX && y02 < maxY2 && y12 > minY;
93445
+ }
93446
+ if (overlaps) {
93447
+ return true;
93448
+ }
93442
93449
  }
93443
- const y02 = Math.min(bbox2.top, bbox2.bottom);
93444
- const y12 = Math.max(bbox2.top, bbox2.bottom);
93445
- return bbox2.left < maxX && bbox2.right > minX && y02 < maxY2 && y12 > minY;
93450
+ return false;
93446
93451
  }
93447
93452
  return true;
93448
93453
  }
@@ -93891,14 +93896,19 @@ class TileLayer extends CompositeLayer {
93891
93896
  info: info2,
93892
93897
  sourceLayer
93893
93898
  }) {
93899
+ const sourceTile = sourceLayer.props.tile;
93894
93900
  if (info2.picked) {
93895
- info2.tile = sourceLayer.props.tile;
93901
+ info2.tile = sourceTile;
93896
93902
  }
93903
+ info2.sourceTile = sourceTile;
93897
93904
  return info2;
93898
93905
  }
93899
93906
  _updateAutoHighlight(info2) {
93900
- if (info2.sourceLayer) {
93901
- info2.sourceLayer.updateAutoHighlight(info2);
93907
+ const sourceTile = info2.sourceTile;
93908
+ if (sourceTile && sourceTile.layers) {
93909
+ for (const layer of sourceTile.layers) {
93910
+ layer.updateAutoHighlight(info2);
93911
+ }
93902
93912
  }
93903
93913
  }
93904
93914
  renderLayers() {
@@ -106216,6 +106226,9 @@ class ScenegraphNode {
106216
106226
  toString() {
106217
106227
  return "{type: ScenegraphNode, id: ".concat(this.id, ")}");
106218
106228
  }
106229
+ getBounds() {
106230
+ return null;
106231
+ }
106219
106232
  setPosition(position2) {
106220
106233
  assert$9(position2.length === 3, "setPosition requires vector argument");
106221
106234
  this.position = position2;
@@ -106366,6 +106379,34 @@ class GroupNode extends ScenegraphNode {
106366
106379
  this.removeAll();
106367
106380
  super.delete();
106368
106381
  }
106382
+ getBounds() {
106383
+ const result = [[Infinity, Infinity, Infinity], [-Infinity, -Infinity, -Infinity]];
106384
+ this.traverse((node, _ref3) => {
106385
+ let {
106386
+ worldMatrix
106387
+ } = _ref3;
106388
+ const bounds2 = node.getBounds();
106389
+ if (!bounds2) {
106390
+ return;
106391
+ }
106392
+ const [min2, max2] = bounds2;
106393
+ const center2 = new Vector3(min2).add(max2).divide([2, 2, 2]);
106394
+ worldMatrix.transformAsPoint(center2, center2);
106395
+ const halfSize = new Vector3(max2).subtract(min2).divide([2, 2, 2]);
106396
+ worldMatrix.transformAsVector(halfSize, halfSize);
106397
+ for (let v = 0; v < 8; v++) {
106398
+ const position2 = new Vector3(v & 1 ? -1 : 1, v & 2 ? -1 : 1, v & 4 ? -1 : 1).multiply(halfSize).add(center2);
106399
+ for (let i2 = 0; i2 < 3; i2++) {
106400
+ result[0][i2] = Math.min(result[0][i2], position2[i2]);
106401
+ result[1][i2] = Math.max(result[1][i2], position2[i2]);
106402
+ }
106403
+ }
106404
+ });
106405
+ if (!Number.isFinite(result[0][0])) {
106406
+ return null;
106407
+ }
106408
+ return result;
106409
+ }
106369
106410
  traverse(visitor) {
106370
106411
  let {
106371
106412
  worldMatrix = new Matrix4()
@@ -106615,6 +106656,7 @@ class ModelNode extends ScenegraphNode {
106615
106656
  } else {
106616
106657
  this.model = new Model$1(gl, props2);
106617
106658
  }
106659
+ this.bounds = null;
106618
106660
  this.managedResources = props2.managedResources || [];
106619
106661
  }
106620
106662
  setProps(props2) {
@@ -106622,6 +106664,9 @@ class ModelNode extends ScenegraphNode {
106622
106664
  this._setModelNodeProps(props2);
106623
106665
  return this;
106624
106666
  }
106667
+ getBounds() {
106668
+ return this.bounds;
106669
+ }
106625
106670
  delete() {
106626
106671
  if (this.model) {
106627
106672
  this.model.delete();
@@ -106806,17 +106851,21 @@ function createGLTFModel(gl, options) {
106806
106851
  const managedResources = [];
106807
106852
  managedResources.push(...materialParser.generatedTextures);
106808
106853
  managedResources.push(...Object.values(attributes).map((attribute) => attribute.buffer));
106809
- const model = new ModelNode(gl, Object.assign({
106854
+ const model = new ModelNode(gl, {
106810
106855
  id: id2,
106811
106856
  drawMode,
106812
106857
  vertexCount,
106813
106858
  modules: [pbr],
106814
- defines: materialParser.defines,
106815
106859
  parameters: materialParser.parameters,
106816
106860
  vs: addVersionToShader(gl, vs$7),
106817
106861
  fs: addVersionToShader(gl, fs$7),
106818
- managedResources
106819
- }, modelOptions));
106862
+ managedResources,
106863
+ ...modelOptions,
106864
+ defines: {
106865
+ ...materialParser.defines,
106866
+ ...modelOptions.defines
106867
+ }
106868
+ });
106820
106869
  model.setProps({
106821
106870
  attributes
106822
106871
  });
@@ -106911,13 +106960,15 @@ class GLTFInstantiator {
106911
106960
  log$8.warn("getVertexCount() not found")();
106912
106961
  }
106913
106962
  createPrimitive(gltfPrimitive, i2, gltfMesh) {
106914
- return createGLTFModel(this.gl, Object.assign({
106963
+ const model = createGLTFModel(this.gl, Object.assign({
106915
106964
  id: gltfPrimitive.name || "".concat(gltfMesh.name || gltfMesh.id, "-primitive-").concat(i2),
106916
106965
  drawMode: gltfPrimitive.mode || 4,
106917
106966
  vertexCount: gltfPrimitive.indices ? gltfPrimitive.indices.count : this.getVertexCount(gltfPrimitive.attributes),
106918
106967
  attributes: this.createAttributes(gltfPrimitive.attributes, gltfPrimitive.indices),
106919
106968
  material: gltfPrimitive.material
106920
106969
  }, this.options));
106970
+ model.bounds = [gltfPrimitive.attributes.POSITION.min, gltfPrimitive.attributes.POSITION.max];
106971
+ return model;
106921
106972
  }
106922
106973
  createAttributes(attributes, indices) {
106923
106974
  const loadedAttributes = {};
@@ -114845,15 +114896,11 @@ class Tile3DLayer extends CompositeLayer {
114845
114896
  info: info2,
114846
114897
  sourceLayer
114847
114898
  }) {
114848
- const {
114849
- layerMap
114850
- } = this.state;
114851
- const layerId = sourceLayer && sourceLayer.id;
114852
- if (layerId) {
114853
- const substr = layerId.substring(this.id.length + 1);
114854
- const tileId = substr.substring(substr.indexOf("-") + 1);
114855
- info2.object = layerMap[tileId] && layerMap[tileId].tile;
114899
+ const sourceTile = sourceLayer && sourceLayer.props.tile;
114900
+ if (info2.picked) {
114901
+ info2.object = sourceTile;
114856
114902
  }
114903
+ info2.sourceTile = sourceTile;
114857
114904
  return info2;
114858
114905
  }
114859
114906
  filterSubLayer({
@@ -114869,8 +114916,10 @@ class Tile3DLayer extends CompositeLayer {
114869
114916
  return tile.selected && tile.viewportIds.includes(viewportId);
114870
114917
  }
114871
114918
  _updateAutoHighlight(info2) {
114872
- if (info2.sourceLayer) {
114873
- info2.sourceLayer.updateAutoHighlight(info2);
114919
+ const sourceTile = info2.sourceTile;
114920
+ const layerCache = this.state.layerMap[sourceTile === null || sourceTile === void 0 ? void 0 : sourceTile.id];
114921
+ if (layerCache && layerCache.layer) {
114922
+ layerCache.layer.updateAutoHighlight(info2);
114874
114923
  }
114875
114924
  }
114876
114925
  async _loadTileset(tilesetUrl) {
@@ -156032,16 +156081,16 @@ async function getDecoder(fileDirectory) {
156032
156081
  const Decoder = await importFn();
156033
156082
  return new Decoder(fileDirectory);
156034
156083
  }
156035
- addDecoder([void 0, 1], () => import("./raw-e3409593.js").then((m2) => m2.default));
156036
- addDecoder(5, () => import("./lzw-fddb0b81.js").then((m2) => m2.default));
156084
+ addDecoder([void 0, 1], () => import("./raw-bd484be0.js").then((m2) => m2.default));
156085
+ addDecoder(5, () => import("./lzw-3f41da4f.js").then((m2) => m2.default));
156037
156086
  addDecoder(6, () => {
156038
156087
  throw new Error("old style JPEG compression is not supported.");
156039
156088
  });
156040
- addDecoder(7, () => import("./jpeg-92e88990.js").then((m2) => m2.default));
156041
- addDecoder([8, 32946], () => import("./deflate-2f8bc9ba.js").then((m2) => m2.default));
156042
- addDecoder(32773, () => import("./packbits-f19f0a34.js").then((m2) => m2.default));
156043
- addDecoder(34887, () => import("./lerc-7d9f0083.js").then((m2) => m2.default));
156044
- addDecoder(50001, () => import("./webimage-e1f702e2.js").then((m2) => m2.default));
156089
+ addDecoder(7, () => import("./jpeg-b2781c48.js").then((m2) => m2.default));
156090
+ addDecoder([8, 32946], () => import("./deflate-71cf29f7.js").then((m2) => m2.default));
156091
+ addDecoder(32773, () => import("./packbits-19b767c9.js").then((m2) => m2.default));
156092
+ addDecoder(34887, () => import("./lerc-69270d36.js").then((m2) => m2.default));
156093
+ addDecoder(50001, () => import("./webimage-c810ada2.js").then((m2) => m2.default));
156045
156094
  function copyNewSize(array2, width2, height2, samplesPerPixel = 1) {
156046
156095
  return new (Object.getPrototypeOf(array2)).constructor(width2 * height2 * samplesPerPixel);
156047
156096
  }
@@ -173918,6 +173967,8 @@ function EmbeddingScatterplotSubscriber(props2) {
173918
173967
  const {
173919
173968
  uuid,
173920
173969
  coordinationScopes,
173970
+ closeButtonVisible,
173971
+ downloadButtonVisible,
173921
173972
  removeGridComponent,
173922
173973
  theme,
173923
173974
  observationsLabelOverride,
@@ -174077,7 +174128,7 @@ function EmbeddingScatterplotSubscriber(props2) {
174077
174128
  setTargetY(target2[1]);
174078
174129
  setTargetZ(target2[2] || 0);
174079
174130
  };
174080
- return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: `${commaNumber(cellsCount)} ${pluralize(observationsLabel, cellsCount)}`, removeGridComponent, urls: urls2, theme, isReady, options: jsxRuntimeExports.jsx(ScatterplotOptions, { observationsLabel, cellRadius: cellRadiusFixed, setCellRadius: setCellRadiusFixed, cellRadiusMode, setCellRadiusMode, cellOpacity: cellOpacityFixed, setCellOpacity: setCellOpacityFixed, cellOpacityMode, setCellOpacityMode, cellSetLabelsVisible, setCellSetLabelsVisible, tooltipsVisible, setTooltipsVisible, cellSetLabelSize, setCellSetLabelSize, cellSetPolygonsVisible, setCellSetPolygonsVisible, cellColorEncoding, setCellColorEncoding, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange }), children: [jsxRuntimeExports.jsx(ScatterplotWrapper, { ref: deckRef, uuid, theme, viewState: { zoom: zoom2, target: [targetX2, targetY2, targetZ] }, setViewState, originalViewState, obsEmbeddingIndex, obsEmbedding, cellFilter, cellSelection, cellHighlight, cellColors, cellSetPolygons, cellSetLabelSize, cellSetLabelsVisible, cellSetPolygonsVisible, setCellFilter, setCellSelection: setCellSelectionProp, setCellHighlight, cellRadius, cellOpacity, cellColorEncoding, geneExpressionColormap, geneExpressionColormapRange, setComponentHover: () => {
174131
+ return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: `${commaNumber(cellsCount)} ${pluralize(observationsLabel, cellsCount)}`, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, options: jsxRuntimeExports.jsx(ScatterplotOptions, { observationsLabel, cellRadius: cellRadiusFixed, setCellRadius: setCellRadiusFixed, cellRadiusMode, setCellRadiusMode, cellOpacity: cellOpacityFixed, setCellOpacity: setCellOpacityFixed, cellOpacityMode, setCellOpacityMode, cellSetLabelsVisible, setCellSetLabelsVisible, tooltipsVisible, setTooltipsVisible, cellSetLabelSize, setCellSetLabelSize, cellSetPolygonsVisible, setCellSetPolygonsVisible, cellColorEncoding, setCellColorEncoding, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange }), children: [jsxRuntimeExports.jsx(ScatterplotWrapper, { ref: deckRef, uuid, theme, viewState: { zoom: zoom2, target: [targetX2, targetY2, targetZ] }, setViewState, originalViewState, obsEmbeddingIndex, obsEmbedding, cellFilter, cellSelection, cellHighlight, cellColors, cellSetPolygons, cellSetLabelSize, cellSetLabelsVisible, cellSetPolygonsVisible, setCellFilter, setCellSelection: setCellSelectionProp, setCellHighlight, cellRadius, cellOpacity, cellColorEncoding, geneExpressionColormap, geneExpressionColormapRange, setComponentHover: () => {
174081
174132
  setComponentHover(uuid);
174082
174133
  }, updateViewInfo: setComponentViewInfo, getExpressionValue, getCellIsSelected }), tooltipsVisible && jsxRuntimeExports.jsx(ScatterplotTooltipSubscriber, { parentUuid: uuid, obsHighlight: cellHighlight, width: width2, height: height2, getObsInfo }), jsxRuntimeExports.jsx(Legend, { visible: true, theme, featureType, featureValueType, obsColorEncoding: cellColorEncoding, featureSelection: geneSelection, featureLabelsMap, featureValueColormap: geneExpressionColormap, featureValueColormapRange: geneExpressionColormapRange, extent: expressionExtents == null ? void 0 : expressionExtents[0] })] });
174083
174134
  }
@@ -174126,6 +174177,8 @@ function GatingSubscriber(props2) {
174126
174177
  const {
174127
174178
  uuid,
174128
174179
  coordinationScopes,
174180
+ closeButtonVisible,
174181
+ downloadButtonVisible,
174129
174182
  removeGridComponent,
174130
174183
  theme,
174131
174184
  disableTooltip = false,
@@ -174320,7 +174373,7 @@ function GatingSubscriber(props2) {
174320
174373
  gatingFeatureSelectionY,
174321
174374
  obsType
174322
174375
  ]);
174323
- return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: `${commaNumber(cellsCount)} ${pluralize(obsType, cellsCount)}`, removeGridComponent, urls: urls2, theme, isReady, options: jsxRuntimeExports.jsx(ScatterplotOptions, { observationsLabel: obsType, cellRadius: cellRadiusFixed, setCellRadius: setCellRadiusFixed, cellRadiusMode, setCellRadiusMode, cellOpacity: cellOpacityFixed, setCellOpacity: setCellOpacityFixed, cellOpacityMode, setCellOpacityMode, cellSetLabelsVisible, setCellSetLabelsVisible, cellSetLabelSize, setCellSetLabelSize, cellSetPolygonsVisible, setCellSetPolygonsVisible, cellColorEncoding, setCellColorEncoding, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, children: jsxRuntimeExports.jsx(GatingScatterplotOptions, { featureType, gatingFeatureSelectionX, setGatingFeatureSelectionX, gatingFeatureSelectionY, setGatingFeatureSelectionY, gatingFeatureValueTransform: featureValueTransform, setGatingFeatureValueTransform: (newValue) => {
174376
+ return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: `${commaNumber(cellsCount)} ${pluralize(obsType, cellsCount)}`, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, options: jsxRuntimeExports.jsx(ScatterplotOptions, { observationsLabel: obsType, cellRadius: cellRadiusFixed, setCellRadius: setCellRadiusFixed, cellRadiusMode, setCellRadiusMode, cellOpacity: cellOpacityFixed, setCellOpacity: setCellOpacityFixed, cellOpacityMode, setCellOpacityMode, cellSetLabelsVisible, setCellSetLabelsVisible, cellSetLabelSize, setCellSetLabelSize, cellSetPolygonsVisible, setCellSetPolygonsVisible, cellColorEncoding, setCellColorEncoding, geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, children: jsxRuntimeExports.jsx(GatingScatterplotOptions, { featureType, gatingFeatureSelectionX, setGatingFeatureSelectionX, gatingFeatureSelectionY, setGatingFeatureSelectionY, gatingFeatureValueTransform: featureValueTransform, setGatingFeatureValueTransform: (newValue) => {
174324
174377
  setFeatureValueTransform(newValue);
174325
174378
  setTargetX(null);
174326
174379
  setTargetY(null);
@@ -192120,7 +192173,7 @@ function SpatialTooltipSubscriber$1(props2) {
192120
192173
  return cellInfo ? jsxRuntimeExports.jsx(Tooltip2D, { x: x2, y: y2, parentUuid, sourceUuid, parentWidth: width2, parentHeight: height2, children: jsxRuntimeExports.jsx(TooltipContent, { info: cellInfo }) }) : null;
192121
192174
  }
192122
192175
  function SpatialSubscriber$1(props2) {
192123
- const { uuid, coordinationScopes, removeGridComponent, observationsLabelOverride, subobservationsLabelOverride: subobservationsLabel = "molecule", theme, title: title2 = "Spatial", disable3d, globalDisable3d, useFullResolutionImage = {}, channelNamesVisible = false } = props2;
192176
+ const { uuid, coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, observationsLabelOverride, subobservationsLabelOverride: subobservationsLabel = "molecule", theme, title: title2 = "Spatial", disable3d, globalDisable3d, useFullResolutionImage = {}, channelNamesVisible = false } = props2;
192124
192177
  const loaders = useLoaders();
192125
192178
  const setComponentHover = useSetComponentHover();
192126
192179
  const setComponentViewInfo = useSetComponentViewInfo(uuid);
@@ -192369,7 +192422,7 @@ function SpatialSubscriber$1(props2) {
192369
192422
  }
192370
192423
  return [names, colors2];
192371
192424
  }, [imageLayers, imageLayerLoaders]);
192372
- return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, removeGridComponent, isReady, options, children: [jsxRuntimeExports.jsx("div", { style: {
192425
+ return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, options, children: [jsxRuntimeExports.jsx("div", { style: {
192373
192426
  position: "absolute",
192374
192427
  bottom: "5px",
192375
192428
  left: "5px",
@@ -193769,7 +193822,7 @@ function getHoverData(hoverInfo, layerType) {
193769
193822
  return null;
193770
193823
  }
193771
193824
  function SpatialSubscriber(props2) {
193772
- const { uuid, coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, removeGridComponent, observationsLabelOverride, subobservationsLabelOverride: subobservationsLabel = "molecule", theme, disableTooltip = false, title: title2 = "Spatial" } = props2;
193825
+ const { uuid, coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, closeButtonVisible, downloadButtonVisible, removeGridComponent, observationsLabelOverride, subobservationsLabelOverride: subobservationsLabel = "molecule", theme, disableTooltip = false, title: title2 = "Spatial" } = props2;
193773
193826
  const loaders = useLoaders();
193774
193827
  const setComponentHover = useSetComponentHover();
193775
193828
  const setComponentViewInfo = useSetComponentViewInfo(uuid);
@@ -194119,7 +194172,7 @@ function SpatialSubscriber(props2) {
194119
194172
  var _a3;
194120
194173
  return (_a3 = obsSegmentationsLocationsData == null ? void 0 : obsSegmentationsLocationsData[layerScope]) == null ? void 0 : _a3[channelScope];
194121
194174
  })).length > 0;
194122
- return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, removeGridComponent, isReady, children: [jsxRuntimeExports.jsx(SpatialWrapper, {
194175
+ return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: subtitle, isSpatial: true, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady, children: [jsxRuntimeExports.jsx(SpatialWrapper, {
194123
194176
  ref: deckRef,
194124
194177
  uuid,
194125
194178
  width: width2,
@@ -195082,7 +195135,7 @@ function HeatmapOptions(props2) {
195082
195135
  }) })] }), jsxRuntimeExports.jsxs(TableRow$1, { children: [jsxRuntimeExports.jsx(TableCell$1, { className: classes.labelCell, variant: "head", scope: "row", children: jsxRuntimeExports.jsx("label", { htmlFor: `heatmap-gene-expression-colormap-range-${heatmapOptionsId}`, children: "Gene Expression Colormap Range" }) }), jsxRuntimeExports.jsx(TableCell$1, { className: classes.inputCell, variant: "body", children: jsxRuntimeExports.jsx(Slider$1, { classes: { root: classes.slider, valueLabel: classes.sliderValueLabel }, value: geneExpressionColormapRange, onChange: handleColormapRangeChangeDebounced, getAriaLabel: (index2) => index2 === 0 ? "Low value colormap range slider" : "High value colormap range slider", id: `heatmap-gene-expression-colormap-range-${heatmapOptionsId}`, valueLabelDisplay: "auto", step: 5e-3, min: 0, max: 1 }) })] })] });
195083
195136
  }
195084
195137
  function HeatmapSubscriber(props2) {
195085
- const { uuid, coordinationScopes, removeGridComponent, theme, transpose: transpose2, observationsLabelOverride, variablesLabelOverride, title: title2 = "Heatmap" } = props2;
195138
+ const { uuid, coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, transpose: transpose2, observationsLabelOverride, variablesLabelOverride, title: title2 = "Heatmap" } = props2;
195086
195139
  const loaders = useLoaders();
195087
195140
  const setComponentHover = useSetComponentHover();
195088
195141
  const setComponentViewInfo = useSetComponentViewInfo(uuid);
@@ -195158,7 +195211,7 @@ function HeatmapSubscriber(props2) {
195158
195211
  ], [observationsLabel]);
195159
195212
  const selectedCount = cellColors.size;
195160
195213
  return jsxRuntimeExports.jsxs(TitleInfo, { title: title2, info: `${commaNumber(cellsCount)} ${pluralize(observationsLabel, cellsCount)} × ${commaNumber(genesCount)} ${pluralize(variablesLabel, genesCount)},
195161
- with ${commaNumber(selectedCount)} ${pluralize(observationsLabel, selectedCount)} selected`, urls: urls2, theme, removeGridComponent, isReady: isReady && !isRendering, options: jsxRuntimeExports.jsx(HeatmapOptions, { geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, tooltipsVisible, setTooltipsVisible }), children: [jsxRuntimeExports.jsx(Heatmap$1, { ref: deckRef, transpose: transpose2, viewState: { zoom: zoomX, target: [targetX2, targetY2] }, setViewState: ({ zoom: zoom2, target: target2 }) => {
195214
+ with ${commaNumber(selectedCount)} ${pluralize(observationsLabel, selectedCount)} selected`, urls: urls2, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, isReady: isReady && !isRendering, options: jsxRuntimeExports.jsx(HeatmapOptions, { geneExpressionColormap, setGeneExpressionColormap, geneExpressionColormapRange, setGeneExpressionColormapRange, tooltipsVisible, setTooltipsVisible }), children: [jsxRuntimeExports.jsx(Heatmap$1, { ref: deckRef, transpose: transpose2, viewState: { zoom: zoomX, target: [targetX2, targetY2] }, setViewState: ({ zoom: zoom2, target: target2 }) => {
195162
195215
  setZoomX(zoom2);
195163
195216
  setZoomY(zoom2);
195164
195217
  setTargetX(target2[0]);
@@ -199564,7 +199617,7 @@ function FeatureListOptions(props2) {
199564
199617
  } }) })] })] }) : null] });
199565
199618
  }
199566
199619
  function FeatureListSubscriber(props2) {
199567
- const { coordinationScopes, removeGridComponent, variablesLabelOverride, theme, title: titleOverride, enableMultiSelect = false, showTable = false, sort: sort2 = "alphabetical", sortKey: sortKey2 = null } = props2;
199620
+ const { coordinationScopes, removeGridComponent, variablesLabelOverride, theme, title: titleOverride, enableMultiSelect = false, showTable = false, sort: sort2 = "alphabetical", sortKey: sortKey2 = null, closeButtonVisible, downloadButtonVisible } = props2;
199568
199621
  const loaders = useLoaders();
199569
199622
  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);
199570
199623
  const variablesLabel = variablesLabelOverride || featureType;
@@ -199599,6 +199652,8 @@ function FeatureListSubscriber(props2) {
199599
199652
  // even though this no longer uses the TitleInfo component's
199600
199653
  // scroll css (SelectableTable is virtual scroll).
199601
199654
  isScroll: true,
199655
+ closeButtonVisible,
199656
+ downloadButtonVisible,
199602
199657
  removeGridComponent,
199603
199658
  isReady,
199604
199659
  urls: urls2,
@@ -200379,6 +200434,8 @@ function ImageAddButton({ imageOptions, handleImageAdd }) {
200379
200434
  const LayerControllerMemoized = React__default.memo(forwardRef((props2, ref2) => {
200380
200435
  const {
200381
200436
  title: title2,
200437
+ closeButtonVisible,
200438
+ downloadButtonVisible,
200382
200439
  removeGridComponent,
200383
200440
  theme,
200384
200441
  isReady,
@@ -200424,7 +200481,7 @@ const LayerControllerMemoized = React__default.memo(forwardRef((props2, ref2) =>
200424
200481
  enableLayerButtonsWithOneLayer
200425
200482
  } = props2;
200426
200483
  const shouldShowImageLayerButton = Boolean(enableLayerButtonsWithOneLayer || (imageLayerLoaders == null ? void 0 : imageLayerLoaders.length) > 1);
200427
- return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, removeGridComponent, theme, isReady, children: jsxRuntimeExports.jsxs("div", { className: "layer-controller-container", ref: ref2, children: [moleculesLayer && jsxRuntimeExports.jsx(VectorLayerController, { label: "Molecules", layerType: "molecules", layer: moleculesLayer, handleLayerChange: setMoleculesLayer }, `${dataset}-molecules`), cellsLayer && obsSegmentationsType === "polygon" && jsxRuntimeExports.jsx(VectorLayerController, { label: `${capitalize$2(obsType)} Segmentations`, layerType: "cells", layer: cellsLayer, handleLayerChange: setCellsLayer }, `${dataset}-cells`), cellsLayer && obsSegmentationsType === "bitmask" && cellsLayer.map((layer, i2) => {
200484
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, isReady, children: jsxRuntimeExports.jsxs("div", { className: "layer-controller-container", ref: ref2, children: [moleculesLayer && jsxRuntimeExports.jsx(VectorLayerController, { label: "Molecules", layerType: "molecules", layer: moleculesLayer, handleLayerChange: setMoleculesLayer }, `${dataset}-molecules`), cellsLayer && obsSegmentationsType === "polygon" && jsxRuntimeExports.jsx(VectorLayerController, { label: `${capitalize$2(obsType)} Segmentations`, layerType: "cells", layer: cellsLayer, handleLayerChange: setCellsLayer }, `${dataset}-cells`), cellsLayer && obsSegmentationsType === "bitmask" && cellsLayer.map((layer, i2) => {
200428
200485
  const { index: index2 } = layer;
200429
200486
  const loader2 = segmentationLayerLoaders == null ? void 0 : segmentationLayerLoaders[index2];
200430
200487
  const layerMeta = segmentationLayerMeta == null ? void 0 : segmentationLayerMeta[index2];
@@ -200539,7 +200596,7 @@ const LayerControllerMemoized = React__default.memo(forwardRef((props2, ref2) =>
200539
200596
  }), shouldShowImageLayerButton ? jsxRuntimeExports.jsx(Grid$3, { item: true, children: jsxRuntimeExports.jsx(ImageAddButton, { imageOptions: imageLayerMeta, handleImageAdd }) }) : null] }) });
200540
200597
  }));
200541
200598
  function LayerControllerSubscriber$1(props2) {
200542
- const { coordinationScopes, removeGridComponent, theme, title: title2 = "Spatial Layers", disable3d, globalDisable3d, disableChannelsIfRgbDetected, enableLayerButtonsWithOneLayer } = props2;
200599
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: title2 = "Spatial Layers", disable3d, globalDisable3d, disableChannelsIfRgbDetected, enableLayerButtonsWithOneLayer } = props2;
200543
200600
  const loaders = useLoaders();
200544
200601
  const [{ dataset, obsType, spatialImageLayer: rasterLayers, spatialSegmentationLayer: cellsLayer, spatialPointLayer: moleculesLayer }, { setSpatialImageLayer: setRasterLayers, setSpatialSegmentationLayer: setCellsLayer, setSpatialPointLayer: setMoleculesLayer, setSpatialTargetX: setTargetX, setSpatialTargetY: setTargetY, setSpatialTargetZ: setTargetZ, setSpatialRotationX: setRotationX, setSpatialRotationOrbit: setRotationOrbit, setSpatialZoom: setZoom }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.LAYER_CONTROLLER], coordinationScopes);
200545
200602
  const [{ imageLayerCallbacks, areLoadingImageChannels, segmentationLayerCallbacks, areLoadingSegmentationChannels }, { setImageLayerCallbacks, setAreLoadingImageChannels, setSegmentationLayerCallbacks, setAreLoadingSegmentationChannels }] = useAuxiliaryCoordination(COMPONENT_COORDINATION_TYPES.layerController, coordinationScopes);
@@ -200596,6 +200653,8 @@ function LayerControllerSubscriber$1(props2) {
200596
200653
  return jsxRuntimeExports.jsx(LayerControllerMemoized, {
200597
200654
  ref: layerControllerRef,
200598
200655
  title: title2,
200656
+ closeButtonVisible,
200657
+ downloadButtonVisible,
200599
200658
  removeGridComponent,
200600
200659
  theme,
200601
200660
  isReady,
@@ -202232,7 +202291,7 @@ function LayerController(props2) {
202232
202291
  })] });
202233
202292
  }
202234
202293
  function LayerControllerSubscriber(props2) {
202235
- const { coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, removeGridComponent, theme, title: title2 = "Spatial Layers" } = props2;
202294
+ const { coordinationScopes: coordinationScopesRaw, coordinationScopesBy: coordinationScopesByRaw, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: title2 = "Spatial Layers" } = props2;
202236
202295
  const loaders = useLoaders();
202237
202296
  const coordinationScopes = useCoordinationScopes(coordinationScopesRaw);
202238
202297
  const coordinationScopesBy = useCoordinationScopesBy(coordinationScopes, coordinationScopesByRaw);
@@ -202333,7 +202392,7 @@ function LayerControllerSubscriber(props2) {
202333
202392
  obsSegmentationsDataStatus,
202334
202393
  imageDataStatus
202335
202394
  ]);
202336
- return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, removeGridComponent, theme, isReady, children: jsxRuntimeExports.jsx(LayerController, { theme, coordinationScopesRaw, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, images: imageData, imageLayerScopes, imageLayerCoordination, targetT, targetZ, setTargetT, setTargetZ, spatialRenderingMode, setSpatialRenderingMode, imageChannelScopesByLayer, imageChannelCoordination, spotLayerScopes, spotLayerCoordination, pointLayerScopes, pointLayerCoordination }) });
202395
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, isScroll: true, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, isReady, children: jsxRuntimeExports.jsx(LayerController, { theme, coordinationScopesRaw, segmentationLayerScopes, segmentationLayerCoordination, segmentationChannelScopesByLayer, segmentationChannelCoordination, images: imageData, imageLayerScopes, imageLayerCoordination, targetT, targetZ, setTargetT, setTargetZ, spatialRenderingMode, setSpatialRenderingMode, imageChannelScopesByLayer, imageChannelCoordination, spotLayerScopes, spotLayerCoordination, pointLayerScopes, pointLayerCoordination }) });
202337
202396
  }
202338
202397
  const useStyles$3 = makeStyles(() => ({
202339
202398
  info: {
@@ -202367,7 +202426,7 @@ function Status(props2) {
202367
202426
  return messages2;
202368
202427
  }
202369
202428
  function StatusSubscriber(props2) {
202370
- const { coordinationScopes, removeGridComponent, theme, title: title2 = "Status" } = props2;
202429
+ const { coordinationScopes, closeButtonVisible, removeGridComponent, theme, title: title2 = "Status" } = props2;
202371
202430
  const [{ obsHighlight: cellHighlight, featureHighlight: geneHighlight, moleculeHighlight }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.STATUS], coordinationScopes);
202372
202431
  const warn2 = useWarning();
202373
202432
  const infos = [
@@ -202376,7 +202435,7 @@ function StatusSubscriber(props2) {
202376
202435
  ...moleculeHighlight ? [`Hovered gene ${moleculeHighlight}`] : []
202377
202436
  ];
202378
202437
  const info2 = infos.join("; ");
202379
- return jsxRuntimeExports.jsx(TitleInfo, { title: title2, theme, removeGridComponent, isScroll: true, isReady: true, children: jsxRuntimeExports.jsx(Status, { warn: warn2, info: info2 }) });
202438
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, theme, closeButtonVisible, removeGridComponent, isScroll: true, isReady: true, children: jsxRuntimeExports.jsx(Status, { warn: warn2, info: info2 }) });
202380
202439
  }
202381
202440
  window.higlassTracks = window.higlassTracks || {};
202382
202441
  window.higlassTracksByType = window.higlassTracksByType || {};
@@ -202628,7 +202687,7 @@ const HIGLASS_BUNDLE_VERSION = "1.11.13";
202628
202687
  const HIGLASS_CSS_URL = `https://unpkg.com/${HIGLASS_PKG_NAME}@${HIGLASS_BUNDLE_VERSION}/dist/hglib.css`;
202629
202688
  register({ dataFetcher: ZarrMultivecDataFetcher_default, config: ZarrMultivecDataFetcher_default.config }, { pluginType: "dataFetcher" });
202630
202689
  const LazyHiGlassComponent = React__default.lazy(async () => {
202631
- const { HiGlassComponent } = await import("./hglib-c31dff2a.js").then((n3) => n3.h);
202690
+ const { HiGlassComponent } = await import("./hglib-872ad77b.js").then((n3) => n3.h);
202632
202691
  return { default: HiGlassComponent };
202633
202692
  });
202634
202693
  const HG_SIZE = 800;
@@ -202757,10 +202816,10 @@ HiGlassLazy.defaultProps = {
202757
202816
  };
202758
202817
  const urls = [];
202759
202818
  function HiGlassSubscriber(props2) {
202760
- const { coordinationScopes, theme, hgViewConfig, removeGridComponent } = props2;
202819
+ const { coordinationScopes, theme, hgViewConfig, closeButtonVisible, downloadButtonVisible, removeGridComponent } = props2;
202761
202820
  const [width2, height2, containerRef] = useGridItemSize();
202762
202821
  const classes = useStyles$2();
202763
- return jsxRuntimeExports.jsx("div", { className: classes.higlassTitleWrapper, children: jsxRuntimeExports.jsx(TitleInfo, { title: "HiGlass", removeGridComponent, theme, isReady: true, urls, children: jsxRuntimeExports.jsx("div", { className: classes.higlassLazyWrapper, ref: containerRef, children: jsxRuntimeExports.jsx(HiGlassLazy, { coordinationScopes, theme, hgViewConfig, height: height2 }) }) }) });
202822
+ return jsxRuntimeExports.jsx("div", { className: classes.higlassTitleWrapper, children: jsxRuntimeExports.jsx(TitleInfo, { title: "HiGlass", closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, isReady: true, urls, children: jsxRuntimeExports.jsx("div", { className: classes.higlassLazyWrapper, ref: containerRef, children: jsxRuntimeExports.jsx(HiGlassLazy, { coordinationScopes, theme, hgViewConfig, height: height2 }) }) }) });
202764
202823
  }
202765
202824
  const REFERENCE_TILESETS = {
202766
202825
  hg38: {
@@ -202781,7 +202840,7 @@ const REFERENCE_TILESETS = {
202781
202840
  }
202782
202841
  };
202783
202842
  function GenomicProfilesSubscriber(props2) {
202784
- const { coordinationScopes, theme, removeGridComponent, profileTrackUidKey = "path", profileTrackNameKey = null, higlassServer = "https://higlass.io/api/v1", assembly = "hg38", title: title2 = "Genomic Profiles" } = props2;
202843
+ const { coordinationScopes, theme, closeButtonVisible, downloadButtonVisible, removeGridComponent, profileTrackUidKey = "path", profileTrackNameKey = null, higlassServer = "https://higlass.io/api/v1", assembly = "hg38", title: title2 = "Genomic Profiles" } = props2;
202785
202844
  const [width2, height2, containerRef] = useGridItemSize();
202786
202845
  const loaders = useLoaders();
202787
202846
  const [{ dataset, obsSetColor: cellSetColor, obsSetSelection: cellSetSelection }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.GENOMIC_PROFILES], coordinationScopes);
@@ -202912,7 +202971,7 @@ function GenomicProfilesSubscriber(props2) {
202912
202971
  assembly
202913
202972
  ]);
202914
202973
  const classes = useStyles$2();
202915
- return jsxRuntimeExports.jsx("div", { className: classes.higlassTitleWrapper, children: jsxRuntimeExports.jsx(TitleInfo, { title: title2, removeGridComponent, theme, isReady, urls: urls2, children: jsxRuntimeExports.jsx("div", { className: classes.higlassLazyWrapper, ref: containerRef, children: hgViewConfig ? jsxRuntimeExports.jsx(HiGlassLazy, { coordinationScopes, theme, hgViewConfig, height: height2 }) : null }) }) });
202974
+ return jsxRuntimeExports.jsx("div", { className: classes.higlassTitleWrapper, children: jsxRuntimeExports.jsx(TitleInfo, { title: title2, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, isReady, urls: urls2, children: jsxRuntimeExports.jsx("div", { className: classes.higlassLazyWrapper, ref: containerRef, children: hgViewConfig ? jsxRuntimeExports.jsx(HiGlassLazy, { coordinationScopes, theme, hgViewConfig, height: height2 }) : null }) }) });
202916
202975
  }
202917
202976
  function CellSetExpressionPlotOptions(props2) {
202918
202977
  const { featureValueTransform, setFeatureValueTransform, featureValueTransformCoefficient, setFeatureValueTransformCoefficient, transformOptions } = props2;
@@ -259551,7 +259610,7 @@ function useExpressionByCellSet(expressionData, obsIndex, cellSets, additionalCe
259551
259610
  }
259552
259611
  function CellSetExpressionPlotSubscriber(props2) {
259553
259612
  var _a3;
259554
- const { coordinationScopes, removeGridComponent, theme } = props2;
259613
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme } = props2;
259555
259614
  const classes = useStyles();
259556
259615
  const loaders = useLoaders();
259557
259616
  const [{ dataset, obsType, featureType, featureValueType, featureSelection: geneSelection, featureValueTransform, featureValueTransformCoefficient, obsSetSelection: cellSetSelection, obsSetColor: cellSetColor, additionalObsSets: additionalCellSets }, { setFeatureValueTransform, setFeatureValueTransformCoefficient }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.OBS_SET_FEATURE_VALUE_DISTRIBUTION], coordinationScopes);
@@ -259575,7 +259634,7 @@ function CellSetExpressionPlotSubscriber(props2) {
259575
259634
  const [expressionArr, setArr, expressionMax] = useExpressionByCellSet(expressionData, obsIndex, cellSets, additionalCellSets, geneSelection, cellSetSelection, cellSetColor, featureValueTransform, featureValueTransformCoefficient, theme);
259576
259635
  const firstGeneSelected = geneSelection && geneSelection.length >= 1 ? (featureLabelsMap == null ? void 0 : featureLabelsMap.get(geneSelection[0])) || geneSelection[0] : null;
259577
259636
  const selectedTransformName = (_a3 = transformOptions.find((o2) => o2.value === featureValueTransform)) == null ? void 0 : _a3.name;
259578
- return jsxRuntimeExports.jsx(TitleInfo, { title: `Expression by ${capitalize$2(obsType)} Set${firstGeneSelected ? ` (${firstGeneSelected})` : ""}`, removeGridComponent, urls: urls2, theme, isReady, options: jsxRuntimeExports.jsx(CellSetExpressionPlotOptions, { featureValueTransform, setFeatureValueTransform, featureValueTransformCoefficient, setFeatureValueTransformCoefficient, transformOptions }), children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: expressionArr ? jsxRuntimeExports.jsx(CellSetExpressionPlot, { domainMax: expressionMax, colors: setArr, data: expressionArr, theme, width: width2, height: height2, obsType, featureValueType, featureValueTransformName: selectedTransformName }) : jsxRuntimeExports.jsxs("span", { children: ["Select a ", featureType, "."] }) }) });
259637
+ return jsxRuntimeExports.jsx(TitleInfo, { title: `Expression by ${capitalize$2(obsType)} Set${firstGeneSelected ? ` (${firstGeneSelected})` : ""}`, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, options: jsxRuntimeExports.jsx(CellSetExpressionPlotOptions, { featureValueTransform, setFeatureValueTransform, featureValueTransformCoefficient, setFeatureValueTransformCoefficient, transformOptions }), children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: expressionArr ? jsxRuntimeExports.jsx(CellSetExpressionPlot, { domainMax: expressionMax, colors: setArr, data: expressionArr, theme, width: width2, height: height2, obsType, featureValueType, featureValueTransformName: selectedTransformName }) : jsxRuntimeExports.jsxs("span", { children: ["Select a ", featureType, "."] }) }) });
259579
259638
  }
259580
259639
  function CellSetSizesPlot(props2) {
259581
259640
  const { data: rawData, theme, width: width2, height: height2, marginRight = 90, marginBottom = 120, keyLength = 36, obsType, onBarSelect } = props2;
@@ -259695,7 +259754,7 @@ function CellSetSizesPlot(props2) {
259695
259754
  return jsxRuntimeExports.jsx(VegaPlot, { data: data2, spec, signalListeners, getTooltipText });
259696
259755
  }
259697
259756
  function CellSetSizesPlotSubscriber(props2) {
259698
- const { coordinationScopes, removeGridComponent, theme, title: titleOverride } = props2;
259757
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme, title: titleOverride } = props2;
259699
259758
  const classes = useStyles();
259700
259759
  const loaders = useLoaders();
259701
259760
  const [{ dataset, obsType, obsSetSelection: cellSetSelection, obsSetColor: cellSetColor, additionalObsSets: additionalCellSets, obsSetExpansion: cellSetExpansion }, { setObsSetSelection: setCellSetSelection, setObsSetColor: setCellSetColor }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.OBS_SET_SIZES], coordinationScopes);
@@ -259742,7 +259801,7 @@ function CellSetSizesPlotSubscriber(props2) {
259742
259801
  setCellSetSelection([...cellSetSelection, setNamePath]);
259743
259802
  }
259744
259803
  };
259745
- return jsxRuntimeExports.jsx(TitleInfo, { title: title2, removeGridComponent, urls: urls2, theme, isReady, children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: jsxRuntimeExports.jsx(CellSetSizesPlot, { data: data2, onBarSelect, theme, width: width2, height: height2, obsType }) }) });
259804
+ return jsxRuntimeExports.jsx(TitleInfo, { title: title2, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: jsxRuntimeExports.jsx(CellSetSizesPlot, { data: data2, onBarSelect, theme, width: width2, height: height2, obsType }) }) });
259746
259805
  }
259747
259806
  function ExpressionHistogram(props2) {
259748
259807
  const { geneSelection, data: data2, theme, width: width2, height: height2, marginRight = 90, marginBottom = 50, onSelect } = props2;
@@ -259800,7 +259859,7 @@ function ExpressionHistogram(props2) {
259800
259859
  return jsxRuntimeExports.jsx(VegaPlot, { data: data2, signalListeners, spec });
259801
259860
  }
259802
259861
  function ExpressionHistogramSubscriber(props2) {
259803
- const { coordinationScopes, removeGridComponent, theme } = props2;
259862
+ const { coordinationScopes, closeButtonVisible, downloadButtonVisible, removeGridComponent, theme } = props2;
259804
259863
  const classes = useStyles();
259805
259864
  const loaders = useLoaders();
259806
259865
  const [{ dataset, obsType, featureType, featureValueType, featureSelection: geneSelection, additionalObsSets: additionalCellSets, obsSetColor: cellSetColor }, { setAdditionalObsSets: setAdditionalCellSets, setObsSetColor: setCellSetColor, setObsColorEncoding: setCellColorEncoding, setObsSetSelection: setCellSetSelection }] = useCoordination(COMPONENT_COORDINATION_TYPES[ViewType$1.FEATURE_VALUE_HISTOGRAM], coordinationScopes);
@@ -259849,7 +259908,7 @@ function ExpressionHistogramSubscriber(props2) {
259849
259908
  setCellSetSelection,
259850
259909
  firstGeneSelected
259851
259910
  ]);
259852
- return jsxRuntimeExports.jsx(TitleInfo, { title: `Expression Histogram${firstGeneSelected ? ` (${firstGeneSelected})` : ""}`, removeGridComponent, urls: urls2, theme, isReady, children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: jsxRuntimeExports.jsx(ExpressionHistogram, { geneSelection, onSelect, data: data2, theme, width: width2, height: height2 }) }) });
259911
+ return jsxRuntimeExports.jsx(TitleInfo, { title: `Expression Histogram${firstGeneSelected ? ` (${firstGeneSelected})` : ""}`, closeButtonVisible, downloadButtonVisible, removeGridComponent, urls: urls2, theme, isReady, children: jsxRuntimeExports.jsx("div", { ref: containerRef, className: classes.vegaContainer, children: jsxRuntimeExports.jsx(ExpressionHistogram, { geneSelection, onSelect, data: data2, theme, width: width2, height: height2 }) }) });
259853
259912
  }
259854
259913
  class CsvSource {
259855
259914
  constructor({ url, requestInit: requestInit2 }) {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { f, P, h, d, V, z } from "./index-bef59a57.js";
1
+ import { f, P, h, d, V, z } from "./index-e1f3ff32.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-bef59a57.js";
1
+ import { B as BaseDecoder } from "./index-e1f3ff32.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-bef59a57.js";
2
+ import { g as getDefaultExportFromCjs, B as BaseDecoder, L as LercParameters, a as LercAddCompression } from "./index-e1f3ff32.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-bef59a57.js";
1
+ import { B as BaseDecoder } from "./index-e1f3ff32.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-bef59a57.js";
1
+ import { B as BaseDecoder } from "./index-e1f3ff32.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-bef59a57.js";
1
+ import { B as BaseDecoder } from "./index-e1f3ff32.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-bef59a57.js";
1
+ import { B as BaseDecoder } from "./index-e1f3ff32.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.3.0",
3
+ "version": "3.3.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.3.0",
22
- "@vitessce/description": "3.3.0",
23
- "@vitessce/csv": "3.3.0",
24
- "@vitessce/feature-list": "3.3.0",
25
- "@vitessce/heatmap": "3.3.0",
26
- "@vitessce/genomic-profiles": "3.3.0",
27
- "@vitessce/json": "3.3.0",
28
- "@vitessce/layer-controller": "3.3.0",
29
- "@vitessce/layer-controller-beta": "3.3.0",
30
- "@vitessce/ome-tiff": "3.3.0",
31
- "@vitessce/obs-sets-manager": "3.3.0",
32
- "@vitessce/plugins": "3.3.0",
33
- "@vitessce/scatterplot-embedding": "3.3.0",
34
- "@vitessce/scatterplot-gating": "3.3.0",
35
- "@vitessce/schemas": "3.3.0",
36
- "@vitessce/spatial": "3.3.0",
37
- "@vitessce/spatial-beta": "3.3.0",
38
- "@vitessce/statistical-plots": "3.3.0",
39
- "@vitessce/vit-s": "3.3.0",
40
- "@vitessce/status": "3.3.0",
41
- "@vitessce/zarr": "3.3.0"
21
+ "@vitessce/constants-internal": "3.3.2",
22
+ "@vitessce/csv": "3.3.2",
23
+ "@vitessce/description": "3.3.2",
24
+ "@vitessce/feature-list": "3.3.2",
25
+ "@vitessce/genomic-profiles": "3.3.2",
26
+ "@vitessce/heatmap": "3.3.2",
27
+ "@vitessce/json": "3.3.2",
28
+ "@vitessce/layer-controller": "3.3.2",
29
+ "@vitessce/layer-controller-beta": "3.3.2",
30
+ "@vitessce/obs-sets-manager": "3.3.2",
31
+ "@vitessce/ome-tiff": "3.3.2",
32
+ "@vitessce/plugins": "3.3.2",
33
+ "@vitessce/scatterplot-embedding": "3.3.2",
34
+ "@vitessce/scatterplot-gating": "3.3.2",
35
+ "@vitessce/schemas": "3.3.2",
36
+ "@vitessce/spatial": "3.3.2",
37
+ "@vitessce/spatial-beta": "3.3.2",
38
+ "@vitessce/statistical-plots": "3.3.2",
39
+ "@vitessce/status": "3.3.2",
40
+ "@vitessce/vit-s": "3.3.2",
41
+ "@vitessce/zarr": "3.3.2"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/react": "^18.0.28",