td-plots 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -57,6 +57,26 @@ function calculateMean(arr) {
57
57
  return sum / arr.length;
58
58
  }
59
59
  }
60
+ // Calculate standard deviation of an array of numbers or dates
61
+ function calculateStandardDeviation(arr) {
62
+ if (arr.length === 0)
63
+ return undefined;
64
+ var mean = calculateMean(arr);
65
+ if (mean === undefined)
66
+ return undefined;
67
+ var sumOfSquares = 0;
68
+ if (isNumberArray(arr)) {
69
+ sumOfSquares = arr.reduce(function (acc, num) { return acc + Math.pow(num - mean, 2); }, 0);
70
+ }
71
+ else if (isDateArray(arr)) {
72
+ sumOfSquares = arr.reduce(function (acc, date) { return acc + Math.pow(date.getTime() - mean, 2); }, 0);
73
+ }
74
+ else {
75
+ return undefined;
76
+ }
77
+ var variance = sumOfSquares / arr.length;
78
+ return Math.sqrt(variance);
79
+ }
60
80
  // Utilities for rounding dates to the nearest day.
61
81
  // Helpful for making nice bins
62
82
  var roundToNextDay = function (timestamp) {
@@ -1715,7 +1735,7 @@ const responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.one
1715
1735
  * For using in `sx` prop to sort the breakpoint from low to high.
1716
1736
  * Note: this function does not work and will not support multiple units.
1717
1737
  * e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }
1718
- * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 eventhough 40rem > 300px
1738
+ * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 even though 40rem > 300px
1719
1739
  */
