td-plots 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,6 +1,10 @@
1
- import { jsx as jsx$1, Fragment } from 'react/jsx-runtime';
1
+ import { __spreadArray, __assign } from 'tslib';
2
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
3
  import * as React from 'react';
3
- import { forwardRef, useContext, lazy, useRef, Suspense } from 'react';
4
+ import { lazy, useRef, useState, useMemo, Suspense } from 'react';
5
+ import emStyled from '@emotion/styled';
6
+ import { serializeStyles } from '@emotion/serialize';
7
+ import { css, keyframes } from '@emotion/react';
4
8
 
5
9
  function styleInject(css, ref) {
6
10
  if ( ref === void 0 ) ref = {};
@@ -32,1345 +36,35 @@ function styleInject(css, ref) {
32
36
  var css_248z = ".plot-container{height:100%;max-width:100%;min-height:300px;overflow:hidden!important;position:relative;width:100%}.plot-container>div{flex:1;height:100%!important;width:100%!important}.plot-container .main-svg{max-height:100%!important;max-width:100%!important}.plot-container .main-svg,.plot-container .plotly-graph-div,.plot-container svg.main-svg[height],.plot-container svg.main-svg[width]{height:100%!important;width:100%!important}.plot-container .point{border-radius:5px!important;overflow:hidden!important}.plot-container .cursor-ns-resize{height:0;width:0}.plot-container .cursor-ew-resize{fill:var(--selection-color,blue)!important;stroke:var(--selection-color,blue)!important}.plot-container .selectionlayer>path{stroke:var(--selection-color,blue)!important;stroke-dasharray:0!important;stroke-width:1px!important;opacity:.5!important}.plot-container .zoomlayer>path{stroke-dasharray:0!important;stroke:var(--selection-color,blue)!important;fill:var(--selection-color,blue)!important}.radial-histogram-container{aspect-ratio:1}.loading-overlay{align-items:center;background-color:hsla(0,0%,100%,.8);display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%;z-index:300}";
33
37
  styleInject(css_248z);
34
38
 
35
- /******************************************************************************
36
- Copyright (c) Microsoft Corporation.
37
-
38
- Permission to use, copy, modify, and/or distribute this software for any
39
- purpose with or without fee is hereby granted.
40
-
41
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
42
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
43
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
44
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
45
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
46
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
47
- PERFORMANCE OF THIS SOFTWARE.
48
- ***************************************************************************** */
49
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
50
-
51
-
52
- var __assign = function() {
53
- __assign = Object.assign || function __assign(t) {
54
- for (var s, i = 1, n = arguments.length; i < n; i++) {
55
- s = arguments[i];
56
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
57
- }
58
- return t;
59
- };
60
- return __assign.apply(this, arguments);
61
- };
62
-
63
- function __spreadArray(to, from, pack) {
64
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
65
- if (ar || !(i in from)) {
66
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
67
- ar[i] = from[i];
68
- }
69
- }
70
- return to.concat(ar || Array.prototype.slice.call(from));
71
- }
72
-
73
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
74
- var e = new Error(message);
75
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
76
- };
77
-
78
- // Utility functions for our components
79
- // Type guard to check if array contains only numbers
80
- var isNumberArray = function (arr) {
81
- return arr.every(function (item) { return typeof item === 'number' && !isNaN(item); });
82
- };
83
- // Type guard to check if array contains only dates
84
- var isDateArray = function (arr) {
85
- return arr.every(function (item) { return item instanceof Date; });
86
- };
87
- // Calculate the mean of an array of numbers or dates
88
- function calculateMean(arr) {
89
- if (arr.length === 0)
90
- return undefined;
91
- if (isNumberArray(arr)) {
92
- return arr.reduce(function (acc, num) { return acc + num; }, 0) / arr.length;
93
- }
94
- else if (isDateArray(arr)) {
95
- var sum = arr.reduce(function (acc, date) { return acc + date.getTime(); }, 0);
96
- return sum / arr.length;
97
- }
98
- }
99
-
100
- const common = {
101
- black: '#000',
102
- white: '#fff'
103
- };
104
-
105
- const red = {
106
- 300: '#e57373',
107
- 400: '#ef5350',
108
- 500: '#f44336',
109
- 700: '#d32f2f',
110
- 800: '#c62828'};
111
-
112
- const purple = {
113
- 50: '#f3e5f5',
114
- 200: '#ce93d8',
115
- 300: '#ba68c8',
116
- 400: '#ab47bc',
117
- 500: '#9c27b0',
118
- 700: '#7b1fa2'};
119
-
120
- const blue = {
121
- 50: '#e3f2fd',
122
- 200: '#90caf9',
123
- 400: '#42a5f5',
124
- 700: '#1976d2',
125
- 800: '#1565c0'};
126
-
127
- const lightBlue = {
128
- 300: '#4fc3f7',
129
- 400: '#29b6f6',
130
- 500: '#03a9f4',
131
- 700: '#0288d1',
132
- 900: '#01579b'};
133
-
134
- const green = {
135
- 300: '#81c784',
136
- 400: '#66bb6a',
137
- 500: '#4caf50',
138
- 700: '#388e3c',
139
- 800: '#2e7d32',
140
- 900: '#1b5e20'};
141
-
142
- const orange = {
143
- 300: '#ffb74d',
144
- 400: '#ffa726',
145
- 500: '#ff9800',
146
- 700: '#f57c00',
147
- 900: '#e65100'};
148
-
149
- const grey = {
150
- 50: '#fafafa',
151
- 100: '#f5f5f5',
152
- 200: '#eeeeee',
153
- 300: '#e0e0e0',
154
- 400: '#bdbdbd',
155
- 500: '#9e9e9e',
156
- 600: '#757575',
157
- 700: '#616161',
158
- 800: '#424242',
159
- 900: '#212121',
160
- A100: '#f5f5f5',
161
- A200: '#eeeeee',
162
- A400: '#bdbdbd',
163
- A700: '#616161'
164
- };
165
-
166
- /**
167
- * WARNING: Don't import this directly. It's imported by the code generated by
168
- * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`
169
- * constructors to ensure the plugin works as expected. Supported patterns include:
170
- * throw new Error('My message');
171
- * throw new Error(`My message: ${foo}`);
172
- * throw new Error(`My message: ${foo}` + 'another string');
173
- * ...
174
- * @param {number} code
175
- */
176
- function formatMuiErrorMessage(code, ...args) {
177
- const url = new URL(`https://mui.com/production-error/?code=${code}`);
178
- args.forEach(arg => url.searchParams.append('args[]', arg));
179
- return `Minified MUI error #${code}; visit ${url} for the full message.`;
180
- }
181
-
182
- var THEME_ID = '$$material';
183
-
184
- function _extends() {
185
- return _extends = Object.assign ? Object.assign.bind() : function (n) {
186
- for (var e = 1; e < arguments.length; e++) {
187
- var t = arguments[e];
188
- for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
189
- }
190
- return n;
191
- }, _extends.apply(null, arguments);
192
- }
193
-
194
- /*
195
-
196
- Based off glamor's StyleSheet, thanks Sunil ❤️
197
-
198
- high performance StyleSheet for css-in-js systems
199
-
200
- - uses multiple style tags behind the scenes for millions of rules
201
- - uses `insertRule` for appending in production for *much* faster performance
202
-
203
- // usage
204
-
205
- import { StyleSheet } from '@emotion/sheet'
206
-
207
- let styleSheet = new StyleSheet({ key: '', container: document.head })
208
-
209
- styleSheet.insert('#box { border: 1px solid red; }')
210
- - appends a css rule into the stylesheet
211
-
212
- styleSheet.flush()
213
- - empties the stylesheet of all its contents
214
-
215
- */
216
-
217
- function sheetForTag(tag) {
218
- if (tag.sheet) {
219
- return tag.sheet;
220
- } // this weirdness brought to you by firefox
221
-
222
- /* istanbul ignore next */
223
-
224
-
225
- for (var i = 0; i < document.styleSheets.length; i++) {
226
- if (document.styleSheets[i].ownerNode === tag) {
227
- return document.styleSheets[i];
228
- }
229
- } // this function should always return with a value
230
- // TS can't understand it though so we make it stop complaining here
231
-
232
-
233
- return undefined;
234
- }
235
-
236
- function createStyleElement(options) {
237
- var tag = document.createElement('style');
238
- tag.setAttribute('data-emotion', options.key);
239
-
240
- if (options.nonce !== undefined) {
241
- tag.setAttribute('nonce', options.nonce);
242
- }
243
-
244
- tag.appendChild(document.createTextNode(''));
245
- tag.setAttribute('data-s', '');
246
- return tag;
247
- }
248
-
249
- var StyleSheet = /*#__PURE__*/function () {
250
- // Using Node instead of HTMLElement since container may be a ShadowRoot
251
- function StyleSheet(options) {
252
- var _this = this;
253
-
254
- this._insertTag = function (tag) {
255
- var before;
256
-
257
- if (_this.tags.length === 0) {
258
- if (_this.insertionPoint) {
259
- before = _this.insertionPoint.nextSibling;
260
- } else if (_this.prepend) {
261
- before = _this.container.firstChild;
262
- } else {
263
- before = _this.before;
264
- }
265
- } else {
266
- before = _this.tags[_this.tags.length - 1].nextSibling;
267
- }
268
-
269
- _this.container.insertBefore(tag, before);
270
-
271
- _this.tags.push(tag);
272
- };
273
-
274
- this.isSpeedy = options.speedy === undefined ? true : options.speedy;
275
- this.tags = [];
276
- this.ctr = 0;
277
- this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets
278
-
279
- this.key = options.key;
280
- this.container = options.container;
281
- this.prepend = options.prepend;
282
- this.insertionPoint = options.insertionPoint;
283
- this.before = null;
284
- }
285
-
286
- var _proto = StyleSheet.prototype;
287
-
288
- _proto.hydrate = function hydrate(nodes) {
289
- nodes.forEach(this._insertTag);
290
- };
291
-
292
- _proto.insert = function insert(rule) {
293
- // the max length is how many rules we have per style tag, it's 65000 in speedy mode
294
- // it's 1 in dev because we insert source maps that map a single rule to a location
295
- // and you can only have one source map per style tag
296
- if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {
297
- this._insertTag(createStyleElement(this));
298
- }
299
-
300
- var tag = this.tags[this.tags.length - 1];
301
-
302
- if (this.isSpeedy) {
303
- var sheet = sheetForTag(tag);
304
-
305
- try {
306
- // this is the ultrafast version, works across browsers
307
- // the big drawback is that the css won't be editable in devtools
308
- sheet.insertRule(rule, sheet.cssRules.length);
309
- } catch (e) {
310
- }
311
- } else {
312
- tag.appendChild(document.createTextNode(rule));
313
- }
314
-
315
- this.ctr++;
316
- };
317
-
318
- _proto.flush = function flush() {
319
- this.tags.forEach(function (tag) {
320
- var _tag$parentNode;
321
-
322
- return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);
323
- });
324
- this.tags = [];
325
- this.ctr = 0;
326
- };
327
-
328
- return StyleSheet;
329
- }();
330
-
331
- var MS = '-ms-';
332
- var MOZ = '-moz-';
333
- var WEBKIT = '-webkit-';
334
-
335
- var COMMENT = 'comm';
336
- var RULESET = 'rule';
337
- var DECLARATION = 'decl';
338
- var IMPORT = '@import';
339
- var KEYFRAMES = '@keyframes';
340
- var LAYER = '@layer';
341
-
342
- /**
343
- * @param {number}
344
- * @return {number}
345
- */
346
- var abs = Math.abs;
347
-
348
- /**
349
- * @param {number}
350
- * @return {string}
351
- */
352
- var from = String.fromCharCode;
353
-
354
- /**
355
- * @param {object}
356
- * @return {object}
357
- */
358
- var assign = Object.assign;
359
-
360
- /**
361
- * @param {string} value
362
- * @param {number} length
363
- * @return {number}
364
- */
365
- function hash (value, length) {
366
- return charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0
367
- }
368
-
369
- /**
370
- * @param {string} value
371
- * @return {string}
372
- */
373
- function trim (value) {
374
- return value.trim()
375
- }
376
-
377
- /**
378
- * @param {string} value
379
- * @param {RegExp} pattern
380
- * @return {string?}
381
- */
382
- function match (value, pattern) {
383
- return (value = pattern.exec(value)) ? value[0] : value
384
- }
385
-
386
- /**
387
- * @param {string} value
388
- * @param {(string|RegExp)} pattern
389
- * @param {string} replacement
390
- * @return {string}
391
- */
392
- function replace (value, pattern, replacement) {
393
- return value.replace(pattern, replacement)
394
- }
395
-
396
- /**
397
- * @param {string} value
398
- * @param {string} search
399
- * @return {number}
400
- */
401
- function indexof (value, search) {
402
- return value.indexOf(search)
403
- }
404
-
405
- /**
406
- * @param {string} value
407
- * @param {number} index
408
- * @return {number}
409
- */
410
- function charat (value, index) {
411
- return value.charCodeAt(index) | 0
412
- }
413
-
414
- /**
415
- * @param {string} value
416
- * @param {number} begin
417
- * @param {number} end
418
- * @return {string}
419
- */
420
- function substr (value, begin, end) {
421
- return value.slice(begin, end)
422
- }
423
-
424
- /**
425
- * @param {string} value
426
- * @return {number}
427
- */
428
- function strlen (value) {
429
- return value.length
430
- }
431
-
432
- /**
433
- * @param {any[]} value
434
- * @return {number}
435
- */
436
- function sizeof (value) {
437
- return value.length
438
- }
439
-
440
- /**
441
- * @param {any} value
442
- * @param {any[]} array
443
- * @return {any}
444
- */
445
- function append (value, array) {
446
- return array.push(value), value
447
- }
448
-
449
- /**
450
- * @param {string[]} array
451
- * @param {function} callback
452
- * @return {string}
453
- */
454
- function combine (array, callback) {
455
- return array.map(callback).join('')
456
- }
457
-
458
- var line = 1;
459
- var column = 1;
460
- var length = 0;
461
- var position = 0;
462
- var character = 0;
463
- var characters = '';
464
-
465
- /**
466
- * @param {string} value
467
- * @param {object | null} root
468
- * @param {object | null} parent
469
- * @param {string} type
470
- * @param {string[] | string} props
471
- * @param {object[] | string} children
472
- * @param {number} length
473
- */
474
- function node (value, root, parent, type, props, children, length) {
475
- return {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}
476
- }
477
-
478
- /**
479
- * @param {object} root
480
- * @param {object} props
481
- * @return {object}
482
- */
483
- function copy (root, props) {
484
- return assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)
485
- }
486
-
487
- /**
488
- * @return {number}
489
- */
490
- function char () {
491
- return character
492
- }
493
-
494
- /**
495
- * @return {number}
496
- */
497
- function prev () {
498
- character = position > 0 ? charat(characters, --position) : 0;
499
-
500
- if (column--, character === 10)
501
- column = 1, line--;
502
-
503
- return character
504
- }
505
-
506
- /**
507
- * @return {number}
508
- */
509
- function next () {
510
- character = position < length ? charat(characters, position++) : 0;
511
-
512
- if (column++, character === 10)
513
- column = 1, line++;
514
-
515
- return character
516
- }
517
-
518
- /**
519
- * @return {number}
520
- */
521
- function peek () {
522
- return charat(characters, position)
523
- }
524
-
525
- /**
526
- * @return {number}
527
- */
528
- function caret () {
529
- return position
530
- }
531
-
532
- /**
533
- * @param {number} begin
534
- * @param {number} end
535
- * @return {string}
536
- */
537
- function slice (begin, end) {
538
- return substr(characters, begin, end)
539
- }
540
-
541
- /**
542
- * @param {number} type
543
- * @return {number}
544
- */
545
- function token (type) {
546
- switch (type) {
547
- // \0 \t \n \r \s whitespace token
548
- case 0: case 9: case 10: case 13: case 32:
549
- return 5
550
- // ! + , / > @ ~ isolate token
551
- case 33: case 43: case 44: case 47: case 62: case 64: case 126:
552
- // ; { } breakpoint token
553
- case 59: case 123: case 125:
554
- return 4
555
- // : accompanied token
556
- case 58:
557
- return 3
558
- // " ' ( [ opening delimit token
559
- case 34: case 39: case 40: case 91:
560
- return 2
561
- // ) ] closing delimit token
562
- case 41: case 93:
563
- return 1
564
- }
565
-
566
- return 0
567
- }
568
-
569
- /**
570
- * @param {string} value
571
- * @return {any[]}
572
- */
573
- function alloc (value) {
574
- return line = column = 1, length = strlen(characters = value), position = 0, []
575
- }
576
-
577
- /**
578
- * @param {any} value
579
- * @return {any}
580
- */
581
- function dealloc (value) {
582
- return characters = '', value
583
- }
584
-
585
- /**
586
- * @param {number} type
587
- * @return {string}
588
- */
589
- function delimit (type) {
590
- return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))
591
- }
592
-
593
- /**
594
- * @param {number} type
595
- * @return {string}
596
- */
597
- function whitespace (type) {
598
- while (character = peek())
599
- if (character < 33)
600
- next();
601
- else
602
- break
603
-
604
- return token(type) > 2 || token(character) > 3 ? '' : ' '
605
- }
606
-
607
- /**
608
- * @param {number} index
609
- * @param {number} count
610
- * @return {string}
611
- */
612
- function escaping (index, count) {
613
- while (--count && next())
614
- // not 0-9 A-F a-f
615
- if (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))
616
- break
617
-
618
- return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))
619
- }
620
-
621
- /**
622
- * @param {number} type
623
- * @return {number}
624
- */
625
- function delimiter (type) {
626
- while (next())
627
- switch (character) {
628
- // ] ) " '
629
- case type:
630
- return position
631
- // " '
632
- case 34: case 39:
633
- if (type !== 34 && type !== 39)
634
- delimiter(character);
635
- break
636
- // (
637
- case 40:
638
- if (type === 41)
639
- delimiter(type);
640
- break
641
- // \
642
- case 92:
643
- next();
644
- break
645
- }
646
-
647
- return position
648
- }
649
-
650
- /**
651
- * @param {number} type
652
- * @param {number} index
653
- * @return {number}
654
- */
655
- function commenter (type, index) {
656
- while (next())
657
- // //
658
- if (type + character === 47 + 10)
659
- break
660
- // /*
661
- else if (type + character === 42 + 42 && peek() === 47)
662
- break
663
-
664
- return '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())
665
- }
666
-
667
- /**
668
- * @param {number} index
669
- * @return {string}
670
- */
671
- function identifier (index) {
672
- while (!token(peek()))
673
- next();
674
-
675
- return slice(index, position)
676
- }
677
-
678
- /**
679
- * @param {string} value
680
- * @return {object[]}
681
- */
682
- function compile (value) {
683
- return dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))
684
- }
685
-
686
- /**
687
- * @param {string} value
688
- * @param {object} root
689
- * @param {object?} parent
690
- * @param {string[]} rule
691
- * @param {string[]} rules
692
- * @param {string[]} rulesets
693
- * @param {number[]} pseudo
694
- * @param {number[]} points
695
- * @param {string[]} declarations
696
- * @return {object}
697
- */
698
- function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {
699
- var index = 0;
700
- var offset = 0;
701
- var length = pseudo;
702
- var atrule = 0;
703
- var property = 0;
704
- var previous = 0;
705
- var variable = 1;
706
- var scanning = 1;
707
- var ampersand = 1;
708
- var character = 0;
709
- var type = '';
710
- var props = rules;
711
- var children = rulesets;
712
- var reference = rule;
713
- var characters = type;
714
-
715
- while (scanning)
716
- switch (previous = character, character = next()) {
717
- // (
718
- case 40:
719
- if (previous != 108 && charat(characters, length - 1) == 58) {
720
- if (indexof(characters += replace(delimit(character), '&', '&\f'), '&\f') != -1)
721
- ampersand = -1;
722
- break
723
- }
724
- // " ' [
725
- case 34: case 39: case 91:
726
- characters += delimit(character);
727
- break
728
- // \t \n \r \s
729
- case 9: case 10: case 13: case 32:
730
- characters += whitespace(previous);
731
- break
732
- // \
733
- case 92:
734
- characters += escaping(caret() - 1, 7);
735
- continue
736
- // /
737
- case 47:
738
- switch (peek()) {
739
- case 42: case 47:
740
- append(comment(commenter(next(), caret()), root, parent), declarations);
741
- break
742
- default:
743
- characters += '/';
744
- }
745
- break
746
- // {
747
- case 123 * variable:
748
- points[index++] = strlen(characters) * ampersand;
749
- // } ; \0
750
- case 125 * variable: case 59: case 0:
751
- switch (character) {
752
- // \0 }
753
- case 0: case 125: scanning = 0;
754
- // ;
755
- case 59 + offset: if (ampersand == -1) characters = replace(characters, /\f/g, '');
756
- if (property > 0 && (strlen(characters) - length))
757
- append(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations);
758
- break
759
- // @ ;
760
- case 59: characters += ';';
761
- // { rule/at-rule
762
- default:
763
- append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets);
764
-
765
- if (character === 123)
766
- if (offset === 0)
767
- parse(characters, root, reference, reference, props, rulesets, length, points, children);
768
- else
769
- switch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {
770
- // d l m s
771
- case 100: case 108: case 109: case 115:
772
- parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children);
773
- break
774
- default:
775
- parse(characters, reference, reference, reference, [''], children, 0, points, children);
776
- }
777
- }
778
-
779
- index = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo;
780
- break
781
- // :
782
- case 58:
783
- length = 1 + strlen(characters), property = previous;
784
- default:
785
- if (variable < 1)
786
- if (character == 123)
787
- --variable;
788
- else if (character == 125 && variable++ == 0 && prev() == 125)
789
- continue
790
-
791
- switch (characters += from(character), character * variable) {
792
- // &
793
- case 38:
794
- ampersand = offset > 0 ? 1 : (characters += '\f', -1);
795
- break
796
- // ,
797
- case 44:
798
- points[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1;
799
- break
800
- // @
801
- case 64:
802
- // -
803
- if (peek() === 45)
804
- characters += delimit(next());
805
-
806
- atrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++;
807
- break
808
- // -
809
- case 45:
810
- if (previous === 45 && strlen(characters) == 2)
811
- variable = 0;
812
- }
813
- }
814
-
815
- return rulesets
816
- }
817
-
818
- /**
819
- * @param {string} value
820
- * @param {object} root
821
- * @param {object?} parent
822
- * @param {number} index
823
- * @param {number} offset
824
- * @param {string[]} rules
825
- * @param {number[]} points
826
- * @param {string} type
827
- * @param {string[]} props
828
- * @param {string[]} children
829
- * @param {number} length
830
- * @return {object}
831
- */
832
- function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {
833
- var post = offset - 1;
834
- var rule = offset === 0 ? rules : [''];
835
- var size = sizeof(rule);
836
-
837
- for (var i = 0, j = 0, k = 0; i < index; ++i)
838
- for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)
839
- if (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\f/g, rule[x])))
840
- props[k++] = z;
841
-
842
- return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)
843
- }
844
-
845
- /**
846
- * @param {number} value
847
- * @param {object} root
848
- * @param {object?} parent
849
- * @return {object}
850
- */
851
- function comment (value, root, parent) {
852
- return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)
853
- }
854
-
855
- /**
856
- * @param {string} value
857
- * @param {object} root
858
- * @param {object?} parent
859
- * @param {number} length
860
- * @return {object}
861
- */
862
- function declaration (value, root, parent, length) {
863
- return node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)
864
- }
865
-
866
- /**
867
- * @param {object[]} children
868
- * @param {function} callback
869
- * @return {string}
870
- */
871
- function serialize (children, callback) {
872
- var output = '';
873
- var length = sizeof(children);
874
-
875
- for (var i = 0; i < length; i++)
876
- output += callback(children[i], i, children, callback) || '';
877
-
878
- return output
879
- }
880
-
881
- /**
882
- * @param {object} element
883
- * @param {number} index
884
- * @param {object[]} children
885
- * @param {function} callback
886
- * @return {string}
887
- */
888
- function stringify (element, index, children, callback) {
889
- switch (element.type) {
890
- case LAYER: if (element.children.length) break
891
- case IMPORT: case DECLARATION: return element.return = element.return || element.value
892
- case COMMENT: return ''
893
- case KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'
894
- case RULESET: element.value = element.props.join(',');
895
- }
896
-
897
- return strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''
898
- }
899
-
900
- /**
901
- * @param {function[]} collection
902
- * @return {function}
903
- */
904
- function middleware (collection) {
905
- var length = sizeof(collection);
906
-
907
- return function (element, index, children, callback) {
908
- var output = '';
909
-
910
- for (var i = 0; i < length; i++)
911
- output += collection[i](element, index, children, callback) || '';
912
-
913
- return output
914
- }
915
- }
916
-
917
- /**
918
- * @param {function} callback
919
- * @return {function}
920
- */
921
- function rulesheet (callback) {
922
- return function (element) {
923
- if (!element.root)
924
- if (element = element.return)
925
- callback(element);
926
- }
927
- }
928
-
929
- function memoize$1(fn) {
930
- var cache = Object.create(null);
931
- return function (arg) {
932
- if (cache[arg] === undefined) cache[arg] = fn(arg);
933
- return cache[arg];
934
- };
935
- }
936
-
937
- var identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {
938
- var previous = 0;
939
- var character = 0;
940
-
941
- while (true) {
942
- previous = character;
943
- character = peek(); // &\f
944
-
945
- if (previous === 38 && character === 12) {
946
- points[index] = 1;
947
- }
948
-
949
- if (token(character)) {
950
- break;
951
- }
952
-
953
- next();
954
- }
955
-
956
- return slice(begin, position);
957
- };
958
-
959
- var toRules = function toRules(parsed, points) {
960
- // pretend we've started with a comma
961
- var index = -1;
962
- var character = 44;
963
-
964
- do {
965
- switch (token(character)) {
966
- case 0:
967
- // &\f
968
- if (character === 38 && peek() === 12) {
969
- // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings
970
- // stylis inserts \f after & to know when & where it should replace this sequence with the context selector
971
- // and when it should just concatenate the outer and inner selectors
972
- // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here
973
- points[index] = 1;
974
- }
975
-
976
- parsed[index] += identifierWithPointTracking(position - 1, points, index);
977
- break;
978
-
979
- case 2:
980
- parsed[index] += delimit(character);
981
- break;
982
-
983
- case 4:
984
- // comma
985
- if (character === 44) {
986
- // colon
987
- parsed[++index] = peek() === 58 ? '&\f' : '';
988
- points[index] = parsed[index].length;
989
- break;
990
- }
991
-
992
- // fallthrough
993
-
994
- default:
995
- parsed[index] += from(character);
996
- }
997
- } while (character = next());
998
-
999
- return parsed;
39
+ // Utility functions for our components
40
+ // Type guard to check if array contains only numbers
41
+ var isNumberArray = function (arr) {
42
+ return arr.every(function (item) { return typeof item === 'number' && !isNaN(item); });
1000
43
  };
1001
-
1002
- var getRules = function getRules(value, points) {
1003
- return dealloc(toRules(alloc(value), points));
1004
- }; // WeakSet would be more appropriate, but only WeakMap is supported in IE11
1005
-
1006
-
1007
- var fixedElements = /* #__PURE__ */new WeakMap();
1008
- var compat = function compat(element) {
1009
- if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo
1010
- // negative .length indicates that this rule has been already prefixed
1011
- element.length < 1) {
1012
- return;
1013
- }
1014
-
1015
- var value = element.value;
1016
- var parent = element.parent;
1017
- var isImplicitRule = element.column === parent.column && element.line === parent.line;
1018
-
1019
- while (parent.type !== 'rule') {
1020
- parent = parent.parent;
1021
- if (!parent) return;
1022
- } // short-circuit for the simplest case
1023
-
1024
-
1025
- if (element.props.length === 1 && value.charCodeAt(0) !== 58
1026
- /* colon */
1027
- && !fixedElements.get(parent)) {
1028
- return;
1029
- } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)
1030
- // then the props has already been manipulated beforehand as they that array is shared between it and its "rule parent"
1031
-
1032
-
1033
- if (isImplicitRule) {
1034
- return;
1035
- }
1036
-
1037
- fixedElements.set(element, true);
1038
- var points = [];
1039
- var rules = getRules(value, points);
1040
- var parentRules = parent.props;
1041
-
1042
- for (var i = 0, k = 0; i < rules.length; i++) {
1043
- for (var j = 0; j < parentRules.length; j++, k++) {
1044
- element.props[k] = points[i] ? rules[i].replace(/&\f/g, parentRules[j]) : parentRules[j] + " " + rules[i];
1045
- }
1046
- }
44
+ // Type guard to check if array contains only dates
45
+ var isDateArray = function (arr) {
46
+ return arr.every(function (item) { return item instanceof Date; });
1047
47
  };
