@vitessce/gl 3.3.2 → 3.3.3

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.
@@ -10767,8 +10767,8 @@ function acos$1(radians2, result) {
10767
10767
  function atan$1(radians2, result) {
10768
10768
  return map(radians2, (angle2) => Math.atan(angle2), result);
10769
10769
  }
10770
- function clamp$1(value, min, max) {
10771
- return map(value, (value2) => Math.max(min, Math.min(max, value2)));
10770
+ function clamp$1(value, min, max2) {
10771
+ return map(value, (value2) => Math.max(min, Math.min(max2, value2)));
10772
10772
  }
10773
10773
  function lerp$6(a2, b, t2) {
10774
10774
  if (isArray$3(a2)) {
@@ -11055,9 +11055,9 @@ class MathArray extends _extendableBuiltin(Array) {
11055
11055
  divideScalar(a2) {
11056
11056
  return this.multiplyByScalar(1 / a2);
11057
11057
  }
11058
- clampScalar(min, max) {
11058
+ clampScalar(min, max2) {
11059
11059
  for (let i2 = 0; i2 < this.ELEMENTS; ++i2) {
11060
- this[i2] = Math.min(Math.max(this[i2], min), max);
11060
+ this[i2] = Math.min(Math.max(this[i2], min), max2);
11061
11061
  }
11062
11062
  return this.check();
11063
11063
  }
@@ -17190,8 +17190,8 @@ function mod$1(value, divisor) {
17190
17190
  function lerp$1(start, end, step) {
17191
17191
  return step * end + (1 - step) * start;
17192
17192
  }
17193
- function clamp(x2, min, max) {
17194
- return x2 < min ? min : x2 > max ? max : x2;
17193
+ function clamp(x2, min, max2) {
17194
+ return x2 < min ? min : x2 > max2 ? max2 : x2;
17195
17195
  }
17196
17196
  function ieLog2(x2) {
17197
17197
  return Math.log(x2) * Math.LOG2E;
@@ -26945,17 +26945,17 @@ class DataColumn {
26945
26945
  const len2 = numInstances * size;
26946
26946
  if (value && len2 && value.length >= len2) {
26947
26947
  const min = new Array(size).fill(Infinity);
26948
- const max = new Array(size).fill(-Infinity);
26948
+ const max2 = new Array(size).fill(-Infinity);
26949
26949
  for (let i2 = 0; i2 < len2; ) {
26950
26950
  for (let j = 0; j < size; j++) {
26951
26951
  const v = value[i2++];
26952
26952
  if (v < min[j])
26953
26953
  min[j] = v;
26954
- if (v > max[j])
26955
- max[j] = v;
26954
+ if (v > max2[j])
26955
+ max2[j] = v;
26956
26956
  }
26957
26957
  }
26958
- result = [min, max];
26958
+ result = [min, max2];
26959
26959
  }
26960
26960
  }
26961
26961
  this.state.bounds = result;
@@ -53039,10 +53039,10 @@ class GroupNode extends ScenegraphNode {
53039
53039
  if (!bounds2) {
53040
53040
  return;
53041
53041
  }
53042
- const [min, max] = bounds2;
53043
- const center2 = new Vector3(min).add(max).divide([2, 2, 2]);
53042
+ const [min, max2] = bounds2;
53043
+ const center2 = new Vector3(min).add(max2).divide([2, 2, 2]);
53044
53044
  worldMatrix.transformAsPoint(center2, center2);
53045
- const halfSize = new Vector3(max).subtract(min).divide([2, 2, 2]);
53045
+ const halfSize = new Vector3(max2).subtract(min).divide([2, 2, 2]);
53046
53046
  worldMatrix.transformAsVector(halfSize, halfSize);
53047
53047
  for (let v = 0; v < 8; v++) {
53048
53048
  const position = new Vector3(v & 1 ? -1 : 1, v & 2 ? -1 : 1, v & 4 ? -1 : 1).multiply(halfSize).add(center2);
@@ -61991,7 +61991,7 @@ class Tile {
61991
61991
  const { errors } = this;
61992
61992
  let numVertices = 0;
61993
61993
  let numTriangles = 0;
61994
- const max = size - 1;
61994
+ const max2 = size - 1;
61995
61995
  indices.fill(0);
61996
61996
  function countElements(ax, ay, bx, by, cx, cy) {
61997
61997
  const mx = ax + bx >> 1;
@@ -62006,8 +62006,8 @@ class Tile {
62006
62006
  numTriangles++;
62007
62007
  }
62008
62008
  }
62009
- countElements(0, 0, max, max, max, 0);
62010
- countElements(max, max, 0, 0, 0, max);
62009
+ countElements(0, 0, max2, max2, max2, 0);
62010
+ countElements(max2, max2, 0, 0, 0, max2);
62011
62011
  const vertices = new Uint16Array(numVertices * 2);
62012
62012
  const triangles = new Uint32Array(numTriangles * 3);
62013
62013
  let triIndex = 0;
@@ -62032,8 +62032,8 @@ class Tile {
62032
62032
  triangles[triIndex++] = c;
62033
62033
  }
62034
62034
  }
62035
- processTriangle(0, 0, max, max, max, 0);
62036
- processTriangle(max, max, 0, 0, 0, max);
62035
+ processTriangle(0, 0, max2, max2, max2, 0);
62036
+ processTriangle(max2, max2, 0, 0, 0, max2);
62037
62037
  return { vertices, triangles };
62038
62038
  }
62039
62039
  }
@@ -103842,24 +103842,24 @@ const geoKeyNames = {
103842
103842
  4098: "VerticalDatumGeoKey",
103843
103843
  4099: "VerticalUnitsGeoKey"
103844
103844
  };
103845
- function fromWhiteIsZero(raster, max) {
103845
+ function fromWhiteIsZero(raster, max2) {
103846
103846
  const { width, height } = raster;
103847
103847
  const rgbRaster = new Uint8Array(width * height * 3);
103848
103848
  let value;
103849
103849
  for (let i2 = 0, j = 0; i2 < raster.length; ++i2, j += 3) {
103850
- value = 256 - raster[i2] / max * 256;
103850
+ value = 256 - raster[i2] / max2 * 256;
103851
103851
  rgbRaster[j] = value;
103852
103852
  rgbRaster[j + 1] = value;
103853
103853
  rgbRaster[j + 2] = value;
103854
103854
  }
103855
103855
  return rgbRaster;
103856
103856
  }
103857
- function fromBlackIsZero(raster, max) {
103857
+ function fromBlackIsZero(raster, max2) {
103858
103858
  const { width, height } = raster;
103859
103859
  const rgbRaster = new Uint8Array(width * height * 3);
103860
103860
  let value;
103861
103861
  for (let i2 = 0, j = 0; i2 < raster.length; ++i2, j += 3) {
103862
- value = raster[i2] / max * 256;
103862
+ value = raster[i2] / max2 * 256;
103863
103863
  rgbRaster[j] = value;
103864
103864
  rgbRaster[j + 1] = value;
103865
103865
  rgbRaster[j + 2] = value;
@@ -103952,16 +103952,16 @@ async function getDecoder(fileDirectory) {
103952
103952
  const Decoder = await importFn();
103953
103953
  return new Decoder(fileDirectory);
103954
103954
  }
103955
- addDecoder([void 0, 1], () => import("./raw-c78b844f.js").then((m) => m.default));
103956
- addDecoder(5, () => import("./lzw-04637fdd.js").then((m) => m.default));
103955
+ addDecoder([void 0, 1], () => import("./raw-93e6f264.js").then((m) => m.default));
103956
+ addDecoder(5, () => import("./lzw-d020357b.js").then((m) => m.default));
103957
103957
  addDecoder(6, () => {
103958
103958
  throw new Error("old style JPEG compression is not supported.");
103959
103959
  });
103960
- addDecoder(7, () => import("./jpeg-201a0839.js").then((m) => m.default));
103961
- addDecoder([8, 32946], () => import("./deflate-73d5335b.js").then((m) => m.default));
103962
- addDecoder(32773, () => import("./packbits-c3fd53d2.js").then((m) => m.default));
103963
- addDecoder(34887, () => import("./lerc-4c2149fc.js").then((m) => m.default));
103964
- addDecoder(50001, () => import("./webimage-2dd56bbe.js").then((m) => m.default));
103960
+ addDecoder(7, () => import("./jpeg-2919bc92.js").then((m) => m.default));
103961
+ addDecoder([8, 32946], () => import("./deflate-8259e5d4.js").then((m) => m.default));
103962
+ addDecoder(32773, () => import("./packbits-2ad8f627.js").then((m) => m.default));
103963
+ addDecoder(34887, () => import("./lerc-95858d36.js").then((m) => m.default));
103964
+ addDecoder(50001, () => import("./webimage-33d58a8b.js").then((m) => m.default));
103965
103965
  function copyNewSize(array, width, height, samplesPerPixel = 1) {
103966
103966
  return new (Object.getPrototypeOf(array)).constructor(width * height * samplesPerPixel);
103967
103967
  }
@@ -104672,14 +104672,14 @@ class GeoTIFFImage {
104672
104672
  };
104673
104673
  const { fileDirectory } = this;
104674
104674
  const raster = await this.readRasters(subOptions);
104675
- const max = 2 ** this.fileDirectory.BitsPerSample[0];
104675
+ const max2 = 2 ** this.fileDirectory.BitsPerSample[0];
104676
104676
  let data;
104677
104677
  switch (pi2) {
104678
104678
  case photometricInterpretations.WhiteIsZero:
104679
- data = fromWhiteIsZero(raster, max);
104679
+ data = fromWhiteIsZero(raster, max2);
104680
104680
  break;
104681
104681
  case photometricInterpretations.BlackIsZero:
104682
- data = fromBlackIsZero(raster, max);
104682
+ data = fromBlackIsZero(raster, max2);
104683
104683
  break;
104684
104684
  case photometricInterpretations.Palette:
104685
104685
  data = fromPalette(raster, fileDirectory.ColorMap);
@@ -110180,9 +110180,9 @@ const buf2binstring = (buf, len2) => {
110180
110180
  }
110181
110181
  return result;
110182
110182
  };
110183
- var buf2string = (buf, max) => {
110183
+ var buf2string = (buf, max2) => {
110184
110184
  let i2, out;
110185
- const len2 = max || buf.length;
110185
+ const len2 = max2 || buf.length;
110186
110186
  const utf16buf = new Array(len2 * 2);
110187
110187
  for (out = 0, i2 = 0; i2 < len2; ) {
110188
110188
  let c = buf[i2++];
@@ -110215,22 +110215,22 @@ var buf2string = (buf, max) => {
110215
110215
  }
110216
110216
  return buf2binstring(utf16buf, out);
110217
110217
  };
110218
- var utf8border = (buf, max) => {
110219
- max = max || buf.length;
110220
- if (max > buf.length) {
110221
- max = buf.length;
110218
+ var utf8border = (buf, max2) => {
110219
+ max2 = max2 || buf.length;
110220
+ if (max2 > buf.length) {
110221
+ max2 = buf.length;
110222
110222
  }
110223
- let pos = max - 1;
110223
+ let pos = max2 - 1;
110224
110224
  while (pos >= 0 && (buf[pos] & 192) === 128) {
110225
110225
  pos--;
110226
110226
  }
110227
110227
  if (pos < 0) {
110228
- return max;
110228
+ return max2;
110229
110229
  }
110230
110230
  if (pos === 0) {
110231
- return max;
110231
+ return max2;
110232
110232
  }
110233
- return pos + _utf8len[buf[pos]] > max ? pos : max;
110233
+ return pos + _utf8len[buf[pos]] > max2 ? pos : max2;
110234
110234
  };
110235
110235
  var strings = {
110236
110236
  string2buf,
@@ -110780,7 +110780,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
110780
110780
  const bits = opts2.bits;
110781
110781
  let len2 = 0;
110782
110782
  let sym = 0;
110783
- let min = 0, max = 0;
110783
+ let min = 0, max2 = 0;
110784
110784
  let root2 = 0;
110785
110785
  let curr = 0;
110786
110786
  let drop = 0;
@@ -110807,21 +110807,21 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
110807
110807
  count2[lens2[lens_index + sym]]++;
110808
110808
  }
110809
110809
  root2 = bits;
110810
- for (max = MAXBITS; max >= 1; max--) {
110811
- if (count2[max] !== 0) {
110810
+ for (max2 = MAXBITS; max2 >= 1; max2--) {
110811
+ if (count2[max2] !== 0) {
110812
110812
  break;
110813
110813
  }
110814
110814
  }
110815
- if (root2 > max) {
110816
- root2 = max;
110815
+ if (root2 > max2) {
110816
+ root2 = max2;
110817
110817
  }
110818
- if (max === 0) {
110818
+ if (max2 === 0) {
110819
110819
  table[table_index++] = 1 << 24 | 64 << 16 | 0;
110820
110820
  table[table_index++] = 1 << 24 | 64 << 16 | 0;
110821
110821
  opts2.bits = 1;
110822
110822
  return 0;
110823
110823
  }
110824
- for (min = 1; min < max; min++) {
110824
+ for (min = 1; min < max2; min++) {
110825
110825
  if (count2[min] !== 0) {
110826
110826
  break;
110827
110827
  }
@@ -110837,7 +110837,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
110837
110837
  return -1;
110838
110838
  }
110839
110839
  }
110840
- if (left > 0 && (type === CODES || max !== 1)) {
110840
+ if (left > 0 && (type === CODES || max2 !== 1)) {
110841
110841
  return -1;
110842
110842
  }
110843
110843
  offs[1] = 0;
@@ -110906,7 +110906,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
110906
110906
  }
110907
110907
  sym++;
110908
110908
  if (--count2[len2] === 0) {
110909
- if (len2 === max) {
110909
+ if (len2 === max2) {
110910
110910
  break;
110911
110911
  }
110912
110912
  len2 = lens2[lens_index + work[sym]];
@@ -110918,7 +110918,7 @@ const inflate_table = (type, lens2, lens_index, codes, table, table_index, work,
110918
110918
  next3 += min;
110919
110919
  curr = len2 - drop;
110920
110920
  left = 1 << curr;
110921
- while (curr + drop < max) {
110921
+ while (curr + drop < max2) {
110922
110922
  left -= count2[curr + drop];
110923
110923
  if (left <= 0) {
110924
110924
  break;
@@ -113452,14 +113452,14 @@ const DTYPE_LOOKUP$1 = {
113452
113452
  function getChannelStats(arr) {
113453
113453
  let len2 = arr.length;
113454
113454
  let min = Infinity;
113455
- let max = -Infinity;
113455
+ let max2 = -Infinity;
113456
113456
  let total = 0;
113457
113457
  while (len2--) {
113458
113458
  if (arr[len2] < min) {
113459
113459
  min = arr[len2];
113460
113460
  }
113461
- if (arr[len2] > max) {
113462
- max = arr[len2];
113461
+ if (arr[len2] > max2) {
113462
+ max2 = arr[len2];
113463
113463
  }
113464
113464
  total += arr[len2];
113465
113465
  }
@@ -113497,7 +113497,7 @@ function getChannelStats(arr) {
113497
113497
  q1,
113498
113498
  q3,
113499
113499
  median,
113500
- domain: [min, max],
113500
+ domain: [min, max2],
113501
113501
  contrastLimits
113502
113502
  };
113503
113503
  }
@@ -120966,14 +120966,14 @@ class ZodString extends ZodType {
120966
120966
  return min;
120967
120967
  }
120968
120968
  get maxLength() {
120969
- let max = null;
120969
+ let max2 = null;
120970
120970
  for (const ch of this._def.checks) {
120971
120971
  if (ch.kind === "max") {
120972
- if (max === null || ch.value < max)
120973
- max = ch.value;
120972
+ if (max2 === null || ch.value < max2)
120973
+ max2 = ch.value;
120974
120974
  }
120975
120975
  }
120976
- return max;
120976
+ return max2;
120977
120977
  }
120978
120978
  }
120979
120979
  ZodString.create = (params) => {
@@ -121188,20 +121188,20 @@ class ZodNumber extends ZodType {
121188
121188
  return min;
121189
121189
  }
121190
121190
  get maxValue() {
121191
- let max = null;
121191
+ let max2 = null;
121192
121192
  for (const ch of this._def.checks) {
121193
121193
  if (ch.kind === "max") {
121194
- if (max === null || ch.value < max)
121195
- max = ch.value;
121194
+ if (max2 === null || ch.value < max2)
121195
+ max2 = ch.value;
121196
121196
  }
121197
121197
  }
121198
- return max;
121198
+ return max2;
121199
121199
  }
121200
121200
  get isInt() {
121201
121201
  return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util.isInteger(ch.value));
121202
121202
  }
121203
121203
  get isFinite() {
121204
- let max = null, min = null;
121204
+ let max2 = null, min = null;
121205
121205
  for (const ch of this._def.checks) {
121206
121206
  if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") {
121207
121207
  return true;
@@ -121209,11 +121209,11 @@ class ZodNumber extends ZodType {
121209
121209
  if (min === null || ch.value > min)
121210
121210
  min = ch.value;
121211
121211
  } else if (ch.kind === "max") {
121212
- if (max === null || ch.value < max)
121213
- max = ch.value;
121212
+ if (max2 === null || ch.value < max2)
121213
+ max2 = ch.value;
121214
121214
  }
121215
121215
  }
121216
- return Number.isFinite(min) && Number.isFinite(max);
121216
+ return Number.isFinite(min) && Number.isFinite(max2);
121217
121217
  }
121218
121218
  }
121219
121219
  ZodNumber.create = (params) => {
@@ -121371,14 +121371,14 @@ class ZodBigInt extends ZodType {
121371
121371
  return min;
121372
121372
  }
121373
121373
  get maxValue() {
121374
- let max = null;
121374
+ let max2 = null;
121375
121375
  for (const ch of this._def.checks) {
121376
121376
  if (ch.kind === "max") {
121377
- if (max === null || ch.value < max)
121378
- max = ch.value;
121377
+ if (max2 === null || ch.value < max2)
121378
+ max2 = ch.value;
121379
121379
  }
121380
121380
  }
121381
- return max;
121381
+ return max2;
121382
121382
  }
121383
121383
  }
121384
121384
  ZodBigInt.create = (params) => {
@@ -121506,14 +121506,14 @@ class ZodDate extends ZodType {
121506
121506
  return min != null ? new Date(min) : null;
121507
121507
  }
121508
121508
  get maxDate() {
121509
- let max = null;
121509
+ let max2 = null;
121510
121510
  for (const ch of this._def.checks) {
121511
121511
  if (ch.kind === "max") {
121512
- if (max === null || ch.value < max)
121513
- max = ch.value;
121512
+ if (max2 === null || ch.value < max2)
121513
+ max2 = ch.value;
121514
121514
  }
121515
121515
  }
121516
- return max != null ? new Date(max) : null;
121516
+ return max2 != null ? new Date(max2) : null;
121517
121517
  }
121518
121518
  }
121519
121519
  ZodDate.create = (params) => {
@@ -125872,7 +125872,7 @@ var toComparators_1 = toComparators$1;
125872
125872
  const SemVer$4 = semver;
125873
125873
  const Range$7 = requireRange();
125874
125874
  const maxSatisfying$1 = (versions, range2, options) => {
125875
- let max = null;
125875
+ let max2 = null;
125876
125876
  let maxSV = null;
125877
125877
  let rangeObj = null;
125878
125878
  try {
@@ -125882,13 +125882,13 @@ const maxSatisfying$1 = (versions, range2, options) => {
125882
125882
  }
125883
125883
  versions.forEach((v) => {
125884
125884
  if (rangeObj.test(v)) {
125885
- if (!max || maxSV.compare(v) === -1) {
125886
- max = v;
125887
- maxSV = new SemVer$4(max, options);
125885
+ if (!max2 || maxSV.compare(v) === -1) {
125886
+ max2 = v;
125887
+ maxSV = new SemVer$4(max2, options);
125888
125888
  }
125889
125889
  }
125890
125890
  });
125891
- return max;
125891
+ return max2;
125892
125892
  };
125893
125893
  var maxSatisfying_1 = maxSatisfying$1;
125894
125894
  const SemVer$3 = semver;
@@ -126073,17 +126073,17 @@ var simplify = (versions, range2, options) => {
126073
126073
  set.push([first, null]);
126074
126074
  }
126075
126075
  const ranges2 = [];
126076
- for (const [min, max] of set) {
126077
- if (min === max) {
126076
+ for (const [min, max2] of set) {
126077
+ if (min === max2) {
126078
126078
  ranges2.push(min);
126079
- } else if (!max && min === v[0]) {
126079
+ } else if (!max2 && min === v[0]) {
126080
126080
  ranges2.push("*");
126081
- } else if (!max) {
126081
+ } else if (!max2) {
126082
126082
  ranges2.push(`>=${min}`);
126083
126083
  } else if (min === v[0]) {
126084
- ranges2.push(`<=${max}`);
126084
+ ranges2.push(`<=${max2}`);
126085
126085
  } else {
126086
- ranges2.push(`${min} - ${max}`);
126086
+ ranges2.push(`${min} - ${max2}`);
126087
126087
  }
126088
126088
  }
126089
126089
  const simplified = ranges2.join(" || ");
@@ -126377,7 +126377,9 @@ const FileType$1 = {
126377
126377
  OBS_SEGMENTATIONS_JSON: "obsSegmentations.json",
126378
126378
  OBS_SETS_CSV: "obsSets.csv",
126379
126379
  OBS_SETS_JSON: "obsSets.json",
126380
+ // OME-Zarr
126380
126381
  IMAGE_OME_ZARR: "image.ome-zarr",
126382
+ OBS_SEGMENTATIONS_OME_ZARR: "obsSegmentations.ome-zarr",
126381
126383
  // AnnData
126382
126384
  OBS_FEATURE_MATRIX_ANNDATA_ZARR: "obsFeatureMatrix.anndata.zarr",
126383
126385
  OBS_SETS_ANNDATA_ZARR: "obsSets.anndata.zarr",
@@ -126830,30 +126832,39 @@ const omeCoordinateTransformations = z.array(z.union([
126830
126832
  scale: z.array(z.number())
126831
126833
  })
126832
126834
  ]));
126833
- z.object({
126835
+ const imageOmeTiffSchema = z.object({
126834
126836
  offsetsUrl: z.string().optional(),
126835
126837
  coordinateTransformations: omeCoordinateTransformations.optional()
126836
126838
  });
126839
+ imageOmeTiffSchema.extend({
126840
+ obsTypesFromChannelNames: z.boolean().optional()
126841
+ });
126837
126842
  const imageOmeZarrSchema = z.object({
126838
126843
  coordinateTransformations: omeCoordinateTransformations.optional()
126839
126844
  });
126840
126845
  imageOmeZarrSchema.extend({
126846
+ obsTypesFromChannelNames: z.boolean().optional()
126847
+ });
126848
+ const imageSpatialdataSchema = imageOmeZarrSchema.extend({
126841
126849
  path: z.string()
126842
126850
  });
126843
- z.object({
126851
+ const obsSegmentationsSpatialdataSchema = z.object({
126852
+ // TODO: should this also extend the imageOmeZarrSchema?
126853
+ // TODO: should this be renamed labelsSpatialdataSchema?
126854
+ // TODO: support obsTypesFromChannelNames?
126844
126855
  path: z.string()
126845
126856
  });
126846
126857
  z.object({
126847
126858
  path: z.string()
126848
126859
  });
126849
- z.object({
126860
+ const obsSpotsSpatialdataSchema = z.object({
126850
126861
  path: z.string(),
126851
126862
  tablePath: z.string().optional().describe("The path to a table which annotates the spots. If available but not specified, the spot identifiers may not be aligned with associated tabular data as expected.")
126852
126863
  });
126853
- annDataObsFeatureMatrix.extend({
126864
+ const obsFeatureMatrixSpatialdataSchema = annDataObsFeatureMatrix.extend({
126854
126865
  region: z.string().describe("The name of a region to use to filter instances (i.e., rows) in the table").optional()
126855
126866
  });
126856
- z.object({
126867
+ const obsSetsSpatialdataSchema = z.object({
126857
126868
  region: z.string().describe("The name of a region to use to filter instances (i.e., rows) in the table").optional(),
126858
126869
  tablePath: z.string().optional().describe("The path to a table which contains the index for the set values."),
126859
126870
  obsSets: annDataObsSets
@@ -126916,6 +126927,19 @@ z.object({
126916
126927
  z.array(annDataConvenienceObsEmbeddingItem)
126917
126928
  ])
126918
126929
  }).partial();
126930
+ z.object({
126931
+ // TODO: should `image` be a special schema
126932
+ // to allow specifying fileUid (like for embeddingType)?
126933
+ image: imageSpatialdataSchema,
126934
+ // TODO: should this be a special schema
126935
+ // to allow specifying fileUid (like for embeddingType)?
126936
+ labels: obsSegmentationsSpatialdataSchema,
126937
+ obsFeatureMatrix: obsFeatureMatrixSpatialdataSchema,
126938
+ obsSpots: obsSpotsSpatialdataSchema,
126939
+ // TODO: obsPoints
126940
+ // TODO: obsLocations
126941
+ obsSets: obsSetsSpatialdataSchema
126942
+ }).partial();
126919
126943
  z.object({
126920
126944
  obsLabelsTypes: z.array(z.string()).optional(),
126921
126945
  embeddingTypes: z.array(z.string()).optional()
@@ -127284,14 +127308,14 @@ var tinycolor = { exports: {} };
127284
127308
  r2 = bound01(r2, 255);
127285
127309
  g2 = bound01(g2, 255);
127286
127310
  b = bound01(b, 255);
127287
- var max = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
127288
- var h, s2, l2 = (max + min) / 2;
127289
- if (max == min) {
127311
+ var max2 = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
127312
+ var h, s2, l2 = (max2 + min) / 2;
127313
+ if (max2 == min) {
127290
127314
  h = s2 = 0;
127291
127315
  } else {
127292
- var d = max - min;
127293
- s2 = l2 > 0.5 ? d / (2 - max - min) : d / (max + min);
127294
- switch (max) {
127316
+ var d = max2 - min;
127317
+ s2 = l2 > 0.5 ? d / (2 - max2 - min) : d / (max2 + min);
127318
+ switch (max2) {
127295
127319
  case r2:
127296
127320
  h = (g2 - b) / d + (g2 < b ? 6 : 0);
127297
127321
  break;
@@ -127339,14 +127363,14 @@ var tinycolor = { exports: {} };
127339
127363
  r2 = bound01(r2, 255);
127340
127364
  g2 = bound01(g2, 255);
127341
127365
  b = bound01(b, 255);
127342
- var max = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
127343
- var h, s2, v = max;
127344
- var d = max - min;
127345
- s2 = max === 0 ? 0 : d / max;
127346
- if (max == min) {
127366
+ var max2 = mathMax(r2, g2, b), min = mathMin(r2, g2, b);
127367
+ var h, s2, v = max2;
127368
+ var d = max2 - min;
127369
+ s2 = max2 === 0 ? 0 : d / max2;
127370
+ if (max2 == min) {
127347
127371
  h = 0;
127348
127372
  } else {
127349
- switch (max) {
127373
+ switch (max2) {
127350
127374
  case r2:
127351
127375
  h = (g2 - b) / d + (g2 < b ? 6 : 0);
127352
127376
  break;
@@ -127743,19 +127767,19 @@ var tinycolor = { exports: {} };
127743
127767
  }
127744
127768
  return a2;
127745
127769
  }
127746
- function bound01(n2, max) {
127770
+ function bound01(n2, max2) {
127747
127771
  if (isOnePointZero(n2)) {
127748
127772
  n2 = "100%";
127749
127773
  }
127750
127774
  var processPercent = isPercentage(n2);
127751
- n2 = mathMin(max, mathMax(0, parseFloat(n2)));
127775
+ n2 = mathMin(max2, mathMax(0, parseFloat(n2)));
127752
127776
  if (processPercent) {
127753
- n2 = parseInt(n2 * max, 10) / 100;
127777
+ n2 = parseInt(n2 * max2, 10) / 100;
127754
127778
  }
127755
- if (Math2.abs(n2 - max) < 1e-6) {
127779
+ if (Math2.abs(n2 - max2) < 1e-6) {
127756
127780
  return 1;
127757
127781
  }
127758
- return n2 % max / parseFloat(max);
127782
+ return n2 % max2 / parseFloat(max2);
127759
127783
  }
127760
127784
  function clamp01(val) {
127761
127785
  return mathMin(1, mathMax(0, val));
@@ -128814,10 +128838,10 @@ var json2csv_umd = { exports: {} };
128814
128838
  };
128815
128839
  Buffer3.prototype.inspect = function inspect2() {
128816
128840
  var str = "";
128817
- var max = INSPECT_MAX_BYTES;
128841
+ var max2 = INSPECT_MAX_BYTES;
128818
128842
  if (this.length > 0) {
128819
- str = this.toString("hex", 0, max).match(/.{2}/g).join(" ");
128820
- if (this.length > max)
128843
+ str = this.toString("hex", 0, max2).match(/.{2}/g).join(" ");
128844
+ if (this.length > max2)
128821
128845
  str += " ... ";
128822
128846
  }
128823
128847
  return "<Buffer " + str + ">";
@@ -129383,10 +129407,10 @@ var json2csv_umd = { exports: {} };
129383
129407
  checkOffset(offset, 8, this.length);
129384
129408
  return read(this, offset, false, 52, 8);
129385
129409
  };
129386
- function checkInt(buf, value, offset, ext, max, min) {
129410
+ function checkInt(buf, value, offset, ext, max2, min) {
129387
129411
  if (!internalIsBuffer(buf))
129388
129412
  throw new TypeError('"buffer" argument must be a Buffer instance');
129389
- if (value > max || value < min)
129413
+ if (value > max2 || value < min)
129390
129414
  throw new RangeError('"value" argument is out of bounds');
129391
129415
  if (offset + ext > buf.length)
129392
129416
  throw new RangeError("Index out of range");
@@ -129611,7 +129635,7 @@ var json2csv_umd = { exports: {} };
129611
129635
  }
129612
129636
  return offset + 4;
129613
129637
  };
129614
- function checkIEEE754(buf, value, offset, ext, max, min) {
129638
+ function checkIEEE754(buf, value, offset, ext, max2, min) {
129615
129639
  if (offset + ext > buf.length)
129616
129640
  throw new RangeError("Index out of range");
129617
129641
  if (offset < 0)
@@ -133668,18 +133692,18 @@ void main() {
133668
133692
  `;
133669
133693
  function extent(values2, valueof) {
133670
133694
  let min;
133671
- let max;
133695
+ let max2;
133672
133696
  if (valueof === void 0) {
133673
133697
  for (const value of values2) {
133674
133698
  if (value != null) {
133675
133699
  if (min === void 0) {
133676
133700
  if (value >= value)
133677
- min = max = value;
133701
+ min = max2 = value;
133678
133702
  } else {
133679
133703
  if (min > value)
133680
133704
  min = value;
133681
- if (max < value)
133682
- max = value;
133705
+ if (max2 < value)
133706
+ max2 = value;
133683
133707
  }
133684
133708
  }
133685
133709
  }
@@ -133689,36 +133713,54 @@ function extent(values2, valueof) {
133689
133713
  if ((value = valueof(value, ++index2, values2)) != null) {
133690
133714
  if (min === void 0) {
133691
133715
  if (value >= value)
133692
- min = max = value;
133716
+ min = max2 = value;
133693
133717
  } else {
133694
133718
  if (min > value)
133695
133719
  min = value;
133696
- if (max < value)
133697
- max = value;
133720
+ if (max2 < value)
133721
+ max2 = value;
133698
133722
  }
133699
133723
  }
133700
133724
  }
133701
133725
  }
133702
- return [min, max];
133726
+ return [min, max2];
133727
+ }
133728
+ function max(values2, valueof) {
133729
+ let max2;
133730
+ if (valueof === void 0) {
133731
+ for (const value of values2) {
133732
+ if (value != null && (max2 < value || max2 === void 0 && value >= value)) {
133733
+ max2 = value;
133734
+ }
133735
+ }
133736
+ } else {
133737
+ let index2 = -1;
133738
+ for (let value of values2) {
133739
+ if ((value = valueof(value, ++index2, values2)) != null && (max2 < value || max2 === void 0 && value >= value)) {
133740
+ max2 = value;
133741
+ }
133742
+ }
133743
+ }
133744
+ return max2;
133703
133745
  }
133704
133746
  function normalize(arr) {
133705
- const [min, max] = extent(arr);
133706
- const ratio = 255 / (max - min);
133747
+ const [min, max2] = extent(arr);
133748
+ const ratio = 255 / (max2 - min);
133707
133749
  const data = new Uint8Array(
133708
133750
  arr.map((i2) => Math.floor((i2 - min) * ratio))
133709
133751
  );
133710
133752
  return data;
133711
133753
  }
133712
- function multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSetColorMode, texSize) {
133754
+ function multiSetsToTextureData(multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode, texSize) {
133713
133755
  let totalValuesLength = 0;
133714
133756
  let totalColorsLength = 0;
133715
133757
  channelIsSetColorMode.forEach((isSetColorMode, channelIndex) => {
133716
- var _a2, _b, _c, _d, _e;
133758
+ var _a2, _b, _c, _d;
133717
133759
  if (isSetColorMode) {
133718
- totalValuesLength += ((_b = (_a2 = setColorValues[channelIndex]) == null ? void 0 : _a2.obsIndex) == null ? void 0 : _b.length) || 0;
133719
- totalColorsLength += (((_d = (_c = setColorValues[channelIndex]) == null ? void 0 : _c.setColors) == null ? void 0 : _d.length) || 0) * 3;
133760
+ totalColorsLength += (((_b = (_a2 = setColorValues[channelIndex]) == null ? void 0 : _a2.setColors) == null ? void 0 : _b.length) || 0) * 3;
133761
+ totalValuesLength += ((_c = setColorValues[channelIndex]) == null ? void 0 : _c.obsIndex) ? max(setColorValues[channelIndex].obsIndex.map((d) => parseInt(d))) : 0;
133720
133762
  } else {
133721
- totalValuesLength += ((_e = multiFeatureValues[channelIndex]) == null ? void 0 : _e.length) || 0;
133763
+ totalValuesLength += multiMatrixObsIndex[channelIndex] ? max(multiMatrixObsIndex[channelIndex].map((d) => parseInt(d))) : ((_d = multiFeatureValues[channelIndex]) == null ? void 0 : _d.length) || 0;
133722
133764
  }
133723
133765
  });
133724
133766
  const valueTexHeight = Math.max(2, Math.ceil(totalValuesLength / texSize));
@@ -133736,12 +133778,20 @@ function multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSet
133736
133778
  let indexOffset = 0;
133737
133779
  let colorOffset = 0;
133738
133780
  channelIsSetColorMode.forEach((isSetColorMode, channelIndex) => {
133781
+ const matrixObsIndex = multiMatrixObsIndex[channelIndex];
133782
+ const bitmaskValueIsIndex = matrixObsIndex === null;
133739
133783
  if (isSetColorMode) {
133740
133784
  const { setColorIndices, setColors, obsIndex } = setColorValues[channelIndex] || {};
133741
133785
  if (setColorIndices && setColors && obsIndex) {
133742
133786
  for (let i2 = 0; i2 < obsIndex.length; i2++) {
133743
- const colorIndex = setColorIndices.get(String(i2 + 1));
133744
- totalData[indexOffset + i2] = colorIndex === void 0 ? 0 : colorIndex + 1;
133787
+ let obsId = String(i2 + 1);
133788
+ let obsI = i2;
133789
+ if (!bitmaskValueIsIndex) {
133790
+ obsId = obsIndex[i2];
133791
+ obsI = parseInt(obsId) - 1;
133792
+ }
133793
+ const colorIndex = setColorIndices.get(obsId);
133794
+ totalData[indexOffset + obsI] = colorIndex === void 0 ? 0 : colorIndex + 1;
133745
133795
  }
133746
133796
  for (let i2 = 0; i2 < setColors.length; i2++) {
133747
133797
  const { color: [r2, g2, b] } = setColors[i2];
@@ -133756,7 +133806,16 @@ function multiSetsToTextureData(multiFeatureValues, setColorValues, channelIsSet
133756
133806
  colorOffset += (setColors == null ? void 0 : setColors.length) || 0;
133757
133807
  } else {
133758
133808
  const featureArr = multiFeatureValues[channelIndex];
133759
- totalData.set(normalize(featureArr), indexOffset);
133809
+ const normalizedFeatureArr = normalize(featureArr);
133810
+ if (!bitmaskValueIsIndex && matrixObsIndex) {
133811
+ for (let i2 = 0; i2 < matrixObsIndex.length; i2++) {
133812
+ const obsId = matrixObsIndex[i2];
133813
+ const obsI = parseInt(obsId) - 1;
133814
+ totalData[indexOffset + obsI] = normalizedFeatureArr[i2];
133815
+ }
133816
+ } else {
133817
+ totalData.set(normalizedFeatureArr, indexOffset);
133818
+ }
133760
133819
  indicesOffsets.push(indexOffset);
133761
133820
  indexOffset += featureArr.length;
133762
133821
  colorsOffsets.push(colorOffset);
@@ -133783,6 +133842,17 @@ function padWithDefault(arr, defaultValue2, padWidth) {
133783
133842
  function getColor(arr) {
133784
133843
  return arr ? arr.map((v) => v / 255) : [0, 0, 0];
133785
133844
  }
133845
+ function isEqualShallow(prevArr, nextArr) {
133846
+ if (prevArr === nextArr) {
133847
+ return true;
133848
+ }
133849
+ if (Array.isArray(prevArr) && Array.isArray(nextArr)) {
133850
+ if (prevArr.length === nextArr.length) {
133851
+ return !prevArr.some((v, i2) => v !== nextArr[i2] && (!Array.isArray(v) && !Array.isArray(nextArr[i2]) || (v.length > 0 || nextArr[i2].length > 0)));
133852
+ }
133853
+ }
133854
+ return prevArr === nextArr;
133855
+ }
133786
133856
  const defaultProps = {
133787
133857
  channelStrokeWidths: { type: "array", value: null, compare: true },
133788
133858
  channelsFilled: { type: "array", value: null, compare: true },
@@ -133792,6 +133862,7 @@ const defaultProps = {
133792
133862
  colormap: { type: "string", value: GLSL_COLORMAP_DEFAULT, compare: true },
133793
133863
  expressionData: { type: "object", value: null, compare: true },
133794
133864
  multiFeatureValues: { type: "array", value: null, compare: true },
133865
+ multiMatrixObsIndex: { type: "array", value: null, compare: true },
133795
133866
  setColorValues: { type: "array", value: null, compare: true },
133796
133867
  channelFeatureValueColormaps: { type: "array", value: null, compare: true },
133797
133868
  channelFeatureValueColormapRanges: { type: "array", value: null, compare: true },
@@ -133842,8 +133913,13 @@ class BitmaskLayer2 extends XRLayer {
133842
133913
  }
133843
133914
  updateState({ props: props2, oldProps, changeFlags }) {
133844
133915
  super.updateState({ props: props2, oldProps, changeFlags });
133845
- if (props2.multiFeatureValues !== oldProps.multiFeatureValues || props2.setColorValues !== oldProps.setColorValues || props2.channelIsSetColorMode !== oldProps.channelIsSetColorMode) {
133846
- const { multiFeatureValues, setColorValues, channelIsSetColorMode } = this.props;
133916
+ if (!isEqualShallow(props2.multiFeatureValues, oldProps.multiFeatureValues) || !isEqualShallow(props2.multiMatrixObsIndex, oldProps.multiMatrixObsIndex) || !isEqualShallow(props2.setColorValues, oldProps.setColorValues) || !isEqualShallow(props2.channelIsSetColorMode, oldProps.channelIsSetColorMode)) {
133917
+ const {
133918
+ multiFeatureValues,
133919
+ multiMatrixObsIndex,
133920
+ setColorValues,
133921
+ channelIsSetColorMode
133922
+ } = this.props;
133847
133923
  const [
133848
133924
  valueTex,
133849
133925
  colorTex,
@@ -133853,6 +133929,7 @@ class BitmaskLayer2 extends XRLayer {
133853
133929
  colorTexHeight
133854
133930
  ] = this.multiSetsToTexture(
133855
133931
  multiFeatureValues,
133932
+ multiMatrixObsIndex,
133856
133933
  setColorValues,
133857
133934
  channelIsSetColorMode
133858
133935
  );
@@ -134017,7 +134094,7 @@ class BitmaskLayer2 extends XRLayer {
134017
134094
  type: GL$1.FLOAT
134018
134095
  });
134019
134096
  }
134020
- multiSetsToTexture(multiFeatureValues, setColorValues, channelIsSetColorMode) {
134097
+ multiSetsToTexture(multiFeatureValues, multiMatrixObsIndex, setColorValues, channelIsSetColorMode) {
134021
134098
  const isWebGL2On = isWebGL2$1(this.context.gl);
134022
134099
  const [
134023
134100
  totalData,
@@ -134028,6 +134105,7 @@ class BitmaskLayer2 extends XRLayer {
134028
134105
  colorsOffsets
134029
134106
  ] = multiSetsToTextureData(
134030
134107
  multiFeatureValues,
134108
+ multiMatrixObsIndex,
134031
134109
  setColorValues,
134032
134110
  channelIsSetColorMode,
134033
134111
  MULTI_FEATURE_TEX_SIZE