@vitessce/vit-s 3.9.5 → 3.9.7

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.
package/dist/index.js CHANGED
@@ -17852,6 +17852,11 @@ const CloseIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
17852
17852
  const CloudDownloadIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
17853
17853
  d: "M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96M17 13l-5 5-5-5h3V9h4v4z"
17854
17854
  }), "CloudDownload");
17855
+ const MenuBookIcon = createSvgIcon([/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
17856
+ d: "M21 5c-1.11-.35-2.33-.5-3.5-.5-1.95 0-4.05.4-5.5 1.5-1.45-1.1-3.55-1.5-5.5-1.5S2.45 4.9 1 6v14.65c0 .25.25.5.5.5.1 0 .15-.05.25-.05C3.1 20.45 5.05 20 6.5 20c1.95 0 4.05.4 5.5 1.5 1.35-.85 3.8-1.5 5.5-1.5 1.65 0 3.35.3 4.75 1.05.1.05.15.05.25.05.25 0 .5-.25.5-.5V6c-.6-.45-1.25-.75-2-1m0 13.5c-1.1-.35-2.3-.5-3.5-.5-1.7 0-4.15.65-5.5 1.5V8c1.35-.85 3.8-1.5 5.5-1.5 1.2 0 2.4.15 3.5.5z"
17857
+ }, "0"), /* @__PURE__ */ jsxRuntimeExports.jsx("path", {
17858
+ d: "M17.5 10.5c.88 0 1.73.09 2.5.26V9.24c-.79-.15-1.64-.24-2.5-.24-1.7 0-3.24.29-4.5.83v1.66c1.13-.64 2.7-.99 4.5-.99M13 12.49v1.66c1.13-.64 2.7-.99 4.5-.99.88 0 1.73.09 2.5.26V11.9c-.79-.15-1.64-.24-2.5-.24-1.7 0-3.24.3-4.5.83m4.5 1.84c-1.7 0-3.24.29-4.5.83v1.66c1.13-.64 2.7-.99 4.5-.99.88 0 1.73.09 2.5.26v-1.52c-.79-.16-1.64-.24-2.5-.24"
17859
+ }, "1")], "MenuBook");
17855
17860
  const HelpIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
17856
17861
  d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 17h-2v-2h2zm2.07-7.75-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25"
17857
17862
  }), "Help");
