@vitessce/statistical-plots 3.6.7 → 3.6.9

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 (40) hide show
  1. package/dist/{deflate-CIQ8HfQ4.js → deflate-DFg7j2aM.js} +1 -1
  2. package/dist/{index-DKYKw8DX.js → index-Dhdy8_KV.js} +860 -638
  3. package/dist/index.js +1 -1
  4. package/dist/{jpeg-L5T74jDu.js → jpeg-BAsU3Uj1.js} +1 -1
  5. package/dist/{lerc-xXmKz_nL.js → lerc-Bs40GmLw.js} +1 -1
  6. package/dist/{lzw-D-d5b3_9.js → lzw--6K-CH9V.js} +1 -1
  7. package/dist/{packbits-EdeFNk-p.js → packbits-DIcMoiDr.js} +1 -1
  8. package/dist/{raw-B0E5tGhb.js → raw-TJbs5T8I.js} +1 -1
  9. package/dist/{webimage-Dr7tpGET.js → webimage-DcmYEYr-.js} +1 -1
  10. package/dist-tsc/CellSetCompositionBarPlotSubscriber.d.ts.map +1 -1
  11. package/dist-tsc/CellSetCompositionBarPlotSubscriber.js +6 -3
  12. package/dist-tsc/CellSetExpressionPlotSubscriber.d.ts.map +1 -1
  13. package/dist-tsc/CellSetExpressionPlotSubscriber.js +16 -8
  14. package/dist-tsc/CellSetSizesPlotSubscriber.d.ts.map +1 -1
  15. package/dist-tsc/CellSetSizesPlotSubscriber.js +5 -2
  16. package/dist-tsc/DotPlotSubscriber.d.ts.map +1 -1
  17. package/dist-tsc/DotPlotSubscriber.js +17 -7
  18. package/dist-tsc/ExpressionHistogramSubscriber.d.ts.map +1 -1
  19. package/dist-tsc/ExpressionHistogramSubscriber.js +9 -3
  20. package/dist-tsc/FeatureBarPlotSubscriber.d.ts.map +1 -1
  21. package/dist-tsc/FeatureBarPlotSubscriber.js +11 -4
  22. package/dist-tsc/FeatureSetEnrichmentBarPlotSubscriber.d.ts.map +1 -1
  23. package/dist-tsc/FeatureSetEnrichmentBarPlotSubscriber.js +5 -2
  24. package/dist-tsc/FeatureStatsTableSubscriber.d.ts.map +1 -1
  25. package/dist-tsc/FeatureStatsTableSubscriber.js +5 -2
  26. package/dist-tsc/TreemapSubscriber.d.ts.map +1 -1
  27. package/dist-tsc/TreemapSubscriber.js +11 -5
  28. package/dist-tsc/VolcanoPlotSubscriber.d.ts.map +1 -1
  29. package/dist-tsc/VolcanoPlotSubscriber.js +7 -2
  30. package/package.json +8 -8
  31. package/src/CellSetCompositionBarPlotSubscriber.js +9 -2
  32. package/src/CellSetExpressionPlotSubscriber.js +30 -8
  33. package/src/CellSetSizesPlotSubscriber.js +5 -1
  34. package/src/DotPlotSubscriber.js +30 -7
  35. package/src/ExpressionHistogramSubscriber.js +13 -3
  36. package/src/FeatureBarPlotSubscriber.js +15 -4
  37. package/src/FeatureSetEnrichmentBarPlotSubscriber.js +8 -1
  38. package/src/FeatureStatsTableSubscriber.js +8 -1
  39. package/src/TreemapSubscriber.js +18 -4
  40. package/src/VolcanoPlotSubscriber.js +12 -1
