@vitessce/vit-s 3.9.1 → 3.9.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.
package/dist/index.js CHANGED
@@ -19399,21 +19399,20 @@ Popper.Utils = (typeof window !== "undefined" ? window : global).PopperUtils;
19399
19399
  Popper.placements = placements;
19400
19400
  Popper.Defaults = Defaults;
19401
19401
  function createChainedFunction(...funcs) {
19402
- return funcs.reduce((acc, func) => {
19403
- if (func == null) {
19404
- return acc;
19405
- }
19406
- {
19407
- if (typeof func !== "function") {
19408
- console.error("Material-UI: Invalid Argument Type, must only provide functions, undefined, or null.");
19402
+ return funcs.reduce(
19403
+ (acc, func) => {
19404
+ if (func == null) {
19405
+ return acc;
19409
19406
  }
19407
+ return function chainedFunction(...args) {
19408
+ acc.apply(this, args);
19409
+ func.apply(this, args);
19410
+ };
19411
+ },
19412
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
19413
+ () => {
19410
19414
  }
19411
- return function chainedFunction(...args) {
19412
- acc.apply(this, args);
19413
- func.apply(this, args);
19414
- };
19415
- }, () => {
19416
- });
19415
+ );
19417
19416
  }
19418
19417
  function setRef(ref, value) {
19419
19418
  if (typeof ref === "function") {
@@ -19452,7 +19451,7 @@ function flipPlacement(placement, theme) {
19452
19451
  }
19453
19452
  }
19454
19453
  function getAnchorEl(anchorEl) {
19455
- return typeof anchorEl === "function" ? anchorEl() : anchorEl;
19454
+ return typeof anchorEl === "function" ? anchorEl(document.body) : anchorEl;
19456
19455
  }
19457
19456
  const useEnhancedEffect = typeof window !== "undefined" ? React$1.useLayoutEffect : React$1.useEffect;
19458
19457
  const defaultPopperOptions = {};
@@ -19482,25 +19481,18 @@ React$1.forwardRef((props, ref) => {
19482
19481
  }
19483
19482
  if (popperRef.current) {
19484
19483
  popperRef.current.destroy();
19485
- handlePopperRefRef.current(null);
19484
+ if (handlePopperRefRef.current) {
19485
+ setRef(handlePopperRefRef.current, null);
19486
+ }
19486
19487
  }
19487
19488
  const handlePopperUpdate = (data) => {
19488
19489
  setPlacement(data.placement);
19489
19490
  };
19490
- const resolvedAnchorEl = getAnchorEl(anchorEl);
19491
- {
19492
- if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {
19493
- const box = resolvedAnchorEl.getBoundingClientRect();
19494
- if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
19495
- console.warn([
19496
- "Material-UI: The `anchorEl` prop provided to the component is invalid.",
19497
- "The anchor element should be part of the document layout.",
19498
- "Make sure the element is present in the document or that it's not display none."
19499
- ].join("\n"));
19500
- }
19501
- }
19491
+ const anchorElement = getAnchorEl(anchorEl);
19492
+ if (!anchorElement) {
19493
+ return;
19502
19494
  }
19503
- const popper2 = new Popper(getAnchorEl(anchorEl), tooltipRef.current, {
19495
+ const popper2 = new Popper(anchorElement, tooltipRef.current, {
19504
19496
  placement: rtlPlacement,
19505
19497
  ...popperOptions,
19506
19498
  modifiers: {
@@ -19518,7 +19510,9 @@ React$1.forwardRef((props, ref) => {
19518
19510
  onCreate: createChainedFunction(handlePopperUpdate, popperOptions.onCreate),
19519
19511
  onUpdate: createChainedFunction(handlePopperUpdate, popperOptions.onUpdate)
19520
19512
  });
19521
- handlePopperRefRef.current(popper2);
19513
+ if (handlePopperRefRef.current) {
19514
+ setRef(handlePopperRefRef.current, popper2);
19515
+ }
19522
19516
  }, [anchorEl, disablePortal, modifiers2, open2, rtlPlacement, popperOptions]);
19523
19517
  const handleRef = React$1.useCallback((node2) => {
19524
19518
  setRef(ownRef, node2);
@@ -19532,7 +19526,9 @@ React$1.forwardRef((props, ref) => {
19532
19526
  return;
19533
19527
  }
19534
19528
  popperRef.current.destroy();
19535
- handlePopperRefRef.current(null);
19529
+ if (handlePopperRefRef.current) {
19530
+ setRef(handlePopperRefRef.current, null);
19531
+ }
19536
19532
  };
19537
19533
  const handleExited = () => {
19538
19534
  setExited(true);
@@ -19563,7 +19559,7 @@ React$1.forwardRef((props, ref) => {
19563
19559
  // Fix Popper.js display issue
19564
19560
  top: 0,
19565
19561
  left: 0,
19566
- display: !open2 && keepMounted && !transition ? "none" : null,
19562
+ display: !open2 && keepMounted && !transition ? "none" : void 0,
19567
19563
  ...style2
19568
19564
  }, children: typeof children === "function" ? children(childProps) : children }) });
19569
19565
  });
@@ -19578,7 +19574,7 @@ function ScopedGlobalStyles(props) {
19578
19574
  const component = useMemo(() => {
19579
19575
  const computedStyles = prependParentClassName(styles2, parentClassName);
19580
19576
  return jsxRuntimeExports.jsx(GlobalStyles$3, { styles: computedStyles });
19581
- }, [parentClassName]);
19577
+ }, [parentClassName, styles2]);
19582
19578
  return component;
19583
19579
  }
19584
19580
  function readBlobAsArrayBuffer(blob) {
@@ -34371,7 +34367,7 @@ const AUTO_INDEPENDENT_COORDINATION_TYPES = [
34371
34367
  CoordinationType$1.HIERARCHY_LEVELS
34372
34368
  ]
34373
34369
  });
34374
- const version = "3.9.1";
34370
+ const version = "3.9.2";
34375
34371
  const META_VERSION = {
34376
34372
  version
34377
34373
  };
@@ -35106,6 +35102,7 @@ const lightPalette = {
35106
35102
  gridLayoutBackground: "#FFFFFF",
35107
35103
  paperBackground: "#FFFFFF",
35108
35104
  cardBorder: "rgba(241, 241, 241, 0.125)",
35105
+ cardInfoBorder: "#ccc",
35109
35106
  tooltipText: "rgba(0, 0, 0, 0.87)"
35110
35107
  };
35111
35108
  const muiTheme = {
@@ -35131,6 +35128,7 @@ const muiTheme = {
35131
35128
  gridLayoutBackground: "#333333",
35132
35129
  paperBackground: "#2b2b2b",
35133
35130
  cardBorder: "rgba(0, 0, 0, 0.125)",
35131
+ cardInfoBorder: "#222222",
35134
35132
  tooltipText: "#FFFFFF",
35135
35133
  ...globalColors
35136
35134
  },
@@ -35140,6 +35138,7 @@ const muiTheme = {
35140
35138
  light: createTheme({
35141
35139
  palette: {
35142
35140
  ...lightPalette,
35141
+ cardInfoBorder: "#F1F1F1",
35143
35142
  ...globalColors
35144
35143
  },
35145
35144
  ...sharedThemeOptions,
@@ -35157,7 +35156,7 @@ const muiTheme = {
35157
35156
  ...globalColors
35158
35157
  },
35159
35158
  ...sharedThemeOptions,
35160
- cardBorderSize: "2px"
35159
+ cardBorderSize: "1px"
35161
35160
  })
35162
35161
  };
35163
35162
  const createStoreImpl = (createState) => {
@@ -44714,7 +44713,7 @@ const gridLayoutStyles = {
44714
44713
  },
44715
44714
  ".react-grid-item > .react-resizable-handle.react-resizable-handle-se": {
44716
44715
  bottom: "0",
44717
- right: "0",
44716
+ right: "10px",
44718
44717
  cursor: "se-resize"
44719
44718
  },
44720
44719
  ".react-grid-item > .react-resizable-handle.react-resizable-handle-nw": {
@@ -44856,18 +44855,23 @@ const useTitleStyles = makeStyles()((theme) => ({
44856
44855
  textOverflow: "ellipsis",
44857
44856
  whiteSpace: "nowrap"
44858
44857
  },
44859
- titleInfo: {
44858
+ infoText: {
44859
+ color: theme.palette.primaryForeground,
44860
44860
  width: "100%",
44861
44861
  textOverflow: "ellipsis",
44862
44862
  whiteSpace: "nowrap",
44863
44863
  overflow: "hidden",
44864
- fontSize: "80% !important",
44864
+ fontSize: "60% !important",
44865
44865
  opacity: ".8",
44866
- padding: "0 4px",
44866
+ padding: "0",
44867
44867
  justifyContent: "center",
44868
- lineHeight: "25px !important",
44869
- flexShrink: "1",
44870
- textAlign: "right !important"
44868
+ textAlign: "center !important",
44869
+ borderTop: "0px",
44870
+ borderBottom: `1px solid ${theme.palette.cardInfoBorder}`,
44871
+ borderLeft: `1px solid ${theme.palette.cardInfoBorder}`,
44872
+ borderRight: `1px solid ${theme.palette.cardInfoBorder}`,
44873
+ borderBottomLeftRadius: "4px",
44874
+ borderBottomRightRadius: "4px"
44871
44875
  },
44872
44876
  titleButtons: {
44873
44877
  display: "flex",
@@ -44883,15 +44887,20 @@ const useTitleStyles = makeStyles()((theme) => ({
44883
44887
  border: `${theme.cardBorderSize} solid ${theme.palette.cardBorder}`,
44884
44888
  flex: "1 1 auto",
44885
44889
  minHeight: "1px",
44886
- marginTop: "8px",
44887
- marginBottom: "8px",
44890
+ marginTop: "0",
44891
+ marginBottom: "0",
44888
44892
  position: "relative",
44889
44893
  display: "flex",
44890
44894
  flexDirection: "column",
44891
44895
  minWidth: "0",
44892
44896
  wordWrap: "break-word",
44893
44897
  backgroundClip: "border-box",
44894
- borderRadius: "4px"
44898
+ borderTopLeftRadius: "4px",
44899
+ borderTopRightRadius: "4px"
44900
+ },
44901
+ cardWithoutInfoText: {
44902
+ borderBottomLeftRadius: "4px",
44903
+ borderBottomRightRadius: "4px"
44895
44904
  },
44896
44905
  paddingCard: {
44897
44906
  padding: "12px"
@@ -45824,9 +45833,10 @@ function TitleInfo(props) {
45824
45833
  } = props;
45825
45834
  const errors = errorsProp == null ? void 0 : errorsProp.filter(Boolean);
45826
45835
  const { classes } = useTitleStyles();
45836
+ const hasInfoText = Boolean(info);
45827
45837
  return (
45828
45838
  // d-flex without wrapping div is not always full height; I don't understand the root cause.
45829
- /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement("div", { className: classes.title, role: "banner" }, /* @__PURE__ */ React__default.createElement("div", { className: classes.titleLeft, role: "heading", "aria-level": "1" }, title), /* @__PURE__ */ React__default.createElement("div", { className: classes.titleInfo, title: info, role: "note" }, info), /* @__PURE__ */ React__default.createElement("div", { className: classes.titleButtons, role: "toolbar", "aria-label": "Plot options and controls" }, /* @__PURE__ */ React__default.createElement(
45839
+ /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement("div", { className: classes.title, role: "banner" }, /* @__PURE__ */ React__default.createElement("div", { className: classes.titleLeft, role: "heading", "aria-level": "1" }, title), /* @__PURE__ */ React__default.createElement("div", { className: classes.titleButtons, role: "toolbar", "aria-label": "Plot options and controls" }, /* @__PURE__ */ React__default.createElement(
45830
45840
  PlotOptions,
45831
45841
  {
45832
45842
  options
@@ -45862,7 +45872,8 @@ function TitleInfo(props) {
45862
45872
  [classes.spatialCard]: isSpatial,
45863
45873
  [classes.noScrollCard]: !isScroll && !isSpatial,
45864
45874
  [classes.noPaddingCard]: !withPadding,
45865
- [classes.paddingCard]: withPadding
45875
+ [classes.paddingCard]: withPadding,
45876
+ [classes.cardWithoutInfoText]: !hasInfoText
45866
45877
  }
45867
45878
  ),
45868
45879
  "aria-busy": !isReady,
@@ -45870,7 +45881,7 @@ function TitleInfo(props) {
45870
45881
  },
45871
45882
  !isReady ? /* @__PURE__ */ React__default.createElement(LoadingIndicator, null) : null,
45872
45883
  children
45873
- ))
45884
+ ), hasInfoText ? /* @__PURE__ */ React__default.createElement("div", { className: classes.infoText, title: info, role: "note" }, info) : null)
45874
45885
  );
45875
45886
  }
45876
45887
  class VitessceError extends Error {
@@ -1,4 +1,4 @@
1
1
  export function DebugWindow({ debugErrors }: {
2
2
  debugErrors: any;
3
- }): import(".pnpm/@types+react@19.1.6/node_modules/@types/react").JSX.Element;
3
+ }): import("react").JSX.Element;
4
4
  //# sourceMappingURL=DebugWindow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DebugWindow.d.ts","sourceRoot":"","sources":["../src/DebugWindow.js"],"names":[],"mappings":"AAIA;;8EA8BC"}
1
+ {"version":3,"file":"DebugWindow.d.ts","sourceRoot":"","sources":["../src/DebugWindow.js"],"names":[],"mappings":"AAIA;;gCA8BC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TitleInfo.d.ts","sourceRoot":"","sources":["../src/TitleInfo.js"],"names":[],"mappings":"AAmNA,mDAoEC"}
1
+ {"version":3,"file":"TitleInfo.d.ts","sourceRoot":"","sources":["../src/TitleInfo.js"],"names":[],"mappings":"AAmNA,mDAwEC"}
@@ -102,15 +102,17 @@ export function TitleInfo(props) {
102
102
  const { title, info, children, isScroll, isSpatial, removeGridComponent, urls, isReady, options, closeButtonVisible = true, downloadButtonVisible = true, helpText, withPadding = true, errors: errorsProp, } = props;
103
103
  const errors = errorsProp?.filter(Boolean);
104
104
  const { classes } = useTitleStyles();
105
+ const hasInfoText = Boolean(info);
105
106
  return (
106
107
  // d-flex without wrapping div is not always full height; I don't understand the root cause.
107
- _jsxs(_Fragment, { children: [_jsxs("div", { className: classes.title, role: "banner", children: [_jsx("div", { className: classes.titleLeft, role: "heading", "aria-level": "1", children: title }), _jsx("div", { className: classes.titleInfo, title: info, role: "note", children: info }), _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 })) : null, closeButtonVisible && removeGridComponent ? (_jsx(ClosePaneButton, { removeGridComponent: removeGridComponent })) : null] })] }), _jsxs("div", { className: clsx(TOOLTIP_ANCESTOR, classes.card, {
108
109
  [classes.scrollCard]: isScroll,
109
110
  [classes.spatialCard]: isSpatial,
110
111
  [classes.noScrollCard]: !isScroll && !isSpatial,
111
112
  [classes.noPaddingCard]: !withPadding,
112
113
  [classes.paddingCard]: withPadding,
113
- }), "aria-busy": !isReady, role: "main", children: [!isReady ? _jsx(LoadingIndicator, {}) : null, children] })] })
114
+ [classes.cardWithoutInfoText]: !hasInfoText,
115
+ }), "aria-busy": !isReady, role: "main", children: [!isReady ? _jsx(LoadingIndicator, {}) : null, children] }), hasInfoText ? (_jsx("div", { className: classes.infoText, title: info, role: "note", children: info })) : null] })
114
116
  // "pl-2" only matters when the window is very narrow.
115
117
  );