1048
- var removeLabel = function removeLabel(element) {
1049
- if (element.type === 'decl') {
1050
- var value = element.value;
1051
-
1052
- if ( // charcode for l
1053
- value.charCodeAt(0) === 108 && // charcode for b
1054
- value.charCodeAt(2) === 98) {
1055
- // this ignores label
1056
- element["return"] = '';
1057
- element.value = '';
48
+ // Calculate the mean of an array of numbers or dates
49
+ function calculateMean(arr) {
50
+ if (arr.length === 0)
51
+ return undefined;
52
+ if (isNumberArray(arr)) {
53
+ return arr.reduce(function (acc, num) { return acc + num; }, 0) / arr.length;
54
+ }
55
+ else if (isDateArray(arr)) {
56
+ var sum = arr.reduce(function (acc, date) { return acc + date.getTime(); }, 0);
57
+ return sum / arr.length;
1058
58
  }
1059
- }
1060
- };
1061
-
1062
- /* eslint-disable no-fallthrough */
1063
-
1064
- function prefix(value, length) {
1065
- switch (hash(value, length)) {
1066
- // color-adjust
1067
- case 5103:
1068
- return WEBKIT + 'print-' + value + value;
1069
- // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)
1070
-
1071
- case 5737:
1072
- case 4201:
1073
- case 3177:
1074
- case 3433:
1075
- case 1641:
1076
- case 4457:
1077
- case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break
1078
-
1079
- case 5572:
1080
- case 6356:
1081
- case 5844:
1082
- case 3191:
1083
- case 6645:
1084
- case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,
1085
-
1086
- case 6391:
1087
- case 5879:
1088
- case 5623:
1089
- case 6135:
1090
- case 4599:
1091
- case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)
1092
-
1093
- case 4215:
1094
- case 6389:
1095
- case 5109:
1096
- case 5365:
1097
- case 5621:
1098
- case 3829:
1099
- return WEBKIT + value + value;
1100
- // appearance, user-select, transform, hyphens, text-size-adjust
1101
-
1102
- case 5349:
1103
- case 4246:
1104
- case 4810:
1105
- case 6968:
1106
- case 2756:
1107
- return WEBKIT + value + MOZ + value + MS + value + value;
1108
- // flex, flex-direction
1109
-
1110
- case 6828:
1111
- case 4268:
1112
- return WEBKIT + value + MS + value + value;
1113
- // order
1114
-
1115
- case 6165:
1116
- return WEBKIT + value + MS + 'flex-' + value + value;
1117
- // align-items
1118
-
1119
- case 5187:
1120
- return WEBKIT + value + replace(value, /(\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;
1121
- // align-self
1122
-
1123
- case 5443:
1124
- return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;
1125
- // align-content
1126
-
1127
- case 4675:
1128
- return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;
1129
- // flex-shrink
1130
-
1131
- case 5548:
1132
- return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;
1133
- // flex-basis
1134
-
1135
- case 5292:
1136
- return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;
1137
- // flex-grow
1138
-
1139
- case 6060:
1140
- return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;
1141
- // transition
1142
-
1143
- case 4554:
1144
- return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;
1145
- // cursor
1146
-
1147
- case 6187:
1148
- return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;
1149
- // background, background-image
1150
-
1151
- case 5495:
1152
- case 3959:
1153
- return replace(value, /(image-set\([^]*)/, WEBKIT + '$1' + '$`$1');
1154
- // justify-content
1155
-
1156
- case 4968:
1157
- return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;
1158
- // (margin|padding)-inline-(start|end)
1159
-
1160
- case 4095:
1161
- case 3583:
1162
- case 4068:
1163
- case 2532:
1164
- return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;
1165
- // (min|max)?(width|height|inline-size|block-size)
1166
-
1167
- case 8116:
1168
- case 7059:
1169
- case 5753:
1170
- case 5535:
1171
- case 5445:
1172
- case 5701:
1173
- case 4933:
1174
- case 4677:
1175
- case 5533:
1176
- case 5789:
1177
- case 5021:
1178
- case 4765:
1179
- // stretch, max-content, min-content, fill-available
1180
- if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {
1181
- // (m)ax-content, (m)in-content
1182
- case 109:
1183
- // -
1184
- if (charat(value, length + 4) !== 45) break;
1185
- // (f)ill-available, (f)it-content
1186
-
1187
- case 102:
1188
- return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;
1189
- // (s)tretch
1190
-
1191
- case 115:
1192
- return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;
1193
- }
1194
- break;
1195
- // position: sticky
1196
-
1197
- case 4949:
1198
- // (s)ticky?
1199
- if (charat(value, length + 1) !== 115) break;
1200
- // display: (flex|inline-flex)
1201
-
1202
- case 6444:
1203
- switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {
1204
- // stic(k)y
1205
- case 107:
1206
- return replace(value, ':', ':' + WEBKIT) + value;
1207
- // (inline-)?fl(e)x
1208
-
1209
- case 101:
1210
- return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;
1211
- }
1212
-
1213
- break;
1214
- // writing-mode
1215
-
1216
- case 5936:
1217
- switch (charat(value, length + 11)) {
1218
- // vertical-l(r)
1219
- case 114:
1220
- return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'tb') + value;
1221
- // vertical-r(l)
1222
-
1223
- case 108:
1224
- return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'tb-rl') + value;
1225
- // horizontal(-)tb
1226
-
1227
- case 45:
1228
- return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'lr') + value;
1229
- }
1230
-
1231
- return WEBKIT + value + MS + value + value;
1232
- }
1233
-
1234
- return value;
1235
59
  }
1236
60
 
1237
- var prefixer = function prefixer(element, index, children, callback) {
1238
- if (element.length > -1) if (!element["return"]) switch (element.type) {
1239
- case DECLARATION:
1240
- element["return"] = prefix(element.value, element.length);
1241
- break;
1242
-
1243
- case KEYFRAMES:
1244
- return serialize([copy(element, {
1245
- value: replace(element.value, '@', '@' + WEBKIT)
1246
- })], callback);
1247
-
1248
- case RULESET:
1249
- if (element.length) return combine(element.props, function (value) {
1250
- switch (match(value, /(::plac\w+|:read-\w+)/)) {
1251
- // :read-(only|write)
1252
- case ':read-only':
1253
- case ':read-write':
1254
- return serialize([copy(element, {
1255
- props: [replace(value, /:(read-\w+)/, ':' + MOZ + '$1')]
1256
- })], callback);
1257
- // :placeholder
1258
-
1259
- case '::placeholder':
1260
- return serialize([copy(element, {
1261
- props: [replace(value, /:(plac\w+)/, ':' + WEBKIT + 'input-$1')]
1262
- }), copy(element, {
1263
- props: [replace(value, /:(plac\w+)/, ':' + MOZ + '$1')]
1264
- }), copy(element, {
1265
- props: [replace(value, /:(plac\w+)/, MS + 'input-$1')]
1266
- })], callback);
1267
- }
1268
-
1269
- return '';
1270
- });
1271
- }
1272
- };
1273
-
1274
- var defaultStylisPlugins = [prefixer];
1275
-
1276
- var createCache = function createCache(options) {
1277
- var key = options.key;
1278
-
1279
- if (key === 'css') {
1280
- var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); // get SSRed styles out of the way of React's hydration
1281
- // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)
1282
- // note this very very intentionally targets all style elements regardless of the key to ensure
1283
- // that creating a cache works inside of render of a React component
1284
-
1285
- Array.prototype.forEach.call(ssrStyles, function (node) {
1286
- // we want to only move elements which have a space in the data-emotion attribute value
1287
- // because that indicates that it is an Emotion 11 server-side rendered style elements
1288
- // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector
1289
- // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)
1290
- // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles
1291
- // will not result in the Emotion 10 styles being destroyed
1292
- var dataEmotionAttribute = node.getAttribute('data-emotion');
1293
-
1294
- if (dataEmotionAttribute.indexOf(' ') === -1) {
1295
- return;
1296
- }
1297
-
1298
- document.head.appendChild(node);
1299
- node.setAttribute('data-s', '');
1300
- });
1301
- }
1302
-
1303
- var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;
1304
-
1305
- var inserted = {};
1306
- var container;
1307
- var nodesToHydrate = [];
1308
-
1309
- {
1310
- container = options.container || document.head;
1311
- Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which
1312
- // means that the style elements we're looking at are only Emotion 11 server-rendered style elements
1313
- document.querySelectorAll("style[data-emotion^=\"" + key + " \"]"), function (node) {
1314
- var attrib = node.getAttribute("data-emotion").split(' ');
1315
-
1316
- for (var i = 1; i < attrib.length; i++) {
1317
- inserted[attrib[i]] = true;
1318
- }
1319
-
1320
- nodesToHydrate.push(node);
1321
- });
1322
- }
1323
-
1324
- var _insert;
1325
-
1326
- var omnipresentPlugins = [compat, removeLabel];
1327
-
1328
- {
1329
- var currentSheet;
1330
- var finalizingPlugins = [stringify, rulesheet(function (rule) {
1331
- currentSheet.insert(rule);
1332
- })];
1333
- var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));
1334
-
1335
- var stylis = function stylis(styles) {
1336
- return serialize(compile(styles), serializer);
1337
- };
1338
-
1339
- _insert = function insert(selector, serialized, sheet, shouldCache) {
1340
- currentSheet = sheet;
1341
-
1342
- stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);
1343
-
1344
- if (shouldCache) {
1345
- cache.inserted[serialized.name] = true;
1346
- }
1347
- };
1348
- }
1349
-
1350
- var cache = {
1351
- key: key,
1352
- sheet: new StyleSheet({
1353
- key: key,
1354
- container: container,
1355
- nonce: options.nonce,
1356
- speedy: options.speedy,
1357
- prepend: options.prepend,
1358
- insertionPoint: options.insertionPoint
1359
- }),
1360
- nonce: options.nonce,
1361
- inserted: inserted,
1362
- registered: {},
1363
- insert: _insert
1364
- };
1365
- cache.sheet.hydrate(nodesToHydrate);
1366
- return cache;
1367
- };
1368
-
1369
61
  function getDefaultExportFromCjs (x) {
1370
62
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
1371
63
  }