@@ -163,9 +163,7 @@ const FileType$1 = {
163
163
  OBS_SETS_SPATIALDATA_ZARR: "obsSets.spatialdata.zarr",
164
164
  OBS_SPOTS_SPATIALDATA_ZARR: "obsSpots.spatialdata.zarr",
165
165
  FEATURE_LABELS_SPATIALDATA_ZARR: "featureLabels.spatialdata.zarr",
166
- // TODO:
167
- // OBS_POINTS_SPATIALDATA_ZARR: 'obsPoints.spatialdata.zarr',
168
- // OBS_LOCATIONS_SPATIALDATA_ZARR: 'obsLocations.spatialdata.zarr',
166
+ OBS_POINTS_SPATIALDATA_ZARR: "obsPoints.spatialdata.zarr",
169
167
  // SpatialData - zipped
170
168
  IMAGE_SPATIALDATA_ZARR_ZIP: "image.spatialdata.zarr.zip",
171
169
  LABELS_SPATIALDATA_ZARR_ZIP: "labels.spatialdata.zarr.zip",
@@ -174,6 +172,7 @@ const FileType$1 = {
174
172
  OBS_SETS_SPATIALDATA_ZARR_ZIP: "obsSets.spatialdata.zarr.zip",
175
173
  OBS_SPOTS_SPATIALDATA_ZARR_ZIP: "obsSpots.spatialdata.zarr.zip",
176
174
  FEATURE_LABELS_SPATIALDATA_ZARR_ZIP: "featureLabels.spatialdata.zarr.zip",
175
+ OBS_POINTS_SPATIALDATA_ZARR_ZIP: "obsPoints.spatialdata.zarr.zip",
177
176
  // MuData
178
177
  OBS_FEATURE_MATRIX_MUDATA_ZARR: "obsFeatureMatrix.mudata.zarr",
179
178
  OBS_SETS_MUDATA_ZARR: "obsSets.mudata.zarr",
@@ -432,6 +431,7 @@ const ViewHelpMapping = {
432
431
  [FileType$1.OBS_FEATURE_MATRIX_SPATIALDATA_ZARR]: DataType$2.OBS_FEATURE_MATRIX,
433
432
  [FileType$1.OBS_SETS_SPATIALDATA_ZARR]: DataType$2.OBS_SETS,
434
433
  [FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR]: DataType$2.FEATURE_LABELS,
434
+ [FileType$1.OBS_POINTS_SPATIALDATA_ZARR]: DataType$2.OBS_POINTS,
435
435
  // For new file types to support old file types
436
436
  [FileType$1.OBS_EMBEDDING_CELLS_JSON]: DataType$2.OBS_EMBEDDING,
437
437
  [FileType$1.OBS_LOCATIONS_CELLS_JSON]: DataType$2.OBS_LOCATIONS,
@@ -605,6 +605,9 @@ const ViewHelpMapping = {
605
605
  },
606
606
  [FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR]: {
607
607
  zip: FileType$1.FEATURE_LABELS_SPATIALDATA_ZARR_ZIP
608
+ },
609
+ [FileType$1.OBS_POINTS_SPATIALDATA_ZARR]: {
610
+ zip: FileType$1.OBS_POINTS_SPATIALDATA_ZARR_ZIP
608
611
  }
609
612
  });
610
613
  [
@@ -8241,6 +8244,9 @@ const configSchema1_0_16 = configSchema1_0_13.extend({
8241
8244
  const configSchema1_0_17 = configSchema1_0_16.extend({
8242
8245
  version: z.literal("1.0.17")
8243
8246
  });
8247
+ const configSchema1_0_18 = configSchema1_0_17.extend({
8248
+ version: z.literal("1.0.18")
8249
+ });
8244
8250
  configSchema1_0_0.shape.coordinationSpace.unwrap();
8245
8251
  configSchema1_0_0.shape.layout.element.shape.coordinationScopes.unwrap();
8246
8252
  function upgradeReplaceViewProp(prefix2, view, coordinationSpace) {
@@ -8748,7 +8754,54 @@ function upgradeFrom1_0_16(config2) {
8748
8754
  version: "1.0.17"
8749
8755
  };
8750
8756
  }
8751
- const latestConfigSchema = configSchema1_0_17;
8757
+ function upgradeFrom1_0_17(config2) {
8758
+ const newConfig = cloneDeep(config2);
8759
+ const { datasets } = newConfig;
8760
+ const newDatasets = datasets.map((datasetDef) => {
8761
+ const { files } = datasetDef;
8762
+ const newFiles = files.map((fileDef) => {
8763
+ const { fileType, options } = fileDef;
8764
+ if (fileType === "spatialdata.zarr" || fileType === "spatialdata.zarr.zip") {
8765
+ if (options.labels && options.shapes) {
8766
+ throw new Error("Cannot upgrade both labels and shapes at the same time. For now, a workaround is to include two separate spatialdata.zarr file definitions, one for labels and one for shapes.");
8767
+ }
8768
+ if (options.labels) {
8769
+ const newOptions = {
8770
+ ...options,
8771
+ obsSegmentations: options.labels
8772
+ };
8773
+ delete newOptions.labels;
8774
+ return {
8775
+ ...fileDef,
8776
+ options: newOptions
8777
+ };
8778
+ }
8779
+ if (options.shapes) {
8780
+ const newOptions = {
8781
+ ...options,
8782
+ obsSegmentations: options.shapes
8783
+ };
8784
+ delete newOptions.shapes;
8785
+ return {
8786
+ ...fileDef,
8787
+ options: newOptions
8788
+ };
8789
+ }
8790
+ }
8791
+ return fileDef;
8792
+ });
8793
+ return {
8794
+ ...datasetDef,
8795
+ files: newFiles
8796
+ };
8797
+ });
8798
+ return {
8799
+ ...newConfig,
8800
+ datasets: newDatasets,
8801
+ version: "1.0.18"
8802
+ };
8803
+ }
8804
+ const latestConfigSchema = configSchema1_0_18;
8752
8805
  const SCHEMA_HANDLERS = [
8753
8806
  [configSchema0_1_0, upgradeFrom0_1_0],
8754
8807
  [configSchema1_0_0, upgradeFrom1_0_0],
@@ -8767,7 +8820,8 @@ const SCHEMA_HANDLERS = [
8767
8820
  [configSchema1_0_13, upgradeFrom1_0_13],
8768
8821
  [configSchema1_0_14, upgradeFrom1_0_14],
8769
8822
  [configSchema1_0_15, upgradeFrom1_0_15],
8770
- [configSchema1_0_16, upgradeFrom1_0_16]
8823
+ [configSchema1_0_16, upgradeFrom1_0_16],
8824
+ [configSchema1_0_17, upgradeFrom1_0_17]
8771
8825
  ];
8772
8826
  var re$3 = { exports: {} };
8773
8827
  var constants$3;
@@ -11010,10 +11064,14 @@ const imageSpatialdataSchema = z.object({
11010
11064
  coordinateSystem: z.string().optional().describe('The name of a coordinate transformation output used to transform the image. If not provided, the "global" coordinate system is assumed.')
11011
11065
  });
11012
11066
  const obsSegmentationsSpatialdataSchema = z.object({
11013
- // TODO: should this be renamed labelsSpatialdataSchema?
11014
- // TODO: support obsTypesFromChannelNames?
11015
- path: z.string(),
11016
- tablePath: z.string().optional().describe("The path to a table which annotates the labels. If available but not specified, the spot identifiers may not be aligned with associated tabular data as expected."),
11067
+ // TODO: support obsTypesFromElementNames?
11068
+ path: z.string().describe("The path to the segmentation data, stored in either shapes/ or labels/."),
11069
+ tablePath: z.string().optional().describe("The path to a table which annotates the labels or shapes. If available but not specified, the spot identifiers may not be aligned with associated tabular data as expected."),
11070
+ coordinateSystem: z.string().optional().describe('The name of a coordinate transformation output used to transform the image. If not provided, the "global" coordinate system is assumed.')
11071
+ });
11072
+ const obsPointsSpatialdataSchema = z.object({
11073
+ path: z.string().describe("The path to the point data."),
11074
+ tablePath: z.string().optional().describe("The path to a table which annotates the points. If available but not specified, the spot identifiers may not be aligned with associated tabular data as expected."),
11017
11075
  coordinateSystem: z.string().optional().describe('The name of a coordinate transformation output used to transform the image. If not provided, the "global" coordinate system is assumed.')
11018
11076
  });
11019
11077
  z.object({
@@ -11133,13 +11191,10 @@ z.object({
11133
11191
  image: imageSpatialdataSchema,
11134
11192
  // TODO: should this be a special schema
11135
11193
  // to allow specifying fileUid (like for embeddingType)?
11136
- // TODO: allow multiple labels?
11137
- labels: obsSegmentationsSpatialdataSchema,
11194
+ // TODO: allow multiple labels/shapes?
11195
+ obsSegmentations: obsSegmentationsSpatialdataSchema,
11196
+ obsPoints: obsPointsSpatialdataSchema,
11138
11197
  // TODO: allow multiple shapes?
11139
- // TODO: unify labels and shapes to obsSegmentations,
11140
- // then distinguish in expand function based on
11141
- // "labels/*" vs. "shapes/*" in path?
11142
- shapes: obsSegmentationsSpatialdataSchema,
11143
11198
  obsFeatureMatrix: obsFeatureMatrixSpatialdataSchema,
11144
11199
  obsSpots: obsSpotsSpatialdataSchema,
11145
11200
  // TODO: obsPoints
@@ -28067,6 +28122,586 @@ ButtonBase.propTypes = {
28067
28122
  */
28068
28123
  type: _pt.oneOfType([_pt.oneOf(["button", "reset", "submit"]), _pt.string])
28069
28124
  };
28125
+ function hasCorrectMainProperty(obj) {
28126
+ return typeof obj.main === "string";
28127
+ }
28128
+ function checkSimplePaletteColorValues(obj, additionalPropertiesToCheck = []) {
28129
+ if (!hasCorrectMainProperty(obj)) {
28130
+ return false;
28131
+ }
28132
+ for (const value2 of additionalPropertiesToCheck) {
28133
+ if (!obj.hasOwnProperty(value2) || typeof obj[value2] !== "string") {
28134
+ return false;
28135
+ }
28136
+ }
28137
+ return true;
28138
+ }
28139
+ function createSimplePaletteValueFilter(additionalPropertiesToCheck = []) {
28140
+ return ([, value2]) => value2 && checkSimplePaletteColorValues(value2, additionalPropertiesToCheck);
28141
+ }
28142
+ function getCircularProgressUtilityClass(slot) {
28143
+ return generateUtilityClass("MuiCircularProgress", slot);
28144
+ }
28145
+ generateUtilityClasses("MuiCircularProgress", ["root", "determinate", "indeterminate", "colorPrimary", "colorSecondary", "svg", "circle", "circleDeterminate", "circleIndeterminate", "circleDisableShrink"]);
28146
+ const SIZE$2 = 44;
28147
+ const circularRotateKeyframe = keyframes`
28148
+ 0% {
28149
+ transform: rotate(0deg);
28150
+ }
28151
+
28152
+ 100% {
28153
+ transform: rotate(360deg);
28154
+ }
28155
+ `;
28156
+ const circularDashKeyframe = keyframes`
28157
+ 0% {
28158
+ stroke-dasharray: 1px, 200px;
28159
+ stroke-dashoffset: 0;
28160
+ }
28161
+
28162
+ 50% {
28163
+ stroke-dasharray: 100px, 200px;
28164
+ stroke-dashoffset: -15px;
28165
+ }
28166
+
28167
+ 100% {
28168
+ stroke-dasharray: 1px, 200px;
28169
+ stroke-dashoffset: -126px;
28170
+ }
28171
+ `;
28172
+ const rotateAnimation = typeof circularRotateKeyframe !== "string" ? css`
28173
+ animation: ${circularRotateKeyframe} 1.4s linear infinite;
28174
+ ` : null;
28175
+ const dashAnimation = typeof circularDashKeyframe !== "string" ? css`
28176
+ animation: ${circularDashKeyframe} 1.4s ease-in-out infinite;
28177
+ ` : null;
28178
+ const useUtilityClasses$1j = (ownerState) => {
28179
+ const {
28180
+ classes: classes2,
28181
+ variant,
28182
+ color: color2,
28183
+ disableShrink
28184
+ } = ownerState;
28185
+ const slots = {
28186
+ root: ["root", variant, `color${capitalize$1(color2)}`],
28187
+ svg: ["svg"],
28188
+ circle: ["circle", `circle${capitalize$1(variant)}`, disableShrink && "circleDisableShrink"]
28189
+ };
28190
+ return composeClasses(slots, getCircularProgressUtilityClass, classes2);
28191
+ };
28192
+ const CircularProgressRoot = styled("span", {
28193
+ name: "MuiCircularProgress",
28194
+ slot: "Root",
28195
+ overridesResolver: (props, styles2) => {
28196
+ const {
28197
+ ownerState
28198
+ } = props;
28199
+ return [styles2.root, styles2[ownerState.variant], styles2[`color${capitalize$1(ownerState.color)}`]];
28200
+ }
28201
+ })(memoTheme(({
28202
+ theme
28203
+ }) => ({
28204
+ display: "inline-block",
28205
+ variants: [{
28206
+ props: {
28207
+ variant: "determinate"
28208
+ },
28209
+ style: {
28210
+ transition: theme.transitions.create("transform")
28211
+ }
28212
+ }, {
28213
+ props: {
28214
+ variant: "indeterminate"
28215
+ },
28216
+ style: rotateAnimation || {
28217
+ animation: `${circularRotateKeyframe} 1.4s linear infinite`
28218
+ }
28219
+ }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color2]) => ({
28220
+ props: {
28221
+ color: color2
28222
+ },
28223
+ style: {
28224
+ color: (theme.vars || theme).palette[color2].main
28225
+ }
28226
+ }))]
28227
+ })));
28228
+ const CircularProgressSVG = styled("svg", {
28229
+ name: "MuiCircularProgress",
28230
+ slot: "Svg"
28231
+ })({
28232
+ display: "block"
28233
+ // Keeps the progress centered
28234
+ });
28235
+ const CircularProgressCircle = styled("circle", {
28236
+ name: "MuiCircularProgress",
28237
+ slot: "Circle",
28238
+ overridesResolver: (props, styles2) => {
28239
+ const {
28240
+ ownerState
28241
+ } = props;
28242
+ return [styles2.circle, styles2[`circle${capitalize$1(ownerState.variant)}`], ownerState.disableShrink && styles2.circleDisableShrink];
28243
+ }
28244
+ })(memoTheme(({
28245
+ theme
28246
+ }) => ({
28247
+ stroke: "currentColor",
28248
+ variants: [{
28249
+ props: {
28250
+ variant: "determinate"
28251
+ },
28252
+ style: {
28253
+ transition: theme.transitions.create("stroke-dashoffset")
28254
+ }
28255
+ }, {
28256
+ props: {
28257
+ variant: "indeterminate"
28258
+ },
28259
+ style: {
28260
+ // Some default value that looks fine waiting for the animation to kicks in.
28261
+ strokeDasharray: "80px, 200px",
28262
+ strokeDashoffset: 0
28263
+ // Add the unit to fix a Edge 16 and below bug.
28264
+ }
28265
+ }, {
28266
+ props: ({
28267
+ ownerState
28268
+ }) => ownerState.variant === "indeterminate" && !ownerState.disableShrink,
28269
+ style: dashAnimation || {
28270
+ // At runtime for Pigment CSS, `bufferAnimation` will be null and the generated keyframe will be used.
28271
+ animation: `${circularDashKeyframe} 1.4s ease-in-out infinite`
28272
+ }
28273
+ }]
28274
+ })));
28275
+ const CircularProgress = /* @__PURE__ */ React.forwardRef(function CircularProgress2(inProps, ref2) {
28276
+ const props = useDefaultProps({
28277
+ props: inProps,
28278
+ name: "MuiCircularProgress"
28279
+ });
28280
+ const {
28281
+ className,
28282
+ color: color2 = "primary",
28283
+ disableShrink = false,
28284
+ size = 40,
28285
+ style: style2,
28286
+ thickness = 3.6,
28287
+ value: value2 = 0,
28288
+ variant = "indeterminate",
28289
+ ...other
28290
+ } = props;
28291
+ const ownerState = {
28292
+ ...props,
28293
+ color: color2,
28294
+ disableShrink,
28295
+ size,
28296
+ thickness,
28297
+ value: value2,
28298
+ variant
28299
+ };
28300
+ const classes2 = useUtilityClasses$1j(ownerState);
28301
+ const circleStyle = {};
28302
+ const rootStyle = {};
28303
+ const rootProps = {};
28304
+ if (variant === "determinate") {
28305
+ const circumference = 2 * Math.PI * ((SIZE$2 - thickness) / 2);
28306
+ circleStyle.strokeDasharray = circumference.toFixed(3);
28307
+ rootProps["aria-valuenow"] = Math.round(value2);
28308
+ circleStyle.strokeDashoffset = `${((100 - value2) / 100 * circumference).toFixed(3)}px`;
28309
+ rootStyle.transform = "rotate(-90deg)";
28310
+ }
28311
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgressRoot, {
28312
+ className: clsx(classes2.root, className),
28313
+ style: {
28314
+ width: size,
28315
+ height: size,
28316
+ ...rootStyle,
28317
+ ...style2
28318
+ },
28319
+ ownerState,
28320
+ ref: ref2,
28321
+ role: "progressbar",
28322
+ ...rootProps,
28323
+ ...other,
28324
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgressSVG, {
28325
+ className: classes2.svg,
28326
+ ownerState,
28327
+ viewBox: `${SIZE$2 / 2} ${SIZE$2 / 2} ${SIZE$2} ${SIZE$2}`,
28328
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgressCircle, {
28329
+ className: classes2.circle,
28330
+ style: circleStyle,
28331
+ ownerState,
28332
+ cx: SIZE$2,
28333
+ cy: SIZE$2,
28334
+ r: (SIZE$2 - thickness) / 2,
28335
+ fill: "none",
28336
+ strokeWidth: thickness
28337
+ })
28338
+ })
28339
+ });
28340
+ });
28341
+ CircularProgress.propTypes = {
28342
+ // ┌────────────────────────────── Warning ──────────────────────────────┐
28343
+ // │ These PropTypes are generated from the TypeScript type definitions. │
28344
+ // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
28345
+ // └─────────────────────────────────────────────────────────────────────┘
28346
+ /**
28347
+ * Override or extend the styles applied to the component.
28348
+ */
28349
+ classes: _pt.object,
28350
+ /**
28351
+ * @ignore
28352
+ */
28353
+ className: _pt.string,
28354
+ /**
28355
+ * The color of the component.
28356
+ * It supports both default and custom theme colors, which can be added as shown in the
28357
+ * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
28358
+ * @default 'primary'
28359
+ */
28360
+ color: _pt.oneOfType([_pt.oneOf(["inherit", "primary", "secondary", "error", "info", "success", "warning"]), _pt.string]),
28361
+ /**
28362
+ * If `true`, the shrink animation is disabled.
28363
+ * This only works if variant is `indeterminate`.
28364
+ * @default false
28365
+ */
28366
+ disableShrink: chainPropTypes(_pt.bool, (props) => {
28367
+ if (props.disableShrink && props.variant && props.variant !== "indeterminate") {
28368
+ return new Error("MUI: You have provided the `disableShrink` prop with a variant other than `indeterminate`. This will have no effect.");
28369
+ }
28370
+ return null;
28371
+ }),
28372
+ /**
28373
+ * The size of the component.
28374
+ * If using a number, the pixel unit is assumed.
28375
+ * If using a string, you need to provide the CSS unit, for example '3rem'.
28376
+ * @default 40
28377
+ */
28378
+ size: _pt.oneOfType([_pt.number, _pt.string]),
28379
+ /**
28380
+ * @ignore
28381
+ */
28382
+ style: _pt.object,
28383
+ /**
28384
+ * The system prop that allows defining system overrides as well as additional CSS styles.
28385
+ */
28386
+ sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object]),
28387
+ /**
28388
+ * The thickness of the circle.
28389
+ * @default 3.6
28390
+ */
28391
+ thickness: _pt.number,
28392
+ /**
28393
+ * The value of the progress indicator for the determinate variant.
28394
+ * Value between 0 and 100.
28395
+ * @default 0
28396
+ */
28397
+ value: _pt.number,
28398
+ /**
28399
+ * The variant to use.
28400
+ * Use indeterminate when there is no progress value.
28401
+ * @default 'indeterminate'
28402
+ */
28403
+ variant: _pt.oneOf(["determinate", "indeterminate"])
28404
+ };
28405
+ function getIconButtonUtilityClass(slot) {
28406
+ return generateUtilityClass("MuiIconButton", slot);
28407
+ }
28408
+ const iconButtonClasses = generateUtilityClasses("MuiIconButton", ["root", "disabled", "colorInherit", "colorPrimary", "colorSecondary", "colorError", "colorInfo", "colorSuccess", "colorWarning", "edgeStart", "edgeEnd", "sizeSmall", "sizeMedium", "sizeLarge", "loading", "loadingIndicator", "loadingWrapper"]);
28409
+ const useUtilityClasses$1i = (ownerState) => {
28410
+ const {
28411
+ classes: classes2,
28412
+ disabled,
28413
+ color: color2,
28414
+ edge,
28415
+ size,
28416
+ loading
28417
+ } = ownerState;
28418
+ const slots = {
28419
+ root: ["root", loading && "loading", disabled && "disabled", color2 !== "default" && `color${capitalize$1(color2)}`, edge && `edge${capitalize$1(edge)}`, `size${capitalize$1(size)}`],
28420
+ loadingIndicator: ["loadingIndicator"],
28421
+ loadingWrapper: ["loadingWrapper"]
28422
+ };
28423
+ return composeClasses(slots, getIconButtonUtilityClass, classes2);
28424
+ };
28425
+ const IconButtonRoot = styled(ButtonBase, {
28426
+ name: "MuiIconButton",
28427
+ slot: "Root",
28428
+ overridesResolver: (props, styles2) => {
28429
+ const {
28430
+ ownerState
28431
+ } = props;
28432
+ return [styles2.root, ownerState.loading && styles2.loading, ownerState.color !== "default" && styles2[`color${capitalize$1(ownerState.color)}`], ownerState.edge && styles2[`edge${capitalize$1(ownerState.edge)}`], styles2[`size${capitalize$1(ownerState.size)}`]];
28433
+ }
28434
+ })(memoTheme(({
28435
+ theme
28436
+ }) => ({
28437
+ textAlign: "center",
28438
+ flex: "0 0 auto",
28439
+ fontSize: theme.typography.pxToRem(24),
28440
+ padding: 8,
28441
+ borderRadius: "50%",
28442
+ color: (theme.vars || theme).palette.action.active,
28443
+ transition: theme.transitions.create("background-color", {
28444
+ duration: theme.transitions.duration.shortest
28445
+ }),
28446
+ variants: [{
28447
+ props: (props) => !props.disableRipple,
28448
+ style: {
28449
+ "--IconButton-hoverBg": theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha$1(theme.palette.action.active, theme.palette.action.hoverOpacity),
28450
+ "&:hover": {
28451
+ backgroundColor: "var(--IconButton-hoverBg)",
28452
+ // Reset on touch devices, it doesn't add specificity
28453
+ "@media (hover: none)": {
28454
+ backgroundColor: "transparent"
28455
+ }
28456
+ }
28457
+ }
28458
+ }, {
28459
+ props: {
28460
+ edge: "start"
28461
+ },
28462
+ style: {
28463
+ marginLeft: -12
28464
+ }
28465
+ }, {
28466
+ props: {
28467
+ edge: "start",
28468
+ size: "small"
28469
+ },
28470
+ style: {
28471
+ marginLeft: -3
28472
+ }
28473
+ }, {
28474
+ props: {
28475
+ edge: "end"
28476
+ },
28477
+ style: {
28478
+ marginRight: -12
28479
+ }
28480
+ }, {
28481
+ props: {
28482
+ edge: "end",
28483
+ size: "small"
28484
+ },
28485
+ style: {
28486
+ marginRight: -3
28487
+ }
28488
+ }]
28489
+ })), memoTheme(({
28490
+ theme
28491
+ }) => ({
28492
+ variants: [{
28493
+ props: {
28494
+ color: "inherit"
28495
+ },
28496
+ style: {
28497
+ color: "inherit"
28498
+ }
28499
+ }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color2]) => ({
28500
+ props: {
28501
+ color: color2
28502
+ },
28503
+ style: {
28504
+ color: (theme.vars || theme).palette[color2].main
28505
+ }
28506
+ })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color2]) => ({
28507
+ props: {
28508
+ color: color2
28509
+ },
28510
+ style: {
28511
+ "--IconButton-hoverBg": theme.vars ? `rgba(${(theme.vars || theme).palette[color2].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha$1((theme.vars || theme).palette[color2].main, theme.palette.action.hoverOpacity)
28512
+ }
28513
+ })), {
28514
+ props: {
28515
+ size: "small"
28516
+ },
28517
+ style: {
28518
+ padding: 5,
28519
+ fontSize: theme.typography.pxToRem(18)
28520
+ }
28521
+ }, {
28522
+ props: {
28523
+ size: "large"
28524
+ },
28525
+ style: {
28526
+ padding: 12,
28527
+ fontSize: theme.typography.pxToRem(28)
28528
+ }
28529
+ }],
28530
+ [`&.${iconButtonClasses.disabled}`]: {
28531
+ backgroundColor: "transparent",
28532
+ color: (theme.vars || theme).palette.action.disabled
28533
+ },
28534
+ [`&.${iconButtonClasses.loading}`]: {
28535
+ color: "transparent"
28536
+ }
28537
+ })));
28538
+ const IconButtonLoadingIndicator = styled("span", {
28539
+ name: "MuiIconButton",
28540
+ slot: "LoadingIndicator"
28541
+ })(({
28542
+ theme
28543
+ }) => ({
28544
+ display: "none",
28545
+ position: "absolute",
28546
+ visibility: "visible",
28547
+ top: "50%",
28548
+ left: "50%",
28549
+ transform: "translate(-50%, -50%)",
28550
+ color: (theme.vars || theme).palette.action.disabled,
28551
+ variants: [{
28552
+ props: {
28553
+ loading: true
28554
+ },
28555
+ style: {
28556
+ display: "flex"
28557
+ }
28558
+ }]
28559
+ }));
28560
+ const IconButton = /* @__PURE__ */ React.forwardRef(function IconButton2(inProps, ref2) {
28561
+ const props = useDefaultProps({
28562
+ props: inProps,
28563
+ name: "MuiIconButton"
28564
+ });
28565
+ const {
28566
+ edge = false,
28567
+ children: children2,
28568
+ className,
28569
+ color: color2 = "default",
28570
+ disabled = false,
28571
+ disableFocusRipple = false,
28572
+ size = "medium",
28573
+ id: idProp,
28574
+ loading = null,
28575
+ loadingIndicator: loadingIndicatorProp,
28576
+ ...other
28577
+ } = props;
28578
+ const loadingId = useId(idProp);
28579
+ const loadingIndicator = loadingIndicatorProp ?? /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgress, {
28580
+ "aria-labelledby": loadingId,
28581
+ color: "inherit",
28582
+ size: 16
28583
+ });
28584
+ const ownerState = {
28585
+ ...props,
28586
+ edge,
28587
+ color: color2,
28588
+ disabled,
28589
+ disableFocusRipple,
28590
+ loading,
28591
+ loadingIndicator,
28592
+ size
28593
+ };
28594
+ const classes2 = useUtilityClasses$1i(ownerState);
28595
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(IconButtonRoot, {
28596
+ id: loading ? loadingId : idProp,
28597
+ className: clsx(classes2.root, className),
28598
+ centerRipple: true,
28599
+ focusRipple: !disableFocusRipple,
28600
+ disabled: disabled || loading,
28601
+ ref: ref2,
28602
+ ...other,
28603
+ ownerState,
28604
+ children: [typeof loading === "boolean" && // use plain HTML span to minimize the runtime overhead
28605
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
28606
+ className: classes2.loadingWrapper,
28607
+ style: {
28608
+ display: "contents"
28609
+ },
28610
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconButtonLoadingIndicator, {
28611
+ className: classes2.loadingIndicator,
28612
+ ownerState,
28613
+ children: loading && loadingIndicator
28614
+ })
28615
+ }), children2]
28616
+ });
28617
+ });
28618
+ IconButton.propTypes = {
28619
+ // ┌────────────────────────────── Warning ──────────────────────────────┐
28620
+ // │ These PropTypes are generated from the TypeScript type definitions. │
28621
+ // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
28622
+ // └─────────────────────────────────────────────────────────────────────┘
28623
+ /**
28624
+ * The icon to display.
28625
+ */
28626
+ children: chainPropTypes(_pt.node, (props) => {
28627
+ const found = React.Children.toArray(props.children).some((child) => /* @__PURE__ */ React.isValidElement(child) && child.props.onClick);
28628
+ if (found) {
28629
+ return new Error(["MUI: You are providing an onClick event listener to a child of a button element.", "Prefer applying it to the IconButton directly.", "This guarantees that the whole <button> will be responsive to click events."].join("\n"));
28630
+ }
28631
+ return null;
28632
+ }),
28633
+ /**
28634
+ * Override or extend the styles applied to the component.
28635
+ */
28636
+ classes: _pt.object,
28637
+ /**
28638
+ * @ignore
28639
+ */
28640
+ className: _pt.string,
28641
+ /**
28642
+ * The color of the component.
28643
+ * It supports both default and custom theme colors, which can be added as shown in the
28644
+ * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
28645
+ * @default 'default'
28646
+ */
28647
+ color: _pt.oneOfType([_pt.oneOf(["inherit", "default", "primary", "secondary", "error", "info", "success", "warning"]), _pt.string]),
28648
+ /**
28649
+ * If `true`, the component is disabled.
28650
+ * @default false
28651
+ */
28652
+ disabled: _pt.bool,
28653
+ /**
28654
+ * If `true`, the keyboard focus ripple is disabled.
28655
+ * @default false
28656
+ */
28657
+ disableFocusRipple: _pt.bool,
28658
+ /**
28659
+ * If `true`, the ripple effect is disabled.
28660
+ *
28661
+ * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
28662
+ * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
28663
+ * @default false
28664
+ */
28665
+ disableRipple: _pt.bool,
28666
+ /**
28667
+ * If given, uses a negative margin to counteract the padding on one
28668
+ * side (this is often helpful for aligning the left or right
28669
+ * side of the icon with content above or below, without ruining the border
28670
+ * size and shape).
28671
+ * @default false
28672
+ */
28673
+ edge: _pt.oneOf(["end", "start", false]),
28674
+ /**
28675
+ * @ignore
28676
+ */
28677
+ id: _pt.string,
28678
+ /**
28679
+ * If `true`, the loading indicator is visible and the button is disabled.
28680
+ * If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).
28681
+ * @default null
28682
+ */
28683
+ loading: _pt.bool,
28684
+ /**
28685
+ * Element placed before the children if the button is in loading state.
28686
+ * The node should contain an element with `role="progressbar"` with an accessible name.
28687
+ * By default, it renders a `CircularProgress` that is labeled by the button itself.
28688
+ * @default <CircularProgress color="inherit" size={16} />
28689
+ */
28690
+ loadingIndicator: _pt.node,
28691
+ /**
28692
+ * The size of the component.
28693
+ * `small` is equivalent to the dense button styling.
28694
+ * @default 'medium'
28695
+ */
28696
+ size: _pt.oneOfType([_pt.oneOf(["small", "medium", "large"]), _pt.string]),
28697
+ /**
28698
+ * The system prop that allows defining system overrides as well as additional CSS styles.
28699
+ */
28700
+ sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object])
28701
+ };
28702
+ const ClearIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
28703
+ d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
28704
+ }), "Close");
28070
28705
  const usePreviousProps = (value2) => {
28071
28706
  const ref2 = React.useRef({});
28072
28707
  React.useEffect(() => {
@@ -30494,7 +31129,7 @@ function isHTMLElement(element2) {
30494
31129
  function isVirtualElement(element2) {
30495
31130
  return !isHTMLElement(element2);
30496
31131
  }
30497
- const useUtilityClasses$1j = (ownerState) => {
31132
+ const useUtilityClasses$1h = (ownerState) => {
30498
31133
  const {
30499
31134
  classes: classes2
30500
31135
  } = ownerState;
@@ -30603,7 +31238,7 @@ const PopperTooltip = /* @__PURE__ */ React.forwardRef(function PopperTooltip2(p
30603
31238
  if (TransitionProps !== null) {
30604
31239
  childProps.TransitionProps = TransitionProps;
30605
31240
  }
30606
- const classes2 = useUtilityClasses$1j(props);
31241
+ const classes2 = useUtilityClasses$1h(props);
30607
31242
  const Root = slots.root ?? "div";
30608
31243
  const rootProps = useSlotProps({
30609
31244
  elementType: Root,
@@ -31002,7 +31637,7 @@ function getListSubheaderUtilityClass(slot) {
31002
31637
  return generateUtilityClass("MuiListSubheader", slot);
31003
31638
  }
31004
31639
  generateUtilityClasses("MuiListSubheader", ["root", "colorPrimary", "colorInherit", "gutters", "inset", "sticky"]);
31005
- const useUtilityClasses$1i = (ownerState) => {
31640
+ const useUtilityClasses$1g = (ownerState) => {
31006
31641
  const {
31007
31642
  classes: classes2,
31008
31643
  color: color2,
@@ -31097,7 +31732,7 @@ const ListSubheader = /* @__PURE__ */ React.forwardRef(function ListSubheader2(i
31097
31732
  disableSticky,
31098
31733
  inset
31099
31734
  };
31100
- const classes2 = useUtilityClasses$1i(ownerState);
31735
+ const classes2 = useUtilityClasses$1g(ownerState);
31101
31736
  return /* @__PURE__ */ jsxRuntimeExports.jsx(ListSubheaderRoot, {
31102
31737
  as: component,
31103
31738
  className: clsx(classes2.root, className),
@@ -31156,583 +31791,6 @@ ListSubheader.propTypes = {
31156
31791
  */
31157
31792
  sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object])
31158
31793
  };
31159
- function hasCorrectMainProperty(obj) {
31160
- return typeof obj.main === "string";
31161
- }
31162
- function checkSimplePaletteColorValues(obj, additionalPropertiesToCheck = []) {
31163
- if (!hasCorrectMainProperty(obj)) {
31164
- return false;
31165
- }
31166
- for (const value2 of additionalPropertiesToCheck) {
31167
- if (!obj.hasOwnProperty(value2) || typeof obj[value2] !== "string") {
31168
- return false;
31169
- }
31170
- }
31171
- return true;
31172
- }
31173
- function createSimplePaletteValueFilter(additionalPropertiesToCheck = []) {
31174
- return ([, value2]) => value2 && checkSimplePaletteColorValues(value2, additionalPropertiesToCheck);
31175
- }
31176
- function getCircularProgressUtilityClass(slot) {
31177
- return generateUtilityClass("MuiCircularProgress", slot);
31178
- }
31179
- generateUtilityClasses("MuiCircularProgress", ["root", "determinate", "indeterminate", "colorPrimary", "colorSecondary", "svg", "circle", "circleDeterminate", "circleIndeterminate", "circleDisableShrink"]);
31180
- const SIZE$2 = 44;
31181
- const circularRotateKeyframe = keyframes`
31182
- 0% {
31183
- transform: rotate(0deg);
31184
- }
31185
-
31186
- 100% {
31187
- transform: rotate(360deg);
31188
- }
31189
- `;
31190
- const circularDashKeyframe = keyframes`
31191
- 0% {
31192
- stroke-dasharray: 1px, 200px;
31193
- stroke-dashoffset: 0;
31194
- }
31195
-
31196
- 50% {
31197
- stroke-dasharray: 100px, 200px;
31198
- stroke-dashoffset: -15px;
31199
- }
31200
-
31201
- 100% {
31202
- stroke-dasharray: 1px, 200px;
31203
- stroke-dashoffset: -126px;
31204
- }
31205
- `;
31206
- const rotateAnimation = typeof circularRotateKeyframe !== "string" ? css`
31207
- animation: ${circularRotateKeyframe} 1.4s linear infinite;
31208
- ` : null;
31209
- const dashAnimation = typeof circularDashKeyframe !== "string" ? css`
31210
- animation: ${circularDashKeyframe} 1.4s ease-in-out infinite;
31211
- ` : null;
31212
- const useUtilityClasses$1h = (ownerState) => {
31213
- const {
31214
- classes: classes2,
31215
- variant,
31216
- color: color2,
31217
- disableShrink
31218
- } = ownerState;
31219
- const slots = {
31220
- root: ["root", variant, `color${capitalize$1(color2)}`],
31221
- svg: ["svg"],
31222
- circle: ["circle", `circle${capitalize$1(variant)}`, disableShrink && "circleDisableShrink"]
31223
- };
31224
- return composeClasses(slots, getCircularProgressUtilityClass, classes2);
31225
- };
31226
- const CircularProgressRoot = styled("span", {
31227
- name: "MuiCircularProgress",
31228
- slot: "Root",
31229
- overridesResolver: (props, styles2) => {
31230
- const {
31231
- ownerState
31232
- } = props;
31233
- return [styles2.root, styles2[ownerState.variant], styles2[`color${capitalize$1(ownerState.color)}`]];
31234
- }
31235
- })(memoTheme(({
31236
- theme
31237
- }) => ({
31238
- display: "inline-block",
31239
- variants: [{
31240
- props: {
31241
- variant: "determinate"
31242
- },
31243
- style: {
31244
- transition: theme.transitions.create("transform")
31245
- }
31246
- }, {
31247
- props: {
31248
- variant: "indeterminate"
31249
- },
31250
- style: rotateAnimation || {
31251
- animation: `${circularRotateKeyframe} 1.4s linear infinite`
31252
- }
31253
- }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color2]) => ({
31254
- props: {
31255
- color: color2
31256
- },
31257
- style: {
31258
- color: (theme.vars || theme).palette[color2].main
31259
- }
31260
- }))]
31261
- })));
31262
- const CircularProgressSVG = styled("svg", {
31263
- name: "MuiCircularProgress",
31264
- slot: "Svg"
31265
- })({
31266
- display: "block"
31267
- // Keeps the progress centered
31268
- });
31269
- const CircularProgressCircle = styled("circle", {
31270
- name: "MuiCircularProgress",
31271
- slot: "Circle",
31272
- overridesResolver: (props, styles2) => {
31273
- const {
31274
- ownerState
31275
- } = props;
31276
- return [styles2.circle, styles2[`circle${capitalize$1(ownerState.variant)}`], ownerState.disableShrink && styles2.circleDisableShrink];
31277
- }
31278
- })(memoTheme(({
31279
- theme
31280
- }) => ({
31281
- stroke: "currentColor",
31282
- variants: [{
31283
- props: {
31284
- variant: "determinate"
31285
- },
31286
- style: {
31287
- transition: theme.transitions.create("stroke-dashoffset")
31288
- }
31289
- }, {
31290
- props: {
31291
- variant: "indeterminate"
31292
- },
31293
- style: {
31294
- // Some default value that looks fine waiting for the animation to kicks in.
31295
- strokeDasharray: "80px, 200px",
31296
- strokeDashoffset: 0
31297
- // Add the unit to fix a Edge 16 and below bug.
31298
- }
31299
- }, {
31300
- props: ({
31301
- ownerState
31302
- }) => ownerState.variant === "indeterminate" && !ownerState.disableShrink,
31303
- style: dashAnimation || {
31304
- // At runtime for Pigment CSS, `bufferAnimation` will be null and the generated keyframe will be used.
31305
- animation: `${circularDashKeyframe} 1.4s ease-in-out infinite`
31306
- }
31307
- }]
31308
- })));
31309
- const CircularProgress = /* @__PURE__ */ React.forwardRef(function CircularProgress2(inProps, ref2) {
31310
- const props = useDefaultProps({
31311
- props: inProps,
31312
- name: "MuiCircularProgress"
31313
- });
31314
- const {
31315
- className,
31316
- color: color2 = "primary",
31317
- disableShrink = false,
31318
- size = 40,
31319
- style: style2,
31320
- thickness = 3.6,
31321
- value: value2 = 0,
31322
- variant = "indeterminate",
31323
- ...other
31324
- } = props;
31325
- const ownerState = {
31326
- ...props,
31327
- color: color2,
31328
- disableShrink,
31329
- size,
31330
- thickness,
31331
- value: value2,
31332
- variant
31333
- };
31334
- const classes2 = useUtilityClasses$1h(ownerState);
31335
- const circleStyle = {};
31336
- const rootStyle = {};
31337
- const rootProps = {};
31338
- if (variant === "determinate") {
31339
- const circumference = 2 * Math.PI * ((SIZE$2 - thickness) / 2);
31340
- circleStyle.strokeDasharray = circumference.toFixed(3);
31341
- rootProps["aria-valuenow"] = Math.round(value2);
31342
- circleStyle.strokeDashoffset = `${((100 - value2) / 100 * circumference).toFixed(3)}px`;
31343
- rootStyle.transform = "rotate(-90deg)";
31344
- }
31345
- return /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgressRoot, {
31346
- className: clsx(classes2.root, className),
31347
- style: {
31348
- width: size,
31349
- height: size,
31350
- ...rootStyle,
31351
- ...style2
31352
- },
31353
- ownerState,
31354
- ref: ref2,
31355
- role: "progressbar",
31356
- ...rootProps,
31357
- ...other,
31358
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgressSVG, {
31359
- className: classes2.svg,
31360
- ownerState,
31361
- viewBox: `${SIZE$2 / 2} ${SIZE$2 / 2} ${SIZE$2} ${SIZE$2}`,
31362
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgressCircle, {
31363
- className: classes2.circle,
31364
- style: circleStyle,
31365
- ownerState,
31366
- cx: SIZE$2,
31367
- cy: SIZE$2,
31368
- r: (SIZE$2 - thickness) / 2,
31369
- fill: "none",
31370
- strokeWidth: thickness
31371
- })
31372
- })
31373
- });
31374
- });
31375
- CircularProgress.propTypes = {
31376
- // ┌────────────────────────────── Warning ──────────────────────────────┐
31377
- // │ These PropTypes are generated from the TypeScript type definitions. │
31378
- // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
31379
- // └─────────────────────────────────────────────────────────────────────┘
31380
- /**
31381
- * Override or extend the styles applied to the component.
31382
- */
31383
- classes: _pt.object,
31384
- /**
31385
- * @ignore
31386
- */
31387
- className: _pt.string,
31388
- /**
31389
- * The color of the component.
31390
- * It supports both default and custom theme colors, which can be added as shown in the
31391
- * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
31392
- * @default 'primary'
31393
- */
31394
- color: _pt.oneOfType([_pt.oneOf(["inherit", "primary", "secondary", "error", "info", "success", "warning"]), _pt.string]),
31395
- /**
31396
- * If `true`, the shrink animation is disabled.
31397
- * This only works if variant is `indeterminate`.
31398
- * @default false
31399
- */
31400
- disableShrink: chainPropTypes(_pt.bool, (props) => {
31401
- if (props.disableShrink && props.variant && props.variant !== "indeterminate") {
31402
- return new Error("MUI: You have provided the `disableShrink` prop with a variant other than `indeterminate`. This will have no effect.");
31403
- }
31404
- return null;
31405
- }),
31406
- /**
31407
- * The size of the component.
31408
- * If using a number, the pixel unit is assumed.
31409
- * If using a string, you need to provide the CSS unit, for example '3rem'.
31410
- * @default 40
31411
- */
31412
- size: _pt.oneOfType([_pt.number, _pt.string]),
31413
- /**
31414
- * @ignore
31415
- */
31416
- style: _pt.object,
31417
- /**
31418
- * The system prop that allows defining system overrides as well as additional CSS styles.
31419
- */
31420
- sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object]),
31421
- /**
31422
- * The thickness of the circle.
31423
- * @default 3.6
31424
- */
31425
- thickness: _pt.number,
31426
- /**
31427
- * The value of the progress indicator for the determinate variant.
31428
- * Value between 0 and 100.
31429
- * @default 0
31430
- */
31431
- value: _pt.number,
31432
- /**
31433
- * The variant to use.
31434
- * Use indeterminate when there is no progress value.
31435
- * @default 'indeterminate'
31436
- */
31437
- variant: _pt.oneOf(["determinate", "indeterminate"])
31438
- };
31439
- function getIconButtonUtilityClass(slot) {
31440
- return generateUtilityClass("MuiIconButton", slot);
31441
- }
31442
- const iconButtonClasses = generateUtilityClasses("MuiIconButton", ["root", "disabled", "colorInherit", "colorPrimary", "colorSecondary", "colorError", "colorInfo", "colorSuccess", "colorWarning", "edgeStart", "edgeEnd", "sizeSmall", "sizeMedium", "sizeLarge", "loading", "loadingIndicator", "loadingWrapper"]);
31443
- const useUtilityClasses$1g = (ownerState) => {
31444
- const {
31445
- classes: classes2,
31446
- disabled,
31447
- color: color2,
31448
- edge,
31449
- size,
31450
- loading
31451
- } = ownerState;
31452
- const slots = {
31453
- root: ["root", loading && "loading", disabled && "disabled", color2 !== "default" && `color${capitalize$1(color2)}`, edge && `edge${capitalize$1(edge)}`, `size${capitalize$1(size)}`],
31454
- loadingIndicator: ["loadingIndicator"],
31455
- loadingWrapper: ["loadingWrapper"]
31456
- };
31457
- return composeClasses(slots, getIconButtonUtilityClass, classes2);
31458
- };
31459
- const IconButtonRoot = styled(ButtonBase, {
31460
- name: "MuiIconButton",
31461
- slot: "Root",
31462
- overridesResolver: (props, styles2) => {
31463
- const {
31464
- ownerState
31465
- } = props;
31466
- return [styles2.root, ownerState.loading && styles2.loading, ownerState.color !== "default" && styles2[`color${capitalize$1(ownerState.color)}`], ownerState.edge && styles2[`edge${capitalize$1(ownerState.edge)}`], styles2[`size${capitalize$1(ownerState.size)}`]];
31467
- }
31468
- })(memoTheme(({
31469
- theme
31470
- }) => ({
31471
- textAlign: "center",
31472
- flex: "0 0 auto",
31473
- fontSize: theme.typography.pxToRem(24),
31474
- padding: 8,
31475
- borderRadius: "50%",
31476
- color: (theme.vars || theme).palette.action.active,
31477
- transition: theme.transitions.create("background-color", {
31478
- duration: theme.transitions.duration.shortest
31479
- }),
31480
- variants: [{
31481
- props: (props) => !props.disableRipple,
31482
- style: {
31483
- "--IconButton-hoverBg": theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha$1(theme.palette.action.active, theme.palette.action.hoverOpacity),
31484
- "&:hover": {
31485
- backgroundColor: "var(--IconButton-hoverBg)",
31486
- // Reset on touch devices, it doesn't add specificity
31487
- "@media (hover: none)": {
31488
- backgroundColor: "transparent"
31489
- }
31490
- }
31491
- }
31492
- }, {
31493
- props: {
31494
- edge: "start"
31495
- },
31496
- style: {
31497
- marginLeft: -12
31498
- }
31499
- }, {
31500
- props: {
31501
- edge: "start",
31502
- size: "small"
31503
- },
31504
- style: {
31505
- marginLeft: -3
31506
- }
31507
- }, {
31508
- props: {
31509
- edge: "end"
31510
- },
31511
- style: {
31512
- marginRight: -12
31513
- }
31514
- }, {
31515
- props: {
31516
- edge: "end",
31517
- size: "small"
31518
- },
31519
- style: {
31520
- marginRight: -3
31521
- }
31522
- }]
31523
- })), memoTheme(({
31524
- theme
31525
- }) => ({
31526
- variants: [{
31527
- props: {
31528
- color: "inherit"
31529
- },
31530
- style: {
31531
- color: "inherit"
31532
- }
31533
- }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color2]) => ({
31534
- props: {
31535
- color: color2
31536
- },
31537
- style: {
31538
- color: (theme.vars || theme).palette[color2].main
31539
- }
31540
- })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color2]) => ({
31541
- props: {
31542
- color: color2
31543
- },
31544
- style: {
31545
- "--IconButton-hoverBg": theme.vars ? `rgba(${(theme.vars || theme).palette[color2].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha$1((theme.vars || theme).palette[color2].main, theme.palette.action.hoverOpacity)
31546
- }
31547
- })), {
31548
- props: {
31549
- size: "small"
31550
- },
31551
- style: {
31552
- padding: 5,
31553
- fontSize: theme.typography.pxToRem(18)
31554
- }
31555
- }, {
31556
- props: {
31557
- size: "large"
31558
- },
31559
- style: {
31560
- padding: 12,
31561
- fontSize: theme.typography.pxToRem(28)
31562
- }
31563
- }],
31564
- [`&.${iconButtonClasses.disabled}`]: {
31565
- backgroundColor: "transparent",
31566
- color: (theme.vars || theme).palette.action.disabled
31567
- },
31568
- [`&.${iconButtonClasses.loading}`]: {
31569
- color: "transparent"
31570
- }
31571
- })));
31572
- const IconButtonLoadingIndicator = styled("span", {
31573
- name: "MuiIconButton",
31574
- slot: "LoadingIndicator"
31575
- })(({
31576
- theme
31577
- }) => ({
31578
- display: "none",
31579
- position: "absolute",
31580
- visibility: "visible",
31581
- top: "50%",
31582
- left: "50%",
31583
- transform: "translate(-50%, -50%)",
31584
- color: (theme.vars || theme).palette.action.disabled,
31585
- variants: [{
31586
- props: {
31587
- loading: true
31588
- },
31589
- style: {
31590
- display: "flex"
31591
- }
31592
- }]
31593
- }));
31594
- const IconButton = /* @__PURE__ */ React.forwardRef(function IconButton2(inProps, ref2) {
31595
- const props = useDefaultProps({
31596
- props: inProps,
31597
- name: "MuiIconButton"
31598
- });
31599
- const {
31600
- edge = false,
31601
- children: children2,
31602
- className,
31603
- color: color2 = "default",
31604
- disabled = false,
31605
- disableFocusRipple = false,
31606
- size = "medium",
31607
- id: idProp,
31608
- loading = null,
31609
- loadingIndicator: loadingIndicatorProp,
31610
- ...other
31611
- } = props;
31612
- const loadingId = useId(idProp);
31613
- const loadingIndicator = loadingIndicatorProp ?? /* @__PURE__ */ jsxRuntimeExports.jsx(CircularProgress, {
31614
- "aria-labelledby": loadingId,
31615
- color: "inherit",
31616
- size: 16
31617
- });
31618
- const ownerState = {
31619
- ...props,
31620
- edge,
31621
- color: color2,
31622
- disabled,
31623
- disableFocusRipple,
31624
- loading,
31625
- loadingIndicator,
31626
- size
31627
- };
31628
- const classes2 = useUtilityClasses$1g(ownerState);
31629
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(IconButtonRoot, {
31630
- id: loading ? loadingId : idProp,
31631
- className: clsx(classes2.root, className),
31632
- centerRipple: true,
31633
- focusRipple: !disableFocusRipple,
31634
- disabled: disabled || loading,
31635
- ref: ref2,
31636
- ...other,
31637
- ownerState,
31638
- children: [typeof loading === "boolean" && // use plain HTML span to minimize the runtime overhead
31639
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
31640
- className: classes2.loadingWrapper,
31641
- style: {
31642
- display: "contents"
31643
- },
31644
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconButtonLoadingIndicator, {
31645
- className: classes2.loadingIndicator,
31646
- ownerState,
31647
- children: loading && loadingIndicator
31648
- })
31649
- }), children2]
31650
- });
31651
- });
31652
- IconButton.propTypes = {
31653
- // ┌────────────────────────────── Warning ──────────────────────────────┐
31654
- // │ These PropTypes are generated from the TypeScript type definitions. │
31655
- // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
31656
- // └─────────────────────────────────────────────────────────────────────┘
31657
- /**
31658
- * The icon to display.
31659
- */
31660
- children: chainPropTypes(_pt.node, (props) => {
31661
- const found = React.Children.toArray(props.children).some((child) => /* @__PURE__ */ React.isValidElement(child) && child.props.onClick);
31662
- if (found) {
31663
- return new Error(["MUI: You are providing an onClick event listener to a child of a button element.", "Prefer applying it to the IconButton directly.", "This guarantees that the whole <button> will be responsive to click events."].join("\n"));
31664
- }
31665
- return null;
31666
- }),
31667
- /**
31668
- * Override or extend the styles applied to the component.
31669
- */
31670
- classes: _pt.object,
31671
- /**
31672
- * @ignore
31673
- */
31674
- className: _pt.string,
31675
- /**
31676
- * The color of the component.
31677
- * It supports both default and custom theme colors, which can be added as shown in the
31678
- * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
31679
- * @default 'default'
31680
- */
31681
- color: _pt.oneOfType([_pt.oneOf(["inherit", "default", "primary", "secondary", "error", "info", "success", "warning"]), _pt.string]),
31682
- /**
31683
- * If `true`, the component is disabled.
31684
- * @default false
31685
- */
31686
- disabled: _pt.bool,
31687
- /**
31688
- * If `true`, the keyboard focus ripple is disabled.
31689
- * @default false
31690
- */
31691
- disableFocusRipple: _pt.bool,
31692
- /**
31693
- * If `true`, the ripple effect is disabled.
31694
- *
31695
- * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
31696
- * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
31697
- * @default false
31698
- */
31699
- disableRipple: _pt.bool,
31700
- /**
31701
- * If given, uses a negative margin to counteract the padding on one
31702
- * side (this is often helpful for aligning the left or right
31703
- * side of the icon with content above or below, without ruining the border
31704
- * size and shape).
31705
- * @default false
31706
- */
31707
- edge: _pt.oneOf(["end", "start", false]),
31708
- /**
31709
- * @ignore
31710
- */
31711
- id: _pt.string,
31712
- /**
31713
- * If `true`, the loading indicator is visible and the button is disabled.
31714
- * If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).
31715
- * @default null
31716
- */
31717
- loading: _pt.bool,
31718
- /**
31719
- * Element placed before the children if the button is in loading state.
31720
- * The node should contain an element with `role="progressbar"` with an accessible name.
31721
- * By default, it renders a `CircularProgress` that is labeled by the button itself.
31722
- * @default <CircularProgress color="inherit" size={16} />
31723
- */
31724
- loadingIndicator: _pt.node,
31725
- /**
31726
- * The size of the component.
31727
- * `small` is equivalent to the dense button styling.
31728
- * @default 'medium'
31729
- */
31730
- size: _pt.oneOfType([_pt.oneOf(["small", "medium", "large"]), _pt.string]),
31731
- /**
31732
- * The system prop that allows defining system overrides as well as additional CSS styles.
31733
- */
31734
- sx: _pt.oneOfType([_pt.arrayOf(_pt.oneOfType([_pt.func, _pt.object, _pt.bool])), _pt.func, _pt.object])
31735
- };
31736
31794
  const CancelIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