116
118
  }
@@ -1,2 +1,2 @@
1
- export function Warning(props: any): import(".pnpm/@types+react@19.1.6/node_modules/@types/react").JSX.Element;
1
+ export function Warning(props: any): import("react").JSX.Element;
2
2
  //# sourceMappingURL=Warning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Warning.d.ts","sourceRoot":"","sources":["../src/Warning.js"],"names":[],"mappings":"AAIA,+GAoBC"}
1
+ {"version":3,"file":"Warning.d.ts","sourceRoot":"","sources":["../src/Warning.js"],"names":[],"mappings":"AAIA,iEAoBC"}
@@ -96,7 +96,7 @@ const gridLayoutStyles = {
96
96
  },
97
97
  '.react-grid-item > .react-resizable-handle.react-resizable-handle-se': {
98
98
  bottom: '0',
99
- right: '0',
99
+ right: '10px',
100
100
  cursor: 'se-resize',
101
101
  },
102
102
  '.react-grid-item > .react-resizable-handle.react-resizable-handle-nw': {
@@ -75,6 +75,7 @@ const lightPalette = {
75
75
  gridLayoutBackground: '#FFFFFF',
76
76
  paperBackground: '#FFFFFF',
77
77
  cardBorder: 'rgba(241, 241, 241, 0.125)',
78
+ cardInfoBorder: '#ccc',
78
79
  tooltipText: 'rgba(0, 0, 0, 0.87)',
79
80
  };
80
81
  export const muiTheme = {
@@ -100,6 +101,7 @@ export const muiTheme = {
100
101
  gridLayoutBackground: '#333333',
101
102
  paperBackground: '#2b2b2b',
102
103
  cardBorder: 'rgba(0, 0, 0, 0.125)',
104
+ cardInfoBorder: '#222222',
103
105
  tooltipText: '#FFFFFF',
104
106
  ...globalColors,
105
107
  },
@@ -109,6 +111,7 @@ export const muiTheme = {
109
111
  light: createTheme({
110
112
  palette: {
111
113
  ...lightPalette,
114
+ cardInfoBorder: '#F1F1F1',
112
115
  ...globalColors,
113
116
  },
114
117
  ...sharedThemeOptions,
@@ -126,6 +129,6 @@ export const muiTheme = {
126
129
  ...globalColors,
127
130
  },
128
131
  ...sharedThemeOptions,
129
- cardBorderSize: '2px',
132
+ cardBorderSize: '1px',
130
133
  }),
131
134
  };
@@ -1 +1 @@
1
- {"version":3,"file":"title-styles.d.ts","sourceRoot":"","sources":["../src/title-styles.js"],"names":[],"mappings":"AAEA;;cAyB0B,CAAC;;;kBAMR,eACC;gBAEd,WAAK;eACP,WAEJ;EAuCI"}
1
+ {"version":3,"file":"title-styles.d.ts","sourceRoot":"","sources":["../src/title-styles.js"],"names":[],"mappings":"AAEA;;cAyBO,CAAC;;;kBAE+B,eACvC;gBAAyB,WAAU;eAAsB,WACpD;EAyDD"}
@@ -13,18 +13,23 @@ export const useTitleStyles = makeStyles()(theme => ({
13
13
  textOverflow: 'ellipsis',
14
14
  whiteSpace: 'nowrap',
15
15
  },
16
- titleInfo: {
16
+ infoText: {
17
+ color: theme.palette.primaryForeground,
17
18
  width: '100%',
18
19
  textOverflow: 'ellipsis',
19
20
  whiteSpace: 'nowrap',
20
21
  overflow: 'hidden',
21
- fontSize: '80% !important',
22
+ fontSize: '60% !important',
22
23
  opacity: '.8',
23
- padding: '0 4px',
24
+ padding: '0',
24
25
  justifyContent: 'center',
25
- lineHeight: '25px !important',
26
- flexShrink: '1',
27
- textAlign: 'right !important',
26
+ textAlign: 'center !important',
27
+ borderTop: '0px',
28
+ borderBottom: `1px solid ${theme.palette.cardInfoBorder}`,
29
+ borderLeft: `1px solid ${theme.palette.cardInfoBorder}`,
30
+ borderRight: `1px solid ${theme.palette.cardInfoBorder}`,
31
+ borderBottomLeftRadius: '4px',
32
+ borderBottomRightRadius: '4px',
28
33
  },
29
34
  titleButtons: {
30
35
  display: 'flex',
@@ -40,15 +45,20 @@ export const useTitleStyles = makeStyles()(theme => ({
40
45
  border: `${theme.cardBorderSize} solid ${theme.palette.cardBorder}`,
41
46
  flex: '1 1 auto',
42
47
  minHeight: '1px',
43
- marginTop: '8px',
44
- marginBottom: '8px',
48
+ marginTop: '0',
49
+ marginBottom: '0',
45
50
  position: 'relative',
46
51
  display: 'flex',
47
52
  flexDirection: 'column',
48
53
  minWidth: '0',
49
54
  wordWrap: 'break-word',
50
55
  backgroundClip: 'border-box',
51
- borderRadius: '4px',
56
+ borderTopLeftRadius: '4px',
57
+ borderTopRightRadius: '4px',
58
+ },
59
+ cardWithoutInfoText: {
60
+ borderBottomLeftRadius: '4px',
61
+ borderBottomRightRadius: '4px',
52
62
  },
53
63
  paddingCard: {
54
64
  padding: '12px',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/vit-s",
3
- "version": "3.9.1",
3
+ "version": "3.9.2",
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.5.4",
34
- "@vitessce/styles": "3.9.1",
35
- "@vitessce/error": "3.9.1",
36
- "@vitessce/abstract": "3.9.1",
37
- "@vitessce/constants-internal": "3.9.1",
38
- "@vitessce/plugins": "3.9.1",
39
- "@vitessce/utils": "3.9.1",
40
- "@vitessce/sets-utils": "3.9.1",
41
- "@vitessce/schemas": "3.9.1",
42
- "@vitessce/config": "3.9.1",
43
- "@vitessce/zarr-utils": "3.9.1",
44
- "@vitessce/globals": "3.9.1"
34
+ "@vitessce/styles": "3.9.2",
35
+ "@vitessce/abstract": "3.9.2",
36
+ "@vitessce/error": "3.9.2",
37
+ "@vitessce/constants-internal": "3.9.2",
38
+ "@vitessce/plugins": "3.9.2",
39
+ "@vitessce/schemas": "3.9.2",
40
+ "@vitessce/sets-utils": "3.9.2",
41
+ "@vitessce/zarr-utils": "3.9.2",
42
+ "@vitessce/config": "3.9.2",
43
+ "@vitessce/utils": "3.9.2",
44
+ "@vitessce/globals": "3.9.2"
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.1"
53
+ "@vitessce/types": "3.9.2"
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
@@ -219,6 +219,7 @@ export function TitleInfo(props) {
219
219
  const errors = errorsProp?.filter(Boolean);
220
220
 
221
221
  const { classes } = useTitleStyles();
222
+ const hasInfoText = Boolean(info);
222
223
 
223
224
  return (
224
225
  // d-flex without wrapping div is not always full height; I don't understand the root cause.
@@ -227,9 +228,6 @@ export function TitleInfo(props) {
227
228
  <div className={classes.titleLeft} role="heading" aria-level="1">
228
229
  {title}
229
230
  </div>
230
- <div className={classes.titleInfo} title={info} role="note">
231
- {info}
232
- </div>
233
231
  <div className={classes.titleButtons} role="toolbar" aria-label="Plot options and controls">
234
232
  <PlotOptions
235
233
  options={options}
@@ -266,6 +264,7 @@ export function TitleInfo(props) {
266
264
  [classes.noScrollCard]: !isScroll && !isSpatial,
267
265
  [classes.noPaddingCard]: !withPadding,
268
266
  [classes.paddingCard]: withPadding,
267
+ [classes.cardWithoutInfoText]: !hasInfoText,
269
268
  },
270
269
  )}
271
270
  aria-busy={!isReady}
@@ -274,6 +273,11 @@ export function TitleInfo(props) {
274
273
  { !isReady ? <LoadingIndicator /> : null }
275
274
  {children}
276
275
  </div>
276
+ {hasInfoText ? (
277
+ <div className={classes.infoText} title={info} role="note">
278
+ {info}
279
+ </div>
280
+ ) : null}
277
281
  </>
278
282
  // "pl-2" only matters when the window is very narrow.
279
283
  );
@@ -97,7 +97,7 @@ const gridLayoutStyles = {
97
97
  },
98
98
  '.react-grid-item > .react-resizable-handle.react-resizable-handle-se': {
99
99
  bottom: '0',
100
- right: '0',
100
+ right: '10px',
101
101
  cursor: 'se-resize',
102
102
  },
103
103
  '.react-grid-item > .react-resizable-handle.react-resizable-handle-nw': {
@@ -78,6 +78,7 @@ const lightPalette = {
78
78
  gridLayoutBackground: '#FFFFFF',
79
79
  paperBackground: '#FFFFFF',
80
80
  cardBorder: 'rgba(241, 241, 241, 0.125)',
81
+ cardInfoBorder: '#ccc',
81
82
  tooltipText: 'rgba(0, 0, 0, 0.87)',
82
83
  };
83
84
 
@@ -104,6 +105,7 @@ export const muiTheme = {
104
105
  gridLayoutBackground: '#333333',
105
106
  paperBackground: '#2b2b2b',
106
107
  cardBorder: 'rgba(0, 0, 0, 0.125)',
108
+ cardInfoBorder: '#222222',
107
109
  tooltipText: '#FFFFFF',
108
110
  ...globalColors,
109
111
  },
@@ -113,6 +115,7 @@ export const muiTheme = {
113
115
  light: createTheme({
114
116
  palette: {
115
117
  ...lightPalette,
118
+ cardInfoBorder: '#F1F1F1',
116
119
  ...globalColors,
117
120
  },
118
121
  ...sharedThemeOptions,
@@ -130,6 +133,6 @@ export const muiTheme = {
130
133
  ...globalColors,
131
134
  },
132
135
  ...sharedThemeOptions,
133
- cardBorderSize: '2px',
136
+ cardBorderSize: '1px',
134
137
  }),
135
138
  };
@@ -14,18 +14,23 @@ export const useTitleStyles = makeStyles()(theme => ({
14
14
  textOverflow: 'ellipsis',
15
15
  whiteSpace: 'nowrap',
16
16
  },
17
- titleInfo: {
17
+ infoText: {
18
+ color: theme.palette.primaryForeground,
18
19
  width: '100%',
19
20
  textOverflow: 'ellipsis',
20
21
  whiteSpace: 'nowrap',
21
22
  overflow: 'hidden',
22
- fontSize: '80% !important',
23
+ fontSize: '60% !important',
23
24
  opacity: '.8',
24
- padding: '0 4px',
25
+ padding: '0',
25
26
  justifyContent: 'center',
26
- lineHeight: '25px !important',
27
- flexShrink: '1',
28
- textAlign: 'right !important',
27
+ textAlign: 'center !important',
28
+ borderTop: '0px',
29
+ borderBottom: `1px solid ${theme.palette.cardInfoBorder}`,
30
+ borderLeft: `1px solid ${theme.palette.cardInfoBorder}`,
31
+ borderRight: `1px solid ${theme.palette.cardInfoBorder}`,
32
+ borderBottomLeftRadius: '4px',
33
+ borderBottomRightRadius: '4px',
29
34
  },
30
35
  titleButtons: {
31
36
  display: 'flex',
@@ -41,15 +46,20 @@ export const useTitleStyles = makeStyles()(theme => ({
41
46
  border: `${theme.cardBorderSize} solid ${theme.palette.cardBorder}`,
42
47
  flex: '1 1 auto',
43
48
  minHeight: '1px',
44
- marginTop: '8px',
45
- marginBottom: '8px',
49
+ marginTop: '0',
50
+ marginBottom: '0',
46
51
  position: 'relative',
47
52
  display: 'flex',
48
53
  flexDirection: 'column',
49
54
  minWidth: '0',
50
55
  wordWrap: 'break-word',
51
56
  backgroundClip: 'border-box',
52
- borderRadius: '4px',
57
+ borderTopLeftRadius: '4px',
58
+ borderTopRightRadius: '4px',
59
+ },
60
+ cardWithoutInfoText: {
61
+ borderBottomLeftRadius: '4px',
62
+ borderBottomRightRadius: '4px',
53
63
  },
54
64
  paddingCard: {
55
65
  padding: '12px',