1372
64
 
1373
- var reactIs$2 = {exports: {}};
65
+ var propTypes = {exports: {}};
66
+
67
+ var reactIs$1 = {exports: {}};
1374
68
 
1375
69
  var reactIs_production_min = {};
1376
70
 
@@ -1581,749 +275,24 @@ function requireReactIs_development$1 () {
1581
275
  reactIs_development$1.isSuspense = isSuspense;
1582
276
  reactIs_development$1.isValidElementType = isValidElementType;
1583
277
  reactIs_development$1.typeOf = typeOf;
1584
- })();
1585
- }
1586
- return reactIs_development$1;
1587
- }
1588
-
1589
- var hasRequiredReactIs;
1590
-
1591
- function requireReactIs () {
1592
- if (hasRequiredReactIs) return reactIs$2.exports;
1593
- hasRequiredReactIs = 1;
1594
-
1595
- if (process.env.NODE_ENV === 'production') {
1596
- reactIs$2.exports = requireReactIs_production_min();
1597
- } else {
1598
- reactIs$2.exports = requireReactIs_development$1();
1599
- }
1600
- return reactIs$2.exports;
1601
- }
1602
-
1603
- var reactIs$1 = requireReactIs();
1604
- var FORWARD_REF_STATICS = {
1605
- '$$typeof': true,
1606
- render: true,
1607
- defaultProps: true,
1608
- displayName: true,
1609
- propTypes: true
1610
- };
1611
- var MEMO_STATICS = {
1612
- '$$typeof': true,
1613
- compare: true,
1614
- defaultProps: true,
1615
- displayName: true,
1616
- propTypes: true,
1617
- type: true
1618
- };
1619
- var TYPE_STATICS = {};
1620
- TYPE_STATICS[reactIs$1.ForwardRef] = FORWARD_REF_STATICS;
1621
- TYPE_STATICS[reactIs$1.Memo] = MEMO_STATICS;
1622
-
1623
- var isBrowser = true;
1624
-
1625
- function getRegisteredStyles(registered, registeredStyles, classNames) {
1626
- var rawClassName = '';
1627
- classNames.split(' ').forEach(function (className) {
1628
- if (registered[className] !== undefined) {
1629
- registeredStyles.push(registered[className] + ";");
1630
- } else if (className) {
1631
- rawClassName += className + " ";
1632
- }
1633
- });
1634
- return rawClassName;
1635
- }
1636
- var registerStyles = function registerStyles(cache, serialized, isStringTag) {
1637
- var className = cache.key + "-" + serialized.name;
1638
-
1639
- if ( // we only need to add the styles to the registered cache if the
1640
- // class name could be used further down
1641
- // the tree but if it's a string tag, we know it won't
1642
- // so we don't have to add it to registered cache.
1643
- // this improves memory usage since we can avoid storing the whole style string
1644
- (isStringTag === false || // we need to always store it if we're in compat mode and
1645
- // in node since emotion-server relies on whether a style is in
1646
- // the registered cache to know whether a style is global or not
1647
- // also, note that this check will be dead code eliminated in the browser
1648
- isBrowser === false ) && cache.registered[className] === undefined) {
1649
- cache.registered[className] = serialized.styles;
1650
- }
1651
- };
1652
- var insertStyles = function insertStyles(cache, serialized, isStringTag) {
1653
- registerStyles(cache, serialized, isStringTag);
1654
- var className = cache.key + "-" + serialized.name;
1655
-
1656
- if (cache.inserted[serialized.name] === undefined) {
1657
- var current = serialized;
1658
-
1659
- do {
1660
- cache.insert(serialized === current ? "." + className : '', current, cache.sheet, true);
1661
-
1662
- current = current.next;
1663
- } while (current !== undefined);
1664
- }
1665
- };
1666
-
1667
- /* eslint-disable */
1668
- // Inspired by https://github.com/garycourt/murmurhash-js
1669
- // Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86
1670
- function murmur2(str) {
1671
- // 'm' and 'r' are mixing constants generated offline.
1672
- // They're not really 'magic', they just happen to work well.
1673
- // const m = 0x5bd1e995;
1674
- // const r = 24;
1675
- // Initialize the hash
1676
- var h = 0; // Mix 4 bytes at a time into the hash
1677
-
1678
- var k,
1679
- i = 0,
1680
- len = str.length;
1681
-
1682
- for (; len >= 4; ++i, len -= 4) {
1683
- k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;
1684
- k =
1685
- /* Math.imul(k, m): */
1686
- (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);
1687
- k ^=
1688
- /* k >>> r: */
1689
- k >>> 24;
1690
- h =
1691
- /* Math.imul(k, m): */
1692
- (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^
1693
- /* Math.imul(h, m): */
1694
- (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
1695
- } // Handle the last few bytes of the input array
1696
-
1697
-
1698
- switch (len) {
1699
- case 3:
1700
- h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
1701
-
1702
- case 2:
1703
- h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
1704
-
1705
- case 1:
1706
- h ^= str.charCodeAt(i) & 0xff;
1707
- h =
1708
- /* Math.imul(h, m): */
1709
- (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
1710
- } // Do a few final mixes of the hash to ensure the last few
1711
- // bytes are well-incorporated.
1712
-
1713
-
1714
- h ^= h >>> 13;
1715
- h =
1716
- /* Math.imul(h, m): */
1717
- (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
1718
- return ((h ^ h >>> 15) >>> 0).toString(36);
1719
- }
1720
-
1721
- var unitlessKeys = {
1722
- animationIterationCount: 1,
1723
- aspectRatio: 1,
1724
- borderImageOutset: 1,
1725
- borderImageSlice: 1,
1726
- borderImageWidth: 1,
1727
- boxFlex: 1,
1728
- boxFlexGroup: 1,
1729
- boxOrdinalGroup: 1,
1730
- columnCount: 1,
1731
- columns: 1,
1732
- flex: 1,
1733
- flexGrow: 1,
1734
- flexPositive: 1,
1735
- flexShrink: 1,
1736
- flexNegative: 1,
1737
- flexOrder: 1,
1738
- gridRow: 1,
1739
- gridRowEnd: 1,
1740
- gridRowSpan: 1,
1741
- gridRowStart: 1,
1742
- gridColumn: 1,
1743
- gridColumnEnd: 1,
1744
- gridColumnSpan: 1,
1745
- gridColumnStart: 1,
1746
- msGridRow: 1,
1747
- msGridRowSpan: 1,
1748
- msGridColumn: 1,
1749
- msGridColumnSpan: 1,
1750
- fontWeight: 1,
1751
- lineHeight: 1,
1752
- opacity: 1,
1753
- order: 1,
1754
- orphans: 1,
1755
- scale: 1,
1756
- tabSize: 1,
1757
- widows: 1,
1758
- zIndex: 1,
1759
- zoom: 1,
1760
- WebkitLineClamp: 1,
1761
- // SVG-related properties
1762
- fillOpacity: 1,
1763
- floodOpacity: 1,
1764
- stopOpacity: 1,
1765
- strokeDasharray: 1,
1766
- strokeDashoffset: 1,
1767
- strokeMiterlimit: 1,
1768
- strokeOpacity: 1,
1769
- strokeWidth: 1
1770
- };
1771
-
1772
- var hyphenateRegex = /[A-Z]|^ms/g;
1773
- var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;
1774
-
1775
- var isCustomProperty = function isCustomProperty(property) {
1776
- return property.charCodeAt(1) === 45;
1777
- };
1778
-
1779
- var isProcessableValue = function isProcessableValue(value) {
1780
- return value != null && typeof value !== 'boolean';
1781
- };
1782
-
1783
- var processStyleName = /* #__PURE__ */memoize$1(function (styleName) {
1784
- return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();
1785
- });
1786
-
1787
- var processStyleValue = function processStyleValue(key, value) {
1788
- switch (key) {
1789
- case 'animation':
1790
- case 'animationName':
1791
- {
1792
- if (typeof value === 'string') {
1793
- return value.replace(animationRegex, function (match, p1, p2) {
1794
- cursor = {
1795
- name: p1,
1796
- styles: p2,
1797
- next: cursor
1798
- };
1799
- return p1;
1800
- });
1801
- }
1802
- }
1803
- }
1804
-
1805
- if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {
1806
- return value + 'px';
1807
- }
1808
-
1809
- return value;
1810
- };
1811
-
1812
- function handleInterpolation(mergedProps, registered, interpolation) {
1813
- if (interpolation == null) {
1814
- return '';
1815
- }
1816
-
1817
- var componentSelector = interpolation;
1818
-
1819
- if (componentSelector.__emotion_styles !== undefined) {
1820
-
1821
- return componentSelector;
1822
- }
1823
-
1824
- switch (typeof interpolation) {
1825
- case 'boolean':
1826
- {
1827
- return '';
1828
- }
1829
-
1830
- case 'object':
1831
- {
1832
- var keyframes = interpolation;
1833
-
1834
- if (keyframes.anim === 1) {
1835
- cursor = {
1836
- name: keyframes.name,
1837
- styles: keyframes.styles,
1838
- next: cursor
1839
- };
1840
- return keyframes.name;
1841
- }
1842
-
1843
- var serializedStyles = interpolation;
1844
-
1845
- if (serializedStyles.styles !== undefined) {
1846
- var next = serializedStyles.next;
1847
-
1848
- if (next !== undefined) {
1849
- // not the most efficient thing ever but this is a pretty rare case
1850
- // and there will be very few iterations of this generally
1851
- while (next !== undefined) {
1852
- cursor = {
1853
- name: next.name,
1854
- styles: next.styles,
1855
- next: cursor
1856
- };
1857
- next = next.next;
1858
- }
1859
- }
1860
-
1861
- var styles = serializedStyles.styles + ";";
1862
- return styles;
1863
- }
1864
-
1865
- return createStringFromObject(mergedProps, registered, interpolation);
1866
- }
1867
-
1868
- case 'function':
1869
- {
1870
- if (mergedProps !== undefined) {
1871
- var previousCursor = cursor;
1872
- var result = interpolation(mergedProps);
1873
- cursor = previousCursor;
1874
- return handleInterpolation(mergedProps, registered, result);
1875
- }
1876
-
1877
- break;
1878
- }
1879
- } // finalize string values (regular strings and functions interpolated into css calls)
1880
-
1881
-
1882
- var asString = interpolation;
1883
-
1884
- if (registered == null) {
1885
- return asString;
1886
- }
1887
-
1888
- var cached = registered[asString];
1889
- return cached !== undefined ? cached : asString;
1890
- }
1891
-
1892
- function createStringFromObject(mergedProps, registered, obj) {
1893
- var string = '';
1894
-
1895
- if (Array.isArray(obj)) {
1896
- for (var i = 0; i < obj.length; i++) {
1897
- string += handleInterpolation(mergedProps, registered, obj[i]) + ";";
1898
- }
1899
- } else {
1900
- for (var key in obj) {
1901
- var value = obj[key];
1902
-
1903
- if (typeof value !== 'object') {
1904
- var asString = value;
1905
-
1906
- if (registered != null && registered[asString] !== undefined) {
1907
- string += key + "{" + registered[asString] + "}";
1908
- } else if (isProcessableValue(asString)) {
1909
- string += processStyleName(key) + ":" + processStyleValue(key, asString) + ";";
1910
- }
1911
- } else {
1912
-
1913
- if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {
1914
- for (var _i = 0; _i < value.length; _i++) {
1915
- if (isProcessableValue(value[_i])) {
1916
- string += processStyleName(key) + ":" + processStyleValue(key, value[_i]) + ";";
1917
- }
1918
- }
1919
- } else {
1920
- var interpolated = handleInterpolation(mergedProps, registered, value);
1921
-
1922
- switch (key) {
1923
- case 'animation':
1924
- case 'animationName':
1925
- {
1926
- string += processStyleName(key) + ":" + interpolated + ";";
1927
- break;
1928
- }
1929
-
1930
- default:
1931
- {
1932
-
1933
- string += key + "{" + interpolated + "}";
1934
- }
1935
- }
1936
- }
1937
- }
1938
- }
1939
- }
1940
-
1941
- return string;
1942
- }
1943
-
1944
- var labelPattern = /label:\s*([^\s;{]+)\s*(;|$)/g; // this is the cursor for keyframes
1945
- // keyframes are stored on the SerializedStyles object as a linked list
1946
-
1947
- var cursor;
1948
- function serializeStyles(args, registered, mergedProps) {
1949
- if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {
1950
- return args[0];
1951
- }
1952
-
1953
- var stringMode = true;
1954
- var styles = '';
1955
- cursor = undefined;
1956
- var strings = args[0];
1957
-
1958
- if (strings == null || strings.raw === undefined) {
1959
- stringMode = false;
1960
- styles += handleInterpolation(mergedProps, registered, strings);
1961
- } else {
1962
- var asTemplateStringsArr = strings;
1963
-
1964
- styles += asTemplateStringsArr[0];
1965
- } // we start at 1 since we've already handled the first arg
1966
-
1967
-
1968
- for (var i = 1; i < args.length; i++) {
1969
- styles += handleInterpolation(mergedProps, registered, args[i]);
1970
-
1971
- if (stringMode) {
1972
- var templateStringsArr = strings;
1973
-
1974
- styles += templateStringsArr[i];
1975
- }
1976
- } // using a global regex with .exec is stateful so lastIndex has to be reset each time
1977
-
1978
-
1979
- labelPattern.lastIndex = 0;
1980
- var identifierName = '';
1981
- var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5
1982
-
1983
- while ((match = labelPattern.exec(styles)) !== null) {
1984
- identifierName += '-' + match[1];
1985
- }
1986
-
1987
- var name = murmur2(styles) + identifierName;
1988
-
1989
- return {
1990
- name: name,
1991
- styles: styles,
1992
- next: cursor
1993
- };
1994
- }
1995
-
1996
- var syncFallback = function syncFallback(create) {
1997
- return create();
1998
- };
1999
-
2000
- var useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;
2001
- var useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;
2002
-
2003
- var EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case
2004
- // because this module is primarily intended for the browser and node
2005
- // but it's also required in react native and similar environments sometimes
2006
- // and we could have a special build just for that
2007
- // but this is much easier and the native packages
2008
- // might use a different theme context in the future anyway
2009
- typeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({
2010
- key: 'css'
2011
- }) : null);
2012
-
2013
- EmotionCacheContext.Provider;
2014
-
2015
- var withEmotionCache = function withEmotionCache(func) {
2016
- return /*#__PURE__*/forwardRef(function (props, ref) {
2017
- // the cache will never be null in the browser
2018
- var cache = useContext(EmotionCacheContext);
2019
- return func(props, cache, ref);
2020
- });
2021
- };
2022
-
2023
- var ThemeContext = /* #__PURE__ */React.createContext({});
2024
-
2025
- var hasOwn = {}.hasOwnProperty;
2026
-
2027
- var typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';
2028
- var createEmotionProps = function createEmotionProps(type, props) {
2029
-
2030
- var newProps = {};
2031
-
2032
- for (var _key in props) {
2033
- if (hasOwn.call(props, _key)) {
2034
- newProps[_key] = props[_key];
2035
- }
2036
- }
2037
-
2038
- newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:
2039
-
2040
- return newProps;
2041
- };
2042
-
2043
- var Insertion$1 = function Insertion(_ref) {
2044
- var cache = _ref.cache,
2045
- serialized = _ref.serialized,
2046
- isStringTag = _ref.isStringTag;
2047
- registerStyles(cache, serialized, isStringTag);
2048
- useInsertionEffectAlwaysWithSyncFallback(function () {
2049
- return insertStyles(cache, serialized, isStringTag);
2050
- });
2051
-
2052
- return null;
2053
- };
2054
-
2055
- var Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {
2056
- var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works
2057
- // not passing the registered cache to serializeStyles because it would
2058
- // make certain babel optimisations not possible
2059
-
2060
- if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {
2061
- cssProp = cache.registered[cssProp];
2062
- }
2063
-
2064
- var WrappedComponent = props[typePropName];
2065
- var registeredStyles = [cssProp];
2066
- var className = '';
2067
-
2068
- if (typeof props.className === 'string') {
2069
- className = getRegisteredStyles(cache.registered, registeredStyles, props.className);
2070
- } else if (props.className != null) {
2071
- className = props.className + " ";
2072
- }
2073
-
2074
- var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));
2075
-
2076
- className += cache.key + "-" + serialized.name;
2077
- var newProps = {};
2078
-
2079
- for (var _key2 in props) {
2080
- if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (true )) {
2081
- newProps[_key2] = props[_key2];
2082
- }
2083
- }
2084
-
2085
- newProps.className = className;
2086
-
2087
- if (ref) {
2088
- newProps.ref = ref;
2089
- }
2090
-
2091
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion$1, {
2092
- cache: cache,
2093
- serialized: serialized,
2094
- isStringTag: typeof WrappedComponent === 'string'
2095
- }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));
2096
- });
2097
-
2098
- var Emotion$1 = Emotion;
2099
-
2100
- var jsx = function jsx(type, props) {
2101
- // eslint-disable-next-line prefer-rest-params
2102
- var args = arguments;
2103
-
2104
- if (props == null || !hasOwn.call(props, 'css')) {
2105
- return React.createElement.apply(undefined, args);
2106
- }
2107
-
2108
- var argsLength = args.length;
2109
- var createElementArgArray = new Array(argsLength);
2110
- createElementArgArray[0] = Emotion$1;
2111
- createElementArgArray[1] = createEmotionProps(type, props);
2112
-
2113
- for (var i = 2; i < argsLength; i++) {
2114
- createElementArgArray[i] = args[i];
2115
- }
2116
-
2117
- return React.createElement.apply(null, createElementArgArray);
2118
- };
2119
-
2120
- (function (_jsx) {
2121
- var JSX;
2122
-
2123
- (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));
2124
- })(jsx || (jsx = {}));
2125
-
2126
- function css() {
2127
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2128
- args[_key] = arguments[_key];
2129
- }
2130
-
2131
- return serializeStyles(args);
278
+ })();
279
+ }
280
+ return reactIs_development$1;
2132
281
  }