31737
31795
  d: "M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"
31738
31796
  }), "Cancel");
@@ -33268,9 +33326,6 @@ const filledInputClasses = {
33268
33326
  ...inputBaseClasses,
33269
33327
  ...generateUtilityClasses("MuiFilledInput", ["root", "underline", "input", "adornedStart", "adornedEnd", "sizeSmall", "multiline", "hiddenLabel"])
33270
33328
  };
33271
- const CloseIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
33272
- d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
33273
- }), "Close");
33274
33329
  const ArrowDropDownIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
33275
33330
  d: "M7 10l5 5 5-5z"
33276
33331
  }), "ArrowDropDown");
@@ -33658,7 +33713,7 @@ const Autocomplete = /* @__PURE__ */ React.forwardRef(function Autocomplete2(inP
33658
33713
  blurOnSelect = false,
33659
33714
  ChipProps: ChipPropsProp,
33660
33715
  className,
33661
- clearIcon = _ClearIcon || (_ClearIcon = /* @__PURE__ */ jsxRuntimeExports.jsx(CloseIcon, {
33716
+ clearIcon = _ClearIcon || (_ClearIcon = /* @__PURE__ */ jsxRuntimeExports.jsx(ClearIcon, {
33662
33717
  fontSize: "small"
33663
33718
  })),
33664
33719
  clearOnBlur = !props.freeSolo,
@@ -178664,22 +178719,22 @@ function addDecoder(cases2, importFn) {
178664
178719
  }
178665
178720
  cases2.forEach((c2) => registry$1.set(c2, importFn));
178666
178721
  }
178667
- addDecoder([void 0, 1], () => import("./raw-B0E5tGhb.js").then((m2) => m2.default));
178668
- addDecoder(5, () => import("./lzw-D-d5b3_9.js").then((m2) => m2.default));
178722
+ addDecoder([void 0, 1], () => import("./raw-TJbs5T8I.js").then((m2) => m2.default));
178723
+ addDecoder(5, () => import("./lzw--6K-CH9V.js").then((m2) => m2.default));
178669
178724
  addDecoder(6, () => {
178670
178725
  throw new Error("old style JPEG compression is not supported.");
178671
178726
  });
178672
- addDecoder(7, () => import("./jpeg-L5T74jDu.js").then((m2) => m2.default));
178673
- addDecoder([8, 32946], () => import("./deflate-CIQ8HfQ4.js").then((m2) => m2.default));
178674
- addDecoder(32773, () => import("./packbits-EdeFNk-p.js").then((m2) => m2.default));
178727
+ addDecoder(7, () => import("./jpeg-BAsU3Uj1.js").then((m2) => m2.default));
178728
+ addDecoder([8, 32946], () => import("./deflate-DFg7j2aM.js").then((m2) => m2.default));
178729
+ addDecoder(32773, () => import("./packbits-DIcMoiDr.js").then((m2) => m2.default));
178675
178730
  addDecoder(
178676
178731
  34887,
178677
- () => import("./lerc-xXmKz_nL.js").then(async (m2) => {
178732
+ () => import("./lerc-Bs40GmLw.js").then(async (m2) => {
178678
178733
  await m2.zstd.init();
178679
178734
  return m2;
178680
178735
  }).then((m2) => m2.default)
178681
178736
  );
178682
- addDecoder(50001, () => import("./webimage-Dr7tpGET.js").then((m2) => m2.default));
178737
+ addDecoder(50001, () => import("./webimage-DcmYEYr-.js").then((m2) => m2.default));
178683
178738
  function decodeRowAcc(row, stride) {
178684
178739
  let length2 = row.length - stride;
178685
178740
  let offset2 = 0;
@@ -198712,14 +198767,25 @@ function CellSetExpressionPlotSubscriber(props) {
198712
198767
  );
198713
198768
  const [width2, height2, containerRef] = useGridItemSize();
198714
198769
  const transformOptions = VALUE_TRANSFORM_OPTIONS;
198715
- const [expressionData, loadedFeatureSelection, featureSelectionStatus] = useFeatureSelection(
198770
+ const [
198771
+ // eslint-disable-next-line no-unused-vars
198772
+ expressionData,
198773
+ loadedFeatureSelection,
198774
+ featureSelectionStatus,
198775
+ featureSelectionErrors
198776
+ ] = useFeatureSelection(
198716
198777
  loaders,
198717
198778
  dataset,
198718
198779
  false,
198719
198780
  geneSelection,
198720
198781
  { obsType, featureType, featureValueType }
198721
198782
  );
198722
- const [{ featureLabelsMap: featureLabelsMapOrig }, featureLabelsStatus, featureLabelsUrls] = useFeatureLabelsData(
198783
+ const [
198784
+ { featureLabelsMap: featureLabelsMapOrig },
198785
+ featureLabelsStatus,
198786
+ featureLabelsUrls,
198787
+ featureLabelsError
198788
+ ] = useFeatureLabelsData(
198723
198789
  loaders,
198724
198790
  dataset,
198725
198791
  false,
@@ -198732,13 +198798,18 @@ function CellSetExpressionPlotSubscriber(props) {
198732
198798
  featureLabelsMapOrig,
198733
198799
  { stripCuriePrefixes: true }
198734
198800
  );
198735
- const [{ obsIndex }, matrixIndicesStatus, matrixIndicesUrls] = useObsFeatureMatrixIndices(
198801
+ const [
198802
+ { obsIndex },
198803
+ matrixIndicesStatus,
198804
+ matrixIndicesUrls,
198805
+ matrixIndicesError
198806
+ ] = useObsFeatureMatrixIndices(
198736
198807
  loaders,
198737
198808
  dataset,
198738
198809
  false,
198739
198810
  { obsType, featureType, featureValueType }
198740
198811
  );
198741
- const [{ obsSets: cellSets }, obsSetsStatus, obsSetsUrls] = useObsSetsData(
198812
+ const [{ obsSets: cellSets }, obsSetsStatus, obsSetsUrls, obsSetsError] = useObsSetsData(
198742
198813
  loaders,
198743
198814
  dataset,
198744
198815
  true,
@@ -198746,7 +198817,12 @@ function CellSetExpressionPlotSubscriber(props) {
198746
198817
  {},
198747
198818
  { obsType }
198748
198819
  );
198749
- const [{ sampleSets }, sampleSetsStatus, sampleSetsUrls] = useSampleSetsData(
198820
+ const [
198821
+ { sampleSets },
198822
+ sampleSetsStatus,
198823
+ sampleSetsUrls,
198824
+ sampleSetsError
198825
+ ] = useSampleSetsData(
198750
198826
  loaders,
198751
198827
  dataset,
198752
198828
  false,
@@ -198754,7 +198830,12 @@ function CellSetExpressionPlotSubscriber(props) {
198754
198830
  { sampleSetColor },
198755
198831
  { sampleType }
198756
198832
  );
198757
- const [{ sampleEdges }, sampleEdgesStatus, sampleEdgesUrls] = useSampleEdgesData(
198833
+ const [
198834
+ { sampleEdges },
198835
+ sampleEdgesStatus,
198836
+ sampleEdgesUrls,
198837
+ sampleEdgesError
198838
+ ] = useSampleEdgesData(
198758
198839
  loaders,
198759
198840
  dataset,
198760
198841
  false,
@@ -198762,6 +198843,14 @@ function CellSetExpressionPlotSubscriber(props) {
198762
198843
  {},
198763
198844
  { obsType, sampleType }
198764
198845
  );
198846
+ const errors = [
198847
+ ...featureSelectionErrors,
198848
+ featureLabelsError,
198849
+ matrixIndicesError,
198850
+ obsSetsError,
198851
+ sampleSetsError,
198852
+ sampleEdgesError
198853
+ ];
198765
198854
  const isReady = useReady([
198766
198855
  featureSelectionStatus,
198767
198856
  matrixIndicesStatus,
@@ -198818,6 +198907,7 @@ function CellSetExpressionPlotSubscriber(props) {
198818
198907
  theme,
198819
198908
  isReady,
198820
198909
  helpText,
198910
+ errors,
198821
198911
  options: /* @__PURE__ */ React__default.createElement(
198822
198912
  CellSetExpressionPlotOptions,
198823
198913
  {
@@ -249769,7 +249859,7 @@ function CellSetSizesPlotSubscriber(props) {
249769
249859
  const [width2, height2, containerRef] = useGridItemSize();
249770
249860
  const [currentHierarchy, setCurrentHierarchy] = useState([]);
249771
249861
  const [prevCellSetSelection, setPrevCellSetSelection] = useState([]);
249772
- const [{ obsSets: cellSets }, obsSetsStatus, obsSetsUrls] = useObsSetsData(
249862
+ const [{ obsSets: cellSets }, obsSetsStatus, obsSetsUrls, obsSetsError] = useObsSetsData(
249773
249863
  loaders,
249774
249864
  dataset,
249775
249865
  true,
@@ -249777,6 +249867,9 @@ function CellSetSizesPlotSubscriber(props) {
249777
249867
  { obsSetSelection: cellSetSelection, obsSetColor: cellSetColor },
249778
249868
  { obsType }
249779
249869
  );
249870
+ const errors = [
249871
+ obsSetsError
249872
+ ];
249780
249873
  const isReady = useReady([obsSetsStatus]);
249781
249874
  const urls = useUrls([obsSetsUrls]);
249782
249875
  const mergedCellSets = useMemo(
@@ -249839,7 +249932,8 @@ function CellSetSizesPlotSubscriber(props) {
249839
249932
  urls,
249840
249933
  theme,
249841
249934
  isReady,
249842
- helpText
249935
+ helpText,
249936
+ errors
249843
249937
  },
249844
249938
  /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, /* @__PURE__ */ React__default.createElement(
249845
249939
  CellSetSizesPlot,
@@ -249960,7 +250054,8 @@ function ExpressionHistogramSubscriber(props) {
249960
250054
  const [
249961
250055
  { obsIndex, featureIndex, obsFeatureMatrix },
249962
250056
  matrixStatus,
249963
- matrixUrls
250057
+ matrixUrls,
250058
+ matrixError
249964
250059
  ] = useObsFeatureMatrixData(
249965
250060
  loaders,
249966
250061
  dataset,
@@ -249969,13 +250064,23 @@ function ExpressionHistogramSubscriber(props) {
249969
250064
  {},
249970
250065
  { obsType, featureType, featureValueType }
249971
250066
  );
249972
- const [expressionData, loadedFeatureSelection, featureSelectionStatus] = useFeatureSelection(
250067
+ const [
250068
+ // eslint-disable-next-line no-unused-vars
250069
+ expressionData,
250070
+ loadedFeatureSelection,
250071
+ featureSelectionStatus,
250072
+ featureSelectionErrors
250073
+ ] = useFeatureSelection(
249973
250074
  loaders,
249974
250075
  dataset,
249975
250076
  false,
249976
250077
  geneSelection,
249977
250078
  { obsType, featureType, featureValueType }
249978
250079
  );
250080
+ const errors = [
250081
+ matrixError,
250082
+ ...featureSelectionErrors
250083
+ ];
249979
250084
  const isReady = useReady([
249980
250085
  matrixStatus,
249981
250086
  featureSelectionStatus
@@ -250037,7 +250142,8 @@ function ExpressionHistogramSubscriber(props) {
250037
250142
  urls,
250038
250143
  theme,
250039
250144
  isReady,
250040
- helpText
250145
+ helpText,
250146
+ errors
250041
250147
  },
250042
250148
  /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, /* @__PURE__ */ React__default.createElement(
250043
250149
  ExpressionHistogram,
@@ -250328,14 +250434,25 @@ function DotPlotSubscriber(props) {
250328
250434
  const [width2, height2, containerRef] = useGridItemSize();
250329
250435
  const transformOptions = VALUE_TRANSFORM_OPTIONS;
250330
250436
  const isStratified = Array.isArray(sampleSetSelection) && sampleSetSelection.length > 1;
250331
- const [expressionData, loadedFeatureSelection, featureSelectionStatus] = useFeatureSelection(
250437
+ const [
250438
+ // eslint-disable-next-line no-unused-vars
250439
+ expressionData,
250440
+ loadedFeatureSelection,
250441
+ featureSelectionStatus,
250442
+ featureSelectionErrors
250443
+ ] = useFeatureSelection(
250332
250444
  loaders,
250333
250445
  dataset,
250334
250446
  false,
250335
250447
  geneSelection,
250336
250448
  { obsType, featureType, featureValueType }
250337
250449
  );
250338
- const [{ featureLabelsMap }, featureLabelsStatus, featureLabelsUrl] = useFeatureLabelsData(
250450
+ const [
250451
+ { featureLabelsMap },
250452
+ featureLabelsStatus,
250453
+ featureLabelsUrl,
250454
+ featureLabelsError
250455
+ ] = useFeatureLabelsData(
250339
250456
  loaders,
250340
250457
  dataset,
250341
250458
  false,
@@ -250343,13 +250460,23 @@ function DotPlotSubscriber(props) {
250343
250460
  {},
250344
250461
  { featureType }
250345
250462
  );
250346
- const [{ obsIndex }, matrixIndicesStatus, matrixIndicesUrl] = useObsFeatureMatrixIndices(
250463
+ const [
250464
+ { obsIndex },
250465
+ matrixIndicesStatus,
250466
+ matrixIndicesUrl,
250467
+ matrixIndicesError
250468
+ ] = useObsFeatureMatrixIndices(
250347
250469
  loaders,
250348
250470
  dataset,
250349
250471
  false,
250350
250472
  { obsType, featureType, featureValueType }
250351
250473
  );
250352
- const [{ obsSets: cellSets }, obsSetsStatus, obsSetsUrl] = useObsSetsData(
250474
+ const [
250475
+ { obsSets: cellSets },
250476
+ obsSetsStatus,
250477
+ obsSetsUrl,
250478
+ obsSetsError
250479
+ ] = useObsSetsData(
250353
250480
  loaders,
250354
250481
  dataset,
250355
250482
  true,
@@ -250357,7 +250484,12 @@ function DotPlotSubscriber(props) {
250357
250484
  {},
250358
250485
  { obsType }
250359
250486
  );
250360
- const [{ sampleSets }, sampleSetsStatus, sampleSetsUrl] = useSampleSetsData(
250487
+ const [
250488
+ { sampleSets },
250489
+ sampleSetsStatus,
250490
+ sampleSetsUrl,
250491
+ sampleSetsError
250492
+ ] = useSampleSetsData(
250361
250493
  loaders,
250362
250494
  dataset,
250363
250495
  false,
@@ -250365,7 +250497,12 @@ function DotPlotSubscriber(props) {
250365
250497
  {},
250366
250498
  { sampleType }
250367
250499
  );
250368
- const [{ sampleEdges }, sampleEdgesStatus, sampleEdgesUrl] = useSampleEdgesData(
250500
+ const [
250501
+ { sampleEdges },
250502
+ sampleEdgesStatus,
250503
+ sampleEdgesUrl,
250504
+ sampleEdgesError
250505
+ ] = useSampleEdgesData(
250369
250506
  loaders,
250370
250507
  dataset,
250371
250508
  false,
@@ -250373,6 +250510,14 @@ function DotPlotSubscriber(props) {
250373
250510
  {},
250374
250511
  { obsType, sampleType }
250375
250512
  );
250513
+ const errors = [
250514
+ ...featureSelectionErrors,
250515
+ featureLabelsError,
250516
+ matrixIndicesError,
250517
+ obsSetsError,
250518
+ sampleSetsError,
250519
+ sampleEdgesError
250520
+ ];
250376
250521
  const isReady = useReady([
250377
250522
  featureSelectionStatus,
250378
250523
  matrixIndicesStatus,
@@ -250416,6 +250561,7 @@ function DotPlotSubscriber(props) {
250416
250561
  theme,
250417
250562
  isReady,
250418
250563
  helpText,
250564
+ errors,
250419
250565
  options: /* @__PURE__ */ React__default.createElement(
250420
250566
  CellSetExpressionPlotOptions,
250421
250567
  {
@@ -250625,14 +250771,25 @@ function FeatureBarPlotSubscriber(props) {
250625
250771
  coordinationScopes
250626
250772
  );
250627
250773
  const [width2, height2, containerRef] = useGridItemSize();
250628
- const [expressionData, loadedFeatureSelection, featureSelectionStatus] = useFeatureSelection(
250774
+ const [
250775
+ // eslint-disable-next-line no-unused-vars
250776
+ expressionData,
250777
+ loadedFeatureSelection,
250778
+ featureSelectionStatus,
250779
+ featureSelectionErrors
250780
+ ] = useFeatureSelection(
250629
250781
  loaders,
250630
250782
  dataset,
250631
250783
  false,
250632
250784
  geneSelection,
250633
250785
  { obsType, featureType, featureValueType }
250634
250786
  );
250635
- const [{ featureLabelsMap }, featureLabelsStatus, featureLabelsUrls] = useFeatureLabelsData(
250787
+ const [
250788
+ { featureLabelsMap },
250789
+ featureLabelsStatus,
250790
+ featureLabelsUrls,
250791
+ featureLabelsError
250792
+ ] = useFeatureLabelsData(
250636
250793
  loaders,
250637
250794
  dataset,
250638
250795
  false,
@@ -250643,13 +250800,19 @@ function FeatureBarPlotSubscriber(props) {
250643
250800
  const [
250644
250801
  { obsIndex },
250645
250802
  matrixIndicesStatus,
250646
- matrixIndicesUrls
250803
+ matrixIndicesUrls,
250804
+ matrixIndicesError
250647
250805
  ] = useObsFeatureMatrixIndices(
250648
250806
  loaders,
250649
250807
  dataset,
250650
250808
  false,
250651
250809
  { obsType, featureType, featureValueType }
250652
250810
  );
250811
+ const errors = [
250812
+ ...featureSelectionErrors,
250813
+ featureLabelsError,
250814
+ matrixIndicesError
250815
+ ];
250653
250816
  const isReady = useReady([
250654
250817
  featureSelectionStatus,
250655
250818
  matrixIndicesStatus,
@@ -250714,7 +250877,8 @@ function FeatureBarPlotSubscriber(props) {
250714
250877
  urls,
250715
250878
  theme,
250716
250879
  isReady,
250717
- helpText
250880
+ helpText,
250881
+ errors
250718
250882
  },
250719
250883
  /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, expressionArr ? /* @__PURE__ */ React__default.createElement(
250720
250884
  FeatureBarPlot,
@@ -251015,13 +251179,18 @@ function TreemapSubscriber(props) {
251015
251179
  coordinationScopes
251016
251180
  );
251017
251181
  const [width2, height2, containerRef] = useGridItemSize();
251018
- const [{ obsIndex }, matrixIndicesStatus, matrixIndicesUrls] = useObsFeatureMatrixIndices(
251182
+ const [
251183
+ { obsIndex },
251184
+ matrixIndicesStatus,
251185
+ matrixIndicesUrls,
251186
+ matrixIndicesError
251187
+ ] = useObsFeatureMatrixIndices(
251019
251188
  loaders,
251020
251189
  dataset,
251021
251190
  false,
251022
251191
  { obsType, featureType, featureValueType }
251023
251192
  );
251024
- const [{ obsSets }, obsSetsStatus, obsSetsUrls] = useObsSetsData(
251193
+ const [{ obsSets }, obsSetsStatus, obsSetsUrls, obsSetsError] = useObsSetsData(
251025
251194
  loaders,
251026
251195
  dataset,
251027
251196
  true,
@@ -251029,7 +251198,12 @@ function TreemapSubscriber(props) {
251029
251198
  {},
251030
251199
  { obsType }
251031
251200
  );
251032
- const [{ sampleIndex, sampleSets }, sampleSetsStatus, sampleSetsUrls] = useSampleSetsData(
251201
+ const [
251202
+ { sampleIndex, sampleSets },
251203
+ sampleSetsStatus,
251204
+ sampleSetsUrls,
251205
+ sampleSetsError
251206
+ ] = useSampleSetsData(
251033
251207
  loaders,
251034
251208
  dataset,
251035
251209
  // TODO: support `false`, i.e., configurations in which
@@ -251039,7 +251213,12 @@ function TreemapSubscriber(props) {
251039
251213
  { sampleSetColor },
251040
251214
  { sampleType }
251041
251215
  );
251042
- const [{ sampleEdges }, sampleEdgesStatus, sampleEdgesUrls] = useSampleEdgesData(
251216
+ const [
251217
+ { sampleEdges },
251218
+ sampleEdgesStatus,
251219
+ sampleEdgesUrls,
251220
+ sampleEdgesError
251221
+ ] = useSampleEdgesData(
251043
251222
  loaders,
251044
251223
  dataset,
251045
251224
  // TODO: support `false`, i.e., configurations in which
@@ -251049,6 +251228,12 @@ function TreemapSubscriber(props) {
251049
251228
  {},
251050
251229
  { obsType, sampleType }
251051
251230
  );
251231
+ const errors = [
251232
+ matrixIndicesError,
251233
+ obsSetsError,
251234
+ sampleSetsError,
251235
+ sampleEdgesError
251236
+ ];
251052
251237
  const isReady = useReady([
251053
251238
  matrixIndicesStatus,
251054
251239
  obsSetsStatus,
@@ -251146,6 +251331,7 @@ function TreemapSubscriber(props) {
251146
251331
  theme,
251147
251332
  isReady,
251148
251333
  helpText,
251334
+ errors,
251149
251335
  withPadding: false,
251150
251336
  options: /* @__PURE__ */ React__default.createElement(
251151
251337
  TreemapOptions,
@@ -251512,7 +251698,12 @@ function VolcanoPlotSubscriber(props) {
251512
251698
  const sampleSetsColumnNameMappingReversed = useColumnNameMapping(sampleSetsLoader, true);
251513
251699
  const rawSampleSetSelection = useRawSetPaths(sampleSetsColumnNameMapping, sampleSetSelection);
251514
251700
  const rawObsSetSelection = useRawSetPaths(obsSetsColumnNameMapping, obsSetSelection);
251515
- const [{ featureStats }, featureStatsStatus] = useFeatureStatsData(
251701
+ const [
251702
+ { featureStats },
251703
+ featureStatsStatus,
251704
+ featureStatsUrls,
251705
+ featureStatsError
251706
+ ] = useFeatureStatsData(
251516
251707
  loaders,
251517
251708
  dataset,
251518
251709
  false,
@@ -251520,6 +251711,9 @@ function VolcanoPlotSubscriber(props) {
251520
251711
  // These volcanoOptions are passed to FeatureStatsAnndataLoader.loadMulti():
251521
251712
  { sampleSetSelection: rawSampleSetSelection, obsSetSelection: rawObsSetSelection }
251522
251713
  );
251714
+ const errors = [
251715
+ featureStatsError
251716
+ ];
251523
251717
  const isReady = useReady([
251524
251718
  featureStatsStatus
251525
251719
  ]);
@@ -251534,6 +251728,7 @@ function VolcanoPlotSubscriber(props) {
251534
251728
  theme,
251535
251729
  isReady,
251536
251730
  helpText,
251731
+ errors,
251537
251732
  options: /* @__PURE__ */ React__default.createElement(
251538
251733
  VolcanoPlotOptions,
251539
251734
  {
@@ -251847,7 +252042,12 @@ function CellSetCompositionBarPlotSubscriber(props) {
251847
252042
  const sampleSetsColumnNameMappingReversed = useColumnNameMapping(sampleSetsLoader, true);
251848
252043
  const rawSampleSetSelection = useRawSetPaths(sampleSetsColumnNameMapping, sampleSetSelection);
251849
252044
  const rawObsSetSelection = useRawSetPaths(obsSetsColumnNameMapping, obsSetSelection);
251850
- const [{ obsSetStats }, obsSetStatsStatus] = useObsSetStatsData(
252045
+ const [
252046
+ { obsSetStats },
252047
+ obsSetStatsStatus,
252048
+ obsSetStatsUrls,
252049
+ obsSetStatsError
252050
+ ] = useObsSetStatsData(
251851
252051
  loaders,
251852
252052
  dataset,
251853
252053
  false,
@@ -251855,6 +252055,9 @@ function CellSetCompositionBarPlotSubscriber(props) {
251855
252055
  // These volcanoOptions are passed to ObsSetStatsAnndataLoader.loadMulti():
251856
252056
  { sampleSetSelection: rawSampleSetSelection, obsSetSelection: rawObsSetSelection }
251857
252057
  );
252058
+ const errors = [
252059
+ obsSetStatsError
252060
+ ];
251858
252061
  const isReady = useReady([
251859
252062
  obsSetStatsStatus
251860
252063
  ]);
@@ -251868,7 +252071,8 @@ function CellSetCompositionBarPlotSubscriber(props) {
251868
252071
  removeGridComponent,
251869
252072
  theme,
251870
252073
  isReady,
251871
- helpText
252074
+ helpText,
252075
+ errors
251872
252076
  },
251873
252077
  /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, obsSetStats ? /* @__PURE__ */ React__default.createElement(
251874
252078
  CellSetCompositionBarPlot,
@@ -252143,7 +252347,12 @@ function FeatureSetEnrichmentBarPlotSubscriber(props) {
252143
252347
  const sampleSetsColumnNameMappingReversed = useColumnNameMapping(sampleSetsLoader, true);
252144
252348
  const rawSampleSetSelection = useRawSetPaths(sampleSetsColumnNameMapping, sampleSetSelection);
252145
252349
  const rawObsSetSelection = useRawSetPaths(obsSetsColumnNameMapping, obsSetSelection);
252146
- const [{ featureSetStats }, featureSetStatsStatus] = useFeatureSetStatsData(
252350
+ const [
252351
+ { featureSetStats },
252352
+ featureSetStatsStatus,
252353
+ featureSetStatsUrls,
252354
+ featureSetStatsError
252355
+ ] = useFeatureSetStatsData(
252147
252356
  loaders,
252148
252357
  dataset,
252149
252358
  false,
@@ -252151,6 +252360,9 @@ function FeatureSetEnrichmentBarPlotSubscriber(props) {
252151
252360
  // These volcanoOptions are passed to ObsSetStatsAnndataLoader.loadMulti():
252152
252361
  { sampleSetSelection: rawSampleSetSelection, obsSetSelection: rawObsSetSelection }
252153
252362
  );
252363
+ const errors = [
252364
+ featureSetStatsError
252365
+ ];
252154
252366
  const isReady = useReady([
252155
252367
  featureSetStatsStatus
252156
252368
  ]);
@@ -252168,7 +252380,8 @@ function FeatureSetEnrichmentBarPlotSubscriber(props) {
252168
252380
  removeGridComponent,
252169
252381
  theme,
252170
252382
  isReady,
252171
- helpText
252383
+ helpText,
252384
+ errors
252172
252385
  },
252173
252386
  /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: classes2.vegaContainer }, featureSetStats ? /* @__PURE__ */ React__default.createElement(
252174
252387
  FeatureSetEnrichmentBarPlot,
@@ -252366,7 +252579,12 @@ function FeatureStatsTableSubscriber(props) {
252366
252579
  const sampleSetsColumnNameMappingReversed = useColumnNameMapping(sampleSetsLoader, true);
252367
252580
  const rawSampleSetSelection = useRawSetPaths(sampleSetsColumnNameMapping, sampleSetSelection);
252368
252581
  const rawObsSetSelection = useRawSetPaths(obsSetsColumnNameMapping, obsSetSelection);
252369
- const [{ featureStats }, featureStatsStatus] = useFeatureStatsData(
252582
+ const [
252583
+ { featureStats },
252584
+ featureStatsStatus,
252585
+ featureStatsUrls,
252586
+ featureStatsError
252587
+ ] = useFeatureStatsData(
252370
252588
  loaders,
252371
252589
  dataset,
252372
252590
  false,
@@ -252374,6 +252592,9 @@ function FeatureStatsTableSubscriber(props) {
252374
252592
  // These volcanoOptions are passed to FeatureStatsAnndataLoader.loadMulti():
252375
252593
  { sampleSetSelection: rawSampleSetSelection, obsSetSelection: rawObsSetSelection }
252376
252594
  );
252595
+ const errors = [
252596
+ featureStatsError
252597
+ ];
252377
252598
  const isReady = useReady([
252378
252599
  featureStatsStatus
252379
252600
  ]);
@@ -252385,6 +252606,7 @@ function FeatureStatsTableSubscriber(props) {
252385
252606
  theme,
252386
252607
  isReady,
252387
252608
  helpText,
252609
+ errors,
252388
252610
  withPadding: false
252389
252611
  },
252390
252612
  featureStats ? /* @__PURE__ */ React__default.createElement(