1720
1740
  function sortContainerQueries(theme, css) {
1721
1741
  if (!theme.containerQueries) {
@@ -2740,7 +2760,7 @@ const styleFunctionSx = unstable_createStyleFunctionSx();
2740
2760
  styleFunctionSx.filterProps = ['sx'];
2741
2761
 
2742
2762
  /**
2743
- * @mui/styled-engine v7.2.0
2763
+ * @mui/styled-engine v7.3.2
2744
2764
  *
2745
2765
  * @license MIT
2746
2766
  * This source code is licensed under the MIT license found in the
@@ -3687,6 +3707,9 @@ function private_safeAlpha(color, value, warning) {
3687
3707
  try {
3688
3708
  return alpha(color, value);
3689
3709
  } catch (error) {
3710
+ if (warning && process.env.NODE_ENV !== 'production') {
3711
+ console.warn(warning);
3712
+ }
3690
3713
  return color;
3691
3714
  }
3692
3715
  }
@@ -3713,6 +3736,9 @@ function private_safeDarken(color, coefficient, warning) {
3713
3736
  try {
3714
3737
  return darken(color, coefficient);
3715
3738
  } catch (error) {
3739
+ if (warning && process.env.NODE_ENV !== 'production') {
3740
+ console.warn(warning);
3741
+ }
3716
3742
  return color;
3717
3743
  }
3718
3744
  }
@@ -3743,6 +3769,9 @@ function private_safeLighten(color, coefficient, warning) {
3743
3769
  try {
3744
3770
  return lighten(color, coefficient);
3745
3771
  } catch (error) {
3772
+ if (warning && process.env.NODE_ENV !== 'production') {
3773
+ console.warn(warning);
3774
+ }
3746
3775
  return color;
3747
3776
  }
3748
3777
  }
@@ -3998,7 +4027,8 @@ function prepareCssVars(theme, parserConfig = {}) {
3998
4027
  const {
3999
4028
  getSelector = defaultGetSelector,
4000
4029
  disableCssColorScheme,
4001
- colorSchemeSelector: selector
4030
+ colorSchemeSelector: selector,
4031
+ enableContrastVars
4002
4032
  } = parserConfig;
4003
4033
  // @ts-ignore - ignore components do not exist
4004
4034
  const {
@@ -4136,6 +4166,16 @@ function prepareCssVars(theme, parserConfig = {}) {
4136
4166
  ...finalCss
4137
4167
  }), finalCss);
4138
4168
  });
4169
+ if (enableContrastVars) {
4170
+ stylesheets.push({
4171
+ ':root': {
4172
+ // use double underscore to indicate that these are private variables
4173
+ '--__l-threshold': '0.7',
4174
+ '--__l': 'clamp(0, (l / var(--__l-threshold) - 1) * -infinity, 1)',
4175
+ '--__a': 'clamp(0.87, (l / var(--__l-threshold) - 1) * -infinity, 1)' // 0.87 is the default alpha value for black text.
4176
+ }
4177
+ });
4178
+ }
4139
4179
  return stylesheets;
4140
4180
  };
4141
4181
  return {
@@ -4321,6 +4361,19 @@ function addLightOrDark(intent, direction, shade, tonalOffset) {
4321
4361
  }
4322
4362
  }
4323
4363
  }
4364
+ function mixLightOrDark(colorSpace, intent, direction, shade, tonalOffset) {
4365
+ const tonalOffsetLight = tonalOffset.light || tonalOffset;
4366
+ const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;
4367
+ if (!intent[direction]) {
4368
+ if (intent.hasOwnProperty(shade)) {
4369
+ intent[direction] = intent[shade];
4370
+ } else if (direction === 'light') {
4371
+ intent.light = `color-mix(in ${colorSpace}, ${intent.main}, #fff ${(tonalOffsetLight * 100).toFixed(0)}%)`;
4372
+ } else if (direction === 'dark') {
4373
+ intent.dark = `color-mix(in ${colorSpace}, ${intent.main}, #000 ${(tonalOffsetDark * 100).toFixed(0)}%)`;
4374
+ }
4375
+ }
4376
+ }
4324
4377
  function getDefaultPrimary(mode = 'light') {
4325
4378
  if (mode === 'dark') {
4326
4379
  return {
@@ -4406,11 +4459,17 @@ function getDefaultWarning(mode = 'light') {
4406
4459
  dark: orange[900]
4407
4460
  };
4408
4461
  }
4462
+
4463
+ // Use the same name as the experimental CSS `contrast-color` function.
4464
+ function contrastColor(background) {
4465
+ return `oklch(from ${background} var(--__l) 0 h / var(--__a))`;
4466
+ }
4409
4467
  function createPalette(palette) {
4410
4468
  const {
4411
4469
  mode = 'light',
4412
4470
  contrastThreshold = 3,
4413
4471
  tonalOffset = 0.2,
4472
+ colorSpace,
4414
4473
  ...other
4415
4474
  } = palette;
4416
4475
  const primary = palette.primary || getDefaultPrimary(mode);
@@ -4424,6 +4483,9 @@ function createPalette(palette) {
4424
4483
  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59
4425
4484
  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54
4426
4485
  function getContrastText(background) {
4486
+ if (colorSpace) {
4487
+ return contrastColor(background);
4488
+ }
4427
4489
  const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;
4428
4490
  if (process.env.NODE_ENV !== 'production') {
4429
4491
  const contrast = getContrastRatio(background, contrastText);
@@ -4452,8 +4514,13 @@ function createPalette(palette) {
4452
4514
  if (typeof color.main !== 'string') {
4453
4515
  throw new Error(process.env.NODE_ENV !== "production" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\n` + `\`color.main\` should be a string, but \`${JSON.stringify(color.main)}\` was provided instead.\n` + '\n' + 'Did you intend to use one of the following approaches?\n' + '\n' + 'import { green } from "@mui/material/colors";\n' + '\n' + 'const theme1 = createTheme({ palette: {\n' + ' primary: green,\n' + '} });\n' + '\n' + 'const theme2 = createTheme({ palette: {\n' + ' primary: { main: green[500] },\n' + '} });' : formatMuiErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));
4454
4516
  }
4455
- addLightOrDark(color, 'light', lightShade, tonalOffset);
4456
- addLightOrDark(color, 'dark', darkShade, tonalOffset);
4517
+ if (colorSpace) {
4518
+ mixLightOrDark(colorSpace, color, 'light', lightShade, tonalOffset);
4519
+ mixLightOrDark(colorSpace, color, 'dark', darkShade, tonalOffset);
4520
+ } else {
4521
+ addLightOrDark(color, 'light', lightShade, tonalOffset);
4522
+ addLightOrDark(color, 'dark', darkShade, tonalOffset);
4523
+ }
4457
4524
  if (!color.contrastText) {
4458
4525
  color.contrastText = getContrastText(color.main);
4459
4526
  }
@@ -4818,6 +4885,58 @@ theme.transitions = createTransitions(theme.transitions || {});
4818
4885
  export default theme;`;
4819
4886
  }
4820
4887
 
4888
+ function coefficientToPercentage(coefficient) {
4889
+ if (typeof coefficient === 'number') {
4890
+ return `${(coefficient * 100).toFixed(0)}%`;
4891
+ }
4892
+ return `calc((${coefficient}) * 100%)`;
4893
+ }
4894
+
4895
+ // This can be removed when moved to `color-mix()` entirely.
4896
+ const parseAddition = str => {
4897
+ if (!Number.isNaN(+str)) {
4898
+ return +str;
4899
+ }
4900
+ const numbers = str.match(/\d*\.?\d+/g);
4901
+ if (!numbers) {
4902
+ return 0;
4903
+ }
4904
+ let sum = 0;
4905
+ for (let i = 0; i < numbers.length; i += 1) {
4906
+ sum += +numbers[i];
4907
+ }
4908
+ return sum;
4909
+ };
4910
+ function attachColorManipulators(theme) {
4911
+ Object.assign(theme, {
4912
+ alpha(color, coefficient) {
4913
+ const obj = this || theme;
4914
+ if (obj.colorSpace) {
4915
+ return `oklch(from ${color} l c h / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;
4916
+ }
4917
+ if (obj.vars) {
4918
+ // To preserve the behavior of the CSS theme variables
4919
+ // In the future, this could be replaced by `color-mix` (when https://caniuse.com/?search=color-mix reaches 95%).
4920
+ return `rgba(${color.replace(/var\(--([^,\s)]+)(?:,[^)]+)?\)+/g, 'var(--$1Channel)')} / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;
4921
+ }
4922
+ return alpha(color, parseAddition(coefficient));
4923
+ },
4924
+ lighten(color, coefficient) {
4925
+ const obj = this || theme;
4926
+ if (obj.colorSpace) {
4927
+ return `color-mix(in ${obj.colorSpace}, ${color}, #fff ${coefficientToPercentage(coefficient)})`;
4928
+ }
4929
+ return lighten(color, coefficient);
4930
+ },
4931
+ darken(color, coefficient) {
4932
+ const obj = this || theme;
4933
+ if (obj.colorSpace) {
4934
+ return `color-mix(in ${obj.colorSpace}, ${color}, #000 ${coefficientToPercentage(coefficient)})`;
4935
+ }
4936
+ return darken(color, coefficient);
4937
+ }
4938
+ });
4939
+ }
4821
4940
  function createThemeNoVars(options = {}, ...args) {
4822
4941
  const {
4823
4942
  breakpoints: breakpointsInput,
@@ -4827,6 +4946,7 @@ function createThemeNoVars(options = {}, ...args) {
4827
4946
  transitions: transitionsInput = {},
4828
4947
  typography: typographyInput = {},
4829
4948
  shape: shapeInput,
4949
+ colorSpace,
4830
4950
  ...other
4831
4951
  } = options;
4832
4952
  if (options.vars &&
@@ -4837,7 +4957,10 @@ function createThemeNoVars(options = {}, ...args) {
4837
4957
  // #host-reference
4838
4958
  'Please use another name or follow the [docs](https://mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : formatMuiErrorMessage(20));
4839
4959
  }
4840
- const palette = createPalette(paletteInput);
4960
+ const palette = createPalette({
4961
+ ...paletteInput,
4962
+ colorSpace
4963
+ });
4841
4964
  const systemTheme = createTheme$1(options);
4842
4965
  let muiTheme = deepmerge(systemTheme, {
4843
4966
  mixins: createMixins(systemTheme.breakpoints, mixinsInput),
@@ -4894,6 +5017,7 @@ function createThemeNoVars(options = {}, ...args) {
4894
5017
  };
4895
5018
  muiTheme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration
4896
5019
 
5020
+ attachColorManipulators(muiTheme);
4897
5021
  return muiTheme;
4898
5022
  }
4899
5023
 
@@ -4934,9 +5058,14 @@ function createColorScheme(options) {
4934
5058
  // need to cast to avoid module augmentation test
4935
5059
  opacity,
4936
5060
  overlays,
5061
+ colorSpace,
4937
5062
  ...rest
4938
5063
  } = options;
4939
- const palette = createPalette(paletteInput);
5064
+ // need to cast because `colorSpace` is considered internal at the moment.
5065
+ const palette = createPalette({
5066
+ ...paletteInput,
5067
+ colorSpace
5068
+ });
4940
5069
  return {
4941
5070
  palette,
4942
5071
  opacity: {
@@ -5062,7 +5191,7 @@ const silent = fn => {
5062
5191
  return undefined;
5063
5192
  };
5064
5193
  const createGetCssVar = (cssVarPrefix = 'mui') => createGetCssVar$1(cssVarPrefix);
5065
- function attachColorScheme$1(colorSchemes, scheme, restTheme, colorScheme) {
5194
+ function attachColorScheme$1(colorSpace, colorSchemes, scheme, restTheme, colorScheme) {
5066
5195
  if (!scheme) {
5067
5196
  return undefined;
5068
5197
  }
@@ -5074,7 +5203,8 @@ function attachColorScheme$1(colorSchemes, scheme, restTheme, colorScheme) {
5074
5203
  palette: {
5075
5204
  mode,
5076
5205
  ...scheme?.palette
5077
- }
5206
+ },
5207
+ colorSpace
5078
5208
  });
5079
5209
  return undefined;
5080
5210
  }
@@ -5086,7 +5216,8 @@ function attachColorScheme$1(colorSchemes, scheme, restTheme, colorScheme) {
5086
5216
  palette: {
5087
5217
  mode,
5088
5218
  ...scheme?.palette
5089
- }
5219
+ },
5220
+ colorSpace
5090
5221
  });
5091
5222
  colorSchemes[colorScheme] = {
5092
5223
  ...scheme,
@@ -5116,6 +5247,7 @@ function createThemeWithVars(options = {}, ...args) {
5116
5247
  defaultColorScheme: defaultColorSchemeInput,
5117
5248
  disableCssColorScheme = false,
5118
5249
  cssVarPrefix = 'mui',
5250
+ nativeColor = false,
5119
5251
  shouldSkipGeneratingVar: shouldSkipGeneratingVar$1 = shouldSkipGeneratingVar,
5120
5252
  colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,
5121
5253
  rootSelector = ':root',
@@ -5143,13 +5275,19 @@ function createThemeWithVars(options = {}, ...args) {
5143
5275
  throw new Error(process.env.NODE_ENV !== "production" ? `MUI: The \`colorSchemes.${defaultColorScheme}\` option is either missing or invalid.` : formatMuiErrorMessage(21, defaultColorScheme));
5144
5276
  }
5145
5277
 
5278
+ // The reason to use `oklch` is that it is the most perceptually uniform color space and widely supported.
5279
+ let colorSpace;
5280
+ if (nativeColor) {
5281
+ colorSpace = 'oklch';
5282
+ }
5283
+
5146
5284
  // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.
5147
- const muiTheme = attachColorScheme$1(colorSchemes, defaultScheme, input, defaultColorScheme);
5285
+ const muiTheme = attachColorScheme$1(colorSpace, colorSchemes, defaultScheme, input, defaultColorScheme);
5148
5286
  if (builtInLight && !colorSchemes.light) {
5149
- attachColorScheme$1(colorSchemes, builtInLight, undefined, 'light');
5287
+ attachColorScheme$1(colorSpace, colorSchemes, builtInLight, undefined, 'light');
5150
5288
  }
5151
5289
  if (builtInDark && !colorSchemes.dark) {
5152
- attachColorScheme$1(colorSchemes, builtInDark, undefined, 'dark');
5290
+ attachColorScheme$1(colorSpace, colorSchemes, builtInDark, undefined, 'dark');
5153
5291
  }
5154
5292
  let theme = {
5155
5293
  defaultColorScheme,
@@ -5183,14 +5321,30 @@ function createThemeWithVars(options = {}, ...args) {
5183
5321
  setColor(palette.common, 'background', '#000');
5184
5322
  setColor(palette.common, 'onBackground', '#fff');
5185
5323
  }
5324
+ function colorMix(method, color, coefficient) {
5325
+ if (colorSpace) {
5326
+ let mixer;
5327
+ if (method === private_safeAlpha) {
5328
+ mixer = `transparent ${((1 - coefficient) * 100).toFixed(0)}%`;
5329
+ }
5330
+ if (method === private_safeDarken) {
5331
+ mixer = `#000 ${(coefficient * 100).toFixed(0)}%`;
5332
+ }
5333
+ if (method === private_safeLighten) {
5334
+ mixer = `#fff ${(coefficient * 100).toFixed(0)}%`;
5335
+ }
5336
+ return `color-mix(in ${colorSpace}, ${color}, ${mixer})`;
5337
+ }
5338
+ return method(color, coefficient);
5339
+ }
5186
5340
 
5187
5341
  // assign component variables
5188
5342
  assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);
5189
5343
  if (palette.mode === 'light') {
5190
- setColor(palette.Alert, 'errorColor', private_safeDarken(palette.error.light, 0.6));
5191
- setColor(palette.Alert, 'infoColor', private_safeDarken(palette.info.light, 0.6));
5192
- setColor(palette.Alert, 'successColor', private_safeDarken(palette.success.light, 0.6));
5193
- setColor(palette.Alert, 'warningColor', private_safeDarken(palette.warning.light, 0.6));
5344
+ setColor(palette.Alert, 'errorColor', colorMix(private_safeDarken, palette.error.light, 0.6));
5345
+ setColor(palette.Alert, 'infoColor', colorMix(private_safeDarken, palette.info.light, 0.6));
5346
+ setColor(palette.Alert, 'successColor', colorMix(private_safeDarken, palette.success.light, 0.6));
5347
+ setColor(palette.Alert, 'warningColor', colorMix(private_safeDarken, palette.warning.light, 0.6));
5194
5348
  setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));
5195
5349
  setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));
5196
5350
  setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));
@@ -5199,10 +5353,10 @@ function createThemeWithVars(options = {}, ...args) {
5199
5353
  setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));
5200
5354
  setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));
5201
5355
  setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));
5202
- setColor(palette.Alert, 'errorStandardBg', private_safeLighten(palette.error.light, 0.9));
5203
- setColor(palette.Alert, 'infoStandardBg', private_safeLighten(palette.info.light, 0.9));
5204
- setColor(palette.Alert, 'successStandardBg', private_safeLighten(palette.success.light, 0.9));
5205
- setColor(palette.Alert, 'warningStandardBg', private_safeLighten(palette.warning.light, 0.9));
5356
+ setColor(palette.Alert, 'errorStandardBg', colorMix(private_safeLighten, palette.error.light, 0.9));
5357
+ setColor(palette.Alert, 'infoStandardBg', colorMix(private_safeLighten, palette.info.light, 0.9));
5358
+ setColor(palette.Alert, 'successStandardBg', colorMix(private_safeLighten, palette.success.light, 0.9));
5359
+ setColor(palette.Alert, 'warningStandardBg', colorMix(private_safeLighten, palette.warning.light, 0.9));
5206
5360
  setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));
5207
5361
  setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));
5208
5362
  setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));
@@ -5217,41 +5371,42 @@ function createThemeWithVars(options = {}, ...args) {
5217
5371
  setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');
5218
5372
  setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');
5219
5373
  setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');
5220
- setColor(palette.LinearProgress, 'primaryBg', private_safeLighten(palette.primary.main, 0.62));
5221
- setColor(palette.LinearProgress, 'secondaryBg', private_safeLighten(palette.secondary.main, 0.62));
5222
- setColor(palette.LinearProgress, 'errorBg', private_safeLighten(palette.error.main, 0.62));
5223
- setColor(palette.LinearProgress, 'infoBg', private_safeLighten(palette.info.main, 0.62));
5224
- setColor(palette.LinearProgress, 'successBg', private_safeLighten(palette.success.main, 0.62));
5225
- setColor(palette.LinearProgress, 'warningBg', private_safeLighten(palette.warning.main, 0.62));
5226
- setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);
5227
- setColor(palette.Slider, 'primaryTrack', private_safeLighten(palette.primary.main, 0.62));
5228
- setColor(palette.Slider, 'secondaryTrack', private_safeLighten(palette.secondary.main, 0.62));
5229
- setColor(palette.Slider, 'errorTrack', private_safeLighten(palette.error.main, 0.62));
5230
- setColor(palette.Slider, 'infoTrack', private_safeLighten(palette.info.main, 0.62));
5231
- setColor(palette.Slider, 'successTrack', private_safeLighten(palette.success.main, 0.62));
5232
- setColor(palette.Slider, 'warningTrack', private_safeLighten(palette.warning.main, 0.62));
5233
- const snackbarContentBackground = private_safeEmphasize(palette.background.default, 0.8);
5374
+ setColor(palette.LinearProgress, 'primaryBg', colorMix(private_safeLighten, palette.primary.main, 0.62));
5375
+ setColor(palette.LinearProgress, 'secondaryBg', colorMix(private_safeLighten, palette.secondary.main, 0.62));
5376
+ setColor(palette.LinearProgress, 'errorBg', colorMix(private_safeLighten, palette.error.main, 0.62));
5377
+ setColor(palette.LinearProgress, 'infoBg', colorMix(private_safeLighten, palette.info.main, 0.62));
5378
+ setColor(palette.LinearProgress, 'successBg', colorMix(private_safeLighten, palette.success.main, 0.62));
5379
+ setColor(palette.LinearProgress, 'warningBg', colorMix(private_safeLighten, palette.warning.main, 0.62));
5380
+ setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(private_safeAlpha, palette.text.primary, 0.11) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);
5381
+ setColor(palette.Slider, 'primaryTrack', colorMix(private_safeLighten, palette.primary.main, 0.62));
5382
+ setColor(palette.Slider, 'secondaryTrack', colorMix(private_safeLighten, palette.secondary.main, 0.62));
5383
+ setColor(palette.Slider, 'errorTrack', colorMix(private_safeLighten, palette.error.main, 0.62));
5384
+ setColor(palette.Slider, 'infoTrack', colorMix(private_safeLighten, palette.info.main, 0.62));
5385
+ setColor(palette.Slider, 'successTrack', colorMix(private_safeLighten, palette.success.main, 0.62));
5386
+ setColor(palette.Slider, 'warningTrack', colorMix(private_safeLighten, palette.warning.main, 0.62));
5387
+ const snackbarContentBackground = colorSpace ? colorMix(private_safeDarken, palette.background.default, 0.6825) // use `0.6825` instead of `0.8` to match the contrast ratio of JS implementation
5388
+ : private_safeEmphasize(palette.background.default, 0.8);
5234
5389
  setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
5235
- setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));
5390
+ setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? dark.text.primary : palette.getContrastText(snackbarContentBackground)));
5236
5391
  setColor(palette.SpeedDialAction, 'fabHoverBg', private_safeEmphasize(palette.background.paper, 0.15));
5237
5392
  setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));
5238
5393
  setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));
5239
5394
  setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));
5240
5395
  setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));
5241
- setColor(palette.Switch, 'primaryDisabledColor', private_safeLighten(palette.primary.main, 0.62));
5242
- setColor(palette.Switch, 'secondaryDisabledColor', private_safeLighten(palette.secondary.main, 0.62));
5243
- setColor(palette.Switch, 'errorDisabledColor', private_safeLighten(palette.error.main, 0.62));
5244
- setColor(palette.Switch, 'infoDisabledColor', private_safeLighten(palette.info.main, 0.62));
5245
- setColor(palette.Switch, 'successDisabledColor', private_safeLighten(palette.success.main, 0.62));
5246
- setColor(palette.Switch, 'warningDisabledColor', private_safeLighten(palette.warning.main, 0.62));
5247
- setColor(palette.TableCell, 'border', private_safeLighten(private_safeAlpha(palette.divider, 1), 0.88));
5248
- setColor(palette.Tooltip, 'bg', private_safeAlpha(palette.grey[700], 0.92));
5396
+ setColor(palette.Switch, 'primaryDisabledColor', colorMix(private_safeLighten, palette.primary.main, 0.62));
5397
+ setColor(palette.Switch, 'secondaryDisabledColor', colorMix(private_safeLighten, palette.secondary.main, 0.62));
5398
+ setColor(palette.Switch, 'errorDisabledColor', colorMix(private_safeLighten, palette.error.main, 0.62));
5399
+ setColor(palette.Switch, 'infoDisabledColor', colorMix(private_safeLighten, palette.info.main, 0.62));
5400
+ setColor(palette.Switch, 'successDisabledColor', colorMix(private_safeLighten, palette.success.main, 0.62));
5401
+ setColor(palette.Switch, 'warningDisabledColor', colorMix(private_safeLighten, palette.warning.main, 0.62));
5402
+ setColor(palette.TableCell, 'border', colorMix(private_safeLighten, colorMix(private_safeAlpha, palette.divider, 1), 0.88));
5403
+ setColor(palette.Tooltip, 'bg', colorMix(private_safeAlpha, palette.grey[700], 0.92));
5249
5404
  }
5250
5405
  if (palette.mode === 'dark') {
5251
- setColor(palette.Alert, 'errorColor', private_safeLighten(palette.error.light, 0.6));
5252
- setColor(palette.Alert, 'infoColor', private_safeLighten(palette.info.light, 0.6));
5253
- setColor(palette.Alert, 'successColor', private_safeLighten(palette.success.light, 0.6));
5254
- setColor(palette.Alert, 'warningColor', private_safeLighten(palette.warning.light, 0.6));
5406
+ setColor(palette.Alert, 'errorColor', colorMix(private_safeLighten, palette.error.light, 0.6));
5407
+ setColor(palette.Alert, 'infoColor', colorMix(private_safeLighten, palette.info.light, 0.6));
5408
+ setColor(palette.Alert, 'successColor', colorMix(private_safeLighten, palette.success.light, 0.6));
5409
+ setColor(palette.Alert, 'warningColor', colorMix(private_safeLighten, palette.warning.light, 0.6));
5255
5410
  setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));
5256
5411
  setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));
5257
5412
  setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));
@@ -5260,10 +5415,10 @@ function createThemeWithVars(options = {}, ...args) {
5260
5415
  setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));
5261
5416
  setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));
5262
5417
  setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));
5263
- setColor(palette.Alert, 'errorStandardBg', private_safeDarken(palette.error.light, 0.9));
5264
- setColor(palette.Alert, 'infoStandardBg', private_safeDarken(palette.info.light, 0.9));
5265
- setColor(palette.Alert, 'successStandardBg', private_safeDarken(palette.success.light, 0.9));
5266
- setColor(palette.Alert, 'warningStandardBg', private_safeDarken(palette.warning.light, 0.9));
5418
+ setColor(palette.Alert, 'errorStandardBg', colorMix(private_safeDarken, palette.error.light, 0.9));
5419
+ setColor(palette.Alert, 'infoStandardBg', colorMix(private_safeDarken, palette.info.light, 0.9));
5420
+ setColor(palette.Alert, 'successStandardBg', colorMix(private_safeDarken, palette.success.light, 0.9));
5421
+ setColor(palette.Alert, 'warningStandardBg', colorMix(private_safeDarken, palette.warning.light, 0.9));
5267
5422
  setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));
5268
5423
  setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));
5269
5424
  setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));
@@ -5280,35 +5435,36 @@ function createThemeWithVars(options = {}, ...args) {
5280
5435
  setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');
5281
5436
  setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');
5282
5437
  setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');
5283
- setColor(palette.LinearProgress, 'primaryBg', private_safeDarken(palette.primary.main, 0.5));
5284
- setColor(palette.LinearProgress, 'secondaryBg', private_safeDarken(palette.secondary.main, 0.5));
5285
- setColor(palette.LinearProgress, 'errorBg', private_safeDarken(palette.error.main, 0.5));
5286
- setColor(palette.LinearProgress, 'infoBg', private_safeDarken(palette.info.main, 0.5));
5287
- setColor(palette.LinearProgress, 'successBg', private_safeDarken(palette.success.main, 0.5));
5288
- setColor(palette.LinearProgress, 'warningBg', private_safeDarken(palette.warning.main, 0.5));
5289
- setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);
5290
- setColor(palette.Slider, 'primaryTrack', private_safeDarken(palette.primary.main, 0.5));
5291
- setColor(palette.Slider, 'secondaryTrack', private_safeDarken(palette.secondary.main, 0.5));
5292
- setColor(palette.Slider, 'errorTrack', private_safeDarken(palette.error.main, 0.5));
5293
- setColor(palette.Slider, 'infoTrack', private_safeDarken(palette.info.main, 0.5));
5294
- setColor(palette.Slider, 'successTrack', private_safeDarken(palette.success.main, 0.5));
5295
- setColor(palette.Slider, 'warningTrack', private_safeDarken(palette.warning.main, 0.5));
5296
- const snackbarContentBackground = private_safeEmphasize(palette.background.default, 0.98);
5438
+ setColor(palette.LinearProgress, 'primaryBg', colorMix(private_safeDarken, palette.primary.main, 0.5));
5439
+ setColor(palette.LinearProgress, 'secondaryBg', colorMix(private_safeDarken, palette.secondary.main, 0.5));
5440
+ setColor(palette.LinearProgress, 'errorBg', colorMix(private_safeDarken, palette.error.main, 0.5));
5441
+ setColor(palette.LinearProgress, 'infoBg', colorMix(private_safeDarken, palette.info.main, 0.5));
5442
+ setColor(palette.LinearProgress, 'successBg', colorMix(private_safeDarken, palette.success.main, 0.5));
5443
+ setColor(palette.LinearProgress, 'warningBg', colorMix(private_safeDarken, palette.warning.main, 0.5));
5444
+ setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(private_safeAlpha, palette.text.primary, 0.13) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);
5445
+ setColor(palette.Slider, 'primaryTrack', colorMix(private_safeDarken, palette.primary.main, 0.5));
5446
+ setColor(palette.Slider, 'secondaryTrack', colorMix(private_safeDarken, palette.secondary.main, 0.5));
5447
+ setColor(palette.Slider, 'errorTrack', colorMix(private_safeDarken, palette.error.main, 0.5));
5448
+ setColor(palette.Slider, 'infoTrack', colorMix(private_safeDarken, palette.info.main, 0.5));
5449
+ setColor(palette.Slider, 'successTrack', colorMix(private_safeDarken, palette.success.main, 0.5));
5450
+ setColor(palette.Slider, 'warningTrack', colorMix(private_safeDarken, palette.warning.main, 0.5));
5451
+ const snackbarContentBackground = colorSpace ? colorMix(private_safeLighten, palette.background.default, 0.985) // use `0.985` instead of `0.98` to match the contrast ratio of JS implementation
5452
+ : private_safeEmphasize(palette.background.default, 0.98);
5297
5453
  setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
5298
- setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));
5454
+ setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? light.text.primary : palette.getContrastText(snackbarContentBackground)));
5299
5455
  setColor(palette.SpeedDialAction, 'fabHoverBg', private_safeEmphasize(palette.background.paper, 0.15));
5300
5456
  setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));
5301
5457
  setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));
5302
5458
  setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));
5303
5459
  setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));
5304
- setColor(palette.Switch, 'primaryDisabledColor', private_safeDarken(palette.primary.main, 0.55));
5305
- setColor(palette.Switch, 'secondaryDisabledColor', private_safeDarken(palette.secondary.main, 0.55));
5306
- setColor(palette.Switch, 'errorDisabledColor', private_safeDarken(palette.error.main, 0.55));
5307
- setColor(palette.Switch, 'infoDisabledColor', private_safeDarken(palette.info.main, 0.55));
5308
- setColor(palette.Switch, 'successDisabledColor', private_safeDarken(palette.success.main, 0.55));
5309
- setColor(palette.Switch, 'warningDisabledColor', private_safeDarken(palette.warning.main, 0.55));
5310
- setColor(palette.TableCell, 'border', private_safeDarken(private_safeAlpha(palette.divider, 1), 0.68));
5311
- setColor(palette.Tooltip, 'bg', private_safeAlpha(palette.grey[700], 0.92));
5460
+ setColor(palette.Switch, 'primaryDisabledColor', colorMix(private_safeDarken, palette.primary.main, 0.55));
5461
+ setColor(palette.Switch, 'secondaryDisabledColor', colorMix(private_safeDarken, palette.secondary.main, 0.55));
5462
+ setColor(palette.Switch, 'errorDisabledColor', colorMix(private_safeDarken, palette.error.main, 0.55));
5463
+ setColor(palette.Switch, 'infoDisabledColor', colorMix(private_safeDarken, palette.info.main, 0.55));
5464
+ setColor(palette.Switch, 'successDisabledColor', colorMix(private_safeDarken, palette.success.main, 0.55));
5465
+ setColor(palette.Switch, 'warningDisabledColor', colorMix(private_safeDarken, palette.warning.main, 0.55));
5466
+ setColor(palette.TableCell, 'border', colorMix(private_safeDarken, colorMix(private_safeAlpha, palette.divider, 1), 0.68));
5467
+ setColor(palette.Tooltip, 'bg', colorMix(private_safeAlpha, palette.grey[700], 0.92));
5312
5468
  }
5313
5469
 
5314
5470
  // MUI X - DataGrid needs this token.
@@ -5360,7 +5516,8 @@ function createThemeWithVars(options = {}, ...args) {
5360
5516
  prefix: cssVarPrefix,
5361
5517
  disableCssColorScheme,
5362
5518
  shouldSkipGeneratingVar: shouldSkipGeneratingVar$1,
5363
- getSelector: defaultGetSelector(theme)
5519
+ getSelector: defaultGetSelector(theme),
5520
+ enableContrastVars: nativeColor
5364
5521
  };
5365
5522
  const {
5366
5523
  vars,
@@ -5851,12 +6008,12 @@ var Loading = function () {
5851
6008
 
5852
6009
  var Plot$2 = lazy(function () { return import('react-plotly.js'); });
5853
6010
  var HistogramPlot = function (props) {
5854
- var _a, _b;
5855
- var data = props.data, title = props.title, xAxisTitle = props.xAxisTitle, _c = props.barColor, barColor = _c === void 0 ? 'rgb(72, 72, 74)' : _c, _d = props.unselectedBarColor, unselectedBarColor = _d === void 0 ? 'rgba(203, 195, 195, 0.88)' : _d, _e = props.selectorsColor, selectorsColor = _e === void 0 ? 'black' : _e, _f = props.showMeanLines, showMeanLines = _f === void 0 ? true : _f, containerStyleOverrides = props.containerStyleOverrides, _g = props.unselectedData, unselectedData = _g === void 0 ? [] : _g, _h = props.handleClickOrSelection, handleClickOrSelection = _h === void 0 ? function () { } : _h, _j = props.onDeselect, onDeselect = _j === void 0 ? function () { } : _j, plotId = props.plotId, _k = props.selectByBin, selectByBin = _k === void 0 ? false : _k, dateTickFormat = props.dateTickFormat, binSizeOverride = props.binSizeOverride;
6011
+ var _a, _b, _c, _d;
6012
+ var data = props.data, title = props.title, xAxisTitle = props.xAxisTitle, _e = props.barColor, barColor = _e === void 0 ? 'rgb(72, 72, 74)' : _e, _f = props.unselectedBarColor, unselectedBarColor = _f === void 0 ? 'rgba(203, 195, 195, 0.88)' : _f, _g = props.selectorsColor, selectorsColor = _g === void 0 ? 'black' : _g, containerStyleOverrides = props.containerStyleOverrides, _h = props.unselectedData, unselectedData = _h === void 0 ? [] : _h, _j = props.handleClickOrSelection, handleClickOrSelection = _j === void 0 ? function () { } : _j, _k = props.onDeselect, onDeselect = _k === void 0 ? function () { } : _k, plotId = props.plotId, _l = props.selectByBin, selectByBin = _l === void 0 ? false : _l, dateTickFormat = props.dateTickFormat, binSizeOverride = props.binSizeOverride, _m = props.statsAnnotations, statsAnnotations = _m === void 0 ? ['mean'] : _m;
5856
6013
  // Ref for plot container
5857
6014
  var containerRef = useRef(null);
5858
6015
  // Track any selections made in this plot so we can style the selection box.
5859
- var _l = useState(null), selectedRange = _l[0], setSelectedRange = _l[1];
6016
+ var _o = useState(null), selectedRange = _o[0], setSelectedRange = _o[1];
5860
6017
  // If all the data becomes selected, we should forget any old selections.
5861
6018
  useEffect(function () {
5862
6019
  if (unselectedData.length === 0) {
@@ -5868,7 +6025,7 @@ var HistogramPlot = function (props) {
5868
6025
  // Plotly determines "nice" bins which consequently means it internally decides the axis range. We need
5869
6026
  // to access that information once the plot has been initialized so that we can prevent the
5870
6027
  // axis range from changing during interaction. Dates use strings.
5871
- var _m = useState(undefined), fixedXAxisRange = _m[0], setFixedXAxisRange = _m[1];
6028
+ var _p = useState(undefined), fixedXAxisRange = _p[0], setFixedXAxisRange = _p[1];
5872
6029
  // Once the plot is drawn, record the initial axis range so we can keep it fixed.
5873
6030
  // figure should be Readonly<Plotly.Figure> but react-plotly.js doesn't expose that type, so we use any.
5874
6031
  var handlePlotUpdate = function (figure, graphDiv) {
@@ -6037,8 +6194,9 @@ var HistogramPlot = function (props) {
6037
6194
  }, [selectedRange, unselectedData]);
6038
6195
  // Calculate the mean of the selected data using normalized data
6039
6196
  var meanValue = (_a = calculateMean(data)) !== null && _a !== void 0 ? _a : 0; // Default to 0 if no data
6197
+ var stdevValue = (_b = calculateStandardDeviation(data)) !== null && _b !== void 0 ? _b : 0;
6040
6198
  var meanLineRadius = 0.01; // distance from the top of the y axis to the top/bottom end of the mean line
6041
- var meanLine = (showMeanLines && data.length > 0) ? [{
6199
+ var meanLine = (statsAnnotations.includes('mean') && data.length > 0) ? [{
6042
6200
  type: 'line',
6043
6201
  x0: meanValue,
6044
6202
  y0: 1 - meanLineRadius,
@@ -6052,8 +6210,8 @@ var HistogramPlot = function (props) {
6052
6210
  }] : [];
6053
6211
  // Draw mean line for all data
6054
6212
  var allData = __spreadArray(__spreadArray([], data, true), unselectedData, true);
6055
- var allDataMeanValue = (_b = calculateMean(allData)) !== null && _b !== void 0 ? _b : 0;
6056
- var allDataMeanLine = (showMeanLines && unselectedData.length > 0 && data.length > 0) ? [{
6213
+ var allDataMeanValue = (_c = calculateMean(allData)) !== null && _c !== void 0 ? _c : 0;
6214
+ var allDataMeanLine = (statsAnnotations.includes('mean') && unselectedData.length > 0 && data.length > 0) ? [{
6057
6215
  type: 'line',
6058
6216
  x0: allDataMeanValue,
6059
6217
  y0: 1 - meanLineRadius,
@@ -6065,6 +6223,61 @@ var HistogramPlot = function (props) {
6065
6223
  width: 1.5,
6066
6224
  }
6067
6225
  }] : [];
6226
+ var stdevLines = (statsAnnotations.includes('stdev') && data.length > 0) ? [{
6227
+ type: 'line',
6228
+ x0: meanValue - stdevValue,
6229
+ y0: 1 - meanLineRadius,
6230
+ x1: meanValue - stdevValue,
6231
+ yref: 'paper',
6232
+ y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.
6233
+ line: {
6234
+ color: barColor,
6235
+ width: 1.5,
6236
+ dash: 'dot',
6237
+ }
6238
+ },
6239
+ {
6240
+ type: 'line',
6241
+ x0: meanValue + stdevValue,
6242
+ y0: 1 - meanLineRadius,
6243
+ x1: meanValue + stdevValue,
6244
+ yref: 'paper',
6245
+ y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.
6246
+ line: {
6247
+ color: barColor,
6248
+ width: 1.5,
6249
+ dash: 'dot',
6250
+ }
6251
+ }]
6252
+ : [];
6253
+ var allDataStdevValue = (_d = calculateStandardDeviation(allData)) !== null && _d !== void 0 ? _d : 0;
6254
+ var allDataStdevLines = (statsAnnotations.includes('stdev') && unselectedData.length > 0 && data.length > 0) ? [{
6255
+ type: 'line',
6256
+ x0: allDataMeanValue - allDataStdevValue,
6257
+ y0: 1 - meanLineRadius,
6258
+ x1: allDataMeanValue - allDataStdevValue,
6259
+ yref: 'paper',
6260
+ y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.
6261
+ line: {
6262
+ color: unselectedBarColor,
6263
+ width: 1.5,
6264
+ dash: 'dot',
6265
+ }
6266
+ },
6267
+ {
6268
+ type: 'line',
6269
+ x0: allDataMeanValue + allDataStdevValue,
6270
+ y0: 1 - meanLineRadius,
6271
+ x1: allDataMeanValue + allDataStdevValue,
6272
+ yref: 'paper',
6273
+ y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.
6274
+ line: {
6275
+ color: unselectedBarColor,
6276
+ width: 1.5,
6277
+ dash: 'dot',
6278
+ }
6279
+ }]
6280
+ : [];
6068
6281
  // If binSizeOverride is provided, use it to set the bin size and range explicitly.
6069
6282
  // Plotly does a better job of setting bins and ending them at nice numbers, so only use
6070
6283
  // this prop when necessary.
@@ -6100,6 +6313,40 @@ var HistogramPlot = function (props) {
6100
6313
  },
6101
6314
  hovertemplate: '[%{x})<br>Count: %{y}<extra></extra>', // Custom hover text
6102
6315
  };
6316
+ var meanAnnotation = (statsAnnotations.includes('mean') && meanLine && data.length > 0) ? [{
6317
+ x: meanValue,
6318
+ y: 1 + meanLineRadius + 0.04, // Position above the mean line. Value set with respect to the paper coordinates.
6319
+ yref: 'paper',
6320
+ text: "<span style=\"font-weight:300\">AVG </span><span style=\"font-weight:600\">".concat(isDateArray(data) ? new Date(meanValue).toLocaleDateString('en-US', {
6321
+ month: '2-digit',
6322
+ day: '2-digit',
6323
+ year: '2-digit'
6324
+ }) : meanValue.toFixed(2), "</span>"),
6325
+ xanchor: 'center',
6326
+ yanchor: 'bottom',
6327
+ showarrow: false,
6328
+ font: {
6329
+ color: barColor,
6330
+ size: 12,
6331
+ },
6332
+ }] : [];
6333
+ var stdevAnnotation = (statsAnnotations.includes('stdev') && stdevLines && data.length > 0) ? [{
6334
+ x: meanValue, // Draw above the mean annotation
6335
+ y: 1 + meanLineRadius + (statsAnnotations.includes('mean') ? 0.11 : 0.04),
6336
+ yref: 'paper',
6337
+ text: "<span style=\"font-weight:300\">\u03C3 </span><span style=\"font-weight:600\">&plusmn;".concat(isDateArray(data) ? new Date(stdevValue).toLocaleDateString('en-US', {
6338
+ month: '2-digit',
6339
+ day: '2-digit',
6340
+ year: '2-digit'
6341
+ }) : stdevValue.toFixed(2), "</span>"),
6342
+ xanchor: 'center',
6343
+ yanchor: 'bottom',
6344
+ showarrow: false,
6345
+ font: {
6346
+ color: barColor,
6347
+ size: 12,
6348
+ },
6349
+ }] : [];
6103
6350
  var plotlyData = [
6104
6351
  {
6105
6352
  x: data,
@@ -6132,7 +6379,7 @@ var HistogramPlot = function (props) {
6132
6379
  margin: {
6133
6380
  l: 50,
6134
6381
  r: 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.
6135
- t: title ? 80 : 30,
6382
+ t: 40 + (title ? 50 : 0), // Add extra top margin if there is a title
6136
6383
  b: 50,
6137
6384
  pad: 4
6138
6385
  },
@@ -6178,24 +6425,8 @@ var HistogramPlot = function (props) {
6178
6425
  bargap: 0.03, // Gap between bars
6179
6426
  dragmode: 'select', // Enable drag to select
6180
6427
  selectdirection: 'h', // User can select in horizontal direction only
6181
- shapes: __spreadArray(__spreadArray(__spreadArray([], allDataMeanLine, true), meanLine, true), selectedRangeBox, true), // Add the mean line and selection box
6182
- annotations: (showMeanLines && meanLine && data.length > 0) ? [{
6183
- x: meanValue,
6184
- y: 1 + meanLineRadius + 0.04, // Position above the mean line. Value set with respect to the paper coordinates.
6185
- yref: 'paper',
6186
- text: "<span style=\"font-weight:300\">AVG </span><span style=\"font-weight:600\">".concat(isDateArray(data) ? new Date(meanValue).toLocaleDateString('en-US', {
6187
- month: '2-digit',
6188
- day: '2-digit',
6189
- year: '2-digit'
6190
- }) : meanValue.toFixed(2), "</span>"),
6191
- xanchor: 'center',
6192
- yanchor: 'bottom',
6193
- showarrow: false,
6194
- font: {
6195
- color: barColor,
6196
- size: 12,
6197
- },
6198
- }] : [],
6428
+ shapes: __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], allDataMeanLine, true), meanLine, true), selectedRangeBox, true), stdevLines, true), allDataStdevLines, true), // Add the mean line and selection box
6429
+ annotations: __spreadArray(__spreadArray([], meanAnnotation, true), stdevAnnotation, true)
6199
6430
  };
6200
6431
  var config = {
6201
6432
  responsive: true, // Make the plot responsive