2133
282
 
2134
- function keyframes() {
2135
- var insertable = css.apply(void 0, arguments);
2136
- var name = "animation-" + insertable.name;
2137
- return {
2138
- name: name,
2139
- styles: "@keyframes " + name + "{" + insertable.styles + "}",
2140
- anim: 1,
2141
- toString: function toString() {
2142
- return "_EMO_" + this.name + "_" + this.styles + "_EMO_";
2143
- }
2144
- };
2145
- }
283
+ var hasRequiredReactIs;
2146
284
 
2147
- // eslint-disable-next-line no-undef
2148
- var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23
285
+ function requireReactIs () {
286
+ if (hasRequiredReactIs) return reactIs$1.exports;
287
+ hasRequiredReactIs = 1;
2149
288
 
2150
- var isPropValid = /* #__PURE__ */memoize$1(function (prop) {
2151
- return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111
2152
- /* o */
2153
- && prop.charCodeAt(1) === 110
2154
- /* n */
2155
- && prop.charCodeAt(2) < 91;
289
+ if (process.env.NODE_ENV === 'production') {
290
+ reactIs$1.exports = requireReactIs_production_min();
291
+ } else {
292
+ reactIs$1.exports = requireReactIs_development$1();
293
+ }
294
+ return reactIs$1.exports;
2156
295
  }
2157
- /* Z+1 */
2158
- );
2159
-
2160
- var testOmitPropsOnStringTag = isPropValid;
2161
-
2162
- var testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {
2163
- return key !== 'theme';
2164
- };
2165
-
2166
- var getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {
2167
- return typeof tag === 'string' && // 96 is one less than the char code
2168
- // for "a" so this is checking that
2169
- // it's a lowercase character
2170
- tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;
2171
- };
2172
- var composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {
2173
- var shouldForwardProp;
2174
-
2175
- if (options) {
2176
- var optionsShouldForwardProp = options.shouldForwardProp;
2177
- shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {
2178
- return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);
2179
- } : optionsShouldForwardProp;
2180
- }
2181
-
2182
- if (typeof shouldForwardProp !== 'function' && isReal) {
2183
- shouldForwardProp = tag.__emotion_forwardProp;
2184
- }
2185
-
2186
- return shouldForwardProp;
2187
- };
2188
-
2189
- var Insertion = function Insertion(_ref) {
2190
- var cache = _ref.cache,
2191
- serialized = _ref.serialized,
2192
- isStringTag = _ref.isStringTag;
2193
- registerStyles(cache, serialized, isStringTag);
2194
- useInsertionEffectAlwaysWithSyncFallback(function () {
2195
- return insertStyles(cache, serialized, isStringTag);
2196
- });
2197
-
2198
- return null;
2199
- };
2200
-
2201
- var createStyled$1 = function createStyled(tag, options) {
2202
-
2203
- var isReal = tag.__emotion_real === tag;
2204
- var baseTag = isReal && tag.__emotion_base || tag;
2205
- var identifierName;
2206
- var targetClassName;
2207
-
2208
- if (options !== undefined) {
2209
- identifierName = options.label;
2210
- targetClassName = options.target;
2211
- }
2212
-
2213
- var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);
2214
- var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);
2215
- var shouldUseAs = !defaultShouldForwardProp('as');
2216
- return function () {
2217
- // eslint-disable-next-line prefer-rest-params
2218
- var args = arguments;
2219
- var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];
2220
-
2221
- if (identifierName !== undefined) {
2222
- styles.push("label:" + identifierName + ";");
2223
- }
2224
-
2225
- if (args[0] == null || args[0].raw === undefined) {
2226
- // eslint-disable-next-line prefer-spread
2227
- styles.push.apply(styles, args);
2228
- } else {
2229
- var templateStringsArr = args[0];
2230
-
2231
- styles.push(templateStringsArr[0]);
2232
- var len = args.length;
2233
- var i = 1;
2234
-
2235
- for (; i < len; i++) {
2236
-
2237
- styles.push(args[i], templateStringsArr[i]);
2238
- }
2239
- }
2240
-
2241
- var Styled = withEmotionCache(function (props, cache, ref) {
2242
- var FinalTag = shouldUseAs && props.as || baseTag;
2243
- var className = '';
2244
- var classInterpolations = [];
2245
- var mergedProps = props;
2246
-
2247
- if (props.theme == null) {
2248
- mergedProps = {};
2249
-
2250
- for (var key in props) {
2251
- mergedProps[key] = props[key];
2252
- }
2253
-
2254
- mergedProps.theme = React.useContext(ThemeContext);
2255
- }
2256
-
2257
- if (typeof props.className === 'string') {
2258
- className = getRegisteredStyles(cache.registered, classInterpolations, props.className);
2259
- } else if (props.className != null) {
2260
- className = props.className + " ";
2261
- }
2262
-
2263
- var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);
2264
- className += cache.key + "-" + serialized.name;
2265
-
2266
- if (targetClassName !== undefined) {
2267
- className += " " + targetClassName;
2268
- }
2269
-
2270
- var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;
2271
- var newProps = {};
2272
-
2273
- for (var _key in props) {
2274
- if (shouldUseAs && _key === 'as') continue;
2275
-
2276
- if (finalShouldForwardProp(_key)) {
2277
- newProps[_key] = props[_key];
2278
- }
2279
- }
2280
-
2281
- newProps.className = className;
2282
-
2283
- if (ref) {
2284
- newProps.ref = ref;
2285
- }
2286
-
2287
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {
2288
- cache: cache,
2289
- serialized: serialized,
2290
- isStringTag: typeof FinalTag === 'string'
2291
- }), /*#__PURE__*/React.createElement(FinalTag, newProps));
2292
- });
2293
- Styled.displayName = identifierName !== undefined ? identifierName : "Styled(" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + ")";
2294
- Styled.defaultProps = tag.defaultProps;
2295
- Styled.__emotion_real = Styled;
2296
- Styled.__emotion_base = baseTag;
2297
- Styled.__emotion_styles = styles;
2298
- Styled.__emotion_forwardProp = shouldForwardProp;
2299
- Object.defineProperty(Styled, 'toString', {
2300
- value: function value() {
2301
-
2302
- return "." + targetClassName;
2303
- }
2304
- });
2305
-
2306
- Styled.withComponent = function (nextTag, nextOptions) {
2307
- var newStyled = createStyled(nextTag, _extends({}, options, nextOptions, {
2308
- shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)
2309
- }));
2310
- return newStyled.apply(void 0, styles);
2311
- };
2312
-
2313
- return Styled;
2314
- };
2315
- };
2316
-
2317
- var tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG
2318
- 'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];
2319
-
2320
- // bind it to avoid mutating the original function
2321
- var styled$2 = createStyled$1.bind(null);
2322
- tags.forEach(function (tagName) {
2323
- styled$2[tagName] = styled$2(tagName);
2324
- });
2325
-
2326
- var propTypes = {exports: {}};
2327
296
 
