@vitessce/statistical-plots 4.0.7 → 4.0.8

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.
Files changed (39) hide show
  1. package/dist/{deflate-C-0XOaix.js → deflate--aCxt3Uk.js} +1 -1
  2. package/dist/{index-CFje_HC1.js → index-BSDNU38l.js} +935 -127
  3. package/dist/index.js +2 -1
  4. package/dist/{jpeg-HJZeqbJ9.js → jpeg-KhuOxw4Z.js} +1 -1
  5. package/dist/{lerc-BtoOWLPL.js → lerc-CElkXFuI.js} +1 -1
  6. package/dist/{lzw-BS2ckxRa.js → lzw-CKBozwxj.js} +1 -1
  7. package/dist/{packbits-8sTofHBF.js → packbits-DBXx1JcY.js} +1 -1
  8. package/dist/{raw-DA0bjume.js → raw-Vb44MxD9.js} +1 -1
  9. package/dist/{webimage-C3yiEsf-.js → webimage-Df6sOKlo.js} +1 -1
  10. package/dist-tsc/CellSetCompositionBarPlot.d.ts.map +1 -1
  11. package/dist-tsc/CellSetCompositionBarPlot.js +87 -53
  12. package/dist-tsc/CellSetCompositionBarPlot.js.map +1 -1
  13. package/dist-tsc/SingleCellSetSelector.d.ts +2 -0
  14. package/dist-tsc/SingleCellSetSelector.d.ts.map +1 -0
  15. package/dist-tsc/SingleCellSetSelector.js +27 -0
  16. package/dist-tsc/SingleCellSetSelector.js.map +1 -0
  17. package/dist-tsc/SingleCellSetSelectorSubscriber.d.ts +2 -0
  18. package/dist-tsc/SingleCellSetSelectorSubscriber.d.ts.map +1 -0
  19. package/dist-tsc/SingleCellSetSelectorSubscriber.js +40 -0
  20. package/dist-tsc/SingleCellSetSelectorSubscriber.js.map +1 -0
  21. package/dist-tsc/VolcanoPlot.d.ts.map +1 -1
  22. package/dist-tsc/VolcanoPlot.js +6 -2
  23. package/dist-tsc/VolcanoPlot.js.map +1 -1
  24. package/dist-tsc/VolcanoPlotOptions.js +2 -2
  25. package/dist-tsc/VolcanoPlotOptions.js.map +1 -1
  26. package/dist-tsc/VolcanoPlotSubscriber.d.ts.map +1 -1
  27. package/dist-tsc/VolcanoPlotSubscriber.js +3 -1
  28. package/dist-tsc/VolcanoPlotSubscriber.js.map +1 -1
  29. package/dist-tsc/index.d.ts +1 -0
  30. package/dist-tsc/index.js +1 -0
  31. package/dist-tsc/index.js.map +1 -1
  32. package/package.json +8 -8
  33. package/src/CellSetCompositionBarPlot.js +102 -57
  34. package/src/SingleCellSetSelector.js +54 -0
  35. package/src/SingleCellSetSelectorSubscriber.js +124 -0
  36. package/src/VolcanoPlot.js +8 -2
  37. package/src/VolcanoPlotOptions.js +2 -2
  38. package/src/VolcanoPlotSubscriber.js +33 -21
  39. package/src/index.js +1 -0
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import React__default, { useState, useContext, useRef, useEffect, forwardRef as forwardRef$1, useMemo, createContext, createElement, isValidElement, cloneElement, Children, PureComponent, Suspense, useCallback } from "react";
3
- import { usePlotOptionsStyles, OptionsContainer, OptionSelect, useLoaders, useCoordinationScopes, useCoordination, useGridItemSize, useFeatureSelection, useFeatureLabelsData, useExpandedFeatureLabelsMap, useObsFeatureMatrixIndices, useObsSetsData, useSampleSetsData, useSampleEdgesData, useReady, useUrls, TitleInfo, useObsFeatureMatrixData, useMatchingLoader, useColumnNameMapping, useFeatureStatsData, useObsSetStatsData, useAsyncFunction, useFeatureSetStatsData } from "@vitessce/vit-s";
3
+ import { usePlotOptionsStyles, OptionsContainer, OptionSelect, useLoaders, useCoordinationScopes, useCoordination, useGridItemSize, useFeatureSelection, useFeatureLabelsData, useExpandedFeatureLabelsMap, useObsFeatureMatrixIndices, useObsSetsData, useSampleSetsData, useSampleEdgesData, useReady, useUrls, TitleInfo, useObsFeatureMatrixData, useMatchingLoader, useColumnNameMapping, useFeatureStatsData, useObsSetStatsData, useAsyncFunction, useFeatureSetStatsData, useMultiCoordinationScopes } from "@vitessce/vit-s";
4
4
  import { jsx as jsx$1, jsxs, Fragment } from "react/jsx-runtime";
5
5
  import * as ReactDOM from "react-dom";
6
6
  import ReactDOM__default from "react-dom";
@@ -53,7 +53,8 @@ const ViewType$1 = {
53
53
  DUAL_SCATTERPLOT: "dualScatterplot",
54
54
  TREEMAP: "treemap",
55
55
  SAMPLE_SET_PAIR_MANAGER: "sampleSetPairManager",
56
- FEATURE_STATS_TABLE: "featureStatsTable"
56
+ FEATURE_STATS_TABLE: "featureStatsTable",
57
+ SINGLE_OBS_SET_SELECTOR: "singleObsSetSelector"
57
58
  };