@@ -33975,6 +33980,7 @@ const FileType$1 = {
33975
33980
  // Neuroglancer
33976
33981
  // Precomputed (mesh) format
33977
33982
  OBS_SEGMENTATIONS_NG_PRECOMPUTED: "obsSegmentations.ng-precomputed",
33983
+ OBS_POINTS_NG_ANNOTATIONS: "obsPoints.ng-annotations",
33978
33984
  // New file types to support old file types:
33979
33985
  // - cells.json
33980
33986
  OBS_EMBEDDING_CELLS_JSON: "obsEmbedding.cells.json",
@@ -34208,6 +34214,7 @@ const STATUS = {
34208
34214
  [FileType$1.FEATURE_LABELS_MUDATA_ZARR]: DataType$1.FEATURE_LABELS,
34209
34215
  [FileType$1.OBS_SEGMENTATIONS_GLB]: DataType$1.OBS_SEGMENTATIONS,
34210
34216
  [FileType$1.OBS_SEGMENTATIONS_NG_PRECOMPUTED]: DataType$1.OBS_SEGMENTATIONS,
34217
+ [FileType$1.OBS_POINTS_NG_ANNOTATIONS]: DataType$1.OBS_POINTS,
34211
34218
  [FileType$1.IMAGE_SPATIALDATA_ZARR]: DataType$1.IMAGE,
34212
34219
  [FileType$1.LABELS_SPATIALDATA_ZARR]: DataType$1.OBS_SEGMENTATIONS,
34213
34220
  [FileType$1.SHAPES_SPATIALDATA_ZARR]: DataType$1.OBS_SEGMENTATIONS,
@@ -34427,6 +34434,8 @@ const AUTO_INDEPENDENT_COORDINATION_TYPES = [
34427
34434
  ];
34428
34435
  ({
34429
34436
  [ViewType$1.NEUROGLANCER]: [
34437
+ CoordinationType$1.META_COORDINATION_SCOPES,
34438
+ CoordinationType$1.META_COORDINATION_SCOPES_BY,
34430
34439
  CoordinationType$1.DATASET,
34431
34440
  CoordinationType$1.SPATIAL_TARGET_X,
34432
34441
  CoordinationType$1.SPATIAL_TARGET_Y,
@@ -34448,7 +34457,26 @@ const AUTO_INDEPENDENT_COORDINATION_TYPES = [
34448
34457
  CoordinationType$1.OBS_COLOR_ENCODING,
34449
34458
  CoordinationType$1.EMBEDDING_TYPE,
34450
34459
  CoordinationType$1.ADDITIONAL_OBS_SETS,
34451
- CoordinationType$1.TOOLTIPS_VISIBLE
34460
+ CoordinationType$1.TOOLTIPS_VISIBLE,
34461
+ CoordinationType$1.FILE_UID,
34462
+ CoordinationType$1.IMAGE_LAYER,
34463
+ CoordinationType$1.SEGMENTATION_LAYER,
34464
+ CoordinationType$1.IMAGE_CHANNEL,
34465
+ CoordinationType$1.SEGMENTATION_CHANNEL,
34466
+ CoordinationType$1.POINT_LAYER,
34467
+ CoordinationType$1.FEATURE_COLOR,
34468
+ CoordinationType$1.FEATURE_FILTER_MODE,
34469
+ CoordinationType$1.FEATURE_HIGHLIGHT,
34470
+ CoordinationType$1.FEATURE_SELECTION,
34471
+ CoordinationType$1.FEATURE_VALUE_COLORMAP,
34472
+ CoordinationType$1.FEATURE_VALUE_COLORMAP_RANGE,
34473
+ CoordinationType$1.SPATIAL_LAYER_COLOR,
34474
+ CoordinationType$1.SPATIAL_LAYER_OPACITY,
34475
+ CoordinationType$1.SPATIAL_LAYER_VISIBLE,
34476
+ CoordinationType$1.SPATIAL_CHANNEL_COLOR,
34477
+ CoordinationType$1.SPATIAL_CHANNEL_OPACITY,
34478
+ CoordinationType$1.SPATIAL_CHANNEL_VISIBLE,
34479
+ CoordinationType$1.LEGEND_VISIBLE
34452
34480
  ],
34453
34481
  [ViewType$1.SCATTERPLOT]: [
34454
34482
  CoordinationType$1.DATASET,
@@ -35086,7 +35114,7 @@ const AUTO_INDEPENDENT_COORDINATION_TYPES = [
35086
35114
  CoordinationType$1.HIERARCHY_LEVELS
35087
35115
  ]
35088
35116
  });
35089
- const version = "3.9.5";
35117
+ const version = "3.9.7";
35090
35118
  const META_VERSION = {
35091
35119
  version
35092
35120
  };
@@ -35567,14 +35595,23 @@ z.object({
35567
35595
  z.object({
35568
35596
  // TODO: Should this explicitly specify sharded vs. unsharded?
35569
35597
  // Or can/should that be inferred from the data?
35570
- dimensionX: z.number(),
35571
- dimensionY: z.number(),
35572
- dimensionZ: z.number(),
35573
- dimensionUnit: z.enum(["nm", "um", "µm", "mm", "cm", "m"]),
35598
+ // Note: None of these make sense to specify at the file level, since they
35599
+ // are global camera settings that would apply to all layers.
35600
+ // Intead, initial values should be set via the usual coordination space mechanism,
35601
+ // and the NeuroglancerSubscriber should handle conversion into values to pass to Neuroglancer.
35602
+ // dimensionX: z.number(),
35603
+ // dimensionY: z.number(),
35604
+ // dimensionZ: z.number(),
35605
+ // dimensionUnit: z.enum(['nm', 'um', 'µm', 'mm', 'cm', 'm']),
35574
35606
  // TODO: should the following be passed via coordination types instead?
35575
- projectionScale: z.number(),
35576
- position: z.array(z.number()).length(3),
35577
- projectionOrientation: z.array(z.number()).length(4)
35607
+ // projectionScale: z.number(),
35608
+ // position: z.array(z.number()).length(3),
35609
+ // projectionOrientation: z.array(z.number()).length(4),
35610
+ }).partial().nullable();
35611
+ z.object({
35612
+ projectionAnnotationSpacing: z.number(),
35613
+ featureIndexProp: z.string().optional().describe("The name of the Neuroglancer AnnotationProperty containing feature IDs. For example, specify 'gene' to use prop_gene() in the Neuroglancer shader code."),
35614
+ pointIndexProp: z.string().optional().describe("The name of the Neuroglancer AnnotationProperty containing point IDs. For example, specify 'point_id' to use prop_point_id() in the Neuroglancer shader code.")
35578
35615
  }).partial().nullable();
35579
35616
  z.object({
35580
35617
  obsIndex: z.string(),
@@ -46470,7 +46507,7 @@ function DownloadOptions(props) {
46470
46507
  ) : null;
46471
46508
  }
46472
46509
  function HelpButton(props) {
46473
- const { helpText } = props;
46510
+ const { helpText, guideUrl } = props;
46474
46511
  const [open2, setOpen] = useState(false);
46475
46512
  const { classes } = useStyles$1();
46476
46513
  return /* @__PURE__ */ React__default.createElement(
@@ -46485,7 +46522,20 @@ function HelpButton(props) {
46485
46522
  "aria-label": "Open help info",
46486
46523
  withPaper: false
46487
46524
  },
46488
- /* @__PURE__ */ React__default.createElement("span", { className: classes.helpTextSpan }, helpText)
46525
+ /* @__PURE__ */ React__default.createElement("span", { className: classes.helpTextSpan }, helpText, guideUrl ? /* @__PURE__ */ React__default.createElement(
46526
+ IconButton,
46527
+ {
46528
+ component: "a",
46529
+ href: guideUrl,
46530
+ target: "_blank",
46531
+ rel: "noopener noreferrer",
46532
+ size: "small",
46533
+ className: classes.iconButton,
46534
+ title: "Open Navigation Guide",
46535
+ "aria-label": "Open navigation guide"
46536
+ },
46537
+ /* @__PURE__ */ React__default.createElement(MenuBookIcon, null)
46538
+ ) : null)
46489
46539
  );
46490
46540
  }
46491
46541
  function ErrorInfo(props) {
@@ -46548,7 +46598,8 @@ function TitleInfo(props) {
46548
46598
  downloadButtonVisible = true,
46549
46599
  helpText,
46550
46600
  withPadding = true,
46551
- errors: errorsProp
46601
+ errors: errorsProp,
46602
+ guideUrl
46552
46603
  } = props;
46553
46604
  const errors = errorsProp == null ? void 0 : errorsProp.filter(Boolean);
46554
46605
  const { classes } = useTitleStyles();
@@ -46573,7 +46624,8 @@ function TitleInfo(props) {
46573
46624
  ) : null, helpText ? /* @__PURE__ */ React__default.createElement(
46574
46625
  HelpButton,
46575
46626
  {
46576
- helpText
46627
+ helpText,
46628
+ guideUrl
46577
46629
  }
46578
46630
  ) : null, closeButtonVisible && removeGridComponent ? /* @__PURE__ */ React__default.createElement(
46579
46631
  ClosePaneButton,
@@ -1 +1 @@
1
- {"version":3,"file":"TitleInfo.d.ts","sourceRoot":"","sources":["../src/TitleInfo.js"],"names":[],"mappings":"AAmNA,mDAwEC"}
1
+ {"version":3,"file":"TitleInfo.d.ts","sourceRoot":"","sources":["../src/TitleInfo.js"],"names":[],"mappings":"AAqOA,mDAyEC"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useState, useMemo } from 'react';
3
3
  import clsx from 'clsx';
4
- import { makeStyles, MenuItem, IconButton, Link, List, Alert, CloudDownload as CloudDownloadIcon, ArrowDropDown as ArrowDropDownIcon, ArrowDropUp as ArrowDropUpIcon, Settings as SettingsIcon, Close as CloseIcon, Help as HelpIcon, Warning as WarningIcon, } from '@vitessce/styles';
4
+ import { makeStyles, MenuItem, IconButton, Link, List, Alert, CloudDownload as CloudDownloadIcon, ArrowDropDown as ArrowDropDownIcon, ArrowDropUp as ArrowDropUpIcon, Settings as SettingsIcon, Close as CloseIcon, Help as HelpIcon, Warning as WarningIcon, MenuBook as MenuBookIcon, } from '@vitessce/styles';
5
5
  import { TOOLTIP_ANCESTOR } from './classNames.js';
6
6
  import LoadingIndicator from './LoadingIndicator.js';
7
7
  import { PopperMenu } from './shared-mui/components.js';
@@ -80,10 +80,10 @@ function DownloadOptions(props) {
80
80
  return (urls && urls.length ? (_jsx(PopperMenu, { open: open, setOpen: setOpen, buttonIcon: buttonIcon, buttonClassName: classes.iconButton, placement: "bottom-end", title: "Download Options", "aria-label": "Open download options menu", children: urls.map(({ url, name }) => (_jsx(MenuItem, { dense: true, "aria-label": `Click to download ${name}`, children: _jsxs(Link, { underline: "always", href: url, target: "_blank", rel: "noopener", className: classes.downloadLink, children: ["Download ", name] }) }, `${url}_${name}`))) })) : null);
81
81
  }
82
82
  function HelpButton(props) {
83
- const { helpText } = props;
83
+ const { helpText, guideUrl } = props;
84
84
  const [open, setOpen] = useState(false);
85
85
  const { classes } = useStyles();
86
- return (_jsx(PopperMenu, { open: open, setOpen: setOpen, buttonIcon: _jsx(HelpIcon, {}), buttonClassName: classes.iconButton, placement: "bottom-end", title: "Help Info", "aria-label": "Open help info", withPaper: false, children: _jsx("span", { className: classes.helpTextSpan, children: helpText }) }));
86
+ return (_jsx(PopperMenu, { open: open, setOpen: setOpen, buttonIcon: _jsx(HelpIcon, {}), buttonClassName: classes.iconButton, placement: "bottom-end", title: "Help Info", "aria-label": "Open help info", withPaper: false, children: _jsxs("span", { className: classes.helpTextSpan, children: [helpText, guideUrl ? (_jsx(IconButton, { component: "a", href: guideUrl, target: "_blank", rel: "noopener noreferrer", size: "small", className: classes.iconButton, title: "Open Navigation Guide", "aria-label": "Open navigation guide", children: _jsx(MenuBookIcon, {}) })) : null] }) }));
87
87
  }
88
88
  function ErrorInfo(props) {
89
89
  const { errors } = props;
@@ -99,13 +99,13 @@ function ClosePaneButton(props) {
99
99
  return (_jsx(IconButton, { onClick: removeGridComponent, size: "small", className: classes.iconButton, title: "Close View", "aria-label": "Close panel button", children: _jsx(CloseIcon, {}) }));
100
100
  }
101
101
  export function TitleInfo(props) {
102
- const { title, info, children, isScroll, isSpatial, removeGridComponent, urls, isReady, options, closeButtonVisible = true, downloadButtonVisible = true, helpText, withPadding = true, errors: errorsProp, } = props;
102
+ const { title, info, children, isScroll, isSpatial, removeGridComponent, urls, isReady, options, closeButtonVisible = true, downloadButtonVisible = true, helpText, withPadding = true, errors: errorsProp, guideUrl, } = props;
103
103
  const errors = errorsProp?.filter(Boolean);
104
104
  const { classes } = useTitleStyles();
105
105
  const hasInfoText = Boolean(info);
106
106
  return (
107
107
  // d-flex without wrapping div is not always full height; I don't understand the root cause.
108
- _jsxs(_Fragment, { children: [_jsxs("div", { className: classes.title, role: "banner", children: [_jsx("div", { className: classes.titleLeft, role: "heading", "aria-level": "1", children: title }), _jsxs("div", { className: classes.titleButtons, role: "toolbar", "aria-label": "Plot options and controls", children: [_jsx(PlotOptions, { options: options }), downloadButtonVisible ? (_jsx(DownloadOptions, { urls: urls })) : null, Array.isArray(errors) && errors.length > 0 ? (_jsx(ErrorInfo, { errors: errors })) : null, helpText ? (_jsx(HelpButton, { helpText: helpText })) : null, closeButtonVisible && removeGridComponent ? (_jsx(ClosePaneButton, { removeGridComponent: removeGridComponent })) : null] })] }), _jsxs("div", { className: clsx(TOOLTIP_ANCESTOR, classes.card, {
108
+ _jsxs(_Fragment, { children: [_jsxs("div", { className: classes.title, role: "banner", children: [_jsx("div", { className: classes.titleLeft, role: "heading", "aria-level": "1", children: title }), _jsxs("div", { className: classes.titleButtons, role: "toolbar", "aria-label": "Plot options and controls", children: [_jsx(PlotOptions, { options: options }), downloadButtonVisible ? (_jsx(DownloadOptions, { urls: urls })) : null, Array.isArray(errors) && errors.length > 0 ? (_jsx(ErrorInfo, { errors: errors })) : null, helpText ? (_jsx(HelpButton, { helpText: helpText, guideUrl: guideUrl })) : null, closeButtonVisible && removeGridComponent ? (_jsx(ClosePaneButton, { removeGridComponent: removeGridComponent })) : null] })] }), _jsxs("div", { className: clsx(TOOLTIP_ANCESTOR, classes.card, {
109
109
  [classes.scrollCard]: isScroll,
110
110
  [classes.spatialCard]: isSpatial,
111
111
  [classes.noScrollCard]: !isScroll && !isSpatial,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/vit-s",
3
- "version": "3.9.5",
3
+ "version": "3.9.7",
4
4
  "author": "HIDIVE Lab at HMS",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -31,17 +31,17 @@
31
31
  "react-error-boundary": "^5.0.0",
32
32
  "@placemarkio/flat-drop-files": "^1.0.2",
33
33
  "zarrita": "0.6.1",
34
- "@vitessce/styles": "3.9.5",
35
- "@vitessce/error": "3.9.5",
36
- "@vitessce/abstract": "3.9.5",
37
- "@vitessce/plugins": "3.9.5",
38
- "@vitessce/constants-internal": "3.9.5",
39
- "@vitessce/schemas": "3.9.5",
40
- "@vitessce/sets-utils": "3.9.5",
41
- "@vitessce/utils": "3.9.5",
42
- "@vitessce/zarr-utils": "3.9.5",
43
- "@vitessce/config": "3.9.5",
44
- "@vitessce/globals": "3.9.5"
34
+ "@vitessce/styles": "3.9.7",
35
+ "@vitessce/abstract": "3.9.7",
36
+ "@vitessce/error": "3.9.7",
37
+ "@vitessce/plugins": "3.9.7",
38
+ "@vitessce/schemas": "3.9.7",
39
+ "@vitessce/utils": "3.9.7",
40
+ "@vitessce/constants-internal": "3.9.7",
41
+ "@vitessce/sets-utils": "3.9.7",
42
+ "@vitessce/config": "3.9.7",
43
+ "@vitessce/zarr-utils": "3.9.7",
44
+ "@vitessce/globals": "3.9.7"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@testing-library/jest-dom": "^6.6.3",
@@ -50,7 +50,7 @@
50
50
  "react-dom": "18.3.1",
51
51
  "vite": "^7.0.0",
52
52
  "vitest": "^3.1.4",
53
- "@vitessce/types": "3.9.5"
53
+ "@vitessce/types": "3.9.7"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
package/src/TitleInfo.js CHANGED
@@ -14,6 +14,7 @@ import {
14
14
  Close as CloseIcon,
15
15
  Help as HelpIcon,
16
16
  Warning as WarningIcon,
17
+ MenuBook as MenuBookIcon,
17
18
  } from '@vitessce/styles';
18
19
 
19
20
  import { TOOLTIP_ANCESTOR } from './classNames.js';
@@ -141,7 +142,7 @@ function DownloadOptions(props) {
141
142
  }
142
143
 
143
144
  function HelpButton(props) {
144
- const { helpText } = props;
145
+ const { helpText, guideUrl } = props;
145
146
  const [open, setOpen] = useState(false);
146
147
  const { classes } = useStyles();
147
148
  return (
@@ -155,7 +156,23 @@ function HelpButton(props) {
155
156
  aria-label="Open help info"
156
157
  withPaper={false}
157
158
  >
158
- <span className={classes.helpTextSpan}>{helpText}</span>
159
+ <span className={classes.helpTextSpan}>
160
+ {helpText}
161
+ {guideUrl ? (
162
+ <IconButton
163
+ component="a"
164
+ href={guideUrl}
165
+ target="_blank"
166
+ rel="noopener noreferrer"
167
+ size="small"
168
+ className={classes.iconButton}
169
+ title="Open Navigation Guide"
170
+ aria-label="Open navigation guide"
171
+ >
172
+ <MenuBookIcon />
173
+ </IconButton>
174
+ ) : null}
175
+ </span>
159
176
  </PopperMenu>
160
177
  );
161
178
  }
@@ -209,11 +226,12 @@ function ClosePaneButton(props) {
209
226
  );
210
227
  }
211
228
 
229
+
212
230
  export function TitleInfo(props) {
213
231
  const {
214
232
  title, info, children, isScroll, isSpatial, removeGridComponent, urls,
215
233
  isReady, options, closeButtonVisible = true, downloadButtonVisible = true,
216
- helpText, withPadding = true, errors: errorsProp,
234
+ helpText, withPadding = true, errors: errorsProp, guideUrl,
217
235
  } = props;
218
236
 
219
237
  const errors = errorsProp?.filter(Boolean);
@@ -245,6 +263,7 @@ export function TitleInfo(props) {
245
263
  {helpText ? (
246
264
  <HelpButton
247
265
  helpText={helpText}
266
+ guideUrl={guideUrl}
248
267
  />
249
268
  ) : null}
250
269
  {closeButtonVisible && removeGridComponent ? (