2328
297
  /*
2329
298
  object-assign
@@ -3276,44 +1245,96 @@ if (process.env.NODE_ENV !== 'production') {
3276
1245
  var propTypesExports = propTypes.exports;
3277
1246
  var PropTypes = /*@__PURE__*/getDefaultExportFromCjs(propTypesExports);
3278
1247
 
1248
+ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
1249
+
1250
+ function chainPropTypes(propType1, propType2) {
1251
+ if (process.env.NODE_ENV === 'production') {
1252
+ return () => null;
1253
+ }
1254
+ return function validate(...args) {
1255
+ return propType1(...args) || propType2(...args);
1256
+ };
1257
+ }
1258
+
1259
+ /* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0
1260
+ ---
1261
+ These rules are preventing the performance optimizations below.
1262
+ */
1263
+
3279
1264
  /**
3280
- * @mui/styled-engine v7.2.0
1265
+ * Compose classes from multiple sources.
3281
1266
  *
3282
- * @license MIT
3283
- * This source code is licensed under the MIT license found in the
3284
- * LICENSE file in the root directory of this source tree.
1267
+ * @example
1268
+ * ```tsx
1269
+ * const slots = {
1270
+ * root: ['root', 'primary'],
1271
+ * label: ['label'],
1272
+ * };
1273
+ *
1274
+ * const getUtilityClass = (slot) => `MuiButton-${slot}`;
1275
+ *
1276
+ * const classes = {
1277
+ * root: 'my-root-class',
1278
+ * };
1279
+ *
1280
+ * const output = composeClasses(slots, getUtilityClass, classes);
1281
+ * // {
1282
+ * // root: 'MuiButton-root MuiButton-primary my-root-class',
1283
+ * // label: 'MuiButton-label',
1284
+ * // }
1285
+ * ```
1286
+ *
1287
+ * @param slots a list of classes for each possible slot
1288
+ * @param getUtilityClass a function to resolve the class based on the slot name
1289
+ * @param classes the input classes from props
1290
+ * @returns the resolved classes for all slots
3285
1291
  */