58
59
  const DataType$2 = {
59
60
  OBS_LABELS: "obsLabels",
@@ -1262,6 +1263,11 @@ const COMPONENT_COORDINATION_TYPES = {
1262
1263
  CoordinationType$1.FEATURE_POINT_FOLD_CHANGE_THRESHOLD,
1263
1264
  CoordinationType$1.FEATURE_LABEL_FOLD_CHANGE_THRESHOLD
1264
1265
  ],
1266
+ [ViewType$1.SINGLE_OBS_SET_SELECTOR]: [
1267
+ CoordinationType$1.OBS_TYPE,
1268
+ CoordinationType$1.OBS_SET_COLOR,
1269
+ CoordinationType$1.OBS_SET_SELECTION
1270
+ ],
1265
1271
  [ViewType$1.OBS_SET_COMPOSITION_BAR_PLOT]: [
1266
1272
  CoordinationType$1.DATASET,
1267
1273
  CoordinationType$1.OBS_TYPE,
@@ -18378,7 +18384,7 @@ function useThemeProps$1({
18378
18384
  themeId
18379
18385
  }) {
18380
18386
  let theme = useTheme$1(defaultTheme2);
18381
- {
18387
+ if (themeId) {
18382
18388
  theme = theme[themeId] || theme;
18383
18389
  }
18384
18390
  return getThemeProps$1({
@@ -18972,6 +18978,400 @@ function isMuiElement(element2, muiNames) {
18972
18978
  element2.type.muiName ?? element2.type?._payload?.value?.muiName
18973
18979
  ) !== -1;
18974
18980
  }
18981
+ const filterBreakpointKeys = (breakpointsKeys, responsiveKeys) => breakpointsKeys.filter((key2) => responsiveKeys.includes(key2));
18982
+ const traverseBreakpoints = (breakpoints2, responsive, iterator) => {
18983
+ const smallestBreakpoint = breakpoints2.keys[0];
18984
+ if (Array.isArray(responsive)) {
18985
+ responsive.forEach((breakpointValue, index2) => {
18986
+ iterator((responsiveStyles, style2) => {
18987
+ if (index2 <= breakpoints2.keys.length - 1) {
18988
+ if (index2 === 0) {
18989
+ Object.assign(responsiveStyles, style2);
18990
+ } else {
18991
+ responsiveStyles[breakpoints2.up(breakpoints2.keys[index2])] = style2;
18992
+ }
18993
+ }
18994
+ }, breakpointValue);
18995
+ });
18996
+ } else if (responsive && typeof responsive === "object") {
18997
+ const keys2 = Object.keys(responsive).length > breakpoints2.keys.length ? breakpoints2.keys : filterBreakpointKeys(breakpoints2.keys, Object.keys(responsive));
18998
+ keys2.forEach((key2) => {
18999
+ if (breakpoints2.keys.includes(key2)) {
19000
+ const breakpointValue = responsive[key2];
19001
+ if (breakpointValue !== void 0) {
19002
+ iterator((responsiveStyles, style2) => {
19003
+ if (smallestBreakpoint === key2) {
19004
+ Object.assign(responsiveStyles, style2);
19005
+ } else {
19006
+ responsiveStyles[breakpoints2.up(key2)] = style2;
19007
+ }
19008
+ }, breakpointValue);
19009
+ }
19010
+ }
19011
+ });
19012
+ } else if (typeof responsive === "number" || typeof responsive === "string") {
19013
+ iterator((responsiveStyles, style2) => {
19014
+ Object.assign(responsiveStyles, style2);
19015
+ }, responsive);
19016
+ }
19017
+ };
19018
+ function getSelfSpacingVar(axis2) {
19019
+ return `--Grid-${axis2}Spacing`;
19020
+ }
19021
+ function getParentSpacingVar(axis2) {
19022
+ return `--Grid-parent-${axis2}Spacing`;
19023
+ }
19024
+ const selfColumnsVar = "--Grid-columns";
19025
+ const parentColumnsVar = "--Grid-parent-columns";
19026
+ const generateGridSizeStyles = ({
19027
+ theme,
19028
+ ownerState
19029
+ }) => {
19030
+ const styles2 = {};
19031
+ traverseBreakpoints(theme.breakpoints, ownerState.size, (appendStyle, value2) => {
19032
+ let style2 = {};
19033
+ if (value2 === "grow") {
19034
+ style2 = {
19035
+ flexBasis: 0,
19036
+ flexGrow: 1,
19037
+ maxWidth: "100%"
19038
+ };
19039
+ }
19040
+ if (value2 === "auto") {
19041
+ style2 = {
19042
+ flexBasis: "auto",
19043
+ flexGrow: 0,
19044
+ flexShrink: 0,
19045
+ maxWidth: "none",
19046
+ width: "auto"
19047
+ };
19048
+ }
19049
+ if (typeof value2 === "number") {
19050
+ style2 = {
19051
+ flexGrow: 0,
19052
+ flexBasis: "auto",
19053
+ width: `calc(100% * ${value2} / var(${parentColumnsVar}) - (var(${parentColumnsVar}) - ${value2}) * (var(${getParentSpacingVar("column")}) / var(${parentColumnsVar})))`
19054
+ };
19055
+ }
19056
+ appendStyle(styles2, style2);
19057
+ });
19058
+ return styles2;
19059
+ };
19060
+ const generateGridOffsetStyles = ({
19061
+ theme,
19062
+ ownerState
19063
+ }) => {
19064
+ const styles2 = {};
19065
+ traverseBreakpoints(theme.breakpoints, ownerState.offset, (appendStyle, value2) => {
19066
+ let style2 = {};
19067
+ if (value2 === "auto") {
19068
+ style2 = {
19069
+ marginLeft: "auto"
19070
+ };
19071
+ }
19072
+ if (typeof value2 === "number") {
19073
+ style2 = {
19074
+ marginLeft: value2 === 0 ? "0px" : `calc(100% * ${value2} / var(${parentColumnsVar}) + var(${getParentSpacingVar("column")}) * ${value2} / var(${parentColumnsVar}))`
19075
+ };
19076
+ }
19077
+ appendStyle(styles2, style2);
19078
+ });
19079
+ return styles2;
19080
+ };
19081
+ const generateGridColumnsStyles = ({
19082
+ theme,
19083
+ ownerState
19084
+ }) => {
19085
+ if (!ownerState.container) {
19086
+ return {};
19087
+ }
19088
+ const styles2 = {
19089
+ [selfColumnsVar]: 12
19090
+ };
19091
+ traverseBreakpoints(theme.breakpoints, ownerState.columns, (appendStyle, value2) => {
19092
+ const columns = value2 ?? 12;
19093
+ appendStyle(styles2, {
19094
+ [selfColumnsVar]: columns,
19095
+ "> *": {
19096
+ [parentColumnsVar]: columns
19097
+ }
19098
+ });
19099
+ });
19100
+ return styles2;
19101
+ };
19102
+ const generateGridRowSpacingStyles = ({
19103
+ theme,
19104
+ ownerState
19105
+ }) => {
19106
+ if (!ownerState.container) {
19107
+ return {};
19108
+ }
19109
+ const styles2 = {};
19110
+ traverseBreakpoints(theme.breakpoints, ownerState.rowSpacing, (appendStyle, value2) => {
19111
+ const spacing2 = typeof value2 === "string" ? value2 : theme.spacing?.(value2);
19112
+ appendStyle(styles2, {
19113
+ [getSelfSpacingVar("row")]: spacing2,
19114
+ "> *": {
19115
+ [getParentSpacingVar("row")]: spacing2
19116
+ }
19117
+ });
19118
+ });
19119
+ return styles2;
19120
+ };
19121
+ const generateGridColumnSpacingStyles = ({
19122
+ theme,
19123
+ ownerState
19124
+ }) => {
19125
+ if (!ownerState.container) {
19126
+ return {};
19127
+ }
19128
+ const styles2 = {};
19129
+ traverseBreakpoints(theme.breakpoints, ownerState.columnSpacing, (appendStyle, value2) => {
19130
+ const spacing2 = typeof value2 === "string" ? value2 : theme.spacing?.(value2);
19131
+ appendStyle(styles2, {
19132
+ [getSelfSpacingVar("column")]: spacing2,
19133
+ "> *": {
19134
+ [getParentSpacingVar("column")]: spacing2
19135
+ }
19136
+ });
19137
+ });
19138
+ return styles2;
19139
+ };
19140
+ const generateGridDirectionStyles = ({
19141
+ theme,
19142
+ ownerState
19143
+ }) => {
19144
+ if (!ownerState.container) {
19145
+ return {};
19146
+ }
19147
+ const styles2 = {};
19148
+ traverseBreakpoints(theme.breakpoints, ownerState.direction, (appendStyle, value2) => {
19149
+ appendStyle(styles2, {
19150
+ flexDirection: value2
19151
+ });
19152
+ });
19153
+ return styles2;
19154
+ };
19155
+ const generateGridStyles = ({
19156
+ ownerState
19157
+ }) => {
19158
+ return {
19159
+ minWidth: 0,
19160
+ boxSizing: "border-box",
19161
+ ...ownerState.container && {
19162
+ display: "flex",
19163
+ flexWrap: "wrap",
19164
+ ...ownerState.wrap && ownerState.wrap !== "wrap" && {
19165
+ flexWrap: ownerState.wrap
19166
+ },
19167
+ gap: `var(${getSelfSpacingVar("row")}) var(${getSelfSpacingVar("column")})`
19168
+ }
19169
+ };
19170
+ };
19171
+ const generateSizeClassNames = (size2) => {
19172
+ const classNames = [];
19173
+ Object.entries(size2).forEach(([key2, value2]) => {
19174
+ if (value2 !== false && value2 !== void 0) {
19175
+ classNames.push(`grid-${key2}-${String(value2)}`);
19176
+ }
19177
+ });
19178
+ return classNames;
19179
+ };
19180
+ const generateSpacingClassNames = (spacing2, smallestBreakpoint = "xs") => {
19181
+ function isValidSpacing(val) {
19182
+ if (val === void 0) {
19183
+ return false;
19184
+ }
19185
+ return typeof val === "string" && !Number.isNaN(Number(val)) || typeof val === "number" && val > 0;
19186
+ }
19187
+ if (isValidSpacing(spacing2)) {
19188
+ return [`spacing-${smallestBreakpoint}-${String(spacing2)}`];
19189
+ }
19190
+ if (typeof spacing2 === "object" && !Array.isArray(spacing2)) {
19191
+ const classNames = [];
19192
+ Object.entries(spacing2).forEach(([key2, value2]) => {
19193
+ if (isValidSpacing(value2)) {
19194
+ classNames.push(`spacing-${key2}-${String(value2)}`);
19195
+ }
19196
+ });
19197
+ return classNames;
19198
+ }
19199
+ return [];
19200
+ };
19201
+ const generateDirectionClasses = (direction) => {
19202
+ if (direction === void 0) {
19203
+ return [];
19204
+ }
19205
+ if (typeof direction === "object") {
19206
+ return Object.entries(direction).map(([key2, value2]) => `direction-${key2}-${value2}`);
19207
+ }
19208
+ return [`direction-xs-${String(direction)}`];
19209
+ };
19210
+ const getLegacyGridWarning = (propName) => {
19211
+ if (["item", "zeroMinWidth"].includes(propName)) {
19212
+ return `The \`${propName}\` prop has been removed and is no longer necessary. You can safely remove it.`;
19213
+ }
19214
+ return `The \`${propName}\` prop has been removed. See https://mui.com/material-ui/migration/upgrade-to-grid-v2/ for migration instructions.`;
19215
+ };
19216
+ const warnedAboutProps = [];
19217
+ function deleteLegacyGridProps(props, breakpoints2) {
19218
+ const propsToWarn = [];
19219
+ if (props.item !== void 0) {
19220
+ delete props.item;
19221
+ propsToWarn.push("item");
19222
+ }
19223
+ if (props.zeroMinWidth !== void 0) {
19224
+ delete props.zeroMinWidth;
19225
+ propsToWarn.push("zeroMinWidth");
19226
+ }
19227
+ breakpoints2.keys.forEach((breakpoint) => {
19228
+ if (props[breakpoint] !== void 0) {
19229
+ propsToWarn.push(breakpoint);
19230
+ delete props[breakpoint];
19231
+ }
19232
+ });
19233
+ {
19234
+ propsToWarn.forEach((prop) => {
19235
+ if (!warnedAboutProps.includes(prop)) {
19236
+ warnedAboutProps.push(prop);
19237
+ console.warn(`MUI Grid: ${getLegacyGridWarning(prop)}
19238
+ `);
19239
+ }
19240
+ });
19241
+ }
19242
+ }
19243
+ const defaultTheme$1 = createTheme$1();
19244
+ const defaultCreateStyledComponent = styled$1("div", {
19245
+ name: "MuiGrid",
19246
+ slot: "Root"
19247
+ });
19248
+ function useThemePropsDefault(props) {
19249
+ return useThemeProps$1({
19250
+ props,
19251
+ name: "MuiGrid",
19252
+ defaultTheme: defaultTheme$1
19253
+ });
19254
+ }
19255
+ function createGrid(options = {}) {
19256
+ const {
19257
+ // This will allow adding custom styled fn (for example for custom sx style function)
19258
+ createStyledComponent = defaultCreateStyledComponent,
19259
+ useThemeProps: useThemeProps2 = useThemePropsDefault,
19260
+ useTheme: useTheme2 = useTheme$1,
19261
+ componentName = "MuiGrid"
19262
+ } = options;
19263
+ const useUtilityClasses2 = (ownerState, theme) => {
19264
+ const {
19265
+ container,
19266
+ direction,
19267
+ spacing: spacing2,
19268
+ wrap: wrap2,
19269
+ size: size2
19270
+ } = ownerState;
19271
+ const slots = {
19272
+ root: ["root", container && "container", wrap2 !== "wrap" && `wrap-xs-${String(wrap2)}`, ...generateDirectionClasses(direction), ...generateSizeClassNames(size2), ...container ? generateSpacingClassNames(spacing2, theme.breakpoints.keys[0]) : []]
19273
+ };
19274
+ return composeClasses(slots, (slot) => generateUtilityClass(componentName, slot), {});
19275
+ };
19276
+ function parseResponsiveProp(propValue, breakpoints2, shouldUseValue = () => true) {
19277
+ const parsedProp = {};
19278
+ if (propValue === null) {
19279
+ return parsedProp;
19280
+ }
19281
+ if (Array.isArray(propValue)) {
19282
+ propValue.forEach((value2, index2) => {
19283
+ if (value2 !== null && shouldUseValue(value2) && breakpoints2.keys[index2]) {
19284
+ parsedProp[breakpoints2.keys[index2]] = value2;
19285
+ }
19286
+ });
19287
+ } else if (typeof propValue === "object") {
19288
+ Object.keys(propValue).forEach((key2) => {
19289
+ const value2 = propValue[key2];
19290
+ if (value2 !== null && value2 !== void 0 && shouldUseValue(value2)) {
19291
+ parsedProp[key2] = value2;
19292
+ }
19293
+ });
19294
+ } else {
19295
+ parsedProp[breakpoints2.keys[0]] = propValue;
19296
+ }
19297
+ return parsedProp;
19298
+ }
19299
+ const GridRoot3 = createStyledComponent(generateGridColumnsStyles, generateGridColumnSpacingStyles, generateGridRowSpacingStyles, generateGridSizeStyles, generateGridDirectionStyles, generateGridStyles, generateGridOffsetStyles);
19300
+ const Grid2 = /* @__PURE__ */ React.forwardRef(function Grid22(inProps, ref2) {
19301
+ const theme = useTheme2();
19302
+ const themeProps = useThemeProps2(inProps);
19303
+ const props = extendSxProp$1(themeProps);
19304
+ deleteLegacyGridProps(props, theme.breakpoints);
19305
+ const {
19306
+ className,
19307
+ children: children2,
19308
+ columns: columnsProp = 12,
19309
+ container = false,
19310
+ component = "div",
19311
+ direction = "row",
19312
+ wrap: wrap2 = "wrap",
19313
+ size: sizeProp = {},
19314
+ offset: offsetProp = {},
19315
+ spacing: spacingProp = 0,
19316
+ rowSpacing: rowSpacingProp = spacingProp,
19317
+ columnSpacing: columnSpacingProp = spacingProp,
19318
+ unstable_level: level = 0,
19319
+ ...other
19320
+ } = props;
19321
+ const size2 = parseResponsiveProp(sizeProp, theme.breakpoints, (val) => val !== false);
19322
+ const offset2 = parseResponsiveProp(offsetProp, theme.breakpoints);
19323
+ const columns = inProps.columns ?? (level ? void 0 : columnsProp);
19324
+ const spacing2 = inProps.spacing ?? (level ? void 0 : spacingProp);
19325
+ const rowSpacing = inProps.rowSpacing ?? inProps.spacing ?? (level ? void 0 : rowSpacingProp);
19326
+ const columnSpacing = inProps.columnSpacing ?? inProps.spacing ?? (level ? void 0 : columnSpacingProp);
19327
+ const ownerState = {
19328
+ ...props,
19329
+ level,
19330
+ columns,
19331
+ container,
19332
+ direction,
19333
+ wrap: wrap2,
19334
+ spacing: spacing2,
19335
+ rowSpacing,
19336
+ columnSpacing,
19337
+ size: size2,
19338
+ offset: offset2
19339
+ };
19340
+ const classes2 = useUtilityClasses2(ownerState, theme);
19341
+ return /* @__PURE__ */ jsx$1(GridRoot3, {
19342
+ ref: ref2,
19343
+ as: component,
19344
+ ownerState,
19345
+ className: clsx(classes2.root, className),
19346
+ ...other,
19347
+ children: React.Children.map(children2, (child) => {
19348
+ if (/* @__PURE__ */ React.isValidElement(child) && isMuiElement(child, ["Grid"]) && container && child.props.container) {
19349
+ return /* @__PURE__ */ React.cloneElement(child, {
19350
+ unstable_level: child.props?.unstable_level ?? level + 1
19351
+ });
19352
+ }
19353
+ return child;
19354
+ })
19355
+ });
19356
+ });
19357
+ Grid2.propTypes = {
19358
+ children: _pt.node,
19359
+ className: _pt.string,
19360
+ columns: _pt.oneOfType([_pt.arrayOf(_pt.number), _pt.number, _pt.object]),
19361
+ columnSpacing: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.number, _pt.string])), _pt.number, _pt.object, _pt.string]),
19362
+ component: _pt.elementType,
19363
+ container: _pt.bool,
19364
+ direction: _pt.oneOfType([_pt.oneOf(["column-reverse", "column", "row-reverse", "row"]), _pt.arrayOf(_pt.oneOf(["column-reverse", "column", "row-reverse", "row"])), _pt.object]),
19365
+ offset: _pt.oneOfType([_pt.string, _pt.number, _pt.arrayOf(_pt.oneOfType([_pt.string, _pt.number])), _pt.object]),
19366
+ rowSpacing: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.number, _pt.string])), _pt.number, _pt.object, _pt.string]),
19367
+ size: _pt.oneOfType([_pt.string, _pt.bool, _pt.number, _pt.arrayOf(_pt.oneOfType([_pt.string, _pt.bool, _pt.number])), _pt.object]),
19368
+ spacing: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.number, _pt.string])), _pt.number, _pt.object, _pt.string]),
19369
+ sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object]),
19370
+ wrap: _pt.oneOf(["nowrap", "wrap-reverse", "wrap"])
19371
+ };
19372
+ Grid2.muiName = "Grid";
19373
+ return Grid2;
19374
+ }
18975
19375
  const common$2 = {
18976
19376
  black: "#000",
18977
19377
  white: "#fff"
@@ -20302,7 +20702,7 @@ function getSvgIconUtilityClass(slot) {
20302
20702
  return generateUtilityClass("MuiSvgIcon", slot);
20303
20703
  }
20304
20704
  generateUtilityClasses("MuiSvgIcon", ["root", "colorPrimary", "colorSecondary", "colorAction", "colorError", "colorDisabled", "fontSizeInherit", "fontSizeSmall", "fontSizeMedium", "fontSizeLarge"]);
20305
- const useUtilityClasses$1m = (ownerState) => {
20705
+ const useUtilityClasses$1n = (ownerState) => {
20306
20706
  const {
20307
20707
  color: color2,
20308
20708
  fontSize: fontSize2,
@@ -20441,7 +20841,7 @@ const SvgIcon = /* @__PURE__ */ React.forwardRef(function SvgIcon2(inProps, ref2
20441
20841
  if (!inheritViewBox) {
20442
20842
  more.viewBox = viewBox;
20443
20843
  }
20444
- const classes2 = useUtilityClasses$1m(ownerState);
20844
+ const classes2 = useUtilityClasses$1n(ownerState);
20445
20845
  return /* @__PURE__ */ jsxs(SvgIconRoot, {
20446
20846
  as: component,
20447
20847
  className: clsx(classes2.root, className),
@@ -20568,6 +20968,26 @@ function ownerWindow(node2) {
20568
20968
  const doc = ownerDocument(node2);
20569
20969
  return doc.defaultView || window;
20570
20970
  }
20971
+ function requirePropFactory(componentNameInError, Component2) {
20972
+ const prevPropTypes = Component2 ? {
20973
+ ...Component2.propTypes
20974
+ } : null;
20975
+ const requireProp = (requiredProp) => (props, propName, componentName, location, propFullName, ...args) => {
20976
+ const propFullNameSafe = propFullName || propName;
20977
+ const defaultTypeChecker = prevPropTypes?.[propFullNameSafe];
20978
+ if (defaultTypeChecker) {
20979
+ const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);
20980
+ if (typeCheckerResult) {
20981
+ return typeCheckerResult;
20982
+ }
20983
+ }
20984
+ if (typeof props[propName] !== "undefined" && !props[requiredProp]) {
20985
+ return new Error(`The prop \`${propFullNameSafe}\` of \`${componentNameInError}\` can only be used together with the \`${requiredProp}\` prop.`);
20986
+ }
20987
+ return null;
20988
+ };
20989
+ return requireProp;
20990
+ }
20571
20991
  function setRef$1(ref2, value2) {
20572
20992
  if (typeof ref2 === "function") {
20573
20993
  ref2(value2);
@@ -21582,7 +22002,7 @@ function getPaperUtilityClass(slot) {
21582
22002
  return generateUtilityClass("MuiPaper", slot);
21583
22003
  }
21584
22004
  generateUtilityClasses("MuiPaper", ["root", "rounded", "outlined", "elevation", "elevation0", "elevation1", "elevation2", "elevation3", "elevation4", "elevation5", "elevation6", "elevation7", "elevation8", "elevation9", "elevation10", "elevation11", "elevation12", "elevation13", "elevation14", "elevation15", "elevation16", "elevation17", "elevation18", "elevation19", "elevation20", "elevation21", "elevation22", "elevation23", "elevation24"]);
21585
- const useUtilityClasses$1l = (ownerState) => {
22005
+ const useUtilityClasses$1m = (ownerState) => {
21586
22006
  const {
21587
22007
  square: square2,
21588
22008
  elevation,
@@ -21654,7 +22074,7 @@ const Paper = /* @__PURE__ */ React.forwardRef(function Paper2(inProps, ref2) {
21654
22074
  square: square2,
21655
22075
  variant
21656
22076
  };
21657
- const classes2 = useUtilityClasses$1l(ownerState);
22077
+ const classes2 = useUtilityClasses$1m(ownerState);
21658
22078
  {
21659
22079
  if (theme.shadows[elevation] === void 0) {
21660
22080
  console.error([`MUI: The elevation provided <Paper elevation={${elevation}}> is not available in the theme.`, `Please make sure that \`theme.shadows[${elevation}]\` is defined.`].join("\n"));
@@ -22331,7 +22751,7 @@ function getButtonBaseUtilityClass(slot) {
22331
22751
  return generateUtilityClass("MuiButtonBase", slot);
22332
22752
  }
22333
22753
  const buttonBaseClasses = generateUtilityClasses("MuiButtonBase", ["root", "disabled", "focusVisible"]);
22334
- const useUtilityClasses$1k = (ownerState) => {
22754
+ const useUtilityClasses$1l = (ownerState) => {
22335
22755
  const {
22336
22756
  disabled,
22337
22757
  focusVisible,
@@ -22547,7 +22967,7 @@ const ButtonBase = /* @__PURE__ */ React.forwardRef(function ButtonBase2(inProps
22547
22967
  tabIndex,
22548
22968
  focusVisible
22549
22969
  };
22550
- const classes2 = useUtilityClasses$1k(ownerState);
22970
+ const classes2 = useUtilityClasses$1l(ownerState);
22551
22971
  return /* @__PURE__ */ jsxs(ButtonBaseRoot, {
22552
22972
  as: ComponentProp,
22553
22973
  className: clsx(classes2.root, className),
@@ -22799,7 +23219,7 @@ const rotateAnimation = typeof circularRotateKeyframe !== "string" ? css`
22799
23219
  const dashAnimation = typeof circularDashKeyframe !== "string" ? css`
22800
23220
  animation: ${circularDashKeyframe} 1.4s ease-in-out infinite;
22801
23221
  ` : null;
22802
- const useUtilityClasses$1j = (ownerState) => {
23222
+ const useUtilityClasses$1k = (ownerState) => {
22803
23223
  const {
22804
23224
  classes: classes2,
22805
23225
  variant,
@@ -22921,7 +23341,7 @@ const CircularProgress = /* @__PURE__ */ React.forwardRef(function CircularProgr
22921
23341
  value: value2,
22922
23342
  variant
22923
23343
  };
22924
- const classes2 = useUtilityClasses$1j(ownerState);
23344
+ const classes2 = useUtilityClasses$1k(ownerState);
22925
23345
  const circleStyle = {};
22926
23346
  const rootStyle = {};
22927
23347
  const rootProps = {};
@@ -23030,7 +23450,7 @@ function getIconButtonUtilityClass(slot) {
23030
23450
  return generateUtilityClass("MuiIconButton", slot);
23031
23451
  }
23032
23452
  const iconButtonClasses = generateUtilityClasses("MuiIconButton", ["root", "disabled", "colorInherit", "colorPrimary", "colorSecondary", "colorError", "colorInfo", "colorSuccess", "colorWarning", "edgeStart", "edgeEnd", "sizeSmall", "sizeMedium", "sizeLarge", "loading", "loadingIndicator", "loadingWrapper"]);
23033
- const useUtilityClasses$1i = (ownerState) => {
23453
+ const useUtilityClasses$1j = (ownerState) => {
23034
23454
  const {
23035
23455
  classes: classes2,
23036
23456
  disabled,
@@ -23215,7 +23635,7 @@ const IconButton = /* @__PURE__ */ React.forwardRef(function IconButton2(inProps
23215
23635
  loadingIndicator,
23216
23636
  size: size2
23217
23637
  };
23218
- const classes2 = useUtilityClasses$1i(ownerState);
23638
+ const classes2 = useUtilityClasses$1j(ownerState);
23219
23639
  return /* @__PURE__ */ jsxs(IconButtonRoot, {
23220
23640
  id: loading ? loadingId : idProp,
23221
23641
  className: clsx(classes2.root, className),
@@ -25748,7 +26168,7 @@ function isHTMLElement(element2) {
25748
26168
  function isVirtualElement(element2) {
25749
26169
  return !isHTMLElement(element2);
25750
26170
  }
25751
- const useUtilityClasses$1h = (ownerState) => {
26171
+ const useUtilityClasses$1i = (ownerState) => {
25752
26172
  const {
25753
26173
  classes: classes2
25754
26174
  } = ownerState;
@@ -25857,7 +26277,7 @@ const PopperTooltip = /* @__PURE__ */ React.forwardRef(function PopperTooltip2(p
25857
26277
  if (TransitionProps !== null) {
25858
26278
  childProps.TransitionProps = TransitionProps;
25859
26279
  }
25860
- const classes2 = useUtilityClasses$1h(props);
26280
+ const classes2 = useUtilityClasses$1i(props);
25861
26281
  const Root = slots.root ?? "div";
25862
26282
  const rootProps = useSlotProps({
25863
26283
  elementType: Root,
@@ -26256,7 +26676,7 @@ function getListSubheaderUtilityClass(slot) {
26256
26676
  return generateUtilityClass("MuiListSubheader", slot);
26257
26677
  }
26258
26678
  generateUtilityClasses("MuiListSubheader", ["root", "colorPrimary", "colorInherit", "gutters", "inset", "sticky"]);
26259
- const useUtilityClasses$1g = (ownerState) => {
26679
+ const useUtilityClasses$1h = (ownerState) => {
26260
26680
  const {
26261
26681
  classes: classes2,
26262
26682
  color: color2,
@@ -26351,7 +26771,7 @@ const ListSubheader = /* @__PURE__ */ React.forwardRef(function ListSubheader2(i
26351
26771
  disableSticky,
26352
26772
  inset
26353
26773
  };
26354
- const classes2 = useUtilityClasses$1g(ownerState);
26774
+ const classes2 = useUtilityClasses$1h(ownerState);
26355
26775
  return /* @__PURE__ */ jsx$1(ListSubheaderRoot, {
26356
26776
  as: component,
26357
26777
  className: clsx(classes2.root, className),
@@ -26417,7 +26837,7 @@ function getChipUtilityClass(slot) {
26417
26837
  return generateUtilityClass("MuiChip", slot);
26418
26838
  }
26419
26839
  const chipClasses = generateUtilityClasses("MuiChip", ["root", "sizeSmall", "sizeMedium", "colorDefault", "colorError", "colorInfo", "colorPrimary", "colorSecondary", "colorSuccess", "colorWarning", "disabled", "clickable", "clickableColorPrimary", "clickableColorSecondary", "deletable", "deletableColorPrimary", "deletableColorSecondary", "outlined", "filled", "outlinedPrimary", "outlinedSecondary", "filledPrimary", "filledSecondary", "avatar", "avatarSmall", "avatarMedium", "avatarColorPrimary", "avatarColorSecondary", "icon", "iconSmall", "iconMedium", "iconColorPrimary", "iconColorSecondary", "label", "labelSmall", "labelMedium", "deleteIcon", "deleteIconSmall", "deleteIconMedium", "deleteIconColorPrimary", "deleteIconColorSecondary", "deleteIconOutlinedColorPrimary", "deleteIconOutlinedColorSecondary", "deleteIconFilledColorPrimary", "deleteIconFilledColorSecondary", "focusVisible"]);
26420
- const useUtilityClasses$1f = (ownerState) => {
26840
+ const useUtilityClasses$1g = (ownerState) => {
26421
26841
  const {
26422
26842
  classes: classes2,
26423
26843
  disabled,
@@ -26808,7 +27228,7 @@ const Chip = /* @__PURE__ */ React.forwardRef(function Chip2(inProps, ref2) {
26808
27228
  clickable,
26809
27229
  variant
26810
27230
  };
26811
- const classes2 = useUtilityClasses$1f(ownerState);
27231
+ const classes2 = useUtilityClasses$1g(ownerState);
26812
27232
  const moreProps = component === ButtonBase ? {
26813
27233
  component: ComponentProp || "div",
26814
27234
  focusVisibleClassName: classes2.focusVisible,
@@ -27228,7 +27648,7 @@ const inputOverridesResolver = (props, styles2) => {
27228
27648
  } = props;
27229
27649
  return [styles2.input, ownerState.size === "small" && styles2.inputSizeSmall, ownerState.multiline && styles2.inputMultiline, ownerState.type === "search" && styles2.inputTypeSearch, ownerState.startAdornment && styles2.inputAdornedStart, ownerState.endAdornment && styles2.inputAdornedEnd, ownerState.hiddenLabel && styles2.inputHiddenLabel];
27230
27650
  };
27231
- const useUtilityClasses$1e = (ownerState) => {
27651
+ const useUtilityClasses$1f = (ownerState) => {
27232
27652
  const {
27233
27653
  classes: classes2,
27234
27654
  color: color2,
@@ -27632,7 +28052,7 @@ const InputBase = /* @__PURE__ */ React.forwardRef(function InputBase2(inProps,
27632
28052
  startAdornment,
27633
28053
  type: type2
27634
28054
  };
27635
- const classes2 = useUtilityClasses$1e(ownerState);
28055
+ const classes2 = useUtilityClasses$1f(ownerState);
27636
28056
  const Root = slots.root || components.Root || InputBaseRoot;
27637
28057
  const rootProps = slotProps.root || componentsProps.root || {};
27638
28058
  const Input3 = slots.input || components.Input || InputBaseInput;
@@ -27953,7 +28373,7 @@ function getAutocompleteUtilityClass(slot) {
27953
28373
  }
27954
28374
  const autocompleteClasses = generateUtilityClasses("MuiAutocomplete", ["root", "expanded", "fullWidth", "focused", "focusVisible", "tag", "tagSizeSmall", "tagSizeMedium", "hasPopupIcon", "hasClearIcon", "inputRoot", "input", "inputFocused", "endAdornment", "clearIndicator", "popupIndicator", "popupIndicatorOpen", "popper", "popperDisablePortal", "paper", "listbox", "loading", "noOptions", "option", "groupLabel", "groupUl"]);
27955
28375
  var _ClearIcon, _ArrowDropDownIcon;
27956
- const useUtilityClasses$1d = (ownerState) => {
28376
+ const useUtilityClasses$1e = (ownerState) => {
27957
28377
  const {
27958
28378
  classes: classes2,
27959
28379
  disablePortal,
@@ -28442,7 +28862,7 @@ const Autocomplete = /* @__PURE__ */ React.forwardRef(function Autocomplete2(inP
28442
28862
  popupOpen,
28443
28863
  size: size2
28444
28864
  };
28445
- const classes2 = useUtilityClasses$1d(ownerState);
28865
+ const classes2 = useUtilityClasses$1e(ownerState);
28446
28866
  const externalForwardedProps = {
28447
28867
  slots: {
28448
28868
  paper: PaperComponentProp,
@@ -29116,7 +29536,7 @@ const ButtonGroupButtonContext = /* @__PURE__ */ React.createContext(void 0);
29116
29536
  {
29117
29537
  ButtonGroupButtonContext.displayName = "ButtonGroupButtonContext";
29118
29538
  }
29119
- const useUtilityClasses$1c = (ownerState) => {
29539
+ const useUtilityClasses$1d = (ownerState) => {
29120
29540
  const {
29121
29541
  color: color2,
29122
29542
  disableElevation,
@@ -29616,7 +30036,7 @@ const Button = /* @__PURE__ */ React.forwardRef(function Button2(inProps, ref2)
29616
30036
  type: type2,
29617
30037
  variant
29618
30038
  };
29619
- const classes2 = useUtilityClasses$1c(ownerState);
30039
+ const classes2 = useUtilityClasses$1d(ownerState);
29620
30040
  const startIcon = (startIconProp || loading && loadingPosition === "start") && /* @__PURE__ */ jsx$1(ButtonStartIcon, {
29621
30041
  className: classes2.startIcon,
29622
30042
  ownerState,
@@ -29783,7 +30203,7 @@ function getSwitchBaseUtilityClass(slot) {
29783
30203
  return generateUtilityClass("PrivateSwitchBase", slot);
29784
30204
  }
29785
30205
  generateUtilityClasses("PrivateSwitchBase", ["root", "checked", "disabled", "input", "edgeStart", "edgeEnd"]);
29786
- const useUtilityClasses$1b = (ownerState) => {
30206
+ const useUtilityClasses$1c = (ownerState) => {
29787
30207
  const {
29788
30208
  classes: classes2,
29789
30209
  checked,
@@ -29920,7 +30340,7 @@ const SwitchBase = /* @__PURE__ */ React.forwardRef(function SwitchBase2(props,
29920
30340
  disableFocusRipple,
29921
30341
  edge
29922
30342
  };
29923
- const classes2 = useUtilityClasses$1b(ownerState);
30343
+ const classes2 = useUtilityClasses$1c(ownerState);
29924
30344
  const externalForwardedProps = {
29925
30345
  slots,
29926
30346
  slotProps: {
@@ -30126,7 +30546,7 @@ function getCheckboxUtilityClass(slot) {
30126
30546
  return generateUtilityClass("MuiCheckbox", slot);
30127
30547
  }
30128
30548
  const checkboxClasses = generateUtilityClasses("MuiCheckbox", ["root", "checked", "disabled", "indeterminate", "colorPrimary", "colorSecondary", "sizeSmall", "sizeMedium"]);
30129
- const useUtilityClasses$1a = (ownerState) => {
30549
+ const useUtilityClasses$1b = (ownerState) => {
30130
30550
  const {
30131
30551
  classes: classes2,
30132
30552
  indeterminate,
@@ -30235,7 +30655,7 @@ const Checkbox$1 = /* @__PURE__ */ React.forwardRef(function Checkbox2(inProps,
30235
30655
  indeterminate,
30236
30656
  size: size2
30237
30657
  };
30238
- const classes2 = useUtilityClasses$1a(ownerState);
30658
+ const classes2 = useUtilityClasses$1b(ownerState);
30239
30659
  const externalInputProps = slotProps.input ?? inputProps;
30240
30660
  const [RootSlot, rootSlotProps] = useSlot("root", {
30241
30661
  ref: ref2,
@@ -31188,7 +31608,7 @@ function getBackdropUtilityClass(slot) {
31188
31608
  return generateUtilityClass("MuiBackdrop", slot);
31189
31609
  }
31190
31610
  generateUtilityClasses("MuiBackdrop", ["root", "invisible"]);
31191
- const useUtilityClasses$19 = (ownerState) => {
31611
+ const useUtilityClasses$1a = (ownerState) => {
31192
31612
  const {
31193
31613
  classes: classes2,
31194
31614
  invisible
@@ -31251,7 +31671,7 @@ const Backdrop = /* @__PURE__ */ React.forwardRef(function Backdrop2(inProps, re
31251
31671
  component,
31252
31672
  invisible
31253
31673
  };
31254
- const classes2 = useUtilityClasses$19(ownerState);
31674
+ const classes2 = useUtilityClasses$1a(ownerState);
31255
31675
  const backwardCompatibleSlots = {
31256
31676
  transition: TransitionComponentProp,
31257
31677
  root: components.Root,
@@ -31548,7 +31968,7 @@ function getModalUtilityClass(slot) {
31548
31968
  return generateUtilityClass("MuiModal", slot);
31549
31969
  }
31550
31970
  generateUtilityClasses("MuiModal", ["root", "hidden", "backdrop"]);
31551
- const useUtilityClasses$18 = (ownerState) => {
31971
+ const useUtilityClasses$19 = (ownerState) => {
31552
31972
  const {
31553
31973
  open,
31554
31974
  exited,
@@ -31655,7 +32075,7 @@ const Modal = /* @__PURE__ */ React.forwardRef(function Modal2(inProps, ref2) {
31655
32075
  ...propsWithDefaults,
31656
32076
  exited
31657
32077
  };
31658
- const classes2 = useUtilityClasses$18(ownerState);
32078
+ const classes2 = useUtilityClasses$19(ownerState);
31659
32079
  const childProps = {};
31660
32080
  if (children2.props.tabIndex === void 0) {
31661
32081
  childProps.tabIndex = "-1";
@@ -31919,7 +32339,7 @@ const v6Colors = {
31919
32339
  textDisabled: true
31920
32340
  };
31921
32341
  const extendSxProp = internal_createExtendSxProp();
31922
- const useUtilityClasses$17 = (ownerState) => {
32342
+ const useUtilityClasses$18 = (ownerState) => {
31923
32343
  const {
31924
32344
  align: align2,
31925
32345
  gutterBottom,
@@ -32059,7 +32479,7 @@ const Typography = /* @__PURE__ */ React.forwardRef(function Typography2(inProps
32059
32479
  variantMapping
32060
32480
  };
32061
32481
  const Component2 = component || (paragraph ? "p" : variantMapping[variant] || defaultVariantMapping[variant]) || "span";
32062
- const classes2 = useUtilityClasses$17(ownerState);
32482
+ const classes2 = useUtilityClasses$18(ownerState);
32063
32483
  return /* @__PURE__ */ jsx$1(TypographyRoot, {
32064
32484
  as: Component2,
32065
32485
  ref: ref2,
@@ -32164,7 +32584,7 @@ function getFormControlUtilityClasses(slot) {
32164
32584
  return generateUtilityClass("MuiFormControl", slot);
32165
32585
  }
32166
32586
  generateUtilityClasses("MuiFormControl", ["root", "marginNone", "marginNormal", "marginDense", "fullWidth", "disabled"]);
32167
- const useUtilityClasses$16 = (ownerState) => {
32587
+ const useUtilityClasses$17 = (ownerState) => {
32168
32588
  const {
32169
32589
  classes: classes2,
32170
32590
  margin: margin2,
@@ -32254,7 +32674,7 @@ const FormControl = /* @__PURE__ */ React.forwardRef(function FormControl2(inPro
32254
32674
  size: size2,
32255
32675
  variant
32256
32676
  };
32257
- const classes2 = useUtilityClasses$16(ownerState);
32677
+ const classes2 = useUtilityClasses$17(ownerState);
32258
32678
  const [adornedStart, setAdornedStart] = React.useState(() => {
32259
32679
  let initialAdornedStart = false;
32260
32680
  if (children2) {
@@ -32429,7 +32849,7 @@ function getFormControlLabelUtilityClasses(slot) {
32429
32849
  return generateUtilityClass("MuiFormControlLabel", slot);
32430
32850
  }
32431
32851
  const formControlLabelClasses = generateUtilityClasses("MuiFormControlLabel", ["root", "labelPlacementStart", "labelPlacementTop", "labelPlacementBottom", "disabled", "label", "error", "required", "asterisk"]);
32432
- const useUtilityClasses$15 = (ownerState) => {
32852
+ const useUtilityClasses$16 = (ownerState) => {
32433
32853
  const {
32434
32854
  classes: classes2,
32435
32855
  disabled,
@@ -32564,7 +32984,7 @@ const FormControlLabel$1 = /* @__PURE__ */ React.forwardRef(function FormControl
32564
32984
  required: required2,
32565
32985
  error: fcs.error
32566
32986
  };
32567
- const classes2 = useUtilityClasses$15(ownerState);
32987
+ const classes2 = useUtilityClasses$16(ownerState);
32568
32988
  const externalForwardedProps = {
32569
32989
  slots,
32570
32990
  slotProps: {
@@ -32694,7 +33114,7 @@ function getFormHelperTextUtilityClasses(slot) {
32694
33114
  }
32695
33115
  const formHelperTextClasses = generateUtilityClasses("MuiFormHelperText", ["root", "error", "disabled", "sizeSmall", "sizeMedium", "contained", "focused", "filled", "required"]);
32696
33116
  var _span$3;
32697
- const useUtilityClasses$14 = (ownerState) => {
33117
+ const useUtilityClasses$15 = (ownerState) => {
32698
33118
  const {
32699
33119
  classes: classes2,
32700
33120
  contained,
@@ -32789,7 +33209,7 @@ const FormHelperText = /* @__PURE__ */ React.forwardRef(function FormHelperText2
32789
33209
  required: fcs.required
32790
33210
  };
32791
33211
  delete ownerState.ownerState;
32792
- const classes2 = useUtilityClasses$14(ownerState);
33212
+ const classes2 = useUtilityClasses$15(ownerState);
32793
33213
  return /* @__PURE__ */ jsx$1(FormHelperTextRoot, {
32794
33214
  as: component,
32795
33215
  className: clsx(classes2.root, className),
@@ -32868,7 +33288,7 @@ function getFormLabelUtilityClasses(slot) {
32868
33288
  return generateUtilityClass("MuiFormLabel", slot);
32869
33289
  }
32870
33290
  const formLabelClasses = generateUtilityClasses("MuiFormLabel", ["root", "colorSecondary", "focused", "disabled", "error", "filled", "required", "asterisk"]);
32871
- const useUtilityClasses$13 = (ownerState) => {
33291
+ const useUtilityClasses$14 = (ownerState) => {
32872
33292
  const {
32873
33293
  classes: classes2,
32874
33294
  color: color2,
@@ -32965,7 +33385,7 @@ const FormLabel = /* @__PURE__ */ React.forwardRef(function FormLabel2(inProps,
32965
33385
  focused: fcs.focused,
32966
33386
  required: fcs.required
32967
33387
  };
32968
- const classes2 = useUtilityClasses$13(ownerState);
33388
+ const classes2 = useUtilityClasses$14(ownerState);
32969
33389
  return /* @__PURE__ */ jsxs(FormLabelRoot, {
32970
33390
  as: component,
32971
33391
  ownerState,
@@ -33033,11 +33453,129 @@ FormLabel.propTypes = {
33033
33453
  */
33034
33454
  sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object])
33035
33455
  };
33456
+ const Grid = createGrid({
33457
+ createStyledComponent: styled("div", {
33458
+ name: "MuiGrid",
33459
+ slot: "Root",
33460
+ overridesResolver: (props, styles2) => {
33461
+ const {
33462
+ ownerState
33463
+ } = props;
33464
+ return [styles2.root, ownerState.container && styles2.container];
33465
+ }
33466
+ }),
33467
+ componentName: "MuiGrid",
33468
+ useThemeProps: (inProps) => useDefaultProps({
33469
+ props: inProps,
33470
+ name: "MuiGrid"
33471
+ }),
33472
+ useTheme
33473
+ });
33474
+ Grid.propTypes = {
33475
+ // ┌────────────────────────────── Warning ──────────────────────────────┐
33476
+ // │ These PropTypes are generated from the TypeScript type definitions. │
33477
+ // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │
33478
+ // └─────────────────────────────────────────────────────────────────────┘
33479
+ /**
33480
+ * The content of the component.
33481
+ */
33482
+ children: _pt.node,
33483
+ /**
33484
+ * The number of columns.
33485
+ * @default 12
33486
+ */
33487
+ columns: _pt.oneOfType([_pt.arrayOf(_pt.number), _pt.number, _pt.object]),
33488
+ /**
33489
+ * Defines the horizontal space between the type `item` components.
33490
+ * It overrides the value of the `spacing` prop.
33491
+ */
33492
+ columnSpacing: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.number, _pt.string])), _pt.number, _pt.object, _pt.string]),
33493
+ /**
33494
+ * If `true`, the component will have the flex *container* behavior.
33495
+ * You should be wrapping *items* with a *container*.
33496
+ * @default false
33497
+ */
33498
+ container: _pt.bool,
33499
+ /**
33500
+ * Defines the `flex-direction` style property.
33501
+ * It is applied for all screen sizes.
33502
+ * @default 'row'
33503
+ */
33504
+ direction: _pt.oneOfType([_pt.oneOf(["column-reverse", "column", "row-reverse", "row"]), _pt.arrayOf(_pt.oneOf(["column-reverse", "column", "row-reverse", "row"])), _pt.object]),
33505
+ /**
33506
+ * Defines the offset value for the type `item` components.
33507
+ */
33508
+ offset: _pt.oneOfType([_pt.string, _pt.number, _pt.arrayOf(_pt.oneOfType([_pt.string, _pt.number])), _pt.object]),
33509
+ /**
33510
+ * Defines the vertical space between the type `item` components.
33511
+ * It overrides the value of the `spacing` prop.
33512
+ */
33513
+ rowSpacing: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.number, _pt.string])), _pt.number, _pt.object, _pt.string]),
33514
+ /**
33515
+ * Defines the size of the the type `item` components.
33516
+ */
33517
+ size: _pt.oneOfType([_pt.string, _pt.bool, _pt.number, _pt.arrayOf(_pt.oneOfType([_pt.string, _pt.bool, _pt.number])), _pt.object]),
33518
+ /**
33519
+ * Defines the space between the type `item` components.
33520
+ * It can only be used on a type `container` component.
33521
+ * @default 0
33522
+ */
33523
+ spacing: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.number, _pt.string])), _pt.number, _pt.object, _pt.string]),
33524
+ /**
33525
+ * @ignore
33526
+ */
33527
+ sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object]),
33528
+ /**
33529
+ * @internal
33530
+ * The level of the grid starts from `0` and increases when the grid nests
33531
+ * inside another grid. Nesting is defined as a container Grid being a direct
33532
+ * child of a container Grid.
33533
+ *
33534
+ * ```js
33535
+ * <Grid container> // level 0
33536
+ * <Grid container> // level 1
33537
+ * <Grid container> // level 2
33538
+ * ```
33539
+ *
33540
+ * Only consecutive grid is considered nesting. A grid container will start at
33541
+ * `0` if there are non-Grid container element above it.
33542
+ *
33543
+ * ```js
33544
+ * <Grid container> // level 0
33545
+ * <div>
33546
+ * <Grid container> // level 0
33547
+ * ```
33548
+ *
33549
+ * ```js
33550
+ * <Grid container> // level 0
33551
+ * <Grid>
33552
+ * <Grid container> // level 0
33553
+ * ```
33554
+ */
33555
+ unstable_level: _pt.number,
33556
+ /**
33557
+ * Defines the `flex-wrap` style property.
33558
+ * It's applied for all screen sizes.
33559
+ * @default 'wrap'
33560
+ */
33561
+ wrap: _pt.oneOf(["nowrap", "wrap-reverse", "wrap"])
33562
+ };
33563
+ {
33564
+ const Component2 = Grid;
33565
+ const requireProp = requirePropFactory("Grid", Component2);
33566
+ Component2["propTypes"] = {
33567
+ // eslint-disable-next-line react/forbid-foreign-prop-types
33568
+ ...Component2.propTypes,
33569
+ direction: requireProp("container"),
33570
+ spacing: requireProp("container"),
33571
+ wrap: requireProp("container")
33572
+ };
33573
+ }
33036
33574
  function getInputLabelUtilityClasses(slot) {
33037
33575
  return generateUtilityClass("MuiInputLabel", slot);
33038
33576
  }
33039
33577
  generateUtilityClasses("MuiInputLabel", ["root", "focused", "disabled", "error", "required", "asterisk", "formControl", "sizeSmall", "shrink", "animated", "standard", "filled", "outlined"]);
33040
- const useUtilityClasses$12 = (ownerState) => {
33578
+ const useUtilityClasses$13 = (ownerState) => {
33041
33579
  const {
33042
33580
  classes: classes2,
33043
33581
  formControl,
@@ -33226,7 +33764,7 @@ const InputLabel = /* @__PURE__ */ React.forwardRef(function InputLabel2(inProps
33226
33764
  required: fcs.required,
33227
33765
  focused: fcs.focused
33228
33766
  };
33229
- const classes2 = useUtilityClasses$12(ownerState);
33767
+ const classes2 = useUtilityClasses$13(ownerState);
33230
33768
  return /* @__PURE__ */ jsx$1(InputLabelRoot, {
33231
33769
  "data-shrink": shrink,
33232
33770
  ref: ref2,
@@ -33365,7 +33903,7 @@ const bufferKeyframe = keyframes`
33365
33903
  const bufferAnimation = typeof bufferKeyframe !== "string" ? css`
33366
33904
  animation: ${bufferKeyframe} 3s infinite linear;
33367
33905
  ` : null;
33368
- const useUtilityClasses$11 = (ownerState) => {
33906
+ const useUtilityClasses$12 = (ownerState) => {
33369
33907
  const {
33370
33908
  classes: classes2,
33371
33909
  variant,
@@ -33640,7 +34178,7 @@ const LinearProgress = /* @__PURE__ */ React.forwardRef(function LinearProgress2
33640
34178
  color: color2,
33641
34179
  variant
33642
34180
  };
33643
- const classes2 = useUtilityClasses$11(ownerState);
34181
+ const classes2 = useUtilityClasses$12(ownerState);
33644
34182
  const isRtl = useRtl();
33645
34183
  const rootProps = {};
33646
34184
  const inlineStyles = {
@@ -33742,7 +34280,7 @@ function getListUtilityClass(slot) {
33742
34280
  return generateUtilityClass("MuiList", slot);
33743
34281
  }
33744
34282
  generateUtilityClasses("MuiList", ["root", "padding", "dense", "subheader"]);
33745
- const useUtilityClasses$10 = (ownerState) => {
34283
+ const useUtilityClasses$11 = (ownerState) => {
33746
34284
  const {
33747
34285
  classes: classes2,
33748
34286
  disablePadding,
@@ -33808,7 +34346,7 @@ const List = /* @__PURE__ */ React.forwardRef(function List2(inProps, ref2) {
33808
34346
  dense,
33809
34347
  disablePadding
33810
34348
  };
33811
- const classes2 = useUtilityClasses$10(ownerState);
34349
+ const classes2 = useUtilityClasses$11(ownerState);
33812
34350
  return /* @__PURE__ */ jsx$1(ListContext.Provider, {
33813
34351
  value: context2,
33814
34352
  children: /* @__PURE__ */ jsxs(ListRoot, {
@@ -33868,7 +34406,7 @@ function getListItemTextUtilityClass(slot) {
33868
34406
  return generateUtilityClass("MuiListItemText", slot);
33869
34407
  }
33870
34408
  const listItemTextClasses = generateUtilityClasses("MuiListItemText", ["root", "multiline", "dense", "inset", "primary", "secondary"]);
33871
- const useUtilityClasses$$ = (ownerState) => {
34409
+ const useUtilityClasses$10 = (ownerState) => {
33872
34410
  const {
33873
34411
  classes: classes2,
33874
34412
  inset,
@@ -33955,7 +34493,7 @@ const ListItemText = /* @__PURE__ */ React.forwardRef(function ListItemText2(inP
33955
34493
  secondary: !!secondary,
33956
34494
  dense
33957
34495
  };
33958
- const classes2 = useUtilityClasses$$(ownerState);
34496
+ const classes2 = useUtilityClasses$10(ownerState);
33959
34497
  const externalForwardedProps = {
33960
34498
  slots,
33961
34499
  slotProps: {
@@ -34085,7 +34623,7 @@ function getListItemIconUtilityClass(slot) {
34085
34623
  return generateUtilityClass("MuiListItemIcon", slot);
34086
34624
  }
34087
34625
  const listItemIconClasses = generateUtilityClasses("MuiListItemIcon", ["root", "alignItemsFlexStart"]);
34088
- const useUtilityClasses$_ = (ownerState) => {
34626
+ const useUtilityClasses$$ = (ownerState) => {
34089
34627
  const {
34090
34628
  alignItems,
34091
34629
  classes: classes2
@@ -34134,7 +34672,7 @@ const ListItemIcon = /* @__PURE__ */ React.forwardRef(function ListItemIcon2(inP
34134
34672
  ...props,
34135
34673
  alignItems: context2.alignItems
34136
34674
  };
34137
- const classes2 = useUtilityClasses$_(ownerState);
34675
+ const classes2 = useUtilityClasses$$(ownerState);
34138
34676
  return /* @__PURE__ */ jsx$1(ListItemIconRoot, {
34139
34677
  className: clsx(classes2.root, className),
34140
34678
  ownerState,
@@ -34412,7 +34950,7 @@ function getDividerUtilityClass(slot) {
34412
34950
  return generateUtilityClass("MuiDivider", slot);
34413
34951
  }
34414
34952
  const dividerClasses = generateUtilityClasses("MuiDivider", ["root", "absolute", "fullWidth", "inset", "middle", "flexItem", "light", "vertical", "withChildren", "withChildrenVertical", "textAlignRight", "textAlignLeft", "wrapper", "wrapperVertical"]);
34415
- const useUtilityClasses$Z = (ownerState) => {
34953
+ const useUtilityClasses$_ = (ownerState) => {
34416
34954
  const {
34417
34955
  absolute,
34418
34956
  children: children2,
@@ -34626,7 +35164,7 @@ const Divider$1 = /* @__PURE__ */ React.forwardRef(function Divider2(inProps, re
34626
35164
  textAlign: textAlign2,
34627
35165
  variant
34628
35166
  };
34629
- const classes2 = useUtilityClasses$Z(ownerState);
35167
+ const classes2 = useUtilityClasses$_(ownerState);
34630
35168
  return /* @__PURE__ */ jsx$1(DividerRoot, {
34631
35169
  as: component,
34632
35170
  className: clsx(classes2.root, className),
@@ -34718,7 +35256,7 @@ const overridesResolver$1 = (props, styles2) => {
34718
35256
  } = props;
34719
35257
  return [styles2.root, ownerState.dense && styles2.dense, ownerState.divider && styles2.divider, !ownerState.disableGutters && styles2.gutters];
34720
35258
  };
34721
- const useUtilityClasses$Y = (ownerState) => {
35259
+ const useUtilityClasses$Z = (ownerState) => {
34722
35260
  const {
34723
35261
  disabled,
34724
35262
  dense,
@@ -34878,7 +35416,7 @@ const MenuItem = /* @__PURE__ */ React.forwardRef(function MenuItem2(inProps, re
34878
35416
  divider,
34879
35417
  disableGutters
34880
35418
  };
34881
- const classes2 = useUtilityClasses$Y(props);
35419
+ const classes2 = useUtilityClasses$Z(props);
34882
35420
  const handleRef = useForkRef$1(menuItemRef, ref2);
34883
35421
  let tabIndex;
34884
35422
  if (!props.disabled) {
@@ -34978,7 +35516,7 @@ function getNativeSelectUtilityClasses(slot) {
34978
35516
  return generateUtilityClass("MuiNativeSelect", slot);
34979
35517
  }
34980
35518
  const nativeSelectClasses = generateUtilityClasses("MuiNativeSelect", ["root", "select", "multiple", "filled", "outlined", "standard", "disabled", "icon", "iconOpen", "iconFilled", "iconOutlined", "iconStandard", "nativeInput", "error"]);
34981
- const useUtilityClasses$X = (ownerState) => {
35519
+ const useUtilityClasses$Y = (ownerState) => {
34982
35520
  const {
34983
35521
  classes: classes2,
34984
35522
  variant,
@@ -35133,7 +35671,7 @@ const NativeSelectInput = /* @__PURE__ */ React.forwardRef(function NativeSelect
35133
35671
  variant,
35134
35672
  error: error2
35135
35673
  };
35136
- const classes2 = useUtilityClasses$X(ownerState);
35674
+ const classes2 = useUtilityClasses$Y(ownerState);
35137
35675
  return /* @__PURE__ */ jsxs(React.Fragment, {
35138
35676
  children: [/* @__PURE__ */ jsx$1(NativeSelectSelect, {
35139
35677
  ownerState,
@@ -35203,7 +35741,7 @@ NativeSelectInput.propTypes = {
35203
35741
  */
35204
35742
  variant: _pt.oneOf(["standard", "outlined", "filled"])
35205
35743
  };
35206
- const useUtilityClasses$W = (ownerState) => {
35744
+ const useUtilityClasses$X = (ownerState) => {
35207
35745
  const {
35208
35746
  classes: classes2,
35209
35747
  disableUnderline
@@ -35336,7 +35874,7 @@ const Input$1 = /* @__PURE__ */ React.forwardRef(function Input2(inProps, ref2)
35336
35874
  type: type2 = "text",
35337
35875
  ...other
35338
35876
  } = props;
35339
- const classes2 = useUtilityClasses$W(props);
35877
+ const classes2 = useUtilityClasses$X(props);
35340
35878
  const ownerState = {
35341
35879
  disableUnderline
35342
35880
  };
@@ -35549,6 +36087,121 @@ Input$1.propTypes = {
35549
36087
  value: _pt.any
35550
36088
  };
35551
36089
  Input$1.muiName = "Input";
36090
+ const useUtilityClasses$W = (ownerState) => {
36091
+ const {
36092
+ classes: classes2
36093
+ } = ownerState;
36094
+ const slots = {
36095
+ root: ["root"]
36096
+ };
36097
+ return composeClasses(slots, getNativeSelectUtilityClasses, classes2);
36098
+ };
36099
+ const defaultInput = /* @__PURE__ */ jsx$1(Input$1, {});
36100
+ const NativeSelect = /* @__PURE__ */ React.forwardRef(function NativeSelect2(inProps, ref2) {
36101
+ const props = useDefaultProps({
36102
+ name: "MuiNativeSelect",
36103
+ props: inProps
36104
+ });
36105
+ const {
36106
+ className,
36107
+ children: children2,
36108
+ classes: classesProp = {},
36109
+ IconComponent = ArrowDropDownIcon,
36110
+ input = defaultInput,
36111
+ inputProps,
36112
+ variant,
36113
+ ...other
36114
+ } = props;
36115
+ const muiFormControl = useFormControl();
36116
+ const fcs = formControlState({
36117
+ props,
36118
+ muiFormControl,
36119
+ states: ["variant"]
36120
+ });
36121
+ const ownerState = {
36122
+ ...props,
36123
+ classes: classesProp
36124
+ };
36125
+ const classes2 = useUtilityClasses$W(ownerState);
36126
+ const {
36127
+ root: root2,
36128
+ ...otherClasses
36129
+ } = classesProp;
36130
+ return /* @__PURE__ */ jsx$1(React.Fragment, {
36131
+ children: /* @__PURE__ */ React.cloneElement(input, {
36132
+ // Most of the logic is implemented in `NativeSelectInput`.
36133
+ // The `Select` component is a simple API wrapper to expose something better to play with.
36134
+ inputComponent: NativeSelectInput,
36135
+ inputProps: {
36136
+ children: children2,
36137
+ classes: otherClasses,
36138
+ IconComponent,
36139
+ variant: fcs.variant,
36140
+ type: void 0,
36141
+ // We render a select. We can ignore the type provided by the `Input`.
36142
+ ...inputProps,
36143
+ ...input ? input.props.inputProps : {}
36144
+ },
36145
+ ref: ref2,
36146
+ ...other,
36147
+ className: clsx(classes2.root, input.props.className, className)
36148
+ })
36149
+ });
36150
+ });
36151
+ NativeSelect.propTypes = {
36152
+ // ┌────────────────────────────── Warning ──────────────────────────────┐
36153
+ // │ These PropTypes are generated from the TypeScript type definitions. │
36154
+ // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
36155
+ // └─────────────────────────────────────────────────────────────────────┘
36156
+ /**
36157
+ * The option elements to populate the select with.
36158
+ * Can be some `<option>` elements.
36159
+ */
36160
+ children: _pt.node,
36161
+ /**
36162
+ * Override or extend the styles applied to the component.
36163
+ * @default {}
36164
+ */
36165
+ classes: _pt.object,
36166
+ /**
36167
+ * @ignore
36168
+ */
36169
+ className: _pt.string,
36170
+ /**
36171
+ * The icon that displays the arrow.
36172
+ * @default ArrowDropDownIcon
36173
+ */
36174
+ IconComponent: _pt.elementType,
36175
+ /**
36176
+ * An `Input` element; does not have to be a material-ui specific `Input`.
36177
+ * @default <Input />
36178
+ */
36179
+ input: _pt.element,
36180
+ /**
36181
+ * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/select#attributes) applied to the `select` element.
36182
+ */
36183
+ inputProps: _pt.object,
36184
+ /**
36185
+ * Callback fired when a menu item is selected.
36186
+ *
36187
+ * @param {React.ChangeEvent<HTMLSelectElement>} event The event source of the callback.
36188
+ * You can pull out the new value by accessing `event.target.value` (string).
36189
+ */
36190
+ onChange: _pt.func,
36191
+ /**
36192
+ * The system prop that allows defining system overrides as well as additional CSS styles.
36193
+ */
36194
+ sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object]),
36195
+ /**
36196
+ * The `input` value. The DOM API casts this to a string.
36197
+ */
36198
+ value: _pt.any,
36199
+ /**
36200
+ * The variant to use.
36201
+ */
36202
+ variant: _pt.oneOf(["filled", "outlined", "standard"])
36203
+ };
36204
+ NativeSelect.muiName = "Select";
35552
36205
  function getScale$2(value2) {
35553
36206
  return `scale(${value2}, ${value2 ** 2})`;
35554
36207
  }
@@ -173688,22 +174341,22 @@ function addDecoder(cases2, importFn) {
173688
174341
  }
173689
174342
  cases2.forEach((c2) => registry$1.set(c2, importFn));
173690
174343
  }
173691
- addDecoder([void 0, 1], () => import("./raw-DA0bjume.js").then((m2) => m2.default));
173692
- addDecoder(5, () => import("./lzw-BS2ckxRa.js").then((m2) => m2.default));
174344
+ addDecoder([void 0, 1], () => import("./raw-Vb44MxD9.js").then((m2) => m2.default));
174345
+ addDecoder(5, () => import("./lzw-CKBozwxj.js").then((m2) => m2.default));
173693
174346
  addDecoder(6, () => {
173694
174347
  throw new Error("old style JPEG compression is not supported.");
173695
174348
  });
173696
- addDecoder(7, () => import("./jpeg-HJZeqbJ9.js").then((m2) => m2.default));
173697
- addDecoder([8, 32946], () => import("./deflate-C-0XOaix.js").then((m2) => m2.default));
173698
- addDecoder(32773, () => import("./packbits-8sTofHBF.js").then((m2) => m2.default));
174349
+ addDecoder(7, () => import("./jpeg-KhuOxw4Z.js").then((m2) => m2.default));
174350
+ addDecoder([8, 32946], () => import("./deflate--aCxt3Uk.js").then((m2) => m2.default));
174351
+ addDecoder(32773, () => import("./packbits-DBXx1JcY.js").then((m2) => m2.default));
173699
174352
  addDecoder(
173700
174353
  34887,
173701
- () => import("./lerc-BtoOWLPL.js").then(async (m2) => {
174354
+ () => import("./lerc-CElkXFuI.js").then(async (m2) => {
173702
174355
  await m2.zstd.init();
173703
174356
  return m2;
173704
174357
  }).then((m2) => m2.default)
173705
174358
  );
173706
- addDecoder(50001, () => import("./webimage-C3yiEsf-.js").then((m2) => m2.default));
174359
+ addDecoder(50001, () => import("./webimage-Df6sOKlo.js").then((m2) => m2.default));
173707
174360
  function decodeRowAcc(row, stride) {
173708
174361
  let length2 = row.length - stride;
173709
174362
  let offset2 = 0;
@@ -245829,7 +246482,7 @@ function VolcanoPlot(props) {
245829
246482
  return [null, null];
245830
246483
  }
245831
246484
  let xExtentResult = extent$2(
245832
- computedData.flatMap((d) => extent$2(d.df.logFoldChange))
246485
+ computedData.flatMap((d) => extent$2(d.df.logFoldChange.filter((v) => Number.isFinite(v))))
245833
246486
  );
245834
246487
  const xAbsMax = Math.max(Math.abs(xExtentResult[0]), Math.abs(xExtentResult[1]));
245835
246488
  xExtentResult = [-xAbsMax, xAbsMax];
@@ -245874,7 +246527,8 @@ function VolcanoPlot(props) {
245874
246527
  const g2 = svg.append("g");
245875
246528
  filteredData.forEach((comparisonObject) => {
245876
246529
  const obsSetG = g2.append("g");
245877
- const { df: filteredDf, metadata: metadata2 } = comparisonObject;
246530
+ const { df: rawFilteredDf, metadata: metadata2 } = comparisonObject;
246531
+ const filteredDf = rawFilteredDf.filter((d) => !Number.isNaN(d.minusLog10p) && !Number.isNaN(d.logFoldChange));
245878
246532
  const coordinationValues = metadata2.coordination_values;
245879
246533
  const rawObsSetPath = coordinationValues.obsSetFilter ? coordinationValues.obsSetFilter[0] : coordinationValues.obsSetSelection[0];
245880
246534
  const obsSetPath = [...rawObsSetPath];
@@ -245977,7 +246631,7 @@ function VolcanoPlotOptions(props) {
245977
246631
  valueLabelDisplay: "auto",
245978
246632
  step: 1,
245979
246633
  min: 0,
245980
- max: 100
246634
+ max: 50
245981
246635
  }
245982
246636
  ))), /* @__PURE__ */ React__default.createElement(TableRow, null, /* @__PURE__ */ React__default.createElement(TableCell, { className: classes2.labelCell, variant: "head", scope: "row" }, /* @__PURE__ */ React__default.createElement(
245983
246637
  "label",
@@ -245999,7 +246653,7 @@ function VolcanoPlotOptions(props) {
245999
246653
  valueLabelDisplay: "auto",
246000
246654
  step: 0.5,
246001
246655
  min: 0,
246002
- max: 50
246656
+ max: 10
246003
246657
  }
246004
246658
  ))), /* @__PURE__ */ React__default.createElement(TableRow, null, /* @__PURE__ */ React__default.createElement(TableCell, { className: classes2.labelCell, variant: "head", scope: "row" }, /* @__PURE__ */ React__default.createElement(
246005
246659
  "label",
@@ -246144,6 +246798,9 @@ function VolcanoPlotSubscriber(props) {
246144
246798
  const onFeatureClick = useCallback((featureId2) => {
246145
246799
  setFeatureSelection([featureId2]);
246146
246800
  }, [setFeatureSelection]);
246801
+ const anyNonEmpty = useMemo(() => featureStats?.some(
246802
+ (d) => !d.metadata?.analysis_params?.is_empty
246803
+ ), [featureStats]);
246147
246804
  return /* @__PURE__ */ React__default.createElement(
246148
246805
  TitleInfo,
246149
246806
  {
@@ -246169,7 +246826,7 @@ function VolcanoPlotSubscriber(props) {
246169
246826
  }
246170
246827
  )
246171
246828
  },
246172
- /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, featureStats ? /* @__PURE__ */ React__default.createElement(
246829
+ /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, featureStats ? anyNonEmpty ? /* @__PURE__ */ React__default.createElement(
246173
246830
  VolcanoPlot,
246174
246831
  {
246175
246832
  theme,
@@ -246192,7 +246849,7 @@ function VolcanoPlotSubscriber(props) {
246192
246849
  featureLabelSignificanceThreshold,
246193
246850
  featureLabelFoldChangeThreshold
246194
246851
  }
246195
- ) : /* @__PURE__ */ React__default.createElement("span", null, "Select at least one ", obsType, " set."))
246852
+ ) : /* @__PURE__ */ React__default.createElement("span", null, "Differential expression tests were not performed for the currently selected groups due to insufficient data.") : /* @__PURE__ */ React__default.createElement("span", null, "Select at least one ", obsType, " set."))
246196
246853
  );
246197
246854
  }
246198
246855
  const MAX_BAR_SIZE = 40;
@@ -246257,6 +246914,7 @@ function CellSetCompositionBarPlot(props) {
246257
246914
  interceptExpectedSample: df.interceptExpectedSample[i2],
246258
246915
  effectExpectedSample: df.effectExpectedSample[i2],
246259
246916
  isCredibleEffect: df.isCredibleEffect[i2],
246917
+ significanceText: df.isCredibleEffect[i2] ? " " : "NS",
246260
246918
  // Boolean flag for wasReferenceObsSet (check metadata)
246261
246919
  isReferenceSet: obsSetId === referenceCellType
246262
246920
  };
@@ -246301,68 +246959,103 @@ function CellSetCompositionBarPlot(props) {
246301
246959
  }
246302
246960
  return void 0;
246303
246961
  }, [computedData]);
246962
+ const nsTextAlign = useMemo(() => {
246963
+ if (computedData) {
246964
+ const firstNotSig = computedData.find((d) => !d.isCredibleEffect);
246965
+ return firstNotSig?.logFoldChange < 0 ? "right" : "left";
246966
+ }
246967
+ return "center";
246968
+ }, [computedData]);
246969
+ const areAnySignificant = useMemo(() => computedData?.some(
246970
+ (d) => d.isCredibleEffect
246971
+ ), [computedData]);
246304
246972
  const xScale = {
246305
246973
  domain: xExtent
246306
246974
  };
246307
246975
  const spec = {
246308
- mark: { type: "bar", stroke: "black", cursor: "pointer" },
246309
- params: [
246976
+ layer: [
246310
246977
  {
246311
- name: "bar_select",
246312
- select: {
246313
- type: "point",
246314
- on: "click[event.shiftKey === false]",
246315
- fields: ["obsSetPath"],
246316
- empty: "none"
246978
+ params: [
246979
+ {
246980
+ name: "bar_select",
246981
+ select: {
246982
+ type: "point",
246983
+ on: "click[event.shiftKey === false]",
246984
+ fields: ["obsSetPath"],
246985
+ empty: "none"
246986
+ }
246987
+ },
246988
+ {
246989
+ name: "shift_bar_select",
246990
+ select: {
246991
+ type: "point",
246992
+ on: "click[event.shiftKey]",
246993
+ fields: ["obsSetPath"],
246994
+ empty: "none"
246995
+ }
246996
+ }
246997
+ ],
246998
+ mark: { type: "bar", stroke: "black", cursor: "pointer" },
246999
+ encoding: {
247000
+ y: {
247001
+ field: "keyName",
247002
+ type: "nominal",
247003
+ axis: { labelExpr: `substring(datum.label, ${keyLength})` },
247004
+ title: `${captializedObsType} Set`,
247005
+ sort: keys2
247006
+ },
247007
+ x: {
247008
+ // TODO: support using intercept+effect here based on user-selected options?
247009
+ field: "logFoldChange",
247010
+ type: "quantitative",
247011
+ title: "Log fold-change",
247012
+ scale: xScale
247013
+ },
247014
+ color: {
247015
+ field: "key",
247016
+ type: "nominal",
247017
+ scale: colorScale2,
247018
+ legend: null
247019
+ },
247020
+ fillOpacity: {
247021
+ field: "isCredibleEffect",
247022
+ type: "nominal",
247023
+ scale: opacityScale
247024
+ },
247025
+ strokeWidth: {
247026
+ field: "isReferenceSet",
247027
+ type: "nominal",
247028
+ scale: strokeWidthScale,
247029
+ legend: null
247030
+ },
247031
+ tooltip: {
247032
+ field: "effectExpectedSample",
247033
+ type: "quantitative"
247034
+ }
246317
247035
  }
246318
247036
  },
246319
247037
  {
246320
- name: "shift_bar_select",
246321
- select: {
246322
- type: "point",
246323
- on: "click[event.shiftKey]",
246324
- fields: ["obsSetPath"],
246325
- empty: "none"
247038
+ mark: { type: "text", align: nsTextAlign, dx: nsTextAlign === "right" ? -5 : 5 },
247039
+ encoding: {
247040
+ y: {
247041
+ field: "keyName",
247042
+ type: "nominal",
247043
+ axis: { labelExpr: `substring(datum.label, ${keyLength})` },
247044
+ title: `${captializedObsType} Set`,
247045
+ sort: keys2
247046
+ },
247047
+ x: {
247048
+ field: "logFoldChange",
247049
+ type: "quantitative",
247050
+ title: "Log fold-change",
247051
+ scale: xScale
247052
+ },
247053
+ text: {
247054
+ field: "significanceText"
247055
+ }
246326
247056
  }
246327
247057
  }
246328
247058
  ],
246329
- encoding: {
246330
- y: {
246331
- field: "keyName",
246332
- type: "nominal",
246333
- axis: { labelExpr: `substring(datum.label, ${keyLength})` },
246334
- title: `${captializedObsType} Set`,
246335
- sort: keys2
246336
- },
246337
- x: {
246338
- // TODO: support using intercept+effect here based on user-selected options?
246339
- field: "logFoldChange",
246340
- type: "quantitative",
246341
- title: "Log fold-change",
246342
- scale: xScale
246343
- },
246344
- color: {
246345
- field: "key",
246346
- type: "nominal",
246347
- scale: colorScale2,
246348
- legend: null
246349
- },
246350
- fillOpacity: {
246351
- field: "isCredibleEffect",
246352
- type: "nominal",
246353
- scale: opacityScale
246354
- },
246355
- strokeWidth: {
246356
- field: "isReferenceSet",
246357
- type: "nominal",
246358
- scale: strokeWidthScale,
246359
- legend: null
246360
- },
246361
- tooltip: {
246362
- field: "effectExpectedSample",
246363
- type: "quantitative"
246364
- }
246365
- },
246366
247059
  // TODO: for width, also subtract length of longest y-axis set name label.
246367
247060
  width: clamp$6(width2 - marginRight, 10, Infinity),
246368
247061
  height: clamp$6(height2 - marginBottom, 10, Infinity),
@@ -246382,7 +247075,7 @@ function CellSetCompositionBarPlot(props) {
246382
247075
  interceptExpectedSample: item.datum.interceptExpectedSample,
246383
247076
  effectExpectedSample: item.datum.effectExpectedSample
246384
247077
  }), [captializedObsType]);
246385
- return /* @__PURE__ */ React__default.createElement(
247078
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, areAnySignificant ? /* @__PURE__ */ React__default.createElement(
246386
247079
  VegaPlot,
246387
247080
  {
246388
247081
  data: computedData,
@@ -246390,7 +247083,7 @@ function CellSetCompositionBarPlot(props) {
246390
247083
  signalListeners,
246391
247084
  getTooltipText
246392
247085
  }
246393
- );
247086
+ ) : /* @__PURE__ */ React__default.createElement("p", null, "No results were significant for the selected conditions."));
246394
247087
  }
246395
247088
  function CellSetCompositionBarPlotSubscriber(props) {
246396
247089
  const {
@@ -247062,12 +247755,127 @@ function FeatureStatsTableSubscriber(props) {
247062
247755
  ) : /* @__PURE__ */ React__default.createElement("p", { style: { padding: "12px" } }, "Select at least one ", obsType, " set.")
247063
247756
  );
247064
247757
  }
247758
+ function pathToKey(pathArr) {
247759
+ return pathArr.join("___");
247760
+ }
247761
+ function keyToPath(keyStr) {
247762
+ return keyStr.split("___");
247763
+ }
247764
+ function SingleCellSetSelector(props) {
247765
+ const {
247766
+ multiObsSetSelection,
247767
+ singleObsSetSelection,
247768
+ setSingleObsSetSelection
247769
+ } = props;
247770
+ const handleChange = useCallback((event2) => {
247771
+ if (event2.target.value === "__none__") {
247772
+ setSingleObsSetSelection(null);
247773
+ } else {
247774
+ const nextPath = keyToPath(event2.target.value);
247775
+ setSingleObsSetSelection([
247776
+ nextPath
247777
+ ]);
247778
+ }
247779
+ }, []);
247780
+ const hasMultiOptions = Array.isArray(multiObsSetSelection) && multiObsSetSelection.length > 0;
247781
+ return /* @__PURE__ */ React__default.createElement(Grid, { container: true, size: 12 }, /* @__PURE__ */ React__default.createElement(
247782
+ NativeSelect,
247783
+ {
247784
+ onChange: handleChange,
247785
+ value: singleObsSetSelection ? pathToKey(singleObsSetSelection) : "__none__",
247786
+ variant: "standard",
247787
+ sx: { width: "100%" }
247788
+ },
247789
+ /* @__PURE__ */ React__default.createElement("option", { value: "__none__" }, "None"),
247790
+ hasMultiOptions ? /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, multiObsSetSelection.map((o2) => /* @__PURE__ */ React__default.createElement("option", { value: pathToKey(o2) }, o2.at(-1)))) : null
247791
+ ));
247792
+ }
247793
+ function SingleCellSetSelectorSubscriber(props) {
247794
+ const {
247795
+ title: title2 = "Cell Type of Interest",
247796
+ coordinationScopes: coordinationScopesRaw,
247797
+ removeGridComponent,
247798
+ theme,
247799
+ helpText = ViewHelpMapping.SINGLE_OBS_SET_SELECTOR
247800
+ } = props;
247801
+ useLoaders();
247802
+ const coordinationScopes = useCoordinationScopes(coordinationScopesRaw);
247803
+ const [{
247804
+ obsType,
247805
+ obsSetColor
247806
+ }, {
247807
+ setObsType,
247808
+ setObsSetColor
247809
+ }] = useCoordination(
247810
+ COMPONENT_COORDINATION_TYPES[ViewType$1.SINGLE_OBS_SET_SELECTOR],
247811
+ coordinationScopes
247812
+ );
247813
+ const obsSetSelectionScopes = useMultiCoordinationScopes(
247814
+ CoordinationType$1.OBS_SET_SELECTION,
247815
+ coordinationScopes
247816
+ );
247817
+ const [{
247818
+ obsSetSelection: multiObsSetSelection
247819
+ }, {
247820
+ setObsSetSelection: setMultiObsSetSelection
247821
+ }] = useCoordination(
247822
+ COMPONENT_COORDINATION_TYPES[ViewType$1.SINGLE_OBS_SET_SELECTOR],
247823
+ { obsSetSelection: obsSetSelectionScopes?.[0] }
247824
+ );
247825
+ const [{
247826
+ obsSetSelection: singleObsSetSelectionArr
247827
+ }, {
247828
+ setObsSetSelection: setSingleObsSetSelection
247829
+ }] = useCoordination(
247830
+ COMPONENT_COORDINATION_TYPES[ViewType$1.SINGLE_OBS_SET_SELECTOR],
247831
+ { obsSetSelection: obsSetSelectionScopes?.[1] }
247832
+ );
247833
+ const singleObsSetSelection = singleObsSetSelectionArr?.[0];
247834
+ useEffect(() => {
247835
+ if (!Array.isArray(multiObsSetSelection) || multiObsSetSelection.length === 0) {
247836
+ setSingleObsSetSelection(null);
247837
+ } else {
247838
+ const multiContainsSingle = multiObsSetSelection.some(
247839
+ (setPath) => isEqual$3(setPath, singleObsSetSelection)
247840
+ );
247841
+ if (!multiContainsSingle) {
247842
+ setSingleObsSetSelection([multiObsSetSelection?.[0]]);
247843
+ }
247844
+ }
247845
+ }, [multiObsSetSelection]);
247846
+ const errors = [];
247847
+ const isReady = useReady([]);
247848
+ return /* @__PURE__ */ React__default.createElement(
247849
+ TitleInfo,
247850
+ {
247851
+ title: title2,
247852
+ removeGridComponent,
247853
+ theme,
247854
+ isReady,
247855
+ helpText,
247856
+ errors,
247857
+ withPadding: false
247858
+ },
247859
+ Array.isArray(multiObsSetSelection) && multiObsSetSelection.length > 0 ? /* @__PURE__ */ React__default.createElement(
247860
+ SingleCellSetSelector,
247861
+ {
247862
+ theme,
247863
+ obsType,
247864
+ obsSetColor,
247865
+ multiObsSetSelection,
247866
+ singleObsSetSelection,
247867
+ setSingleObsSetSelection
247868
+ }
247869
+ ) : /* @__PURE__ */ React__default.createElement("p", { style: { padding: "12px" } }, "Select at least one ", obsType, " set.")
247870
+ );
247871
+ }
247065
247872
  export {
247066
247873
  BaseDecoder as B,
247067
247874
  CellSetExpressionPlotSubscriber as C,
247068
247875
  DotPlotSubscriber as D,
247069
247876
  ExpressionHistogramSubscriber as E,
247070
247877
  FeatureBarPlotSubscriber as F,
247878
+ SingleCellSetSelectorSubscriber as S,
247071
247879
  TreemapSubscriber as T,
247072
247880
  VolcanoPlotSubscriber as V,
247073
247881
  CellSetSizesPlotSubscriber as a,