3286
- function styled$1(tag, options) {
3287
- const stylesFactory = styled$2(tag, options);
3288
- if (process.env.NODE_ENV !== 'production') {
3289
- return (...styles) => {
3290
- const component = typeof tag === 'string' ? `"${tag}"` : 'component';
3291
- if (styles.length === 0) {
3292
- console.error([`MUI: Seems like you called \`styled(${component})()\` without a \`style\` argument.`, 'You must provide a `styles` argument: `styled("div")(styleYouForgotToPass)`.'].join('\n'));
3293
- } else if (styles.some(style => style === undefined)) {
3294
- console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);
1292
+ function composeClasses(slots, getUtilityClass, classes = undefined) {
1293
+ const output = {};
1294
+ for (const slotName in slots) {
1295
+ const slot = slots[slotName];
1296
+ let buffer = '';
1297
+ let start = true;
1298
+ for (let i = 0; i < slot.length; i += 1) {
1299
+ const value = slot[i];
1300
+ if (value) {
1301
+ buffer += (start === true ? '' : ' ') + getUtilityClass(value);
1302
+ start = false;
1303
+ if (classes && classes[value]) {
1304
+ buffer += ' ' + classes[value];
1305
+ }
3295
1306
  }
3296
- return stylesFactory(...styles);
3297
- };
1307
+ }
1308
+ output[slotName] = buffer;
3298
1309
  }
3299
- return stylesFactory;
1310
+ return output;
3300
1311
  }
3301
1312
 
3302
- // eslint-disable-next-line @typescript-eslint/naming-convention
3303
- function internal_mutateStyles(tag, processor) {
3304
- // Emotion attaches all the styles as `__emotion_styles`.
3305
- // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186
3306
- if (Array.isArray(tag.__emotion_styles)) {
3307
- tag.__emotion_styles = processor(tag.__emotion_styles);
3308
- }
1313
+ /**
1314
+ * WARNING: Don't import this directly. It's imported by the code generated by
1315
+ * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`
1316
+ * constructors to ensure the plugin works as expected. Supported patterns include:
1317
+ * throw new Error('My message');
1318
+ * throw new Error(`My message: ${foo}`);
1319
+ * throw new Error(`My message: ${foo}` + 'another string');
1320
+ * ...
1321
+ * @param {number} code
1322
+ */
1323
+ function formatMuiErrorMessage(code, ...args) {
1324
+ const url = new URL(`https://mui.com/production-error/?code=${code}`);
1325
+ args.forEach(arg => url.searchParams.append('args[]', arg));
1326
+ return `Minified MUI error #${code}; visit ${url} for the full message.`;
3309
1327
  }
3310
1328
 
3311
- // Emotion only accepts an array, but we want to avoid allocations
3312
- const wrapper = [];
3313
- // eslint-disable-next-line @typescript-eslint/naming-convention
3314
- function internal_serializeStyles(styles) {
3315
- wrapper[0] = styles;
3316
- return serializeStyles(wrapper);
1329
+ // It should to be noted that this function isn't equivalent to `text-transform: capitalize`.
1330
+ //
1331
+ // A strict capitalization should uppercase the first letter of each word in the sentence.
1332
+ // We only handle the first word.
1333
+ function capitalize(string) {
1334
+ if (typeof string !== 'string') {
1335
+ throw new Error(process.env.NODE_ENV !== "production" ? 'MUI: `capitalize(string)` expects a string argument.' : formatMuiErrorMessage(7));
1336
+ }
1337
+ return string.charAt(0).toUpperCase() + string.slice(1);
3317
1338
  }
3318
1339
 
3319
1340
  var reactIs = {exports: {}};
@@ -3654,100 +1675,30 @@ function deepmerge(target, source, options = {
3654
1675
  output[key] = source[key];
3655
1676
  } else if (isPlainObject(source[key]) &&
3656
1677
  // Avoid prototype pollution
3657
- Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {
3658
- // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.
3659
- output[key] = deepmerge(target[key], source[key], options);
3660
- } else if (options.clone) {
3661
- output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];
3662
- } else {
3663
- output[key] = source[key];
3664
- }
3665
- });
3666
- }
3667
- return output;
3668
- }
3669
-
3670
- // Sorted ASC by size. That's important.
3671
- // It can't be configured as it's used statically for propTypes.
3672
- const sortBreakpointsValues = values => {
3673
- const breakpointsAsArray = Object.keys(values).map(key => ({
3674
- key,
3675
- val: values[key]
3676
- })) || [];
3677
- // Sort in ascending order
3678
- breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);
3679
- return breakpointsAsArray.reduce((acc, obj) => {
3680
- return {
3681
- ...acc,
3682
- [obj.key]: obj.val
3683
- };
3684
- }, {});
3685
- };
3686
-
3687
- // Keep in mind that @media is inclusive by the CSS specification.
3688
- function createBreakpoints(breakpoints) {
3689
- const {
3690
- // The breakpoint **start** at this value.
3691
- // For instance with the first breakpoint xs: [xs, sm).
3692
- values = {
3693
- xs: 0,
3694
- // phone
3695
- sm: 600,
3696
- // tablet
3697
- md: 900,
3698
- // small laptop
3699
- lg: 1200,
3700
- // desktop
3701
- xl: 1536 // large screen
3702
- },
3703
- unit = 'px',
3704
- step = 5,
3705
- ...other
3706
- } = breakpoints;
3707
- const sortedValues = sortBreakpointsValues(values);
3708
- const keys = Object.keys(sortedValues);
3709
- function up(key) {
3710
- const value = typeof values[key] === 'number' ? values[key] : key;
3711
- return `@media (min-width:${value}${unit})`;
3712
- }
3713
- function down(key) {
3714
- const value = typeof values[key] === 'number' ? values[key] : key;
3715
- return `@media (max-width:${value - step / 100}${unit})`;
3716
- }
3717
- function between(start, end) {
3718
- const endIndex = keys.indexOf(end);
3719
- return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;
3720
- }
3721
- function only(key) {
3722
- if (keys.indexOf(key) + 1 < keys.length) {
3723
- return between(key, keys[keys.indexOf(key) + 1]);
3724
- }
3725
- return up(key);
1678
+ Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {
1679
+ // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.
1680
+ output[key] = deepmerge(target[key], source[key], options);
1681
+ } else if (options.clone) {
1682
+ output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];
1683
+ } else {
1684
+ output[key] = source[key];
1685
+ }
1686
+ });
3726
1687
  }
3727
- function not(key) {
3728
- // handle first and last key separately, for better readability
3729
- const keyIndex = keys.indexOf(key);
3730
- if (keyIndex === 0) {
3731
- return up(keys[1]);
3732
- }
3733
- if (keyIndex === keys.length - 1) {
3734
- return down(keys[keyIndex]);
3735
- }
3736
- return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');
1688
+ return output;
1689
+ }
1690
+
1691
+ function merge(acc, item) {
1692
+ if (!item) {
1693
+ return acc;
3737
1694
  }
3738
- return {
3739
- keys,
3740
- values: sortedValues,
3741
- up,
3742
- down,
3743
- between,
3744
- only,
3745
- not,
3746
- unit,
3747
- ...other
3748
- };
1695
+ return deepmerge(acc, item, {
1696
+ clone: false // No need to clone deep, it's way faster.
1697
+ });
3749
1698
  }
3750
1699
 
1700
+ const responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};
1701
+
3751
1702
  /**
3752
1703
  * For using in `sx` prop to sort the breakpoint from low to high.
3753
1704
  * Note: this function does not work and will not support multiple units.
@@ -3817,21 +1768,6 @@ function cssContainerQueries(themeInput) {
3817
1768
  };
3818
1769
  }
3819
1770
 
3820
- const shape = {
3821
- borderRadius: 4
3822
- };
3823
-
3824
- const responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};
3825
-
3826
- function merge(acc, item) {
3827
- if (!item) {
3828
- return acc;
3829
- }
3830
- return deepmerge(acc, item, {
3831
- clone: false // No need to clone deep, it's way faster.
3832
- });
3833
- }
3834
-
3835
1771
  // The breakpoint **start** at this value.
3836
1772
  // For instance with the first breakpoint xs: [xs, sm[.
3837
1773
  const values = {
@@ -3913,17 +1849,6 @@ function removeUnusedBreakpoints(breakpointKeys, style) {
3913
1849
  }, style);
3914
1850
  }
3915
1851
 
3916
- // It should to be noted that this function isn't equivalent to `text-transform: capitalize`.
3917
- //
3918
- // A strict capitalization should uppercase the first letter of each word in the sentence.
3919
- // We only handle the first word.
3920
- function capitalize(string) {
3921
- if (typeof string !== 'string') {
3922
- throw new Error(process.env.NODE_ENV !== "production" ? 'MUI: `capitalize(string)` expects a string argument.' : formatMuiErrorMessage(7));
3923
- }
3924
- return string.charAt(0).toUpperCase() + string.slice(1);
3925
- }
3926
-
3927
1852
  function getPath(obj, path, checkVars = true) {
3928
1853
  if (!path || typeof path !== 'string') {
3929
1854
  return null;
@@ -4154,36 +2079,6 @@ process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {
4154
2079
  return obj;
4155
2080
  }, {}) : {};
4156
2081
 
4157
- // The different signatures imply different meaning for their arguments that can't be expressed structurally.
4158
- // We express the difference with variable names.
4159
-
4160
- function createSpacing(spacingInput = 8,
4161
- // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.
4162
- // Smaller components, such as icons, can align to a 4dp grid.
4163
- // https://m2.material.io/design/layout/understanding-layout.html
4164
- transform = createUnarySpacing({
4165
- spacing: spacingInput
4166
- })) {
4167
- // Already transformed.
4168
- if (spacingInput.mui) {
4169
- return spacingInput;
4170
- }
4171
- const spacing = (...argsInput) => {
4172
- if (process.env.NODE_ENV !== 'production') {
4173
- if (!(argsInput.length <= 4)) {
4174
- console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);
4175
- }
4176
- }
4177
- const args = argsInput.length === 0 ? [1] : argsInput;
4178
- return args.map(argument => {
4179
- const output = transform(argument);
4180
- return typeof output === 'number' ? `${output}px` : output;
4181
- }).join(' ');
4182
- };
4183
- spacing.mui = true;
4184
- return spacing;
4185
- }
4186
-
4187
2082
  function compose(...styles) {
4188
2083
  const handlers = styles.reduce((acc, style) => {
4189
2084
  style.filterProps.forEach(prop => {
@@ -4770,67 +2665,222 @@ function unstable_createStyleFunctionSx() {
4770
2665
  if (!sx) {
4771
2666
  return null; // Emotion & styled-components will neglect null
4772
2667
  }
4773
- const config = theme.unstable_sxConfig ?? defaultSxConfig;
2668
+ const config = theme.unstable_sxConfig ?? defaultSxConfig;
2669
+
2670
+ /*
2671
+ * Receive `sxInput` as object or callback
2672
+ * and then recursively check keys & values to create media query object styles.
2673
+ * (the result will be used in `styled`)
2674
+ */
2675
+ function traverse(sxInput) {
2676
+ let sxObject = sxInput;
2677
+ if (typeof sxInput === 'function') {
2678
+ sxObject = sxInput(theme);
2679
+ } else if (typeof sxInput !== 'object') {
2680
+ // value
2681
+ return sxInput;
2682
+ }
2683
+ if (!sxObject) {
2684
+ return null;
2685
+ }
2686
+ const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);
2687
+ const breakpointsKeys = Object.keys(emptyBreakpoints);
2688
+ let css = emptyBreakpoints;
2689
+ Object.keys(sxObject).forEach(styleKey => {
2690
+ const value = callIfFn(sxObject[styleKey], theme);
2691
+ if (value !== null && value !== undefined) {
2692
+ if (typeof value === 'object') {
2693
+ if (config[styleKey]) {
2694
+ css = merge(css, getThemeValue(styleKey, value, theme, config));
2695
+ } else {
2696
+ const breakpointsValues = handleBreakpoints({
2697
+ theme
2698
+ }, value, x => ({
2699
+ [styleKey]: x
2700
+ }));
2701
+ if (objectsHaveSameKeys(breakpointsValues, value)) {
2702
+ css[styleKey] = styleFunctionSx({
2703
+ sx: value,
2704
+ theme,
2705
+ nested: true
2706
+ });
2707
+ } else {
2708
+ css = merge(css, breakpointsValues);
2709
+ }
2710
+ }
2711
+ } else {
2712
+ css = merge(css, getThemeValue(styleKey, value, theme, config));
2713
+ }
2714
+ }
2715
+ });
2716
+ if (!nested && theme.modularCssLayers) {
2717
+ return {
2718
+ '@layer sx': sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css))
2719
+ };
2720
+ }
2721
+ return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));
2722
+ }
2723
+ return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);
2724
+ }
2725
+ return styleFunctionSx;
2726
+ }
2727
+ const styleFunctionSx = unstable_createStyleFunctionSx();
2728
+ styleFunctionSx.filterProps = ['sx'];
2729
+
2730
+ /**
2731
+ * @mui/styled-engine v7.2.0
2732
+ *
2733
+ * @license MIT
2734
+ * This source code is licensed under the MIT license found in the
2735
+ * LICENSE file in the root directory of this source tree.
2736
+ */
2737
+ function styled$1(tag, options) {
2738
+ const stylesFactory = emStyled(tag, options);
2739
+ if (process.env.NODE_ENV !== 'production') {
2740
+ return (...styles) => {
2741
+ const component = typeof tag === 'string' ? `"${tag}"` : 'component';
2742
+ if (styles.length === 0) {
2743
+ console.error([`MUI: Seems like you called \`styled(${component})()\` without a \`style\` argument.`, 'You must provide a `styles` argument: `styled("div")(styleYouForgotToPass)`.'].join('\n'));
2744
+ } else if (styles.some(style => style === undefined)) {
2745
+ console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);
2746
+ }
2747
+ return stylesFactory(...styles);
2748
+ };
2749
+ }
2750
+ return stylesFactory;
2751
+ }
2752
+
2753
+ // eslint-disable-next-line @typescript-eslint/naming-convention
2754
+ function internal_mutateStyles(tag, processor) {
2755
+ // Emotion attaches all the styles as `__emotion_styles`.
2756
+ // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186
2757
+ if (Array.isArray(tag.__emotion_styles)) {
2758
+ tag.__emotion_styles = processor(tag.__emotion_styles);
2759
+ }
2760
+ }
2761
+
2762
+ // Emotion only accepts an array, but we want to avoid allocations
2763
+ const wrapper = [];
2764
+ // eslint-disable-next-line @typescript-eslint/naming-convention
2765
+ function internal_serializeStyles(styles) {
2766
+ wrapper[0] = styles;
2767
+ return serializeStyles(wrapper);
2768
+ }
2769
+
2770
+ // Sorted ASC by size. That's important.
2771
+ // It can't be configured as it's used statically for propTypes.
2772
+ const sortBreakpointsValues = values => {
2773
+ const breakpointsAsArray = Object.keys(values).map(key => ({
2774
+ key,
2775
+ val: values[key]
2776
+ })) || [];
2777
+ // Sort in ascending order
2778
+ breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);
2779
+ return breakpointsAsArray.reduce((acc, obj) => {
2780
+ return {
2781
+ ...acc,
2782
+ [obj.key]: obj.val
2783
+ };
2784
+ }, {});
2785
+ };
2786
+
2787
+ // Keep in mind that @media is inclusive by the CSS specification.
2788
+ function createBreakpoints(breakpoints) {
2789
+ const {
2790
+ // The breakpoint **start** at this value.
2791
+ // For instance with the first breakpoint xs: [xs, sm).
2792
+ values = {
2793
+ xs: 0,
2794
+ // phone
2795
+ sm: 600,
2796
+ // tablet
2797
+ md: 900,
2798
+ // small laptop
2799
+ lg: 1200,
2800
+ // desktop
2801
+ xl: 1536 // large screen
2802
+ },
2803
+ unit = 'px',
2804
+ step = 5,
2805
+ ...other
2806
+ } = breakpoints;
2807
+ const sortedValues = sortBreakpointsValues(values);
2808
+ const keys = Object.keys(sortedValues);
2809
+ function up(key) {
2810
+ const value = typeof values[key] === 'number' ? values[key] : key;
2811
+ return `@media (min-width:${value}${unit})`;
2812
+ }
2813
+ function down(key) {
2814
+ const value = typeof values[key] === 'number' ? values[key] : key;
2815
+ return `@media (max-width:${value - step / 100}${unit})`;
2816
+ }
2817
+ function between(start, end) {
2818
+ const endIndex = keys.indexOf(end);
2819
+ return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;
2820
+ }
2821
+ function only(key) {
2822
+ if (keys.indexOf(key) + 1 < keys.length) {
2823
+ return between(key, keys[keys.indexOf(key) + 1]);
2824
+ }
2825
+ return up(key);
2826
+ }
2827
+ function not(key) {
2828
+ // handle first and last key separately, for better readability
2829
+ const keyIndex = keys.indexOf(key);
2830
+ if (keyIndex === 0) {
2831
+ return up(keys[1]);
2832
+ }
2833
+ if (keyIndex === keys.length - 1) {
2834
+ return down(keys[keyIndex]);
2835
+ }
2836
+ return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');
2837
+ }
2838
+ return {
2839
+ keys,
2840
+ values: sortedValues,
2841
+ up,
2842
+ down,
2843
+ between,
2844
+ only,
2845
+ not,
2846
+ unit,
2847
+ ...other
2848
+ };
2849
+ }
4774
2850
 
4775
- /*
4776
- * Receive `sxInput` as object or callback
4777
- * and then recursively check keys & values to create media query object styles.
4778
- * (the result will be used in `styled`)
4779
- */
4780
- function traverse(sxInput) {
4781
- let sxObject = sxInput;
4782
- if (typeof sxInput === 'function') {
4783
- sxObject = sxInput(theme);
4784
- } else if (typeof sxInput !== 'object') {
4785
- // value
4786
- return sxInput;
4787
- }
4788
- if (!sxObject) {
4789
- return null;
4790
- }
4791
- const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);
4792
- const breakpointsKeys = Object.keys(emptyBreakpoints);
4793
- let css = emptyBreakpoints;
4794
- Object.keys(sxObject).forEach(styleKey => {
4795
- const value = callIfFn(sxObject[styleKey], theme);
4796
- if (value !== null && value !== undefined) {
4797
- if (typeof value === 'object') {
4798
- if (config[styleKey]) {
4799
- css = merge(css, getThemeValue(styleKey, value, theme, config));
4800
- } else {
4801
- const breakpointsValues = handleBreakpoints({
4802
- theme
4803
- }, value, x => ({
4804
- [styleKey]: x
4805
- }));
4806
- if (objectsHaveSameKeys(breakpointsValues, value)) {
4807
- css[styleKey] = styleFunctionSx({
4808
- sx: value,
4809
- theme,
4810
- nested: true
4811
- });
4812
- } else {
4813
- css = merge(css, breakpointsValues);
4814
- }
4815
- }
4816
- } else {
4817
- css = merge(css, getThemeValue(styleKey, value, theme, config));
4818
- }
4819
- }
4820
- });
4821
- if (!nested && theme.modularCssLayers) {
4822
- return {
4823
- '@layer sx': sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css))
4824
- };
2851
+ const shape = {
2852
+ borderRadius: 4
2853
+ };
2854
+
2855
+ // The different signatures imply different meaning for their arguments that can't be expressed structurally.
2856
+ // We express the difference with variable names.
2857
+
2858
+ function createSpacing(spacingInput = 8,
2859
+ // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.
2860
+ // Smaller components, such as icons, can align to a 4dp grid.
2861
+ // https://m2.material.io/design/layout/understanding-layout.html
2862
+ transform = createUnarySpacing({
2863
+ spacing: spacingInput
2864
+ })) {
2865
+ // Already transformed.
2866
+ if (spacingInput.mui) {
2867
+ return spacingInput;
2868
+ }
2869
+ const spacing = (...argsInput) => {
2870
+ if (process.env.NODE_ENV !== 'production') {
2871
+ if (!(argsInput.length <= 4)) {
2872
+ console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);
4825
2873
  }
4826
- return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));
4827
2874
  }
4828
- return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);
4829
- }
4830
- return styleFunctionSx;
2875
+ const args = argsInput.length === 0 ? [1] : argsInput;
2876
+ return args.map(argument => {
2877
+ const output = transform(argument);
2878
+ return typeof output === 'number' ? `${output}px` : output;
2879
+ }).join(' ');
2880
+ };
2881
+ spacing.mui = true;
2882
+ return spacing;
4831
2883
  }
4832
- const styleFunctionSx = unstable_createStyleFunctionSx();
4833
- styleFunctionSx.filterProps = ['sx'];
4834
2884
 
4835
2885
  /**
4836
2886
  * A universal utility to style components with multiple color modes. Always use it from the theme object.
@@ -4978,8 +3028,6 @@ const createClassNameGenerator = () => {
4978
3028
  };
4979
3029
  const ClassNameGenerator = createClassNameGenerator();
4980
3030
 
4981
- function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
4982
-
4983
3031
  const globalStateClasses = {
4984
3032
  active: 'active',
4985
3033
  checked: 'checked',
@@ -6112,59 +4160,71 @@ function createGetColorSchemeSelector(selector) {
6112
4160
  };
6113
4161
  }
6114
4162
 
6115
- /* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0
6116
- ---
6117
- These rules are preventing the performance optimizations below.
6118
- */
4163
+ const common = {
4164
+ black: '#000',
4165
+ white: '#fff'
4166
+ };
6119
4167
 
6120
- /**
6121
- * Compose classes from multiple sources.
6122
- *
6123
- * @example
6124
- * ```tsx
6125
- * const slots = {
6126
- * root: ['root', 'primary'],
6127
- * label: ['label'],
6128
- * };
6129
- *
6130
- * const getUtilityClass = (slot) => `MuiButton-${slot}`;
6131
- *
6132
- * const classes = {
6133
- * root: 'my-root-class',
6134
- * };
6135
- *
6136
- * const output = composeClasses(slots, getUtilityClass, classes);
6137
- * // {
6138
- * // root: 'MuiButton-root MuiButton-primary my-root-class',
6139
- * // label: 'MuiButton-label',
6140
- * // }
6141
- * ```
6142
- *
6143
- * @param slots a list of classes for each possible slot
6144
- * @param getUtilityClass a function to resolve the class based on the slot name
6145
- * @param classes the input classes from props
6146
- * @returns the resolved classes for all slots
6147
- */
6148
- function composeClasses(slots, getUtilityClass, classes = undefined) {
6149
- const output = {};
6150
- for (const slotName in slots) {
6151
- const slot = slots[slotName];
6152
- let buffer = '';
6153
- let start = true;
6154
- for (let i = 0; i < slot.length; i += 1) {
6155
- const value = slot[i];
6156
- if (value) {
6157
- buffer += (start === true ? '' : ' ') + getUtilityClass(value);
6158
- start = false;
6159
- if (classes && classes[value]) {
6160
- buffer += ' ' + classes[value];
6161
- }
6162
- }
6163
- }
6164
- output[slotName] = buffer;
6165
- }
6166
- return output;
6167
- }
4168
+ const grey = {
4169
+ 50: '#fafafa',
4170
+ 100: '#f5f5f5',
4171
+ 200: '#eeeeee',
4172
+ 300: '#e0e0e0',
4173
+ 400: '#bdbdbd',
4174
+ 500: '#9e9e9e',
4175
+ 600: '#757575',
4176
+ 700: '#616161',
4177
+ 800: '#424242',
4178
+ 900: '#212121',
4179
+ A100: '#f5f5f5',
4180
+ A200: '#eeeeee',
4181
+ A400: '#bdbdbd',
4182
+ A700: '#616161'
4183
+ };
4184
+
4185
+ const purple = {
4186
+ 50: '#f3e5f5',
4187
+ 200: '#ce93d8',
4188
+ 300: '#ba68c8',
4189
+ 400: '#ab47bc',
4190
+ 500: '#9c27b0',
4191
+ 700: '#7b1fa2'};
4192
+
4193
+ const red = {
4194
+ 300: '#e57373',
4195
+ 400: '#ef5350',
4196
+ 500: '#f44336',
4197
+ 700: '#d32f2f',
4198
+ 800: '#c62828'};
4199
+
4200
+ const orange = {
4201
+ 300: '#ffb74d',
4202
+ 400: '#ffa726',
4203
+ 500: '#ff9800',
4204
+ 700: '#f57c00',
4205
+ 900: '#e65100'};
4206
+
4207
+ const blue = {
4208
+ 50: '#e3f2fd',
4209
+ 200: '#90caf9',
4210
+ 400: '#42a5f5',
4211
+ 700: '#1976d2',
4212
+ 800: '#1565c0'};
4213
+
4214
+ const lightBlue = {
4215
+ 300: '#4fc3f7',
4216
+ 400: '#29b6f6',
4217
+ 500: '#03a9f4',
4218
+ 700: '#0288d1',
4219
+ 900: '#01579b'};
4220
+
4221
+ const green = {
4222
+ 300: '#81c784',
4223
+ 400: '#66bb6a',
4224
+ 500: '#4caf50',
4225
+ 700: '#388e3c',
4226
+ 800: '#2e7d32',
4227
+ 900: '#1b5e20'};
6168
4228
 
6169
4229
  function getLight() {
6170
4230
  return {
@@ -7420,6 +5480,8 @@ function createTheme(options = {},
7420
5480
 
7421
5481
  const defaultTheme = createTheme();
7422
5482
 
5483
+ var THEME_ID = '$$material';
5484
+
7423
5485
  // copied from @mui/system/createStyled
7424
5486
  function slotShouldForwardProp(prop) {
7425
5487
  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';
@@ -7453,15 +5515,6 @@ function useDefaultProps(params) {
7453
5515
  return useDefaultProps$1(params);
7454
5516
  }
7455
5517
 
7456
- function chainPropTypes(propType1, propType2) {
7457
- if (process.env.NODE_ENV === 'production') {
7458
- return () => null;
7459
- }
7460
- return function validate(...args) {
7461
- return propType1(...args) || propType2(...args);
7462
- };
7463
- }
7464
-
7465
5518
  /**
7466
5519
  * Type guard to check if the object has a "main" property of type string.
7467
5520
  *
@@ -7684,7 +5737,7 @@ const CircularProgress = /*#__PURE__*/React.forwardRef(function CircularProgress
7684
5737
  circleStyle.strokeDashoffset = `${((100 - value) / 100 * circumference).toFixed(3)}px`;
7685
5738
  rootStyle.transform = 'rotate(-90deg)';
7686
5739
  }
7687
- return /*#__PURE__*/jsx$1(CircularProgressRoot, {
5740
+ return /*#__PURE__*/jsx(CircularProgressRoot, {
7688
5741
  className: clsx(classes.root, className),
7689
5742
  style: {
7690
5743
  width: size,
@@ -7697,11 +5750,11 @@ const CircularProgress = /*#__PURE__*/React.forwardRef(function CircularProgress
7697
5750
  role: "progressbar",
7698
5751
  ...rootProps,
7699
5752
  ...other,
7700
- children: /*#__PURE__*/jsx$1(CircularProgressSVG, {
5753
+ children: /*#__PURE__*/jsx(CircularProgressSVG, {
7701
5754
  className: classes.svg,
7702
5755
  ownerState: ownerState,
7703
5756
  viewBox: `${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`,
7704
- children: /*#__PURE__*/jsx$1(CircularProgressCircle, {
5757
+ children: /*#__PURE__*/jsx(CircularProgressCircle, {
7705
5758
  className: classes.circle,
7706
5759
  style: circleStyle,
7707
5760
  ownerState: ownerState,
@@ -7781,15 +5834,33 @@ process.env.NODE_ENV !== "production" ? CircularProgress.propTypes /* remove-pro
7781
5834
 
7782
5835
  // Loading component renders a circular spinner above an element (usually a plot)
7783
5836
  var Loading = function () {
7784
- return (jsx$1("div", { className: "loading-overlay", children: jsx$1(CircularProgress, {}) }));
5837
+ return (jsx("div", { className: "loading-overlay", children: jsx(CircularProgress, {}) }));
7785
5838
  };
7786
5839
 
7787
5840
  var Plot$2 = lazy(function () { return import('react-plotly.js'); });
7788
5841
  var HistogramPlot = function (props) {
7789
- var _a;
7790
- var data = props.data, title = props.title, xAxisTitle = props.xAxisTitle, _b = props.barColor, barColor = _b === void 0 ? 'rgb(72, 72, 74)' : _b, _c = props.unselectedBarColor, unselectedBarColor = _c === void 0 ? 'rgba(203, 195, 195, 0.88)' : _c, _d = props.selectorsColor, selectorsColor = _d === void 0 ? 'black' : _d, _e = props.showMeanLine, showMeanLine = _e === void 0 ? true : _e, _f = props.meanLineColor, meanLineColor = _f === void 0 ? 'grey' : _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;
5842
+ var _a, _b;
5843
+ 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.showMeanLine, showMeanLine = _f === void 0 ? true : _f, _g = props.showAllDataMeanLine, showAllDataMeanLine = _g === void 0 ? true : _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;
7791
5844
  // Ref for plot container
7792
5845
  var containerRef = useRef(null);
5846
+ // Track any selections made in this plot so we can style the selection box.
5847
+ var _l = useState(null), selectedRange = _l[0], setSelectedRange = _l[1];
5848
+ // Set the bins based on the entire data set.
5849
+ var nBins = Math.ceil(Math.sqrt(data.length + unselectedData.length));
5850
+ // Plotly determines "nice" bins which consequently means it internally decides the axis range. We need
5851
+ // to access that information once the plot has been initialized so that we can prevent the
5852
+ // axis range from changing during interaction. Dates use strings.
5853
+ var _m = useState(undefined), fixedXAxisRange = _m[0], setFixedXAxisRange = _m[1];
5854
+ // figure should be Readonly<Plotly.Figure> but react-plotly.js doesn't expose that type, so we use any.
5855
+ var handlePlotInitialized = function (figure, graphDiv) {
5856
+ var _a, _b;
5857
+ if (((_b = (_a = figure.layout) === null || _a === void 0 ? void 0 : _a.xaxis) === null || _b === void 0 ? void 0 : _b.range) && !fixedXAxisRange) {
5858
+ var computedRange = typeof (figure.layout.xaxis.range[0]) === 'string'
5859
+ ? [new Date(figure.layout.xaxis.range[0]), new Date(figure.layout.xaxis.range[1])]
5860
+ : [figure.layout.xaxis.range[0], figure.layout.xaxis.range[1]];
5861
+ setFixedXAxisRange(computedRange);
5862
+ }
5863
+ };
7793
5864
  // Create handler for click event that can use event data to update the plot if desired.
7794
5865
  var handleClick = function (event) {
7795
5866
  if (!event || !event.points || event.points.length === 0) {
@@ -7800,9 +5871,8 @@ var HistogramPlot = function (props) {
7800
5871
  if (event.points[0].curveNumber !== 0) {
7801
5872
  return;
7802
5873
  }
7803
- // If we are given a function to update the data (handleClickOrSelection), use
7804
- // the bin number to determine which bar was clicked and determine the range of the clicked bar.
7805
- if (handleClickOrSelection && "binNumber" in event.points[0] && typeof event.points[0].binNumber === 'number') {
5874
+ // Use the bin number to determine which bar was clicked and determine the range of the clicked bar.
5875
+ if ("binNumber" in event.points[0] && typeof event.points[0].binNumber === 'number') {
7806
5876
  // Get the index of the clicked bar with respect to the trace. So if
7807
5877
  // my trace has only one bar (0, 1] but another trace has bars (-1, 0], (0, 1], (1, 2], etc.
7808
5878
  // then when I click on (0, 1] in my trace the index will be 0, even thought it would be
@@ -7841,9 +5911,11 @@ var HistogramPlot = function (props) {
7841
5911
  var minDate = new Date(minBinValue);
7842
5912
  var maxDate = new Date(maxBinValue);
7843
5913
  handleClickOrSelection(minDate, maxDate);
5914
+ setSelectedRange([minDate, maxDate]);
7844
5915
  }
7845
5916
  else {
7846
5917
  handleClickOrSelection(minBinValue, maxBinValue);
5918
+ setSelectedRange([minBinValue, maxBinValue]);
7847
5919
  }
7848
5920
  }
7849
5921
  };
@@ -7858,17 +5930,36 @@ var HistogramPlot = function (props) {
7858
5930
  // Then we must be dealing with dates
7859
5931
  minValue = new Date(event.range.x[0]);
7860
5932
  maxValue = new Date(event.range.x[1]);
5933
+ setSelectedRange([minValue, maxValue]);
7861
5934
  }
7862
5935
  else {
7863
5936
  minValue = event.range.x[0];
7864
5937
  maxValue = event.range.x[1];
5938
+ setSelectedRange([minValue, maxValue]);
7865
5939
  }
7866
- if (handleClickOrSelection) {
7867
- handleClickOrSelection(minValue, maxValue);
7868
- }
5940
+ handleClickOrSelection(minValue, maxValue);
7869
5941
  };
7870
- // Set the bins based on the entire data set.
7871
- var nBins = Math.ceil(Math.sqrt(data.length + unselectedData.length));
5942
+ // Create the selected range box
5943
+ var selectedRangeBox = useMemo(function () {
5944
+ if (!selectedRange)
5945
+ return [];
5946
+ // Create a multiply-like effect by using a semi-transparent dark overlay
5947
+ var multiplyColor = 'rgba(29, 104, 185, 0.1)';
5948
+ return [{
5949
+ type: 'rect',
5950
+ x0: isDateArray(selectedRange) ? selectedRange[0].getTime() : selectedRange[0],
5951
+ x1: isDateArray(selectedRange) ? selectedRange[1].getTime() : selectedRange[1],
5952
+ y0: 0,
5953
+ y1: 1,
5954
+ yref: 'paper',
5955
+ fillcolor: multiplyColor,
5956
+ line: {
5957
+ width: 1,
5958
+ color: multiplyColor
5959
+ },
5960
+ layer: 'above' // Ensure the selection box is above the bars
5961
+ }];
5962
+ }, [selectedRange]);
7872
5963
  var unselectedTrace = {
7873
5964
  x: unselectedData,
7874
5965
  type: 'histogram',
@@ -7904,31 +5995,36 @@ var HistogramPlot = function (props) {
7904
5995
  },
7905
5996
  unselectedTrace,
7906
5997
  ];
7907
- // Calculate the mean using normalized data
5998
+ // Calculate the mean of the selected data using normalized data
7908
5999
  var meanValue = (_a = calculateMean(data)) !== null && _a !== void 0 ? _a : 0; // Default to 0 if no data
7909
- // Calculate fixed x-axis range based on all data (selected + unselected) to prevent axis jumping
6000
+ var meanLineRadius = 0.01; // distance from the top of the y axis to the top/bottom end of the mean line
6001
+ var meanLine = showMeanLine ? [{
6002
+ type: 'line',
6003
+ x0: meanValue,
6004
+ y0: 1 - meanLineRadius,
6005
+ x1: meanValue,
6006
+ yref: 'paper',
6007
+ y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.
6008
+ line: {
6009
+ color: barColor,
6010
+ width: 1.5,
6011
+ }
6012
+ }] : [];
6013
+ // Draw mean line for all data
7910
6014
  var allData = __spreadArray(__spreadArray([], data, true), unselectedData, true);
7911
- var dataMin = allData.length > 0 ? Math.min.apply(Math, (isDateArray(allData) ? allData.map(function (d) { return d.getTime(); }) : allData)) : 0;
7912
- var dataMax = allData.length > 0 ? Math.max.apply(Math, (isDateArray(allData) ? allData.map(function (d) { return d.getTime(); }) : allData)) : 0;
7913
- // Add some padding to the range so the plot isn't so squished
7914
- var range = dataMax - dataMin;
7915
- var padding = range * 0.02;
7916
- var fixedXAxisRange = [
7917
- isDateArray(allData) ? new Date(dataMin - padding) : dataMin - padding,
7918
- isDateArray(allData) ? new Date(dataMax + padding) : dataMax + padding
7919
- ];
7920
- var meanLine = showMeanLine ? {
7921
- type: 'line',
7922
- x0: meanValue,
7923
- y0: 0,
7924
- x1: meanValue,
7925
- yref: 'paper',
7926
- y1: 1.04, // Extend slightly above so we can annotate better
7927
- line: {
7928
- color: meanLineColor,
7929
- width: 1.5,
7930
- }
7931
- } : {};
6015
+ var allDataMeanValue = (_b = calculateMean(allData)) !== null && _b !== void 0 ? _b : 0;
6016
+ var allDataMeanLine = (showAllDataMeanLine && unselectedData.length > 0) ? [{
6017
+ type: 'line',
6018
+ x0: allDataMeanValue,
6019
+ y0: 1 - meanLineRadius,
6020
+ x1: allDataMeanValue,
6021
+ yref: 'paper',
6022
+ y1: 1 + meanLineRadius + 0.04, // Add extra length above to make the line look centered on the y-axis top.
6023
+ line: {
6024
+ color: unselectedBarColor,
6025
+ width: 1.5,
6026
+ }
6027
+ }] : [];
7932
6028
  var layout = {
7933
6029
  title: {
7934
6030
  text: title,
@@ -7940,7 +6036,7 @@ var HistogramPlot = function (props) {
7940
6036
  height: undefined, // Let autosize handle height
7941
6037
  margin: {
7942
6038
  l: 50,
7943
- r: 20,
6039
+ r: 35, // Balance between ensuring the mean annotation doesn't get cut off and having too much margin.
7944
6040
  t: title ? 80 : 30,
7945
6041
  b: 50,
7946
6042
  pad: 4
@@ -7965,8 +6061,10 @@ var HistogramPlot = function (props) {
7965
6061
  },
7966
6062
  yaxis: {
7967
6063
  title: {
7968
- text: 'Count'
6064
+ text: 'Count',
6065
+ standoff: 12, // Add space between title and axis
7969
6066
  },
6067
+ automargin: true, // Required for standoff to work properly
7970
6068
  showgrid: true,
7971
6069
  zeroline: false,
7972
6070
  showline: true,
@@ -7983,19 +6081,21 @@ var HistogramPlot = function (props) {
7983
6081
  bargap: 0.03, // Gap between bars
7984
6082
  dragmode: 'select', // Enable drag to select
7985
6083
  selectdirection: 'h', // User can select in horizontal direction only
7986
- shapes: meanLine ? [meanLine] : [], // Add the mean line if it exists
7987
- annotations: showMeanLine ? [{
6084
+ shapes: __spreadArray(__spreadArray(__spreadArray([], allDataMeanLine, true), meanLine, true), selectedRangeBox, true), // Add the mean line and selection box
6085
+ annotations: (showMeanLine && meanLine) ? [{
7988
6086
  x: meanValue,
7989
- y: 1.12, // Position above the top of the plot
6087
+ y: 1 + meanLineRadius + 0.04, // Position above the mean line. Value set with respect to the paper coordinates.
7990
6088
  yref: 'paper',
7991
- text: "Mean: ".concat(isDateArray(data) ? new Date(meanValue).toLocaleDateString('en-US', {
7992
- month: 'short',
6089
+ text: "<span style=\"font-weight:300\">AVG </span><span style=\"font-weight:600\">".concat(isDateArray(data) ? new Date(meanValue).toLocaleDateString('en-US', {
6090
+ month: '2-digit',
7993
6091
  day: '2-digit',
7994
- year: 'numeric'
7995
- }) : meanValue.toFixed(2)),
7996
- showarrow: false, // No arrow for the annotation
6092
+ year: '2-digit'
6093
+ }) : meanValue.toFixed(2), "</span>"),
6094
+ xanchor: 'center',
6095
+ yanchor: 'bottom',
6096
+ showarrow: false,
7997
6097
  font: {
7998
- color: meanLineColor,
6098
+ color: barColor,
7999
6099
  size: 12,
8000
6100
  },
8001
6101
  }] : [],
@@ -8008,7 +6108,10 @@ var HistogramPlot = function (props) {
8008
6108
  staticPlot: false, // Enable interactivity
8009
6109
  };
8010
6110
  var containerStyles = __assign({ width: "100%", height: "100%", position: "relative" }, containerStyleOverrides);
8011
- return (jsx$1("div", { ref: containerRef, className: "plot-container ".concat(plotId), style: __assign({ '--selection-color': selectorsColor }, containerStyles), children: jsx$1(Suspense, { fallback: jsx$1(Loading, {}), children: jsx$1(Fragment, { children: jsx$1(Plot$2, { data: plotlyData, layout: layout, config: config, onSelected: handleSelection, onClick: handleClick, onDeselect: onDeselect, useResizeHandler: true, style: {
6111
+ return (jsx("div", { ref: containerRef, className: "plot-container ".concat(plotId), style: __assign({ '--selection-color': selectorsColor }, containerStyles), children: jsx(Suspense, { fallback: jsx(Loading, {}), children: jsx(Fragment, { children: jsx(Plot$2, { data: plotlyData, layout: layout, config: config, onSelected: handleSelection, onClick: handleClick, onDeselect: function () {
6112
+ onDeselect();
6113
+ setSelectedRange(null); // Remove selected box
6114
+ }, onInitialized: handlePlotInitialized, useResizeHandler: true, style: {
8012
6115
  width: "100%",
8013
6116
  height: "100%",
8014
6117
  display: "block"
@@ -8114,7 +6217,7 @@ var RadialHistogramPlot = function (props) {
8114
6217
  staticPlot: false,
8115
6218
  };
8116
6219
  var containerStyles = __assign({ width: "100%", height: "100%", position: "relative" }, containerStyleOverrides);
8117
- return (jsx$1("div", { ref: containerRef, className: "plot-container radial-histogram-container", style: __assign({ '--selection-color': selectorsColor }, containerStyles), children: jsx$1(Suspense, { fallback: jsx$1(Loading, {}), children: jsx$1(Plot$1, { data: plotlyData, layout: layout, config: config, onSelected: onSelected, onClick: onClick, useResizeHandler: true, style: {
6220
+ return (jsx("div", { ref: containerRef, className: "plot-container radial-histogram-container", style: __assign({ '--selection-color': selectorsColor }, containerStyles), children: jsx(Suspense, { fallback: jsx(Loading, {}), children: jsx(Plot$1, { data: plotlyData, layout: layout, config: config, onSelected: onSelected, onClick: onClick, useResizeHandler: true, style: {
8118
6221
  width: "100%",
8119
6222
  height: "100%",
8120
6223
  display: "block"
@@ -8137,7 +6240,7 @@ var TestPlot = function (props) {
8137
6240
  xaxis: { title: { text: (_a = props.xaxisTitle) !== null && _a !== void 0 ? _a : 'X Axis' } },
8138
6241
  yaxis: { title: { text: (_b = props.yaxisTitle) !== null && _b !== void 0 ? _b : 'Y Axis' } },
8139
6242
  };
8140
- return jsx$1(Plot, { data: data, layout: layout });
6243
+ return jsx(Plot, { data: data, layout: layout });
8141
6244
  };
8142
6245
 
8143
6246
  export { HistogramPlot, RadialHistogramPlot, TestPlot };