/**
 * @mui/material v5.15.0
 *
 * @license MIT
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom')) :
  typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom'], factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MaterialUI = {}, global.React, global.ReactDOM));
})(this, (function (exports, React, ReactDOM) { 'use strict';

  'use client';

  function _interopNamespaceDefault(e) {
    var n = Object.create(null);
    if (e) {
      Object.keys(e).forEach(function (k) {
        if (k !== 'default') {
          var d = Object.getOwnPropertyDescriptor(e, k);
          Object.defineProperty(n, k, d.get ? d : {
            enumerable: true,
            get: function () { return e[k]; }
          });
        }
      });
    }
    n.default = e;
    return Object.freeze(n);
  }

  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
  var ReactDOM__namespace = /*#__PURE__*/_interopNamespaceDefault(ReactDOM);

  const common = {
    black: '#000',
    white: '#fff'
  };
  var common$1 = common;

  const red = {
    50: '#ffebee',
    100: '#ffcdd2',
    200: '#ef9a9a',
    300: '#e57373',
    400: '#ef5350',
    500: '#f44336',
    600: '#e53935',
    700: '#d32f2f',
    800: '#c62828',
    900: '#b71c1c',
    A100: '#ff8a80',
    A200: '#ff5252',
    A400: '#ff1744',
    A700: '#d50000'
  };
  var red$1 = red;

  const pink = {
    50: '#fce4ec',
    100: '#f8bbd0',
    200: '#f48fb1',
    300: '#f06292',
    400: '#ec407a',
    500: '#e91e63',
    600: '#d81b60',
    700: '#c2185b',
    800: '#ad1457',
    900: '#880e4f',
    A100: '#ff80ab',
    A200: '#ff4081',
    A400: '#f50057',
    A700: '#c51162'
  };
  var pink$1 = pink;

  const purple = {
    50: '#f3e5f5',
    100: '#e1bee7',
    200: '#ce93d8',
    300: '#ba68c8',
    400: '#ab47bc',
    500: '#9c27b0',
    600: '#8e24aa',
    700: '#7b1fa2',
    800: '#6a1b9a',
    900: '#4a148c',
    A100: '#ea80fc',
    A200: '#e040fb',
    A400: '#d500f9',
    A700: '#aa00ff'
  };
  var purple$1 = purple;

  const deepPurple = {
    50: '#ede7f6',
    100: '#d1c4e9',
    200: '#b39ddb',
    300: '#9575cd',
    400: '#7e57c2',
    500: '#673ab7',
    600: '#5e35b1',
    700: '#512da8',
    800: '#4527a0',
    900: '#311b92',
    A100: '#b388ff',
    A200: '#7c4dff',
    A400: '#651fff',
    A700: '#6200ea'
  };
  var deepPurple$1 = deepPurple;

  const indigo = {
    50: '#e8eaf6',
    100: '#c5cae9',
    200: '#9fa8da',
    300: '#7986cb',
    400: '#5c6bc0',
    500: '#3f51b5',
    600: '#3949ab',
    700: '#303f9f',
    800: '#283593',
    900: '#1a237e',
    A100: '#8c9eff',
    A200: '#536dfe',
    A400: '#3d5afe',
    A700: '#304ffe'
  };
  var indigo$1 = indigo;

  const blue = {
    50: '#e3f2fd',
    100: '#bbdefb',
    200: '#90caf9',
    300: '#64b5f6',
    400: '#42a5f5',
    500: '#2196f3',
    600: '#1e88e5',
    700: '#1976d2',
    800: '#1565c0',
    900: '#0d47a1',
    A100: '#82b1ff',
    A200: '#448aff',
    A400: '#2979ff',
    A700: '#2962ff'
  };
  var blue$1 = blue;

  const lightBlue = {
    50: '#e1f5fe',
    100: '#b3e5fc',
    200: '#81d4fa',
    300: '#4fc3f7',
    400: '#29b6f6',
    500: '#03a9f4',
    600: '#039be5',
    700: '#0288d1',
    800: '#0277bd',
    900: '#01579b',
    A100: '#80d8ff',
    A200: '#40c4ff',
    A400: '#00b0ff',
    A700: '#0091ea'
  };
  var lightBlue$1 = lightBlue;

  const cyan = {
    50: '#e0f7fa',
    100: '#b2ebf2',
    200: '#80deea',
    300: '#4dd0e1',
    400: '#26c6da',
    500: '#00bcd4',
    600: '#00acc1',
    700: '#0097a7',
    800: '#00838f',
    900: '#006064',
    A100: '#84ffff',
    A200: '#18ffff',
    A400: '#00e5ff',
    A700: '#00b8d4'
  };
  var cyan$1 = cyan;

  const teal = {
    50: '#e0f2f1',
    100: '#b2dfdb',
    200: '#80cbc4',
    300: '#4db6ac',
    400: '#26a69a',
    500: '#009688',
    600: '#00897b',
    700: '#00796b',
    800: '#00695c',
    900: '#004d40',
    A100: '#a7ffeb',
    A200: '#64ffda',
    A400: '#1de9b6',
    A700: '#00bfa5'
  };
  var teal$1 = teal;

  const green = {
    50: '#e8f5e9',
    100: '#c8e6c9',
    200: '#a5d6a7',
    300: '#81c784',
    400: '#66bb6a',
    500: '#4caf50',
    600: '#43a047',
    700: '#388e3c',
    800: '#2e7d32',
    900: '#1b5e20',
    A100: '#b9f6ca',
    A200: '#69f0ae',
    A400: '#00e676',
    A700: '#00c853'
  };
  var green$1 = green;

  const lightGreen = {
    50: '#f1f8e9',
    100: '#dcedc8',
    200: '#c5e1a5',
    300: '#aed581',
    400: '#9ccc65',
    500: '#8bc34a',
    600: '#7cb342',
    700: '#689f38',
    800: '#558b2f',
    900: '#33691e',
    A100: '#ccff90',
    A200: '#b2ff59',
    A400: '#76ff03',
    A700: '#64dd17'
  };
  var lightGreen$1 = lightGreen;

  const lime = {
    50: '#f9fbe7',
    100: '#f0f4c3',
    200: '#e6ee9c',
    300: '#dce775',
    400: '#d4e157',
    500: '#cddc39',
    600: '#c0ca33',
    700: '#afb42b',
    800: '#9e9d24',
    900: '#827717',
    A100: '#f4ff81',
    A200: '#eeff41',
    A400: '#c6ff00',
    A700: '#aeea00'
  };
  var lime$1 = lime;

  const yellow = {
    50: '#fffde7',
    100: '#fff9c4',
    200: '#fff59d',
    300: '#fff176',
    400: '#ffee58',
    500: '#ffeb3b',
    600: '#fdd835',
    700: '#fbc02d',
    800: '#f9a825',
    900: '#f57f17',
    A100: '#ffff8d',
    A200: '#ffff00',
    A400: '#ffea00',
    A700: '#ffd600'
  };
  var yellow$1 = yellow;

  const amber = {
    50: '#fff8e1',
    100: '#ffecb3',
    200: '#ffe082',
    300: '#ffd54f',
    400: '#ffca28',
    500: '#ffc107',
    600: '#ffb300',
    700: '#ffa000',
    800: '#ff8f00',
    900: '#ff6f00',
    A100: '#ffe57f',
    A200: '#ffd740',
    A400: '#ffc400',
    A700: '#ffab00'
  };
  var amber$1 = amber;

  const orange = {
    50: '#fff3e0',
    100: '#ffe0b2',
    200: '#ffcc80',
    300: '#ffb74d',
    400: '#ffa726',
    500: '#ff9800',
    600: '#fb8c00',
    700: '#f57c00',
    800: '#ef6c00',
    900: '#e65100',
    A100: '#ffd180',
    A200: '#ffab40',
    A400: '#ff9100',
    A700: '#ff6d00'
  };
  var orange$1 = orange;

  const deepOrange = {
    50: '#fbe9e7',
    100: '#ffccbc',
    200: '#ffab91',
    300: '#ff8a65',
    400: '#ff7043',
    500: '#ff5722',
    600: '#f4511e',
    700: '#e64a19',
    800: '#d84315',
    900: '#bf360c',
    A100: '#ff9e80',
    A200: '#ff6e40',
    A400: '#ff3d00',
    A700: '#dd2c00'
  };
  var deepOrange$1 = deepOrange;

  const brown = {
    50: '#efebe9',
    100: '#d7ccc8',
    200: '#bcaaa4',
    300: '#a1887f',
    400: '#8d6e63',
    500: '#795548',
    600: '#6d4c41',
    700: '#5d4037',
    800: '#4e342e',
    900: '#3e2723',
    A100: '#d7ccc8',
    A200: '#bcaaa4',
    A400: '#8d6e63',
    A700: '#5d4037'
  };
  var brown$1 = brown;

  const grey = {
    50: '#fafafa',
    100: '#f5f5f5',
    200: '#eeeeee',
    300: '#e0e0e0',
    400: '#bdbdbd',
    500: '#9e9e9e',
    600: '#757575',
    700: '#616161',
    800: '#424242',
    900: '#212121',
    A100: '#f5f5f5',
    A200: '#eeeeee',
    A400: '#bdbdbd',
    A700: '#616161'
  };
  var grey$1 = grey;

  const blueGrey = {
    50: '#eceff1',
    100: '#cfd8dc',
    200: '#b0bec5',
    300: '#90a4ae',
    400: '#78909c',
    500: '#607d8b',
    600: '#546e7a',
    700: '#455a64',
    800: '#37474f',
    900: '#263238',
    A100: '#cfd8dc',
    A200: '#b0bec5',
    A400: '#78909c',
    A700: '#455a64'
  };
  var blueGrey$1 = blueGrey;

  var index = /*#__PURE__*/Object.freeze({
    __proto__: null,
    amber: amber$1,
    blue: blue$1,
    blueGrey: blueGrey$1,
    brown: brown$1,
    common: common$1,
    cyan: cyan$1,
    deepOrange: deepOrange$1,
    deepPurple: deepPurple$1,
    green: green$1,
    grey: grey$1,
    indigo: indigo$1,
    lightBlue: lightBlue$1,
    lightGreen: lightGreen$1,
    lime: lime$1,
    orange: orange$1,
    pink: pink$1,
    purple: purple$1,
    red: red$1,
    teal: teal$1,
    yellow: yellow$1
  });

  var global$1 = (typeof global !== "undefined" ? global :
              typeof self !== "undefined" ? self :
              typeof window !== "undefined" ? window : {});

  if (typeof global$1.setTimeout === 'function') ;
  if (typeof global$1.clearTimeout === 'function') ;

  // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js
  var performance$1 = global$1.performance || {};
  performance$1.now        ||
    performance$1.mozNow     ||
    performance$1.msNow      ||
    performance$1.oNow       ||
    performance$1.webkitNow  ||
    function(){ return (new Date()).getTime() };

  function chainPropTypes(propType1, propType2) {
    return function validate(...args) {
      return propType1(...args) || propType2(...args);
    };
  }

  function _extends() {
    _extends = Object.assign ? Object.assign.bind() : function (target) {
      for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i];
        for (var key in source) {
          if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key];
          }
        }
      }
      return target;
    };
    return _extends.apply(this, arguments);
  }

  function isPlainObject(item) {
    return item !== null && typeof item === 'object' && item.constructor === Object;
  }
  function deepClone(source) {
    if (!isPlainObject(source)) {
      return source;
    }
    const output = {};
    Object.keys(source).forEach(key => {
      output[key] = deepClone(source[key]);
    });
    return output;
  }
  function deepmerge(target, source, options = {
    clone: true
  }) {
    const output = options.clone ? _extends({}, target) : target;
    if (isPlainObject(target) && isPlainObject(source)) {
      Object.keys(source).forEach(key => {
        // Avoid prototype pollution
        if (key === '__proto__') {
          return;
        }
        if (isPlainObject(source[key]) && key in target && isPlainObject(target[key])) {
          // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.
          output[key] = deepmerge(target[key], source[key], options);
        } else if (options.clone) {
          output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];
        } else {
          output[key] = source[key];
        }
      });
    }
    return output;
  }

  function unwrapExports (x) {
  	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
  }

  function createCommonjsModule(fn, module) {
  	return module = { exports: {} }, fn(module, module.exports), module.exports;
  }

  var reactIs_development$2 = createCommonjsModule(function (module, exports) {



  {
    (function() {

  // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  // nor polyfill, then a plain number is used for performance.
  var hasSymbol = typeof Symbol === 'function' && Symbol.for;
  var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
  var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
  var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
  var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
  var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
  var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
  var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
  // (unstable) APIs that have been removed. Can we remove the symbols?

  var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
  var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
  var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
  var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
  var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
  var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
  var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
  var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
  var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
  var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
  var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;

  function isValidElementType(type) {
    return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
    type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
  }

  function typeOf(object) {
    if (typeof object === 'object' && object !== null) {
      var $$typeof = object.$$typeof;

      switch ($$typeof) {
        case REACT_ELEMENT_TYPE:
          var type = object.type;

          switch (type) {
            case REACT_ASYNC_MODE_TYPE:
            case REACT_CONCURRENT_MODE_TYPE:
            case REACT_FRAGMENT_TYPE:
            case REACT_PROFILER_TYPE:
            case REACT_STRICT_MODE_TYPE:
            case REACT_SUSPENSE_TYPE:
              return type;

            default:
              var $$typeofType = type && type.$$typeof;

              switch ($$typeofType) {
                case REACT_CONTEXT_TYPE:
                case REACT_FORWARD_REF_TYPE:
                case REACT_LAZY_TYPE:
                case REACT_MEMO_TYPE:
                case REACT_PROVIDER_TYPE:
                  return $$typeofType;

                default:
                  return $$typeof;
              }

          }

        case REACT_PORTAL_TYPE:
          return $$typeof;
      }
    }

    return undefined;
  } // AsyncMode is deprecated along with isAsyncMode

  var AsyncMode = REACT_ASYNC_MODE_TYPE;
  var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
  var ContextConsumer = REACT_CONTEXT_TYPE;
  var ContextProvider = REACT_PROVIDER_TYPE;
  var Element = REACT_ELEMENT_TYPE;
  var ForwardRef = REACT_FORWARD_REF_TYPE;
  var Fragment = REACT_FRAGMENT_TYPE;
  var Lazy = REACT_LAZY_TYPE;
  var Memo = REACT_MEMO_TYPE;
  var Portal = REACT_PORTAL_TYPE;
  var Profiler = REACT_PROFILER_TYPE;
  var StrictMode = REACT_STRICT_MODE_TYPE;
  var Suspense = REACT_SUSPENSE_TYPE;
  var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated

  function isAsyncMode(object) {
    {
      if (!hasWarnedAboutDeprecatedIsAsyncMode) {
        hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint

        console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
      }
    }

    return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
  }
  function isConcurrentMode(object) {
    return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
  }
  function isContextConsumer(object) {
    return typeOf(object) === REACT_CONTEXT_TYPE;
  }
  function isContextProvider(object) {
    return typeOf(object) === REACT_PROVIDER_TYPE;
  }
  function isElement(object) {
    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  }
  function isForwardRef(object) {
    return typeOf(object) === REACT_FORWARD_REF_TYPE;
  }
  function isFragment(object) {
    return typeOf(object) === REACT_FRAGMENT_TYPE;
  }
  function isLazy(object) {
    return typeOf(object) === REACT_LAZY_TYPE;
  }
  function isMemo(object) {
    return typeOf(object) === REACT_MEMO_TYPE;
  }
  function isPortal(object) {
    return typeOf(object) === REACT_PORTAL_TYPE;
  }
  function isProfiler(object) {
    return typeOf(object) === REACT_PROFILER_TYPE;
  }
  function isStrictMode(object) {
    return typeOf(object) === REACT_STRICT_MODE_TYPE;
  }
  function isSuspense(object) {
    return typeOf(object) === REACT_SUSPENSE_TYPE;
  }

  exports.AsyncMode = AsyncMode;
  exports.ConcurrentMode = ConcurrentMode;
  exports.ContextConsumer = ContextConsumer;
  exports.ContextProvider = ContextProvider;
  exports.Element = Element;
  exports.ForwardRef = ForwardRef;
  exports.Fragment = Fragment;
  exports.Lazy = Lazy;
  exports.Memo = Memo;
  exports.Portal = Portal;
  exports.Profiler = Profiler;
  exports.StrictMode = StrictMode;
  exports.Suspense = Suspense;
  exports.isAsyncMode = isAsyncMode;
  exports.isConcurrentMode = isConcurrentMode;
  exports.isContextConsumer = isContextConsumer;
  exports.isContextProvider = isContextProvider;
  exports.isElement = isElement;
  exports.isForwardRef = isForwardRef;
  exports.isFragment = isFragment;
  exports.isLazy = isLazy;
  exports.isMemo = isMemo;
  exports.isPortal = isPortal;
  exports.isProfiler = isProfiler;
  exports.isStrictMode = isStrictMode;
  exports.isSuspense = isSuspense;
  exports.isValidElementType = isValidElementType;
  exports.typeOf = typeOf;
    })();
  }
  });
  reactIs_development$2.AsyncMode;
  reactIs_development$2.ConcurrentMode;
  reactIs_development$2.ContextConsumer;
  reactIs_development$2.ContextProvider;
  reactIs_development$2.Element;
  reactIs_development$2.ForwardRef;
  reactIs_development$2.Fragment;
  reactIs_development$2.Lazy;
  reactIs_development$2.Memo;
  reactIs_development$2.Portal;
  reactIs_development$2.Profiler;
  reactIs_development$2.StrictMode;
  reactIs_development$2.Suspense;
  reactIs_development$2.isAsyncMode;
  reactIs_development$2.isConcurrentMode;
  reactIs_development$2.isContextConsumer;
  reactIs_development$2.isContextProvider;
  reactIs_development$2.isElement;
  reactIs_development$2.isForwardRef;
  reactIs_development$2.isFragment;
  reactIs_development$2.isLazy;
  reactIs_development$2.isMemo;
  reactIs_development$2.isPortal;
  reactIs_development$2.isProfiler;
  reactIs_development$2.isStrictMode;
  reactIs_development$2.isSuspense;
  reactIs_development$2.isValidElementType;
  reactIs_development$2.typeOf;

  var reactIs$2 = createCommonjsModule(function (module) {

  {
    module.exports = reactIs_development$2;
  }
  });

  /*
  object-assign
  (c) Sindre Sorhus
  @license MIT
  */

  /* eslint-disable no-unused-vars */
  var getOwnPropertySymbols = Object.getOwnPropertySymbols;
  var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
  var propIsEnumerable = Object.prototype.propertyIsEnumerable;

  function toObject(val) {
  	if (val === null || val === undefined) {
  		throw new TypeError('Object.assign cannot be called with null or undefined');
  	}

  	return Object(val);
  }

  function shouldUseNative() {
  	try {
  		if (!Object.assign) {
  			return false;
  		}

  		// Detect buggy property enumeration order in older V8 versions.

  		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
  		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
  		test1[5] = 'de';
  		if (Object.getOwnPropertyNames(test1)[0] === '5') {
  			return false;
  		}

  		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
  		var test2 = {};
  		for (var i = 0; i < 10; i++) {
  			test2['_' + String.fromCharCode(i)] = i;
  		}
  		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
  			return test2[n];
  		});
  		if (order2.join('') !== '0123456789') {
  			return false;
  		}

  		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
  		var test3 = {};
  		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
  			test3[letter] = letter;
  		});
  		if (Object.keys(Object.assign({}, test3)).join('') !==
  				'abcdefghijklmnopqrst') {
  			return false;
  		}

  		return true;
  	} catch (err) {
  		// We don't expect any of the above to throw, but better to be safe.
  		return false;
  	}
  }

  var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
  	var from;
  	var to = toObject(target);
  	var symbols;

  	for (var s = 1; s < arguments.length; s++) {
  		from = Object(arguments[s]);

  		for (var key in from) {
  			if (hasOwnProperty$1.call(from, key)) {
  				to[key] = from[key];
  			}
  		}

  		if (getOwnPropertySymbols) {
  			symbols = getOwnPropertySymbols(from);
  			for (var i = 0; i < symbols.length; i++) {
  				if (propIsEnumerable.call(from, symbols[i])) {
  					to[symbols[i]] = from[symbols[i]];
  				}
  			}
  		}
  	}

  	return to;
  };

  /**
   * Copyright (c) 2013-present, Facebook, Inc.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */


  var ReactPropTypesSecret$1 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';

  var ReactPropTypesSecret_1 = ReactPropTypesSecret$1;

  var has$1 = Function.call.bind(Object.prototype.hasOwnProperty);

  var printWarning$1 = function() {};

  {
    var ReactPropTypesSecret = ReactPropTypesSecret_1;
    var loggedTypeFailures = {};
    var has = has$1;

    printWarning$1 = function(text) {
      var message = 'Warning: ' + text;
      if (typeof console !== 'undefined') {
        console.error(message);
      }
      try {
        // --- Welcome to debugging React ---
        // This error was thrown as a convenience so that you can use this stack
        // to find the callsite that caused this warning to fire.
        throw new Error(message);
      } catch (x) { /**/ }
    };
  }

  /**
   * Assert that the values match with the type specs.
   * Error messages are memorized and will only be shown once.
   *
   * @param {object} typeSpecs Map of name to a ReactPropType
   * @param {object} values Runtime values that need to be type-checked
   * @param {string} location e.g. "prop", "context", "child context"
   * @param {string} componentName Name of the component for error messages.
   * @param {?Function} getStack Returns the component stack.
   * @private
   */
  function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
    {
      for (var typeSpecName in typeSpecs) {
        if (has(typeSpecs, typeSpecName)) {
          var error;
          // Prop type validation may throw. In case they do, we don't want to
          // fail the render phase where it didn't fail before. So we log it.
          // After these have been cleaned up, we'll let them throw.
          try {
            // This is intentionally an invariant that gets caught. It's the same
            // behavior as without this statement except with a better message.
            if (typeof typeSpecs[typeSpecName] !== 'function') {
              var err = Error(
                (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
                'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
                'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
              );
              err.name = 'Invariant Violation';
              throw err;
            }
            error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
          } catch (ex) {
            error = ex;
          }
          if (error && !(error instanceof Error)) {
            printWarning$1(
              (componentName || 'React class') + ': type specification of ' +
              location + ' `' + typeSpecName + '` is invalid; the type checker ' +
              'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
              'You may have forgotten to pass an argument to the type checker ' +
              'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
              'shape all require an argument).'
            );
          }
          if (error instanceof Error && !(error.message in loggedTypeFailures)) {
            // Only monitor this failure once because there tends to be a lot of the
            // same error.
            loggedTypeFailures[error.message] = true;

            var stack = getStack ? getStack() : '';

            printWarning$1(
              'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
            );
          }
        }
      }
    }
  }

  /**
   * Resets warning cache when testing.
   *
   * @private
   */
  checkPropTypes.resetWarningCache = function() {
    {
      loggedTypeFailures = {};
    }
  };

  var checkPropTypes_1 = checkPropTypes;

  var printWarning = function() {};

  {
    printWarning = function(text) {
      var message = 'Warning: ' + text;
      if (typeof console !== 'undefined') {
        console.error(message);
      }
      try {
        // --- Welcome to debugging React ---
        // This error was thrown as a convenience so that you can use this stack
        // to find the callsite that caused this warning to fire.
        throw new Error(message);
      } catch (x) {}
    };
  }

  function emptyFunctionThatReturnsNull() {
    return null;
  }

  var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {
    /* global Symbol */
    var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
    var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.

    /**
     * Returns the iterator method function contained on the iterable object.
     *
     * Be sure to invoke the function with the iterable as context:
     *
     *     var iteratorFn = getIteratorFn(myIterable);
     *     if (iteratorFn) {
     *       var iterator = iteratorFn.call(myIterable);
     *       ...
     *     }
     *
     * @param {?object} maybeIterable
     * @return {?function}
     */
    function getIteratorFn(maybeIterable) {
      var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
      if (typeof iteratorFn === 'function') {
        return iteratorFn;
      }
    }

    /**
     * Collection of methods that allow declaration and validation of props that are
     * supplied to React components. Example usage:
     *
     *   var Props = require('ReactPropTypes');
     *   var MyArticle = React.createClass({
     *     propTypes: {
     *       // An optional string prop named "description".
     *       description: Props.string,
     *
     *       // A required enum prop named "category".
     *       category: Props.oneOf(['News','Photos']).isRequired,
     *
     *       // A prop named "dialog" that requires an instance of Dialog.
     *       dialog: Props.instanceOf(Dialog).isRequired
     *     },
     *     render: function() { ... }
     *   });
     *
     * A more formal specification of how these methods are used:
     *
     *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
     *   decl := ReactPropTypes.{type}(.isRequired)?
     *
     * Each and every declaration produces a function with the same signature. This
     * allows the creation of custom validation functions. For example:
     *
     *  var MyLink = React.createClass({
     *    propTypes: {
     *      // An optional string or URI prop named "href".
     *      href: function(props, propName, componentName) {
     *        var propValue = props[propName];
     *        if (propValue != null && typeof propValue !== 'string' &&
     *            !(propValue instanceof URI)) {
     *          return new Error(
     *            'Expected a string or an URI for ' + propName + ' in ' +
     *            componentName
     *          );
     *        }
     *      }
     *    },
     *    render: function() {...}
     *  });
     *
     * @internal
     */

    var ANONYMOUS = '<<anonymous>>';

    // Important!
    // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
    var ReactPropTypes = {
      array: createPrimitiveTypeChecker('array'),
      bigint: createPrimitiveTypeChecker('bigint'),
      bool: createPrimitiveTypeChecker('boolean'),
      func: createPrimitiveTypeChecker('function'),
      number: createPrimitiveTypeChecker('number'),
      object: createPrimitiveTypeChecker('object'),
      string: createPrimitiveTypeChecker('string'),
      symbol: createPrimitiveTypeChecker('symbol'),

      any: createAnyTypeChecker(),
      arrayOf: createArrayOfTypeChecker,
      element: createElementTypeChecker(),
      elementType: createElementTypeTypeChecker(),
      instanceOf: createInstanceTypeChecker,
      node: createNodeChecker(),
      objectOf: createObjectOfTypeChecker,
      oneOf: createEnumTypeChecker,
      oneOfType: createUnionTypeChecker,
      shape: createShapeTypeChecker,
      exact: createStrictShapeTypeChecker,
    };

    /**
     * inlined Object.is polyfill to avoid requiring consumers ship their own
     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
     */
    /*eslint-disable no-self-compare*/
    function is(x, y) {
      // SameValue algorithm
      if (x === y) {
        // Steps 1-5, 7-10
        // Steps 6.b-6.e: +0 != -0
        return x !== 0 || 1 / x === 1 / y;
      } else {
        // Step 6.a: NaN == NaN
        return x !== x && y !== y;
      }
    }
    /*eslint-enable no-self-compare*/

    /**
     * We use an Error-like object for backward compatibility as people may call
     * PropTypes directly and inspect their output. However, we don't use real
     * Errors anymore. We don't inspect their stack anyway, and creating them
     * is prohibitively expensive if they are created too often, such as what
     * happens in oneOfType() for any type before the one that matched.
     */
    function PropTypeError(message, data) {
      this.message = message;
      this.data = data && typeof data === 'object' ? data: {};
      this.stack = '';
    }
    // Make `instanceof Error` still work for returned errors.
    PropTypeError.prototype = Error.prototype;

    function createChainableTypeChecker(validate) {
      {
        var manualPropTypeCallCache = {};
        var manualPropTypeWarningCount = 0;
      }
      function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
        componentName = componentName || ANONYMOUS;
        propFullName = propFullName || propName;

        if (secret !== ReactPropTypesSecret_1) {
          if (throwOnDirectAccess) {
            // New behavior only for users of `prop-types` package
            var err = new Error(
              'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
              'Use `PropTypes.checkPropTypes()` to call them. ' +
              'Read more at http://fb.me/use-check-prop-types'
            );
            err.name = 'Invariant Violation';
            throw err;
          } else if (typeof console !== 'undefined') {
            // Old behavior for people using React.PropTypes
            var cacheKey = componentName + ':' + propName;
            if (
              !manualPropTypeCallCache[cacheKey] &&
              // Avoid spamming the console because they are often not actionable except for lib authors
              manualPropTypeWarningCount < 3
            ) {
              printWarning(
                'You are manually calling a React.PropTypes validation ' +
                'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
                'and will throw in the standalone `prop-types` package. ' +
                'You may be seeing this warning due to a third-party PropTypes ' +
                'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
              );
              manualPropTypeCallCache[cacheKey] = true;
              manualPropTypeWarningCount++;
            }
          }
        }
        if (props[propName] == null) {
          if (isRequired) {
            if (props[propName] === null) {
              return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
            }
            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
          }
          return null;
        } else {
          return validate(props, propName, componentName, location, propFullName);
        }
      }

      var chainedCheckType = checkType.bind(null, false);
      chainedCheckType.isRequired = checkType.bind(null, true);

      return chainedCheckType;
    }

    function createPrimitiveTypeChecker(expectedType) {
      function validate(props, propName, componentName, location, propFullName, secret) {
        var propValue = props[propName];
        var propType = getPropType(propValue);
        if (propType !== expectedType) {
          // `propValue` being instance of, say, date/regexp, pass the 'object'
          // check, but we can offer a more precise error message here rather than
          // 'of type `object`'.
          var preciseType = getPreciseType(propValue);

          return new PropTypeError(
            'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
            {expectedType: expectedType}
          );
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createAnyTypeChecker() {
      return createChainableTypeChecker(emptyFunctionThatReturnsNull);
    }

    function createArrayOfTypeChecker(typeChecker) {
      function validate(props, propName, componentName, location, propFullName) {
        if (typeof typeChecker !== 'function') {
          return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
        }
        var propValue = props[propName];
        if (!Array.isArray(propValue)) {
          var propType = getPropType(propValue);
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
        }
        for (var i = 0; i < propValue.length; i++) {
          var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);
          if (error instanceof Error) {
            return error;
          }
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createElementTypeChecker() {
      function validate(props, propName, componentName, location, propFullName) {
        var propValue = props[propName];
        if (!isValidElement(propValue)) {
          var propType = getPropType(propValue);
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createElementTypeTypeChecker() {
      function validate(props, propName, componentName, location, propFullName) {
        var propValue = props[propName];
        if (!reactIs$2.isValidElementType(propValue)) {
          var propType = getPropType(propValue);
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createInstanceTypeChecker(expectedClass) {
      function validate(props, propName, componentName, location, propFullName) {
        if (!(props[propName] instanceof expectedClass)) {
          var expectedClassName = expectedClass.name || ANONYMOUS;
          var actualClassName = getClassName(props[propName]);
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createEnumTypeChecker(expectedValues) {
      if (!Array.isArray(expectedValues)) {
        {
          if (arguments.length > 1) {
            printWarning(
              'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
              'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
            );
          } else {
            printWarning('Invalid argument supplied to oneOf, expected an array.');
          }
        }
        return emptyFunctionThatReturnsNull;
      }

      function validate(props, propName, componentName, location, propFullName) {
        var propValue = props[propName];
        for (var i = 0; i < expectedValues.length; i++) {
          if (is(propValue, expectedValues[i])) {
            return null;
          }
        }

        var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
          var type = getPreciseType(value);
          if (type === 'symbol') {
            return String(value);
          }
          return value;
        });
        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
      }
      return createChainableTypeChecker(validate);
    }

    function createObjectOfTypeChecker(typeChecker) {
      function validate(props, propName, componentName, location, propFullName) {
        if (typeof typeChecker !== 'function') {
          return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
        }
        var propValue = props[propName];
        var propType = getPropType(propValue);
        if (propType !== 'object') {
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
        }
        for (var key in propValue) {
          if (has$1(propValue, key)) {
            var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);
            if (error instanceof Error) {
              return error;
            }
          }
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createUnionTypeChecker(arrayOfTypeCheckers) {
      if (!Array.isArray(arrayOfTypeCheckers)) {
        printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') ;
        return emptyFunctionThatReturnsNull;
      }

      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
        var checker = arrayOfTypeCheckers[i];
        if (typeof checker !== 'function') {
          printWarning(
            'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
            'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
          );
          return emptyFunctionThatReturnsNull;
        }
      }

      function validate(props, propName, componentName, location, propFullName) {
        var expectedTypes = [];
        for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
          var checker = arrayOfTypeCheckers[i];
          var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1);
          if (checkerResult == null) {
            return null;
          }
          if (checkerResult.data && has$1(checkerResult.data, 'expectedType')) {
            expectedTypes.push(checkerResult.data.expectedType);
          }
        }
        var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
      }
      return createChainableTypeChecker(validate);
    }

    function createNodeChecker() {
      function validate(props, propName, componentName, location, propFullName) {
        if (!isNode(props[propName])) {
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function invalidValidatorError(componentName, location, propFullName, key, type) {
      return new PropTypeError(
        (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
        'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
      );
    }

    function createShapeTypeChecker(shapeTypes) {
      function validate(props, propName, componentName, location, propFullName) {
        var propValue = props[propName];
        var propType = getPropType(propValue);
        if (propType !== 'object') {
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
        }
        for (var key in shapeTypes) {
          var checker = shapeTypes[key];
          if (typeof checker !== 'function') {
            return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
          }
          var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);
          if (error) {
            return error;
          }
        }
        return null;
      }
      return createChainableTypeChecker(validate);
    }

    function createStrictShapeTypeChecker(shapeTypes) {
      function validate(props, propName, componentName, location, propFullName) {
        var propValue = props[propName];
        var propType = getPropType(propValue);
        if (propType !== 'object') {
          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
        }
        // We need to check all keys in case some are required but missing from props.
        var allKeys = objectAssign({}, props[propName], shapeTypes);
        for (var key in allKeys) {
          var checker = shapeTypes[key];
          if (has$1(shapeTypes, key) && typeof checker !== 'function') {
            return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
          }
          if (!checker) {
            return new PropTypeError(
              'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
              '\nBad object: ' + JSON.stringify(props[propName], null, '  ') +
              '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')
            );
          }
          var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);
          if (error) {
            return error;
          }
        }
        return null;
      }

      return createChainableTypeChecker(validate);
    }

    function isNode(propValue) {
      switch (typeof propValue) {
        case 'number':
        case 'string':
        case 'undefined':
          return true;
        case 'boolean':
          return !propValue;
        case 'object':
          if (Array.isArray(propValue)) {
            return propValue.every(isNode);
          }
          if (propValue === null || isValidElement(propValue)) {
            return true;
          }

          var iteratorFn = getIteratorFn(propValue);
          if (iteratorFn) {
            var iterator = iteratorFn.call(propValue);
            var step;
            if (iteratorFn !== propValue.entries) {
              while (!(step = iterator.next()).done) {
                if (!isNode(step.value)) {
                  return false;
                }
              }
            } else {
              // Iterator will provide entry [k,v] tuples rather than values.
              while (!(step = iterator.next()).done) {
                var entry = step.value;
                if (entry) {
                  if (!isNode(entry[1])) {
                    return false;
                  }
                }
              }
            }
          } else {
            return false;
          }

          return true;
        default:
          return false;
      }
    }

    function isSymbol(propType, propValue) {
      // Native Symbol.
      if (propType === 'symbol') {
        return true;
      }

      // falsy value can't be a Symbol
      if (!propValue) {
        return false;
      }

      // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
      if (propValue['@@toStringTag'] === 'Symbol') {
        return true;
      }

      // Fallback for non-spec compliant Symbols which are polyfilled.
      if (typeof Symbol === 'function' && propValue instanceof Symbol) {
        return true;
      }

      return false;
    }

    // Equivalent of `typeof` but with special handling for array and regexp.
    function getPropType(propValue) {
      var propType = typeof propValue;
      if (Array.isArray(propValue)) {
        return 'array';
      }
      if (propValue instanceof RegExp) {
        // Old webkits (at least until Android 4.0) return 'function' rather than
        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
        // passes PropTypes.object.
        return 'object';
      }
      if (isSymbol(propType, propValue)) {
        return 'symbol';
      }
      return propType;
    }

    // This handles more types than `getPropType`. Only used for error messages.
    // See `createPrimitiveTypeChecker`.
    function getPreciseType(propValue) {
      if (typeof propValue === 'undefined' || propValue === null) {
        return '' + propValue;
      }
      var propType = getPropType(propValue);
      if (propType === 'object') {
        if (propValue instanceof Date) {
          return 'date';
        } else if (propValue instanceof RegExp) {
          return 'regexp';
        }
      }
      return propType;
    }

    // Returns a string that is postfixed to a warning about an invalid type.
    // For example, "undefined" or "of type array"
    function getPostfixForTypeWarning(value) {
      var type = getPreciseType(value);
      switch (type) {
        case 'array':
        case 'object':
          return 'an ' + type;
        case 'boolean':
        case 'date':
        case 'regexp':
          return 'a ' + type;
        default:
          return type;
      }
    }

    // Returns class name of the object, if any.
    function getClassName(propValue) {
      if (!propValue.constructor || !propValue.constructor.name) {
        return ANONYMOUS;
      }
      return propValue.constructor.name;
    }

    ReactPropTypes.checkPropTypes = checkPropTypes_1;
    ReactPropTypes.resetWarningCache = checkPropTypes_1.resetWarningCache;
    ReactPropTypes.PropTypes = ReactPropTypes;

    return ReactPropTypes;
  };

  var propTypes = createCommonjsModule(function (module) {
  /**
   * Copyright (c) 2013-present, Facebook, Inc.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */

  {
    var ReactIs = reactIs$2;

    // By explicitly using `prop-types` you are opting into new development behavior.
    // http://fb.me/prop-types-in-prod
    var throwOnDirectAccess = true;
    module.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess);
  }
  });

  var PropTypes = propTypes;
  propTypes.elementType;
  propTypes.bool;
  propTypes.func;
  propTypes.object;
  propTypes.oneOfType;
  propTypes.element;

  function isClassComponent$1(elementType) {
    // elementType.prototype?.isReactComponent
    const {
      prototype = {}
    } = elementType;
    return Boolean(prototype.isReactComponent);
  }
  function acceptingRef(props, propName, componentName, location, propFullName) {
    const element = props[propName];
    const safePropName = propFullName || propName;
    if (element == null ||
    // When server-side rendering React doesn't warn either.
    // This is not an accurate check for SSR.
    // This is only in place for Emotion compat.
    // TODO: Revisit once https://github.com/facebook/react/issues/20047 is resolved.
    typeof window === 'undefined') {
      return null;
    }
    let warningHint;
    const elementType = element.type;
    /**
     * Blacklisting instead of whitelisting
     *
     * Blacklisting will miss some components, such as React.Fragment. Those will at least
     * trigger a warning in React.
     * We can't whitelist because there is no safe way to detect React.forwardRef
     * or class components. "Safe" means there's no public API.
     *
     */
    if (typeof elementType === 'function' && !isClassComponent$1(elementType)) {
      warningHint = 'Did you accidentally use a plain function component for an element instead?';
    }
    if (warningHint !== undefined) {
      return new Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. ` + `Expected an element that can hold a ref. ${warningHint} ` + 'For more information see https://mui.com/r/caveat-with-refs-guide');
    }
    return null;
  }
  const elementAcceptingRef = chainPropTypes(PropTypes.element, acceptingRef);
  elementAcceptingRef.isRequired = chainPropTypes(PropTypes.element.isRequired, acceptingRef);
  var elementAcceptingRef$1 = elementAcceptingRef;

  function isClassComponent(elementType) {
    // elementType.prototype?.isReactComponent
    const {
      prototype = {}
    } = elementType;
    return Boolean(prototype.isReactComponent);
  }
  function elementTypeAcceptingRef(props, propName, componentName, location, propFullName) {
    const propValue = props[propName];
    const safePropName = propFullName || propName;
    if (propValue == null ||
    // When server-side rendering React doesn't warn either.
    // This is not an accurate check for SSR.
    // This is only in place for emotion compat.
    // TODO: Revisit once https://github.com/facebook/react/issues/20047 is resolved.
    typeof window === 'undefined') {
      return null;
    }
    let warningHint;

    /**
     * Blacklisting instead of whitelisting
     *
     * Blacklisting will miss some components, such as React.Fragment. Those will at least
     * trigger a warning in React.
     * We can't whitelist because there is no safe way to detect React.forwardRef
     * or class components. "Safe" means there's no public API.
     *
     */
    if (typeof propValue === 'function' && !isClassComponent(propValue)) {
      warningHint = 'Did you accidentally provide a plain function component instead?';
    }
    if (warningHint !== undefined) {
      return new Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. ` + `Expected an element type that can hold a ref. ${warningHint} ` + 'For more information see https://mui.com/r/caveat-with-refs-guide');
    }
    return null;
  }
  var elementTypeAcceptingRef$1 = chainPropTypes(PropTypes.elementType, elementTypeAcceptingRef);

  // This module is based on https://github.com/airbnb/prop-types-exact repository.
  // However, in order to reduce the number of dependencies and to remove some extra safe checks
  // the module was forked.

  const specialProperty = 'exact-prop: \u200b';
  function exactProp(propTypes) {
    return _extends({}, propTypes, {
      [specialProperty]: props => {
        const unsupportedProps = Object.keys(props).filter(prop => !propTypes.hasOwnProperty(prop));
        if (unsupportedProps.length > 0) {
          return new Error(`The following props are not supported: ${unsupportedProps.map(prop => `\`${prop}\``).join(', ')}. Please remove them.`);
        }
        return null;
      }
    });
  }

  var reactIs_development$1 = createCommonjsModule(function (module, exports) {

  {
    (function() {

  // ATTENTION
  // When adding new symbols to this file,
  // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
  // The Symbol used to tag the ReactElement-like types.
  var REACT_ELEMENT_TYPE = Symbol.for('react.element');
  var REACT_PORTAL_TYPE = Symbol.for('react.portal');
  var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
  var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
  var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
  var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
  var REACT_CONTEXT_TYPE = Symbol.for('react.context');
  var REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');
  var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
  var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
  var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
  var REACT_MEMO_TYPE = Symbol.for('react.memo');
  var REACT_LAZY_TYPE = Symbol.for('react.lazy');
  var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');

  // -----------------------------------------------------------------------------

  var enableScopeAPI = false; // Experimental Create Event Handle API.
  var enableCacheElement = false;
  var enableTransitionTracing = false; // No known bugs, but needs performance testing

  var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
  // stuff. Intended to enable React core members to more easily debug scheduling
  // issues in DEV builds.

  var enableDebugTracing = false; // Track which Fiber(s) schedule render work.

  var REACT_MODULE_REFERENCE;

  {
    REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
  }

  function isValidElementType(type) {
    if (typeof type === 'string' || typeof type === 'function') {
      return true;
    } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).


    if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {
      return true;
    }

    if (typeof type === 'object' && type !== null) {
      if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
      // types supported by any Flight configuration anywhere since
      // we don't know which Flight build this will end up being used
      // with.
      type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
        return true;
      }
    }

    return false;
  }

  function typeOf(object) {
    if (typeof object === 'object' && object !== null) {
      var $$typeof = object.$$typeof;

      switch ($$typeof) {
        case REACT_ELEMENT_TYPE:
          var type = object.type;

          switch (type) {
            case REACT_FRAGMENT_TYPE:
            case REACT_PROFILER_TYPE:
            case REACT_STRICT_MODE_TYPE:
            case REACT_SUSPENSE_TYPE:
            case REACT_SUSPENSE_LIST_TYPE:
              return type;

            default:
              var $$typeofType = type && type.$$typeof;

              switch ($$typeofType) {
                case REACT_SERVER_CONTEXT_TYPE:
                case REACT_CONTEXT_TYPE:
                case REACT_FORWARD_REF_TYPE:
                case REACT_LAZY_TYPE:
                case REACT_MEMO_TYPE:
                case REACT_PROVIDER_TYPE:
                  return $$typeofType;

                default:
                  return $$typeof;
              }

          }

        case REACT_PORTAL_TYPE:
          return $$typeof;
      }
    }

    return undefined;
  }
  var ContextConsumer = REACT_CONTEXT_TYPE;
  var ContextProvider = REACT_PROVIDER_TYPE;
  var Element = REACT_ELEMENT_TYPE;
  var ForwardRef = REACT_FORWARD_REF_TYPE;
  var Fragment = REACT_FRAGMENT_TYPE;
  var Lazy = REACT_LAZY_TYPE;
  var Memo = REACT_MEMO_TYPE;
  var Portal = REACT_PORTAL_TYPE;
  var Profiler = REACT_PROFILER_TYPE;
  var StrictMode = REACT_STRICT_MODE_TYPE;
  var Suspense = REACT_SUSPENSE_TYPE;
  var SuspenseList = REACT_SUSPENSE_LIST_TYPE;
  var hasWarnedAboutDeprecatedIsAsyncMode = false;
  var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated

  function isAsyncMode(object) {
    {
      if (!hasWarnedAboutDeprecatedIsAsyncMode) {
        hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint

        console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');
      }
    }

    return false;
  }
  function isConcurrentMode(object) {
    {
      if (!hasWarnedAboutDeprecatedIsConcurrentMode) {
        hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint

        console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');
      }
    }

    return false;
  }
  function isContextConsumer(object) {
    return typeOf(object) === REACT_CONTEXT_TYPE;
  }
  function isContextProvider(object) {
    return typeOf(object) === REACT_PROVIDER_TYPE;
  }
  function isElement(object) {
    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  }
  function isForwardRef(object) {
    return typeOf(object) === REACT_FORWARD_REF_TYPE;
  }
  function isFragment(object) {
    return typeOf(object) === REACT_FRAGMENT_TYPE;
  }
  function isLazy(object) {
    return typeOf(object) === REACT_LAZY_TYPE;
  }
  function isMemo(object) {
    return typeOf(object) === REACT_MEMO_TYPE;
  }
  function isPortal(object) {
    return typeOf(object) === REACT_PORTAL_TYPE;
  }
  function isProfiler(object) {
    return typeOf(object) === REACT_PROFILER_TYPE;
  }
  function isStrictMode(object) {
    return typeOf(object) === REACT_STRICT_MODE_TYPE;
  }
  function isSuspense(object) {
    return typeOf(object) === REACT_SUSPENSE_TYPE;
  }
  function isSuspenseList(object) {
    return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
  }

  exports.ContextConsumer = ContextConsumer;
  exports.ContextProvider = ContextProvider;
  exports.Element = Element;
  exports.ForwardRef = ForwardRef;
  exports.Fragment = Fragment;
  exports.Lazy = Lazy;
  exports.Memo = Memo;
  exports.Portal = Portal;
  exports.Profiler = Profiler;
  exports.StrictMode = StrictMode;
  exports.Suspense = Suspense;
  exports.SuspenseList = SuspenseList;
  exports.isAsyncMode = isAsyncMode;
  exports.isConcurrentMode = isConcurrentMode;
  exports.isContextConsumer = isContextConsumer;
  exports.isContextProvider = isContextProvider;
  exports.isElement = isElement;
  exports.isForwardRef = isForwardRef;
  exports.isFragment = isFragment;
  exports.isLazy = isLazy;
  exports.isMemo = isMemo;
  exports.isPortal = isPortal;
  exports.isProfiler = isProfiler;
  exports.isStrictMode = isStrictMode;
  exports.isSuspense = isSuspense;
  exports.isSuspenseList = isSuspenseList;
  exports.isValidElementType = isValidElementType;
  exports.typeOf = typeOf;
    })();
  }
  });
  reactIs_development$1.ContextConsumer;
  reactIs_development$1.ContextProvider;
  reactIs_development$1.Element;
  reactIs_development$1.ForwardRef;
  reactIs_development$1.Fragment;
  reactIs_development$1.Lazy;
  reactIs_development$1.Memo;
  reactIs_development$1.Portal;
  reactIs_development$1.Profiler;
  reactIs_development$1.StrictMode;
  reactIs_development$1.Suspense;
  reactIs_development$1.SuspenseList;
  reactIs_development$1.isAsyncMode;
  reactIs_development$1.isConcurrentMode;
  reactIs_development$1.isContextConsumer;
  reactIs_development$1.isContextProvider;
  reactIs_development$1.isElement;
  reactIs_development$1.isForwardRef;
  reactIs_development$1.isFragment;
  reactIs_development$1.isLazy;
  reactIs_development$1.isMemo;
  reactIs_development$1.isPortal;
  reactIs_development$1.isProfiler;
  reactIs_development$1.isStrictMode;
  reactIs_development$1.isSuspense;
  reactIs_development$1.isSuspenseList;
  reactIs_development$1.isValidElementType;
  reactIs_development$1.typeOf;

  var reactIs$1 = createCommonjsModule(function (module) {

  {
    module.exports = reactIs_development$1;
  }
  });
  var reactIs_1 = reactIs$1.ForwardRef;
  var reactIs_2 = reactIs$1.isFragment;
  reactIs$1.isLazy;
  reactIs$1.isMemo;
  var reactIs_5 = reactIs$1.Memo;
  reactIs$1.isValidElementType;

  // Simplified polyfill for IE11 support
  // https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3
  const fnNameMatchRegex = /^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;
  function getFunctionName(fn) {
    const match = `${fn}`.match(fnNameMatchRegex);
    const name = match && match[1];
    return name || '';
  }
  function getFunctionComponentName(Component, fallback = '') {
    return Component.displayName || Component.name || getFunctionName(Component) || fallback;
  }
  function getWrappedName(outerType, innerType, wrapperName) {
    const functionName = getFunctionComponentName(innerType);
    return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);
  }

  /**
   * cherry-pick from
   * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js
   * originally forked from recompose/getDisplayName with added IE11 support
   */
  function getDisplayName(Component) {
    if (Component == null) {
      return undefined;
    }
    if (typeof Component === 'string') {
      return Component;
    }
    if (typeof Component === 'function') {
      return getFunctionComponentName(Component, 'Component');
    }

    // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`
    if (typeof Component === 'object') {
      switch (Component.$$typeof) {
        case reactIs_1:
          return getWrappedName(Component, Component.render, 'ForwardRef');
        case reactIs_5:
          return getWrappedName(Component, Component.type, 'memo');
        default:
          return undefined;
      }
    }
    return undefined;
  }

  function HTMLElementType(props, propName, componentName, location, propFullName) {
    const propValue = props[propName];
    const safePropName = propFullName || propName;
    if (propValue == null) {
      return null;
    }
    if (propValue && propValue.nodeType !== 1) {
      return new Error(`Invalid ${location} \`${safePropName}\` supplied to \`${componentName}\`. ` + `Expected an HTMLElement.`);
    }
    return null;
  }

  const refType = PropTypes.oneOfType([PropTypes.func, PropTypes.object]);
  var refType$1 = refType;

  // It should to be noted that this function isn't equivalent to `text-transform: capitalize`.
  //
  // A strict capitalization should uppercase the first letter of each word in the sentence.
  // We only handle the first word.
  function capitalize(string) {
    if (typeof string !== 'string') {
      throw new Error(`MUI: \`capitalize(string)\` expects a string argument.` );
    }
    return string.charAt(0).toUpperCase() + string.slice(1);
  }

  /**
   * Safe chained function.
   *
   * Will only create a new function if needed,
   * otherwise will pass back existing functions or null.
   */
  function createChainedFunction(...funcs) {
    return funcs.reduce((acc, func) => {
      if (func == null) {
        return acc;
      }
      return function chainedFunction(...args) {
        acc.apply(this, args);
        func.apply(this, args);
      };
    }, () => {});
  }

  // Corresponds to 10 frames at 60 Hz.
  // A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.
  function debounce$1(func, wait = 166) {
    let timeout;
    function debounced(...args) {
      const later = () => {
        // @ts-ignore
        func.apply(this, args);
      };
      clearTimeout(timeout);
      timeout = setTimeout(later, wait);
    }
    debounced.clear = () => {
      clearTimeout(timeout);
    };
    return debounced;
  }

  function deprecatedPropType(validator, reason) {
    return (props, propName, componentName, location, propFullName) => {
      const componentNameSafe = componentName || '<<anonymous>>';
      const propFullNameSafe = propFullName || propName;
      if (typeof props[propName] !== 'undefined') {
        return new Error(`The ${location} \`${propFullNameSafe}\` of ` + `\`${componentNameSafe}\` is deprecated. ${reason}`);
      }
      return null;
    };
  }

  function isMuiElement(element, muiNames) {
    var _muiName, _element$type;
    return /*#__PURE__*/React__namespace.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName
    // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45
    // eslint-disable-next-line no-underscore-dangle
    (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;
  }

  function ownerDocument(node) {
    return node && node.ownerDocument || document;
  }

  function ownerWindow(node) {
    const doc = ownerDocument(node);
    return doc.defaultView || window;
  }

  function requirePropFactory(componentNameInError, Component) {

    // eslint-disable-next-line react/forbid-foreign-prop-types
    const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;
    const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {
      const propFullNameSafe = propFullName || propName;
      const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];
      if (defaultTypeChecker) {
        const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);
        if (typeCheckerResult) {
          return typeCheckerResult;
        }
      }
      if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {
        return new Error(`The prop \`${propFullNameSafe}\` of ` + `\`${componentNameInError}\` can only be used together with the \`${requiredProp}\` prop.`);
      }
      return null;
    };
    return requireProp;
  }

  /**
   * TODO v5: consider making it private
   *
   * passes {value} to {ref}
   *
   * WARNING: Be sure to only call this inside a callback that is passed as a ref.
   * Otherwise, make sure to cleanup the previous {ref} if it changes. See
   * https://github.com/mui/material-ui/issues/13539
   *
   * Useful if you want to expose the ref of an inner component to the public API
   * while still using it inside the component.
   * @param ref A ref callback or ref object. If anything falsy, this is a no-op.
   */
  function setRef(ref, value) {
    if (typeof ref === 'function') {
      ref(value);
    } else if (ref) {
      ref.current = value;
    }
  }

  /**
   * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.
   * This is useful for effects that are only needed for client-side rendering but not for SSR.
   *
   * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85
   * and confirm it doesn't apply to your use-case.
   */
  const useEnhancedEffect = typeof window !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
  var useEnhancedEffect$1 = useEnhancedEffect;

  let globalId = 0;
  function useGlobalId(idOverride) {
    const [defaultId, setDefaultId] = React__namespace.useState(idOverride);
    const id = idOverride || defaultId;
    React__namespace.useEffect(() => {
      if (defaultId == null) {
        // Fallback to this default id when possible.
        // Use the incrementing value for client-side rendering only.
        // We can't use it server-side.
        // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem
        globalId += 1;
        setDefaultId(`mui-${globalId}`);
      }
    }, [defaultId]);
    return id;
  }

  // downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814
  const maybeReactUseId = React__namespace['useId'.toString()];
  /**
   *
   * @example <div id={useId()} />
   * @param idOverride
   * @returns {string}
   */
  function useId(idOverride) {
    if (maybeReactUseId !== undefined) {
      const reactId = maybeReactUseId();
      return idOverride != null ? idOverride : reactId;
    }
    // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.
    return useGlobalId(idOverride);
  }

  function unsupportedProp(props, propName, componentName, location, propFullName) {
    const propFullNameSafe = propFullName || propName;
    if (typeof props[propName] !== 'undefined') {
      return new Error(`The prop \`${propFullNameSafe}\` is not supported. Please remove it.`);
    }
    return null;
  }

  function useControlled({
    controlled,
    default: defaultProp,
    name,
    state = 'value'
  }) {
    // isControlled is ignored in the hook dependency lists as it should never change.
    const {
      current: isControlled
    } = React__namespace.useRef(controlled !== undefined);
    const [valueState, setValue] = React__namespace.useState(defaultProp);
    const value = isControlled ? controlled : valueState;
    {
      React__namespace.useEffect(() => {
        if (isControlled !== (controlled !== undefined)) {
          console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
        }
      }, [state, name, controlled]);
      const {
        current: defaultValue
      } = React__namespace.useRef(defaultProp);
      React__namespace.useEffect(() => {
        if (!isControlled && defaultValue !== defaultProp) {
          console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\n'));
        }
      }, [JSON.stringify(defaultProp)]);
    }
    const setValueIfUncontrolled = React__namespace.useCallback(newValue => {
      if (!isControlled) {
        setValue(newValue);
      }
    }, []);
    return [value, setValueIfUncontrolled];
  }

  /**
   * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892
   * See RFC in https://github.com/reactjs/rfcs/pull/220
   */

  function useEventCallback(fn) {
    const ref = React__namespace.useRef(fn);
    useEnhancedEffect$1(() => {
      ref.current = fn;
    });
    return React__namespace.useRef((...args) =>
    // @ts-expect-error hide `this`
    (0, ref.current)(...args)).current;
  }

  function useForkRef(...refs) {
    /**
     * This will create a new function if the refs passed to this hook change and are all defined.
     * This means react will call the old forkRef with `null` and the new forkRef
     * with the ref. Cleanup naturally emerges from this behavior.
     */
    return React__namespace.useMemo(() => {
      if (refs.every(ref => ref == null)) {
        return null;
      }
      return instance => {
        refs.forEach(ref => {
          setRef(ref, instance);
        });
      };
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, refs);
  }

  let hadKeyboardEvent = true;
  let hadFocusVisibleRecently = false;
  let hadFocusVisibleRecentlyTimeout;
  const inputTypesWhitelist = {
    text: true,
    search: true,
    url: true,
    tel: true,
    email: true,
    password: true,
    number: true,
    date: true,
    month: true,
    week: true,
    time: true,
    datetime: true,
    'datetime-local': true
  };

  /**
   * Computes whether the given element should automatically trigger the
   * `focus-visible` class being added, i.e. whether it should always match
   * `:focus-visible` when focused.
   * @param {Element} node
   * @returns {boolean}
   */
  function focusTriggersKeyboardModality(node) {
    const {
      type,
      tagName
    } = node;
    if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {
      return true;
    }
    if (tagName === 'TEXTAREA' && !node.readOnly) {
      return true;
    }
    if (node.isContentEditable) {
      return true;
    }
    return false;
  }

  /**
   * Keep track of our keyboard modality state with `hadKeyboardEvent`.
   * If the most recent user interaction was via the keyboard;
   * and the key press did not include a meta, alt/option, or control key;
   * then the modality is keyboard. Otherwise, the modality is not keyboard.
   * @param {KeyboardEvent} event
   */
  function handleKeyDown(event) {
    if (event.metaKey || event.altKey || event.ctrlKey) {
      return;
    }
    hadKeyboardEvent = true;
  }

  /**
   * If at any point a user clicks with a pointing device, ensure that we change
   * the modality away from keyboard.
   * This avoids the situation where a user presses a key on an already focused
   * element, and then clicks on a different element, focusing it with a
   * pointing device, while we still think we're in keyboard modality.
   */
  function handlePointerDown() {
    hadKeyboardEvent = false;
  }
  function handleVisibilityChange() {
    if (this.visibilityState === 'hidden') {
      // If the tab becomes active again, the browser will handle calling focus
      // on the element (Safari actually calls it twice).
      // If this tab change caused a blur on an element with focus-visible,
      // re-apply the class when the user switches back to the tab.
      if (hadFocusVisibleRecently) {
        hadKeyboardEvent = true;
      }
    }
  }
  function prepare(doc) {
    doc.addEventListener('keydown', handleKeyDown, true);
    doc.addEventListener('mousedown', handlePointerDown, true);
    doc.addEventListener('pointerdown', handlePointerDown, true);
    doc.addEventListener('touchstart', handlePointerDown, true);
    doc.addEventListener('visibilitychange', handleVisibilityChange, true);
  }
  function isFocusVisible(event) {
    const {
      target
    } = event;
    try {
      return target.matches(':focus-visible');
    } catch (error) {
      // Browsers not implementing :focus-visible will throw a SyntaxError.
      // We use our own heuristic for those browsers.
      // Rethrow might be better if it's not the expected error but do we really
      // want to crash if focus-visible malfunctioned?
    }

    // No need for validFocusTarget check. The user does that by attaching it to
    // focusable events only.
    return hadKeyboardEvent || focusTriggersKeyboardModality(target);
  }
  function useIsFocusVisible() {
    const ref = React__namespace.useCallback(node => {
      if (node != null) {
        prepare(node.ownerDocument);
      }
    }, []);
    const isFocusVisibleRef = React__namespace.useRef(false);

    /**
     * Should be called if a blur event is fired
     */
    function handleBlurVisible() {
      // checking against potential state variable does not suffice if we focus and blur synchronously.
      // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.
      // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.
      // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751
      // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).
      if (isFocusVisibleRef.current) {
        // To detect a tab/window switch, we look for a blur event followed
        // rapidly by a visibility change.
        // If we don't see a visibility change within 100ms, it's probably a
        // regular focus change.
        hadFocusVisibleRecently = true;
        window.clearTimeout(hadFocusVisibleRecentlyTimeout);
        hadFocusVisibleRecentlyTimeout = window.setTimeout(() => {
          hadFocusVisibleRecently = false;
        }, 100);
        isFocusVisibleRef.current = false;
        return true;
      }
      return false;
    }

    /**
     * Should be called if a blur event is fired
     */
    function handleFocusVisible(event) {
      if (isFocusVisible(event)) {
        isFocusVisibleRef.current = true;
        return true;
      }
      return false;
    }
    return {
      isFocusVisibleRef,
      onFocus: handleFocusVisible,
      onBlur: handleBlurVisible,
      ref
    };
  }

  // A change of the browser zoom change the scrollbar size.
  // Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18
  function getScrollbarSize(doc) {
    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
    const documentWidth = doc.documentElement.clientWidth;
    return Math.abs(window.innerWidth - documentWidth);
  }

  // Source from https://github.com/alitaheri/normalize-scroll-left
  let cachedType;

  /**
   * Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type
   *
   * Types of scrollLeft, assuming scrollWidth=100 and direction is rtl.
   *
   * Type             | <- Most Left | Most Right -> | Initial
   * ---------------- | ------------ | ------------- | -------
   * default          | 0            | 100           | 100
   * negative (spec*) | -100         | 0             | 0
   * reverse          | 100          | 0             | 0
   *
   * Edge 85: default
   * Safari 14: negative
   * Chrome 85: negative
   * Firefox 81: negative
   * IE11: reverse
   *
   * spec* https://drafts.csswg.org/cssom-view/#dom-window-scroll
   */
  function detectScrollType() {
    if (cachedType) {
      return cachedType;
    }
    const dummy = document.createElement('div');
    const container = document.createElement('div');
    container.style.width = '10px';
    container.style.height = '1px';
    dummy.appendChild(container);
    dummy.dir = 'rtl';
    dummy.style.fontSize = '14px';
    dummy.style.width = '4px';
    dummy.style.height = '1px';
    dummy.style.position = 'absolute';
    dummy.style.top = '-1000px';
    dummy.style.overflow = 'scroll';
    document.body.appendChild(dummy);
    cachedType = 'reverse';
    if (dummy.scrollLeft > 0) {
      cachedType = 'default';
    } else {
      dummy.scrollLeft = 1;
      if (dummy.scrollLeft === 0) {
        cachedType = 'negative';
      }
    }
    document.body.removeChild(dummy);
    return cachedType;
  }

  // Based on https://stackoverflow.com/a/24394376
  function getNormalizedScrollLeft(element, direction) {
    const scrollLeft = element.scrollLeft;

    // Perform the calculations only when direction is rtl to avoid messing up the ltr behavior
    if (direction !== 'rtl') {
      return scrollLeft;
    }
    const type = detectScrollType();
    switch (type) {
      case 'negative':
        return element.scrollWidth - element.clientWidth + scrollLeft;
      case 'reverse':
        return element.scrollWidth - element.clientWidth - scrollLeft;
      default:
        return scrollLeft;
    }
  }

  const usePreviousProps = value => {
    const ref = React__namespace.useRef({});
    React__namespace.useEffect(() => {
      ref.current = value;
    });
    return ref.current;
  };
  var usePreviousProps$1 = usePreviousProps;

  /**
   * Gets only the valid children of a component,
   * and ignores any nullish or falsy child.
   *
   * @param children the children
   */
  function getValidReactChildren(children) {
    return React__namespace.Children.toArray(children).filter(child => /*#__PURE__*/React__namespace.isValidElement(child));
  }

  const visuallyHidden = {
    border: 0,
    clip: 'rect(0 0 0 0)',
    height: '1px',
    margin: -1,
    overflow: 'hidden',
    padding: 0,
    position: 'absolute',
    whiteSpace: 'nowrap',
    width: '1px'
  };
  var visuallyHidden$1 = visuallyHidden;

  function getTypeByValue(value) {
    const valueType = typeof value;
    switch (valueType) {
      case 'number':
        if (Number.isNaN(value)) {
          return 'NaN';
        }
        if (!Number.isFinite(value)) {
          return 'Infinity';
        }
        if (value !== Math.floor(value)) {
          return 'float';
        }
        return 'number';
      case 'object':
        if (value === null) {
          return 'null';
        }
        return value.constructor.name;
      default:
        return valueType;
    }
  }

  // IE 11 support
  function ponyfillIsInteger(x) {
    // eslint-disable-next-line no-restricted-globals
    return typeof x === 'number' && isFinite(x) && Math.floor(x) === x;
  }
  const isInteger = Number.isInteger || ponyfillIsInteger;
  function requiredInteger(props, propName, componentName, location) {
    const propValue = props[propName];
    if (propValue == null || !isInteger(propValue)) {
      const propType = getTypeByValue(propValue);
      return new RangeError(`Invalid ${location} \`${propName}\` of type \`${propType}\` supplied to \`${componentName}\`, expected \`integer\`.`);
    }
    return null;
  }
  function validator(props, propName, ...other) {
    const propValue = props[propName];
    if (propValue === undefined) {
      return null;
    }
    return requiredInteger(props, propName, ...other);
  }
  function validatorNoop() {
    return null;
  }
  validator.isRequired = requiredInteger;
  validatorNoop.isRequired = validatorNoop;
  var integerPropType = validator;

  /**
   * Add keys, values of `defaultProps` that does not exist in `props`
   * @param {object} defaultProps
   * @param {object} props
   * @returns {object} resolved props
   */
  function resolveProps(defaultProps, props) {
    const output = _extends({}, props);
    Object.keys(defaultProps).forEach(propName => {
      if (propName.toString().match(/^(components|slots)$/)) {
        output[propName] = _extends({}, defaultProps[propName], output[propName]);
      } else if (propName.toString().match(/^(componentsProps|slotProps)$/)) {
        const defaultSlotProps = defaultProps[propName] || {};
        const slotProps = props[propName];
        output[propName] = {};
        if (!slotProps || !Object.keys(slotProps)) {
          // Reduce the iteration if the slot props is empty
          output[propName] = defaultSlotProps;
        } else if (!defaultSlotProps || !Object.keys(defaultSlotProps)) {
          // Reduce the iteration if the default slot props is empty
          output[propName] = slotProps;
        } else {
          output[propName] = _extends({}, slotProps);
          Object.keys(defaultSlotProps).forEach(slotPropName => {
            output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName]);
          });
        }
      } else if (output[propName] === undefined) {
        output[propName] = defaultProps[propName];
      }
    });
    return output;
  }

  function composeClasses(slots, getUtilityClass, classes = undefined) {
    const output = {};
    Object.keys(slots).forEach(
    // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.
    // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208
    slot => {
      output[slot] = slots[slot].reduce((acc, key) => {
        if (key) {
          const utilityClass = getUtilityClass(key);
          if (utilityClass !== '') {
            acc.push(utilityClass);
          }
          if (classes && classes[key]) {
            acc.push(classes[key]);
          }
        }
        return acc;
      }, []).join(' ');
    });
    return output;
  }

  const defaultGenerator = componentName => componentName;
  const createClassNameGenerator = () => {
    let generate = defaultGenerator;
    return {
      configure(generator) {
        generate = generator;
      },
      generate(componentName) {
        return generate(componentName);
      },
      reset() {
        generate = defaultGenerator;
      }
    };
  };
  const ClassNameGenerator = createClassNameGenerator();
  var ClassNameGenerator$1 = ClassNameGenerator;

  // If GlobalStateSlot is changed, GLOBAL_STATE_CLASSES in
  // \packages\api-docs-builder\utils\parseSlotsAndClasses.ts must be updated accordingly.

  const globalStateClassesMapping = {
    active: 'active',
    checked: 'checked',
    completed: 'completed',
    disabled: 'disabled',
    error: 'error',
    expanded: 'expanded',
    focused: 'focused',
    focusVisible: 'focusVisible',
    open: 'open',
    readOnly: 'readOnly',
    required: 'required',
    selected: 'selected'
  };
  function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {
    const globalStateClass = globalStateClassesMapping[slot];
    return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator$1.generate(componentName)}-${slot}`;
  }

  function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {
    const result = {};
    slots.forEach(slot => {
      result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);
    });
    return result;
  }

  var THEME_ID = '$$material';

  function _objectWithoutPropertiesLoose(source, excluded) {
    if (source == null) return {};
    var target = {};
    var sourceKeys = Object.keys(source);
    var key, i;
    for (i = 0; i < sourceKeys.length; i++) {
      key = sourceKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      target[key] = source[key];
    }
    return target;
  }

  function memoize$1(fn) {
    var cache = Object.create(null);
    return function (arg) {
      if (cache[arg] === undefined) cache[arg] = fn(arg);
      return cache[arg];
    };
  }

  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|download|draggable|encType|enterKeyHint|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

  var isPropValid = /* #__PURE__ */memoize$1(function (prop) {
    return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111
    /* o */
    && prop.charCodeAt(1) === 110
    /* n */
    && prop.charCodeAt(2) < 91;
  }
  /* Z+1 */
  );

  /*

  Based off glamor's StyleSheet, thanks Sunil ❤️

  high performance StyleSheet for css-in-js systems

  - uses multiple style tags behind the scenes for millions of rules
  - uses `insertRule` for appending in production for *much* faster performance

  // usage

  import { StyleSheet } from '@emotion/sheet'

  let styleSheet = new StyleSheet({ key: '', container: document.head })

  styleSheet.insert('#box { border: 1px solid red; }')
  - appends a css rule into the stylesheet

  styleSheet.flush()
  - empties the stylesheet of all its contents

  */
  // $FlowFixMe
  function sheetForTag(tag) {
    if (tag.sheet) {
      // $FlowFixMe
      return tag.sheet;
    } // this weirdness brought to you by firefox

    /* istanbul ignore next */


    for (var i = 0; i < document.styleSheets.length; i++) {
      if (document.styleSheets[i].ownerNode === tag) {
        // $FlowFixMe
        return document.styleSheets[i];
      }
    }
  }

  function createStyleElement(options) {
    var tag = document.createElement('style');
    tag.setAttribute('data-emotion', options.key);

    if (options.nonce !== undefined) {
      tag.setAttribute('nonce', options.nonce);
    }

    tag.appendChild(document.createTextNode(''));
    tag.setAttribute('data-s', '');
    return tag;
  }

  var StyleSheet = /*#__PURE__*/function () {
    // Using Node instead of HTMLElement since container may be a ShadowRoot
    function StyleSheet(options) {
      var _this = this;

      this._insertTag = function (tag) {
        var before;

        if (_this.tags.length === 0) {
          if (_this.insertionPoint) {
            before = _this.insertionPoint.nextSibling;
          } else if (_this.prepend) {
            before = _this.container.firstChild;
          } else {
            before = _this.before;
          }
        } else {
          before = _this.tags[_this.tags.length - 1].nextSibling;
        }

        _this.container.insertBefore(tag, before);

        _this.tags.push(tag);
      };

      this.isSpeedy = options.speedy === undefined ? "development" === 'production' : options.speedy;
      this.tags = [];
      this.ctr = 0;
      this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets

      this.key = options.key;
      this.container = options.container;
      this.prepend = options.prepend;
      this.insertionPoint = options.insertionPoint;
      this.before = null;
    }

    var _proto = StyleSheet.prototype;

    _proto.hydrate = function hydrate(nodes) {
      nodes.forEach(this._insertTag);
    };

    _proto.insert = function insert(rule) {
      // the max length is how many rules we have per style tag, it's 65000 in speedy mode
      // it's 1 in dev because we insert source maps that map a single rule to a location
      // and you can only have one source map per style tag
      if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {
        this._insertTag(createStyleElement(this));
      }

      var tag = this.tags[this.tags.length - 1];

      {
        var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;

        if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {
          // this would only cause problem in speedy mode
          // but we don't want enabling speedy to affect the observable behavior
          // so we report this error at all times
          console.error("You're attempting to insert the following rule:\n" + rule + '\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');
        }
        this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;
      }

      if (this.isSpeedy) {
        var sheet = sheetForTag(tag);

        try {
          // this is the ultrafast version, works across browsers
          // the big drawback is that the css won't be editable in devtools
          sheet.insertRule(rule, sheet.cssRules.length);
        } catch (e) {
          if (!/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) {
            console.error("There was a problem inserting the following rule: \"" + rule + "\"", e);
          }
        }
      } else {
        tag.appendChild(document.createTextNode(rule));
      }

      this.ctr++;
    };

    _proto.flush = function flush() {
      // $FlowFixMe
      this.tags.forEach(function (tag) {
        return tag.parentNode && tag.parentNode.removeChild(tag);
      });
      this.tags = [];
      this.ctr = 0;

      {
        this._alreadyInsertedOrderInsensitiveRule = false;
      }
    };

    return StyleSheet;
  }();

  var e="-ms-";var r$1="-moz-";var a="-webkit-";var n="comm";var c="rule";var s="decl";var i="@import";var h="@keyframes";var $="@layer";var g=Math.abs;var k=String.fromCharCode;var m=Object.assign;function x(e,r){return O(e,0)^45?(((r<<2^O(e,0))<<2^O(e,1))<<2^O(e,2))<<2^O(e,3):0}function y(e){return e.trim()}function j(e,r){return (e=r.exec(e))?e[0]:e}function z(e,r,a){return e.replace(r,a)}function C(e,r){return e.indexOf(r)}function O(e,r){return e.charCodeAt(r)|0}function A(e,r,a){return e.slice(r,a)}function M(e){return e.length}function S(e){return e.length}function q(e,r){return r.push(e),e}function B(e,r){return e.map(r).join("")}var D=1;var E=1;var F=0;var G=0;var H=0;var I="";function J(e,r,a,n,c,s,t){return {value:e,root:r,parent:a,type:n,props:c,children:s,line:D,column:E,length:t,return:""}}function K(e,r){return m(J("",null,null,"",null,null,0),e,{length:-e.length},r)}function L(){return H}function N(){H=G>0?O(I,--G):0;if(E--,H===10)E=1,D--;return H}function P(){H=G<F?O(I,G++):0;if(E++,H===10)E=1,D++;return H}function Q(){return O(I,G)}function R(){return G}function T(e,r){return A(I,e,r)}function U(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function V(e){return D=E=1,F=M(I=e),G=0,[]}function W(e){return I="",e}function X(e){return y(T(G-1,re(e===91?e+2:e===40?e+1:e)))}function Z(e){while(H=Q())if(H<33)P();else break;return U(e)>2||U(H)>3?"":" "}function ee(e,r){while(--r&&P())if(H<48||H>102||H>57&&H<65||H>70&&H<97)break;return T(e,R()+(r<6&&Q()==32&&P()==32))}function re(e){while(P())switch(H){case e:return G;case 34:case 39:if(e!==34&&e!==39)re(H);break;case 40:if(e===41)re(e);break;case 92:P();break}return G}function ae(e,r){while(P())if(e+H===47+10)break;else if(e+H===42+42&&Q()===47)break;return "/*"+T(r,G-1)+"*"+k(e===47?e:P())}function ne(e){while(!U(Q()))P();return T(e,G)}function ce(e){return W(se("",null,null,null,[""],e=V(e),0,[0],e))}function se(e,r,a,n,c,s,t,u,i){var f=0;var o=0;var l=t;var v=0;var p=0;var h=0;var b=1;var w=1;var d=1;var $=0;var g="";var m=c;var x=s;var y=n;var j=g;while(w)switch(h=$,$=P()){case 40:if(h!=108&&O(j,l-1)==58){if(C(j+=z(X($),"&","&\f"),"&\f")!=-1)d=-1;break}case 34:case 39:case 91:j+=X($);break;case 9:case 10:case 13:case 32:j+=Z(h);break;case 92:j+=ee(R()-1,7);continue;case 47:switch(Q()){case 42:case 47:q(ue(ae(P(),R()),r,a),i);break;default:j+="/";}break;case 123*b:u[f++]=M(j)*d;case 125*b:case 59:case 0:switch($){case 0:case 125:w=0;case 59+o:if(d==-1)j=z(j,/\f/g,"");if(p>0&&M(j)-l)q(p>32?ie(j+";",n,a,l-1):ie(z(j," ","")+";",n,a,l-2),i);break;case 59:j+=";";default:q(y=te(j,r,a,f,o,c,u,g,m=[],x=[],l),s);if($===123)if(o===0)se(j,r,y,y,m,s,l,u,x);else switch(v===99&&O(j,3)===110?100:v){case 100:case 108:case 109:case 115:se(e,y,y,n&&q(te(e,y,y,0,0,c,u,g,c,m=[],l),x),c,x,l,u,n?m:x);break;default:se(j,y,y,y,[""],x,0,u,x);}}f=o=p=0,b=d=1,g=j="",l=t;break;case 58:l=1+M(j),p=h;default:if(b<1)if($==123)--b;else if($==125&&b++==0&&N()==125)continue;switch(j+=k($),$*b){case 38:d=o>0?1:(j+="\f",-1);break;case 44:u[f++]=(M(j)-1)*d,d=1;break;case 64:if(Q()===45)j+=X(P());v=Q(),o=l=M(g=j+=ne(R())),$++;break;case 45:if(h===45&&M(j)==2)b=0;}}return s}function te(e,r,a,n,s,t,u,i,f,o,l){var v=s-1;var p=s===0?t:[""];var h=S(p);for(var b=0,w=0,d=0;b<n;++b)for(var $=0,k=A(e,v+1,v=g(w=u[b])),m=e;$<h;++$)if(m=y(w>0?p[$]+" "+k:z(k,/&\f/g,p[$])))f[d++]=m;return J(e,r,a,s===0?c:i,f,o,l)}function ue(e,r,a){return J(e,r,a,n,k(L()),A(e,2,-2),0)}function ie(e,r,a,n){return J(e,r,a,s,A(e,0,n),A(e,n+1,-1),n)}function oe(e,r){var a="";var n=S(e);for(var c=0;c<n;c++)a+=r(e[c],c,e,r)||"";return a}function le(e,r,a,t){switch(e.type){case $:if(e.children.length)break;case i:case s:return e.return=e.return||e.value;case n:return "";case h:return e.return=e.value+"{"+oe(e.children,t)+"}";case c:e.value=e.props.join(",");}return M(a=oe(e.children,t))?e.return=e.value+"{"+a+"}":""}function ve(e){var r=S(e);return function(a,n,c,s){var t="";for(var u=0;u<r;u++)t+=e[u](a,n,c,s)||"";return t}}

  var weakMemoize = function weakMemoize(func) {
    // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps
    var cache = new WeakMap();
    return function (arg) {
      if (cache.has(arg)) {
        // $FlowFixMe
        return cache.get(arg);
      }

      var ret = func(arg);
      cache.set(arg, ret);
      return ret;
    };
  };

  var identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {
    var previous = 0;
    var character = 0;

    while (true) {
      previous = character;
      character = Q(); // &\f

      if (previous === 38 && character === 12) {
        points[index] = 1;
      }

      if (U(character)) {
        break;
      }

      P();
    }

    return T(begin, G);
  };

  var toRules = function toRules(parsed, points) {
    // pretend we've started with a comma
    var index = -1;
    var character = 44;

    do {
      switch (U(character)) {
        case 0:
          // &\f
          if (character === 38 && Q() === 12) {
            // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings
            // stylis inserts \f after & to know when & where it should replace this sequence with the context selector
            // and when it should just concatenate the outer and inner selectors
            // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here
            points[index] = 1;
          }

          parsed[index] += identifierWithPointTracking(G - 1, points, index);
          break;

        case 2:
          parsed[index] += X(character);
          break;

        case 4:
          // comma
          if (character === 44) {
            // colon
            parsed[++index] = Q() === 58 ? '&\f' : '';
            points[index] = parsed[index].length;
            break;
          }

        // fallthrough

        default:
          parsed[index] += k(character);
      }
    } while (character = P());

    return parsed;
  };

  var getRules = function getRules(value, points) {
    return W(toRules(V(value), points));
  }; // WeakSet would be more appropriate, but only WeakMap is supported in IE11


  var fixedElements = /* #__PURE__ */new WeakMap();
  var compat = function compat(element) {
    if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo
    // negative .length indicates that this rule has been already prefixed
    element.length < 1) {
      return;
    }

    var value = element.value,
        parent = element.parent;
    var isImplicitRule = element.column === parent.column && element.line === parent.line;

    while (parent.type !== 'rule') {
      parent = parent.parent;
      if (!parent) return;
    } // short-circuit for the simplest case


    if (element.props.length === 1 && value.charCodeAt(0) !== 58
    /* colon */
    && !fixedElements.get(parent)) {
      return;
    } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)
    // then the props has already been manipulated beforehand as they that array is shared between it and its "rule parent"


    if (isImplicitRule) {
      return;
    }

    fixedElements.set(element, true);
    var points = [];
    var rules = getRules(value, points);
    var parentRules = parent.props;

    for (var i = 0, k = 0; i < rules.length; i++) {
      for (var j = 0; j < parentRules.length; j++, k++) {
        element.props[k] = points[i] ? rules[i].replace(/&\f/g, parentRules[j]) : parentRules[j] + " " + rules[i];
      }
    }
  };
  var removeLabel = function removeLabel(element) {
    if (element.type === 'decl') {
      var value = element.value;

      if ( // charcode for l
      value.charCodeAt(0) === 108 && // charcode for b
      value.charCodeAt(2) === 98) {
        // this ignores label
        element["return"] = '';
        element.value = '';
      }
    }
  };
  var ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';

  var isIgnoringComment = function isIgnoringComment(element) {
    return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;
  };

  var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {
    return function (element, index, children) {
      if (element.type !== 'rule' || cache.compat) return;
      var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);

      if (unsafePseudoClasses) {
        var isNested = !!element.parent; // in nested rules comments become children of the "auto-inserted" rule and that's always the `element.parent`
        //
        // considering this input:
        // .a {
        //   .b /* comm */ {}
        //   color: hotpink;
        // }
        // we get output corresponding to this:
        // .a {
        //   & {
        //     /* comm */
        //     color: hotpink;
        //   }
        //   .b {}
        // }

        var commentContainer = isNested ? element.parent.children : // global rule at the root level
        children;

        for (var i = commentContainer.length - 1; i >= 0; i--) {
          var node = commentContainer[i];

          if (node.line < element.line) {
            break;
          } // it is quite weird but comments are *usually* put at `column: element.column - 1`
          // so we seek *from the end* for the node that is earlier than the rule's `element` and check that
          // this will also match inputs like this:
          // .a {
          //   /* comm */
          //   .b {}
          // }
          //
          // but that is fine
          //
          // it would be the easiest to change the placement of the comment to be the first child of the rule:
          // .a {
          //   .b { /* comm */ }
          // }
          // with such inputs we wouldn't have to search for the comment at all
          // TODO: consider changing this comment placement in the next major version


          if (node.column < element.column) {
            if (isIgnoringComment(node)) {
              return;
            }

            break;
          }
        }

        unsafePseudoClasses.forEach(function (unsafePseudoClass) {
          console.error("The pseudo class \"" + unsafePseudoClass + "\" is potentially unsafe when doing server-side rendering. Try changing it to \"" + unsafePseudoClass.split('-child')[0] + "-of-type\".");
        });
      }
    };
  };

  var isImportRule = function isImportRule(element) {
    return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;
  };

  var isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {
    for (var i = index - 1; i >= 0; i--) {
      if (!isImportRule(children[i])) {
        return true;
      }
    }

    return false;
  }; // use this to remove incorrect elements from further processing
  // so they don't get handed to the `sheet` (or anything else)
  // as that could potentially lead to additional logs which in turn could be overhelming to the user


  var nullifyElement = function nullifyElement(element) {
    element.type = '';
    element.value = '';
    element["return"] = '';
    element.children = '';
    element.props = '';
  };

  var incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {
    if (!isImportRule(element)) {
      return;
    }

    if (element.parent) {
      console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.");
      nullifyElement(element);
    } else if (isPrependedWithRegularRules(index, children)) {
      console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.");
      nullifyElement(element);
    }
  };

  /* eslint-disable no-fallthrough */

  function prefix(value, length) {
    switch (x(value, length)) {
      // color-adjust
      case 5103:
        return a + 'print-' + value + value;
      // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)

      case 5737:
      case 4201:
      case 3177:
      case 3433:
      case 1641:
      case 4457:
      case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break

      case 5572:
      case 6356:
      case 5844:
      case 3191:
      case 6645:
      case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,

      case 6391:
      case 5879:
      case 5623:
      case 6135:
      case 4599:
      case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)

      case 4215:
      case 6389:
      case 5109:
      case 5365:
      case 5621:
      case 3829:
        return a + value + value;
      // appearance, user-select, transform, hyphens, text-size-adjust

      case 5349:
      case 4246:
      case 4810:
      case 6968:
      case 2756:
        return a + value + r$1 + value + e + value + value;
      // flex, flex-direction

      case 6828:
      case 4268:
        return a + value + e + value + value;
      // order

      case 6165:
        return a + value + e + 'flex-' + value + value;
      // align-items

      case 5187:
        return a + value + z(value, /(\w+).+(:[^]+)/, a + 'box-$1$2' + e + 'flex-$1$2') + value;
      // align-self

      case 5443:
        return a + value + e + 'flex-item-' + z(value, /flex-|-self/, '') + value;
      // align-content

      case 4675:
        return a + value + e + 'flex-line-pack' + z(value, /align-content|flex-|-self/, '') + value;
      // flex-shrink

      case 5548:
        return a + value + e + z(value, 'shrink', 'negative') + value;
      // flex-basis

      case 5292:
        return a + value + e + z(value, 'basis', 'preferred-size') + value;
      // flex-grow

      case 6060:
        return a + 'box-' + z(value, '-grow', '') + a + value + e + z(value, 'grow', 'positive') + value;
      // transition

      case 4554:
        return a + z(value, /([^-])(transform)/g, '$1' + a + '$2') + value;
      // cursor

      case 6187:
        return z(z(z(value, /(zoom-|grab)/, a + '$1'), /(image-set)/, a + '$1'), value, '') + value;
      // background, background-image

      case 5495:
      case 3959:
        return z(value, /(image-set\([^]*)/, a + '$1' + '$`$1');
      // justify-content

      case 4968:
        return z(z(value, /(.+:)(flex-)?(.*)/, a + 'box-pack:$3' + e + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + a + value + value;
      // (margin|padding)-inline-(start|end)

      case 4095:
      case 3583:
      case 4068:
      case 2532:
        return z(value, /(.+)-inline(.+)/, a + '$1$2') + value;
      // (min|max)?(width|height|inline-size|block-size)

      case 8116:
      case 7059:
      case 5753:
      case 5535:
      case 5445:
      case 5701:
      case 4933:
      case 4677:
      case 5533:
      case 5789:
      case 5021:
      case 4765:
        // stretch, max-content, min-content, fill-available
        if (M(value) - 1 - length > 6) switch (O(value, length + 1)) {
          // (m)ax-content, (m)in-content
          case 109:
            // -
            if (O(value, length + 4) !== 45) break;
          // (f)ill-available, (f)it-content

          case 102:
            return z(value, /(.+:)(.+)-([^]+)/, '$1' + a + '$2-$3' + '$1' + r$1 + (O(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;
          // (s)tretch

          case 115:
            return ~C(value, 'stretch') ? prefix(z(value, 'stretch', 'fill-available'), length) + value : value;
        }
        break;
      // position: sticky

      case 4949:
        // (s)ticky?
        if (O(value, length + 1) !== 115) break;
      // display: (flex|inline-flex)

      case 6444:
        switch (O(value, M(value) - 3 - (~C(value, '!important') && 10))) {
          // stic(k)y
          case 107:
            return z(value, ':', ':' + a) + value;
          // (inline-)?fl(e)x

          case 101:
            return z(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + a + (O(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + a + '$2$3' + '$1' + e + '$2box$3') + value;
        }

        break;
      // writing-mode

      case 5936:
        switch (O(value, length + 11)) {
          // vertical-l(r)
          case 114:
            return a + value + e + z(value, /[svh]\w+-[tblr]{2}/, 'tb') + value;
          // vertical-r(l)

          case 108:
            return a + value + e + z(value, /[svh]\w+-[tblr]{2}/, 'tb-rl') + value;
          // horizontal(-)tb

          case 45:
            return a + value + e + z(value, /[svh]\w+-[tblr]{2}/, 'lr') + value;
        }

        return a + value + e + value + value;
    }

    return value;
  }

  var prefixer = function prefixer(element, index, children, callback) {
    if (element.length > -1) if (!element["return"]) switch (element.type) {
      case s:
        element["return"] = prefix(element.value, element.length);
        break;

      case h:
        return oe([K(element, {
          value: z(element.value, '@', '@' + a)
        })], callback);

      case c:
        if (element.length) return B(element.props, function (value) {
          switch (j(value, /(::plac\w+|:read-\w+)/)) {
            // :read-(only|write)
            case ':read-only':
            case ':read-write':
              return oe([K(element, {
                props: [z(value, /:(read-\w+)/, ':' + r$1 + '$1')]
              })], callback);
            // :placeholder

            case '::placeholder':
              return oe([K(element, {
                props: [z(value, /:(plac\w+)/, ':' + a + 'input-$1')]
              }), K(element, {
                props: [z(value, /:(plac\w+)/, ':' + r$1 + '$1')]
              }), K(element, {
                props: [z(value, /:(plac\w+)/, e + 'input-$1')]
              })], callback);
          }

          return '';
        });
    }
  };

  var isBrowser$5 = typeof document !== 'undefined';
  var getServerStylisCache = isBrowser$5 ? undefined : weakMemoize(function () {
    return memoize$1(function () {
      var cache = {};
      return function (name) {
        return cache[name];
      };
    });
  });
  var defaultStylisPlugins = [prefixer];

  var createCache = function createCache(options) {
    var key = options.key;

    if (!key) {
      throw new Error("You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\n" + "If multiple caches share the same key they might \"fight\" for each other's style elements.");
    }

    if (isBrowser$5 && key === 'css') {
      var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); // get SSRed styles out of the way of React's hydration
      // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)
      // note this very very intentionally targets all style elements regardless of the key to ensure
      // that creating a cache works inside of render of a React component

      Array.prototype.forEach.call(ssrStyles, function (node) {
        // we want to only move elements which have a space in the data-emotion attribute value
        // because that indicates that it is an Emotion 11 server-side rendered style elements
        // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector
        // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)
        // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles
        // will not result in the Emotion 10 styles being destroyed
        var dataEmotionAttribute = node.getAttribute('data-emotion');

        if (dataEmotionAttribute.indexOf(' ') === -1) {
          return;
        }
        document.head.appendChild(node);
        node.setAttribute('data-s', '');
      });
    }

    var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;

    {
      // $FlowFixMe
      if (/[^a-z-]/.test(key)) {
        throw new Error("Emotion key must only contain lower case alphabetical characters and - but \"" + key + "\" was passed");
      }
    }

    var inserted = {};
    var container;
    var nodesToHydrate = [];

    if (isBrowser$5) {
      container = options.container || document.head;
      Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which
      // means that the style elements we're looking at are only Emotion 11 server-rendered style elements
      document.querySelectorAll("style[data-emotion^=\"" + key + " \"]"), function (node) {
        var attrib = node.getAttribute("data-emotion").split(' '); // $FlowFixMe

        for (var i = 1; i < attrib.length; i++) {
          inserted[attrib[i]] = true;
        }

        nodesToHydrate.push(node);
      });
    }

    var _insert;

    var omnipresentPlugins = [compat, removeLabel];

    {
      omnipresentPlugins.push(createUnsafeSelectorsAlarm({
        get compat() {
          return cache.compat;
        }

      }), incorrectImportAlarm);
    }

    if (isBrowser$5) {
      var currentSheet;
      var finalizingPlugins = [le, function (element) {
        if (!element.root) {
          if (element["return"]) {
            currentSheet.insert(element["return"]);
          } else if (element.value && element.type !== n) {
            // insert empty rule in non-production environments
            // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet
            currentSheet.insert(element.value + "{}");
          }
        }
      } ];
      var serializer = ve(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));

      var stylis = function stylis(styles) {
        return oe(ce(styles), serializer);
      };

      _insert = function insert(selector, serialized, sheet, shouldCache) {
        currentSheet = sheet;

        if (serialized.map !== undefined) {
          currentSheet = {
            insert: function insert(rule) {
              sheet.insert(rule + serialized.map);
            }
          };
        }

        stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);

        if (shouldCache) {
          cache.inserted[serialized.name] = true;
        }
      };
    } else {
      var _finalizingPlugins = [le];

      var _serializer = ve(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins));

      var _stylis = function _stylis(styles) {
        return oe(ce(styles), _serializer);
      }; // $FlowFixMe


      var serverStylisCache = getServerStylisCache(stylisPlugins)(key);

      var getRules = function getRules(selector, serialized) {
        var name = serialized.name;

        if (serverStylisCache[name] === undefined) {
          serverStylisCache[name] = _stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);
        }

        return serverStylisCache[name];
      };

      _insert = function _insert(selector, serialized, sheet, shouldCache) {
        var name = serialized.name;
        var rules = getRules(selector, serialized);

        if (cache.compat === undefined) {
          // in regular mode, we don't set the styles on the inserted cache
          // since we don't need to and that would be wasting memory
          // we return them so that they are rendered in a style tag
          if (shouldCache) {
            cache.inserted[name] = true;
          }

          if ( // using === development instead of !== production
          // because if people do ssr in tests, the source maps showing up would be annoying
          serialized.map !== undefined) {
            return rules + serialized.map;
          }

          return rules;
        } else {
          // in compat mode, we put the styles on the inserted cache so
          // that emotion-server can pull out the styles
          // except when we don't want to cache it which was in Global but now
          // is nowhere but we don't want to do a major right now
          // and just in case we're going to leave the case here
          // it's also not affecting client side bundle size
          // so it's really not a big deal
          if (shouldCache) {
            cache.inserted[name] = rules;
          } else {
            return rules;
          }
        }
      };
    }

    var cache = {
      key: key,
      sheet: new StyleSheet({
        key: key,
        container: container,
        nonce: options.nonce,
        speedy: options.speedy,
        prepend: options.prepend,
        insertionPoint: options.insertionPoint
      }),
      nonce: options.nonce,
      inserted: inserted,
      registered: {},
      insert: _insert
    };
    cache.sheet.hydrate(nodesToHydrate);
    return cache;
  };

  var reactIs_development = createCommonjsModule(function (module, exports) {



  {
    (function() {

  // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  // nor polyfill, then a plain number is used for performance.
  var hasSymbol = typeof Symbol === 'function' && Symbol.for;
  var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
  var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
  var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
  var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
  var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
  var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
  var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
  // (unstable) APIs that have been removed. Can we remove the symbols?

  var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
  var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
  var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
  var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
  var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
  var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
  var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
  var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
  var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
  var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
  var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;

  function isValidElementType(type) {
    return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
    type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
  }

  function typeOf(object) {
    if (typeof object === 'object' && object !== null) {
      var $$typeof = object.$$typeof;

      switch ($$typeof) {
        case REACT_ELEMENT_TYPE:
          var type = object.type;

          switch (type) {
            case REACT_ASYNC_MODE_TYPE:
            case REACT_CONCURRENT_MODE_TYPE:
            case REACT_FRAGMENT_TYPE:
            case REACT_PROFILER_TYPE:
            case REACT_STRICT_MODE_TYPE:
            case REACT_SUSPENSE_TYPE:
              return type;

            default:
              var $$typeofType = type && type.$$typeof;

              switch ($$typeofType) {
                case REACT_CONTEXT_TYPE:
                case REACT_FORWARD_REF_TYPE:
                case REACT_LAZY_TYPE:
                case REACT_MEMO_TYPE:
                case REACT_PROVIDER_TYPE:
                  return $$typeofType;

                default:
                  return $$typeof;
              }

          }

        case REACT_PORTAL_TYPE:
          return $$typeof;
      }
    }

    return undefined;
  } // AsyncMode is deprecated along with isAsyncMode

  var AsyncMode = REACT_ASYNC_MODE_TYPE;
  var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
  var ContextConsumer = REACT_CONTEXT_TYPE;
  var ContextProvider = REACT_PROVIDER_TYPE;
  var Element = REACT_ELEMENT_TYPE;
  var ForwardRef = REACT_FORWARD_REF_TYPE;
  var Fragment = REACT_FRAGMENT_TYPE;
  var Lazy = REACT_LAZY_TYPE;
  var Memo = REACT_MEMO_TYPE;
  var Portal = REACT_PORTAL_TYPE;
  var Profiler = REACT_PROFILER_TYPE;
  var StrictMode = REACT_STRICT_MODE_TYPE;
  var Suspense = REACT_SUSPENSE_TYPE;
  var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated

  function isAsyncMode(object) {
    {
      if (!hasWarnedAboutDeprecatedIsAsyncMode) {
        hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint

        console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
      }
    }

    return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
  }
  function isConcurrentMode(object) {
    return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
  }
  function isContextConsumer(object) {
    return typeOf(object) === REACT_CONTEXT_TYPE;
  }
  function isContextProvider(object) {
    return typeOf(object) === REACT_PROVIDER_TYPE;
  }
  function isElement(object) {
    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  }
  function isForwardRef(object) {
    return typeOf(object) === REACT_FORWARD_REF_TYPE;
  }
  function isFragment(object) {
    return typeOf(object) === REACT_FRAGMENT_TYPE;
  }
  function isLazy(object) {
    return typeOf(object) === REACT_LAZY_TYPE;
  }
  function isMemo(object) {
    return typeOf(object) === REACT_MEMO_TYPE;
  }
  function isPortal(object) {
    return typeOf(object) === REACT_PORTAL_TYPE;
  }
  function isProfiler(object) {
    return typeOf(object) === REACT_PROFILER_TYPE;
  }
  function isStrictMode(object) {
    return typeOf(object) === REACT_STRICT_MODE_TYPE;
  }
  function isSuspense(object) {
    return typeOf(object) === REACT_SUSPENSE_TYPE;
  }

  exports.AsyncMode = AsyncMode;
  exports.ConcurrentMode = ConcurrentMode;
  exports.ContextConsumer = ContextConsumer;
  exports.ContextProvider = ContextProvider;
  exports.Element = Element;
  exports.ForwardRef = ForwardRef;
  exports.Fragment = Fragment;
  exports.Lazy = Lazy;
  exports.Memo = Memo;
  exports.Portal = Portal;
  exports.Profiler = Profiler;
  exports.StrictMode = StrictMode;
  exports.Suspense = Suspense;
  exports.isAsyncMode = isAsyncMode;
  exports.isConcurrentMode = isConcurrentMode;
  exports.isContextConsumer = isContextConsumer;
  exports.isContextProvider = isContextProvider;
  exports.isElement = isElement;
  exports.isForwardRef = isForwardRef;
  exports.isFragment = isFragment;
  exports.isLazy = isLazy;
  exports.isMemo = isMemo;
  exports.isPortal = isPortal;
  exports.isProfiler = isProfiler;
  exports.isStrictMode = isStrictMode;
  exports.isSuspense = isSuspense;
  exports.isValidElementType = isValidElementType;
  exports.typeOf = typeOf;
    })();
  }
  });
  reactIs_development.AsyncMode;
  reactIs_development.ConcurrentMode;
  reactIs_development.ContextConsumer;
  reactIs_development.ContextProvider;
  reactIs_development.Element;
  reactIs_development.ForwardRef;
  reactIs_development.Fragment;
  reactIs_development.Lazy;
  reactIs_development.Memo;
  reactIs_development.Portal;
  reactIs_development.Profiler;
  reactIs_development.StrictMode;
  reactIs_development.Suspense;
  reactIs_development.isAsyncMode;
  reactIs_development.isConcurrentMode;
  reactIs_development.isContextConsumer;
  reactIs_development.isContextProvider;
  reactIs_development.isElement;
  reactIs_development.isForwardRef;
  reactIs_development.isFragment;
  reactIs_development.isLazy;
  reactIs_development.isMemo;
  reactIs_development.isPortal;
  reactIs_development.isProfiler;
  reactIs_development.isStrictMode;
  reactIs_development.isSuspense;
  reactIs_development.isValidElementType;
  reactIs_development.typeOf;

  var reactIs = createCommonjsModule(function (module) {

  {
    module.exports = reactIs_development;
  }
  });

  var FORWARD_REF_STATICS = {
    '$$typeof': true,
    render: true,
    defaultProps: true,
    displayName: true,
    propTypes: true
  };
  var MEMO_STATICS = {
    '$$typeof': true,
    compare: true,
    defaultProps: true,
    displayName: true,
    propTypes: true,
    type: true
  };
  var TYPE_STATICS = {};
  TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;
  TYPE_STATICS[reactIs.Memo] = MEMO_STATICS;

  var isBrowser$4 = typeof document !== 'undefined';
  function getRegisteredStyles(registered, registeredStyles, classNames) {
    var rawClassName = '';
    classNames.split(' ').forEach(function (className) {
      if (registered[className] !== undefined) {
        registeredStyles.push(registered[className] + ";");
      } else {
        rawClassName += className + " ";
      }
    });
    return rawClassName;
  }
  var registerStyles = function registerStyles(cache, serialized, isStringTag) {
    var className = cache.key + "-" + serialized.name;

    if ( // we only need to add the styles to the registered cache if the
    // class name could be used further down
    // the tree but if it's a string tag, we know it won't
    // so we don't have to add it to registered cache.
    // this improves memory usage since we can avoid storing the whole style string
    (isStringTag === false || // we need to always store it if we're in compat mode and
    // in node since emotion-server relies on whether a style is in
    // the registered cache to know whether a style is global or not
    // also, note that this check will be dead code eliminated in the browser
    isBrowser$4 === false && cache.compat !== undefined) && cache.registered[className] === undefined) {
      cache.registered[className] = serialized.styles;
    }
  };
  var insertStyles = function insertStyles(cache, serialized, isStringTag) {
    registerStyles(cache, serialized, isStringTag);
    var className = cache.key + "-" + serialized.name;

    if (cache.inserted[serialized.name] === undefined) {
      var stylesForSSR = '';
      var current = serialized;

      do {
        var maybeStyles = cache.insert(serialized === current ? "." + className : '', current, cache.sheet, true);

        if (!isBrowser$4 && maybeStyles !== undefined) {
          stylesForSSR += maybeStyles;
        }

        current = current.next;
      } while (current !== undefined);

      if (!isBrowser$4 && stylesForSSR.length !== 0) {
        return stylesForSSR;
      }
    }
  };

  /* eslint-disable */
  // Inspired by https://github.com/garycourt/murmurhash-js
  // Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86
  function murmur2(str) {
    // 'm' and 'r' are mixing constants generated offline.
    // They're not really 'magic', they just happen to work well.
    // const m = 0x5bd1e995;
    // const r = 24;
    // Initialize the hash
    var h = 0; // Mix 4 bytes at a time into the hash

    var k,
        i = 0,
        len = str.length;

    for (; len >= 4; ++i, len -= 4) {
      k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;
      k =
      /* Math.imul(k, m): */
      (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);
      k ^=
      /* k >>> r: */
      k >>> 24;
      h =
      /* Math.imul(k, m): */
      (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^
      /* Math.imul(h, m): */
      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
    } // Handle the last few bytes of the input array


    switch (len) {
      case 3:
        h ^= (str.charCodeAt(i + 2) & 0xff) << 16;

      case 2:
        h ^= (str.charCodeAt(i + 1) & 0xff) << 8;

      case 1:
        h ^= str.charCodeAt(i) & 0xff;
        h =
        /* Math.imul(h, m): */
        (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
    } // Do a few final mixes of the hash to ensure the last few
    // bytes are well-incorporated.


    h ^= h >>> 13;
    h =
    /* Math.imul(h, m): */
    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
    return ((h ^ h >>> 15) >>> 0).toString(36);
  }

  var unitlessKeys = {
    animationIterationCount: 1,
    aspectRatio: 1,
    borderImageOutset: 1,
    borderImageSlice: 1,
    borderImageWidth: 1,
    boxFlex: 1,
    boxFlexGroup: 1,
    boxOrdinalGroup: 1,
    columnCount: 1,
    columns: 1,
    flex: 1,
    flexGrow: 1,
    flexPositive: 1,
    flexShrink: 1,
    flexNegative: 1,
    flexOrder: 1,
    gridRow: 1,
    gridRowEnd: 1,
    gridRowSpan: 1,
    gridRowStart: 1,
    gridColumn: 1,
    gridColumnEnd: 1,
    gridColumnSpan: 1,
    gridColumnStart: 1,
    msGridRow: 1,
    msGridRowSpan: 1,
    msGridColumn: 1,
    msGridColumnSpan: 1,
    fontWeight: 1,
    lineHeight: 1,
    opacity: 1,
    order: 1,
    orphans: 1,
    tabSize: 1,
    widows: 1,
    zIndex: 1,
    zoom: 1,
    WebkitLineClamp: 1,
    // SVG-related properties
    fillOpacity: 1,
    floodOpacity: 1,
    stopOpacity: 1,
    strokeDasharray: 1,
    strokeDashoffset: 1,
    strokeMiterlimit: 1,
    strokeOpacity: 1,
    strokeWidth: 1
  };

  var ILLEGAL_ESCAPE_SEQUENCE_ERROR$1 = "You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\00d7';\" should become \"content: '\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences";
  var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).";
  var hyphenateRegex = /[A-Z]|^ms/g;
  var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;

  var isCustomProperty = function isCustomProperty(property) {
    return property.charCodeAt(1) === 45;
  };

  var isProcessableValue = function isProcessableValue(value) {
    return value != null && typeof value !== 'boolean';
  };

  var processStyleName = /* #__PURE__ */memoize$1(function (styleName) {
    return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();
  });

  var processStyleValue = function processStyleValue(key, value) {
    switch (key) {
      case 'animation':
      case 'animationName':
        {
          if (typeof value === 'string') {
            return value.replace(animationRegex, function (match, p1, p2) {
              cursor = {
                name: p1,
                styles: p2,
                next: cursor
              };
              return p1;
            });
          }
        }
    }

    if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {
      return value + 'px';
    }

    return value;
  };

  {
    var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/;
    var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];
    var oldProcessStyleValue = processStyleValue;
    var msPattern = /^-ms-/;
    var hyphenPattern = /-(.)/g;
    var hyphenatedCache = {};

    processStyleValue = function processStyleValue(key, value) {
      if (key === 'content') {
        if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '"' && value.charAt(0) !== "'")) {
          throw new Error("You seem to be using a value for 'content' without quotes, try replacing it with `content: '\"" + value + "\"'`");
        }
      }

      var processed = oldProcessStyleValue(key, value);

      if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {
        hyphenatedCache[key] = true;
        console.error("Using kebab-case for css properties in objects is not supported. Did you mean " + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {
          return _char.toUpperCase();
        }) + "?");
      }

      return processed;
    };
  }

  var noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';

  function handleInterpolation(mergedProps, registered, interpolation) {
    if (interpolation == null) {
      return '';
    }

    if (interpolation.__emotion_styles !== undefined) {
      if (interpolation.toString() === 'NO_COMPONENT_SELECTOR') {
        throw new Error(noComponentSelectorMessage);
      }

      return interpolation;
    }

    switch (typeof interpolation) {
      case 'boolean':
        {
          return '';
        }

      case 'object':
        {
          if (interpolation.anim === 1) {
            cursor = {
              name: interpolation.name,
              styles: interpolation.styles,
              next: cursor
            };
            return interpolation.name;
          }

          if (interpolation.styles !== undefined) {
            var next = interpolation.next;

            if (next !== undefined) {
              // not the most efficient thing ever but this is a pretty rare case
              // and there will be very few iterations of this generally
              while (next !== undefined) {
                cursor = {
                  name: next.name,
                  styles: next.styles,
                  next: cursor
                };
                next = next.next;
              }
            }

            var styles = interpolation.styles + ";";

            if (interpolation.map !== undefined) {
              styles += interpolation.map;
            }

            return styles;
          }

          return createStringFromObject(mergedProps, registered, interpolation);
        }

      case 'function':
        {
          if (mergedProps !== undefined) {
            var previousCursor = cursor;
            var result = interpolation(mergedProps);
            cursor = previousCursor;
            return handleInterpolation(mergedProps, registered, result);
          } else {
            console.error('Functions that are interpolated in css calls will be stringified.\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\n' + 'It can be called directly with props or interpolated in a styled call like this\n' + "let SomeComponent = styled('div')`${dynamicStyle}`");
          }

          break;
        }

      case 'string':
        {
          var matched = [];
          var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {
            var fakeVarName = "animation" + matched.length;
            matched.push("const " + fakeVarName + " = keyframes`" + p2.replace(/^@keyframes animation-\w+/, '') + "`");
            return "${" + fakeVarName + "}";
          });

          if (matched.length) {
            console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\n\n' + 'Instead of doing this:\n\n' + [].concat(matched, ["`" + replaced + "`"]).join('\n') + '\n\nYou should wrap it with `css` like this:\n\n' + ("css`" + replaced + "`"));
          }
        }

        break;
    } // finalize string values (regular strings and functions interpolated into css calls)


    if (registered == null) {
      return interpolation;
    }

    var cached = registered[interpolation];
    return cached !== undefined ? cached : interpolation;
  }

  function createStringFromObject(mergedProps, registered, obj) {
    var string = '';

    if (Array.isArray(obj)) {
      for (var i = 0; i < obj.length; i++) {
        string += handleInterpolation(mergedProps, registered, obj[i]) + ";";
      }
    } else {
      for (var _key in obj) {
        var value = obj[_key];

        if (typeof value !== 'object') {
          if (registered != null && registered[value] !== undefined) {
            string += _key + "{" + registered[value] + "}";
          } else if (isProcessableValue(value)) {
            string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";";
          }
        } else {
          if (_key === 'NO_COMPONENT_SELECTOR' && "development" !== 'production') {
            throw new Error(noComponentSelectorMessage);
          }

          if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {
            for (var _i = 0; _i < value.length; _i++) {
              if (isProcessableValue(value[_i])) {
                string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";";
              }
            }
          } else {
            var interpolated = handleInterpolation(mergedProps, registered, value);

            switch (_key) {
              case 'animation':
              case 'animationName':
                {
                  string += processStyleName(_key) + ":" + interpolated + ";";
                  break;
                }

              default:
                {
                  if (_key === 'undefined') {
                    console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);
                  }

                  string += _key + "{" + interpolated + "}";
                }
            }
          }
        }
      }
    }

    return string;
  }

  var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g;
  var sourceMapPattern;

  {
    sourceMapPattern = /\/\*#\ssourceMappingURL=data:application\/json;\S+\s+\*\//g;
  } // this is the cursor for keyframes
  // keyframes are stored on the SerializedStyles object as a linked list


  var cursor;
  var serializeStyles = function serializeStyles(args, registered, mergedProps) {
    if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {
      return args[0];
    }

    var stringMode = true;
    var styles = '';
    cursor = undefined;
    var strings = args[0];

    if (strings == null || strings.raw === undefined) {
      stringMode = false;
      styles += handleInterpolation(mergedProps, registered, strings);
    } else {
      if (strings[0] === undefined) {
        console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR$1);
      }

      styles += strings[0];
    } // we start at 1 since we've already handled the first arg


    for (var i = 1; i < args.length; i++) {
      styles += handleInterpolation(mergedProps, registered, args[i]);

      if (stringMode) {
        if (strings[i] === undefined) {
          console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR$1);
        }

        styles += strings[i];
      }
    }

    var sourceMap;

    {
      styles = styles.replace(sourceMapPattern, function (match) {
        sourceMap = match;
        return '';
      });
    } // using a global regex with .exec is stateful so lastIndex has to be reset each time


    labelPattern.lastIndex = 0;
    var identifierName = '';
    var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5

    while ((match = labelPattern.exec(styles)) !== null) {
      identifierName += '-' + // $FlowFixMe we know it's not null
      match[1];
    }

    var name = murmur2(styles) + identifierName;

    {
      // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)
      return {
        name: name,
        styles: styles,
        map: sourceMap,
        next: cursor,
        toString: function toString() {
          return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";
        }
      };
    }
  };

  var isBrowser$3 = typeof document !== 'undefined';

  var syncFallback = function syncFallback(create) {
    return create();
  };

  var useInsertionEffect = React__namespace['useInsertion' + 'Effect'] ? React__namespace['useInsertion' + 'Effect'] : false;
  var useInsertionEffectAlwaysWithSyncFallback = !isBrowser$3 ? syncFallback : useInsertionEffect || syncFallback;
  var useInsertionEffectWithLayoutFallback = useInsertionEffect || React__namespace.useLayoutEffect;

  var isBrowser$2 = typeof document !== 'undefined';
  var hasOwnProperty = {}.hasOwnProperty;

  var EmotionCacheContext = /* #__PURE__ */React__namespace.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case
  // because this module is primarily intended for the browser and node
  // but it's also required in react native and similar environments sometimes
  // and we could have a special build just for that
  // but this is much easier and the native packages
  // might use a different theme context in the future anyway
  typeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({
    key: 'css'
  }) : null);

  {
    EmotionCacheContext.displayName = 'EmotionCacheContext';
  }

  var CacheProvider = EmotionCacheContext.Provider;

  var withEmotionCache = function withEmotionCache(func) {
    // $FlowFixMe
    return /*#__PURE__*/React.forwardRef(function (props, ref) {
      // the cache will never be null in the browser
      var cache = React.useContext(EmotionCacheContext);
      return func(props, cache, ref);
    });
  };

  if (!isBrowser$2) {
    withEmotionCache = function withEmotionCache(func) {
      return function (props) {
        var cache = React.useContext(EmotionCacheContext);

        if (cache === null) {
          // yes, we're potentially creating this on every render
          // it doesn't actually matter though since it's only on the server
          // so there will only every be a single render
          // that could change in the future because of suspense and etc. but for now,
          // this works and i don't want to optimise for a future thing that we aren't sure about
          cache = createCache({
            key: 'css'
          });
          return /*#__PURE__*/React__namespace.createElement(EmotionCacheContext.Provider, {
            value: cache
          }, func(props, cache));
        } else {
          return func(props, cache);
        }
      };
    };
  }

  var ThemeContext$2 = /* #__PURE__ */React__namespace.createContext({});

  {
    ThemeContext$2.displayName = 'EmotionThemeContext';
  }

  var typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';
  var labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';

  var Insertion$2 = function Insertion(_ref) {
    var cache = _ref.cache,
        serialized = _ref.serialized,
        isStringTag = _ref.isStringTag;
    registerStyles(cache, serialized, isStringTag);
    var rules = useInsertionEffectAlwaysWithSyncFallback(function () {
      return insertStyles(cache, serialized, isStringTag);
    });

    if (!isBrowser$2 && rules !== undefined) {
      var _ref2;

      var serializedNames = serialized.name;
      var next = serialized.next;

      while (next !== undefined) {
        serializedNames += ' ' + next.name;
        next = next.next;
      }

      return /*#__PURE__*/React__namespace.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedNames, _ref2.dangerouslySetInnerHTML = {
        __html: rules
      }, _ref2.nonce = cache.sheet.nonce, _ref2));
    }

    return null;
  };

  var Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {
    var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works
    // not passing the registered cache to serializeStyles because it would
    // make certain babel optimisations not possible

    if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {
      cssProp = cache.registered[cssProp];
    }

    var WrappedComponent = props[typePropName];
    var registeredStyles = [cssProp];
    var className = '';

    if (typeof props.className === 'string') {
      className = getRegisteredStyles(cache.registered, registeredStyles, props.className);
    } else if (props.className != null) {
      className = props.className + " ";
    }

    var serialized = serializeStyles(registeredStyles, undefined, React__namespace.useContext(ThemeContext$2));

    if (serialized.name.indexOf('-') === -1) {
      var labelFromStack = props[labelPropName];

      if (labelFromStack) {
        serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);
      }
    }

    className += cache.key + "-" + serialized.name;
    var newProps = {};

    for (var key in props) {
      if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (key !== labelPropName)) {
        newProps[key] = props[key];
      }
    }

    newProps.ref = ref;
    newProps.className = className;
    return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(Insertion$2, {
      cache: cache,
      serialized: serialized,
      isStringTag: typeof WrappedComponent === 'string'
    }), /*#__PURE__*/React__namespace.createElement(WrappedComponent, newProps));
  });

  {
    Emotion.displayName = 'EmotionCssPropInternal';
  }

  var _extends_1 = createCommonjsModule(function (module) {
  function _extends() {
    module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {
      for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i];
        for (var key in source) {
          if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key];
          }
        }
      }
      return target;
    }, module.exports.__esModule = true, module.exports["default"] = module.exports;
    return _extends.apply(this, arguments);
  }
  module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
  });

  unwrapExports(_extends_1);

  var pkg = {
  	name: "@emotion/react",
  	version: "11.11.1",
  	main: "dist/emotion-react.cjs.js",
  	module: "dist/emotion-react.esm.js",
  	browser: {
  		"./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js"
  	},
  	exports: {
  		".": {
  			module: {
  				worker: "./dist/emotion-react.worker.esm.js",
  				browser: "./dist/emotion-react.browser.esm.js",
  				"default": "./dist/emotion-react.esm.js"
  			},
  			"import": "./dist/emotion-react.cjs.mjs",
  			"default": "./dist/emotion-react.cjs.js"
  		},
  		"./jsx-runtime": {
  			module: {
  				worker: "./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js",
  				browser: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js",
  				"default": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js"
  			},
  			"import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs",
  			"default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js"
  		},
  		"./_isolated-hnrs": {
  			module: {
  				worker: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js",
  				browser: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js",
  				"default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js"
  			},
  			"import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs",
  			"default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js"
  		},
  		"./jsx-dev-runtime": {
  			module: {
  				worker: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js",
  				browser: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js",
  				"default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js"
  			},
  			"import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs",
  			"default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js"
  		},
  		"./package.json": "./package.json",
  		"./types/css-prop": "./types/css-prop.d.ts",
  		"./macro": {
  			types: {
  				"import": "./macro.d.mts",
  				"default": "./macro.d.ts"
  			},
  			"default": "./macro.js"
  		}
  	},
  	types: "types/index.d.ts",
  	files: [
  		"src",
  		"dist",
  		"jsx-runtime",
  		"jsx-dev-runtime",
  		"_isolated-hnrs",
  		"types/*.d.ts",
  		"macro.*"
  	],
  	sideEffects: false,
  	author: "Emotion Contributors",
  	license: "MIT",
  	scripts: {
  		"test:typescript": "dtslint types"
  	},
  	dependencies: {
  		"@babel/runtime": "^7.18.3",
  		"@emotion/babel-plugin": "^11.11.0",
  		"@emotion/cache": "^11.11.0",
  		"@emotion/serialize": "^1.1.2",
  		"@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
  		"@emotion/utils": "^1.2.1",
  		"@emotion/weak-memoize": "^0.3.1",
  		"hoist-non-react-statics": "^3.3.1"
  	},
  	peerDependencies: {
  		react: ">=16.8.0"
  	},
  	peerDependenciesMeta: {
  		"@types/react": {
  			optional: true
  		}
  	},
  	devDependencies: {
  		"@definitelytyped/dtslint": "0.0.112",
  		"@emotion/css": "11.11.0",
  		"@emotion/css-prettifier": "1.1.3",
  		"@emotion/server": "11.11.0",
  		"@emotion/styled": "11.11.0",
  		"html-tag-names": "^1.1.2",
  		react: "16.14.0",
  		"svg-tag-names": "^1.1.1",
  		typescript: "^4.5.5"
  	},
  	repository: "https://github.com/emotion-js/emotion/tree/main/packages/react",
  	publishConfig: {
  		access: "public"
  	},
  	"umd:main": "dist/emotion-react.umd.min.js",
  	preconstruct: {
  		entrypoints: [
  			"./index.js",
  			"./jsx-runtime.js",
  			"./jsx-dev-runtime.js",
  			"./_isolated-hnrs.js"
  		],
  		umdName: "emotionReact",
  		exports: {
  			envConditions: [
  				"browser",
  				"worker"
  			],
  			extra: {
  				"./types/css-prop": "./types/css-prop.d.ts",
  				"./macro": {
  					types: {
  						"import": "./macro.d.mts",
  						"default": "./macro.d.ts"
  					},
  					"default": "./macro.js"
  				}
  			}
  		}
  	}
  };

  var warnedAboutCssPropForGlobal = false; // maintain place over rerenders.
  // initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild
  // initial client-side render from SSR, use place of hydrating tag

  var Global = /* #__PURE__ */withEmotionCache(function (props, cache) {
    if (!warnedAboutCssPropForGlobal && ( // check for className as well since the user is
    // probably using the custom createElement which
    // means it will be turned into a className prop
    // $FlowFixMe I don't really want to add it to the type since it shouldn't be used
    props.className || props.css)) {
      console.error("It looks like you're using the css prop on Global, did you mean to use the styles prop instead?");
      warnedAboutCssPropForGlobal = true;
    }

    var styles = props.styles;
    var serialized = serializeStyles([styles], undefined, React__namespace.useContext(ThemeContext$2));

    if (!isBrowser$2) {
      var _ref;

      var serializedNames = serialized.name;
      var serializedStyles = serialized.styles;
      var next = serialized.next;

      while (next !== undefined) {
        serializedNames += ' ' + next.name;
        serializedStyles += next.styles;
        next = next.next;
      }

      var shouldCache = cache.compat === true;
      var rules = cache.insert("", {
        name: serializedNames,
        styles: serializedStyles
      }, cache.sheet, shouldCache);

      if (shouldCache) {
        return null;
      }

      return /*#__PURE__*/React__namespace.createElement("style", (_ref = {}, _ref["data-emotion"] = cache.key + "-global " + serializedNames, _ref.dangerouslySetInnerHTML = {
        __html: rules
      }, _ref.nonce = cache.sheet.nonce, _ref));
    } // yes, i know these hooks are used conditionally
    // but it is based on a constant that will never change at runtime
    // it's effectively like having two implementations and switching them out
    // so it's not actually breaking anything


    var sheetRef = React__namespace.useRef();
    useInsertionEffectWithLayoutFallback(function () {
      var key = cache.key + "-global"; // use case of https://github.com/emotion-js/emotion/issues/2675

      var sheet = new cache.sheet.constructor({
        key: key,
        nonce: cache.sheet.nonce,
        container: cache.sheet.container,
        speedy: cache.sheet.isSpeedy
      });
      var rehydrating = false; // $FlowFixMe

      var node = document.querySelector("style[data-emotion=\"" + key + " " + serialized.name + "\"]");

      if (cache.sheet.tags.length) {
        sheet.before = cache.sheet.tags[0];
      }

      if (node !== null) {
        rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s

        node.setAttribute('data-emotion', key);
        sheet.hydrate([node]);
      }

      sheetRef.current = [sheet, rehydrating];
      return function () {
        sheet.flush();
      };
    }, [cache]);
    useInsertionEffectWithLayoutFallback(function () {
      var sheetRefCurrent = sheetRef.current;
      var sheet = sheetRefCurrent[0],
          rehydrating = sheetRefCurrent[1];

      if (rehydrating) {
        sheetRefCurrent[1] = false;
        return;
      }

      if (serialized.next !== undefined) {
        // insert keyframes
        insertStyles(cache, serialized.next, true);
      }

      if (sheet.tags.length) {
        // if this doesn't exist then it will be null so the style element will be appended
        var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;
        sheet.before = element;
        sheet.flush();
      }

      cache.insert("", serialized, sheet, false);
    }, [cache, serialized.name]);
    return null;
  });

  {
    Global.displayName = 'EmotionGlobal';
  }

  function css() {
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    return serializeStyles(args);
  }

  var keyframes = function keyframes() {
    var insertable = css.apply(void 0, arguments);
    var name = "animation-" + insertable.name; // $FlowFixMe

    return {
      name: name,
      styles: "@keyframes " + name + "{" + insertable.styles + "}",
      anim: 1,
      toString: function toString() {
        return "_EMO_" + this.name + "_" + this.styles + "_EMO_";
      }
    };
  };

  var classnames = function classnames(args) {
    var len = args.length;
    var i = 0;
    var cls = '';

    for (; i < len; i++) {
      var arg = args[i];
      if (arg == null) continue;
      var toAdd = void 0;

      switch (typeof arg) {
        case 'boolean':
          break;

        case 'object':
          {
            if (Array.isArray(arg)) {
              toAdd = classnames(arg);
            } else {
              if (arg.styles !== undefined && arg.name !== undefined) {
                console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from <ClassNames/> component.');
              }

              toAdd = '';

              for (var k in arg) {
                if (arg[k] && k) {
                  toAdd && (toAdd += ' ');
                  toAdd += k;
                }
              }
            }

            break;
          }

        default:
          {
            toAdd = arg;
          }
      }

      if (toAdd) {
        cls && (cls += ' ');
        cls += toAdd;
      }
    }

    return cls;
  };

  function merge$1(registered, css, className) {
    var registeredStyles = [];
    var rawClassName = getRegisteredStyles(registered, registeredStyles, className);

    if (registeredStyles.length < 2) {
      return className;
    }

    return rawClassName + css(registeredStyles);
  }

  var Insertion$1 = function Insertion(_ref) {
    var cache = _ref.cache,
        serializedArr = _ref.serializedArr;
    var rules = useInsertionEffectAlwaysWithSyncFallback(function () {
      var rules = '';

      for (var i = 0; i < serializedArr.length; i++) {
        var res = insertStyles(cache, serializedArr[i], false);

        if (!isBrowser$2 && res !== undefined) {
          rules += res;
        }
      }

      if (!isBrowser$2) {
        return rules;
      }
    });

    if (!isBrowser$2 && rules.length !== 0) {
      var _ref2;

      return /*#__PURE__*/React__namespace.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedArr.map(function (serialized) {
        return serialized.name;
      }).join(' '), _ref2.dangerouslySetInnerHTML = {
        __html: rules
      }, _ref2.nonce = cache.sheet.nonce, _ref2));
    }

    return null;
  };

  var ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {
    var hasRendered = false;
    var serializedArr = [];

    var css = function css() {
      if (hasRendered && "development" !== 'production') {
        throw new Error('css can only be used during render');
      }

      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }

      var serialized = serializeStyles(args, cache.registered);
      serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`

      registerStyles(cache, serialized, false);
      return cache.key + "-" + serialized.name;
    };

    var cx = function cx() {
      if (hasRendered && "development" !== 'production') {
        throw new Error('cx can only be used during render');
      }

      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }

      return merge$1(cache.registered, css, classnames(args));
    };

    var content = {
      css: css,
      cx: cx,
      theme: React__namespace.useContext(ThemeContext$2)
    };
    var ele = props.children(content);
    hasRendered = true;
    return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(Insertion$1, {
      cache: cache,
      serializedArr: serializedArr
    }), ele);
  });

  {
    ClassNames.displayName = 'EmotionClassNames';
  }

  {
    var isBrowser$1 = typeof document !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked

    var isTestEnv = typeof jest !== 'undefined' || typeof vi !== 'undefined';

    if (isBrowser$1 && !isTestEnv) {
      // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later
      var globalContext = // $FlowIgnore
      typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef
      : isBrowser$1 ? window : global$1;
      var globalKey = "__EMOTION_REACT_" + pkg.version.split('.')[0] + "__";

      if (globalContext[globalKey]) {
        console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');
      }

      globalContext[globalKey] = true;
    }
  }

  var testOmitPropsOnStringTag = isPropValid;

  var testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {
    return key !== 'theme';
  };

  var getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {
    return typeof tag === 'string' && // 96 is one less than the char code
    // for "a" so this is checking that
    // it's a lowercase character
    tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;
  };
  var composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {
    var shouldForwardProp;

    if (options) {
      var optionsShouldForwardProp = options.shouldForwardProp;
      shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {
        return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);
      } : optionsShouldForwardProp;
    }

    if (typeof shouldForwardProp !== 'function' && isReal) {
      shouldForwardProp = tag.__emotion_forwardProp;
    }

    return shouldForwardProp;
  };

  var ILLEGAL_ESCAPE_SEQUENCE_ERROR = "You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\00d7';\" should become \"content: '\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences";
  var isBrowser = typeof document !== 'undefined';

  var Insertion = function Insertion(_ref) {
    var cache = _ref.cache,
        serialized = _ref.serialized,
        isStringTag = _ref.isStringTag;
    registerStyles(cache, serialized, isStringTag);
    var rules = useInsertionEffectAlwaysWithSyncFallback(function () {
      return insertStyles(cache, serialized, isStringTag);
    });

    if (!isBrowser && rules !== undefined) {
      var _ref2;

      var serializedNames = serialized.name;
      var next = serialized.next;

      while (next !== undefined) {
        serializedNames += ' ' + next.name;
        next = next.next;
      }

      return /*#__PURE__*/React__namespace.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedNames, _ref2.dangerouslySetInnerHTML = {
        __html: rules
      }, _ref2.nonce = cache.sheet.nonce, _ref2));
    }

    return null;
  };

  var createStyled$1 = function createStyled(tag, options) {
    {
      if (tag === undefined) {
        throw new Error('You are trying to create a styled element with an undefined component.\nYou may have forgotten to import it.');
      }
    }

    var isReal = tag.__emotion_real === tag;
    var baseTag = isReal && tag.__emotion_base || tag;
    var identifierName;
    var targetClassName;

    if (options !== undefined) {
      identifierName = options.label;
      targetClassName = options.target;
    }

    var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);
    var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);
    var shouldUseAs = !defaultShouldForwardProp('as');
    return function () {
      var args = arguments;
      var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];

      if (identifierName !== undefined) {
        styles.push("label:" + identifierName + ";");
      }

      if (args[0] == null || args[0].raw === undefined) {
        styles.push.apply(styles, args);
      } else {
        if (args[0][0] === undefined) {
          console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);
        }

        styles.push(args[0][0]);
        var len = args.length;
        var i = 1;

        for (; i < len; i++) {
          if (args[0][i] === undefined) {
            console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);
          }

          styles.push(args[i], args[0][i]);
        }
      } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class


      var Styled = withEmotionCache(function (props, cache, ref) {
        var FinalTag = shouldUseAs && props.as || baseTag;
        var className = '';
        var classInterpolations = [];
        var mergedProps = props;

        if (props.theme == null) {
          mergedProps = {};

          for (var key in props) {
            mergedProps[key] = props[key];
          }

          mergedProps.theme = React__namespace.useContext(ThemeContext$2);
        }

        if (typeof props.className === 'string') {
          className = getRegisteredStyles(cache.registered, classInterpolations, props.className);
        } else if (props.className != null) {
          className = props.className + " ";
        }

        var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);
        className += cache.key + "-" + serialized.name;

        if (targetClassName !== undefined) {
          className += " " + targetClassName;
        }

        var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;
        var newProps = {};

        for (var _key in props) {
          if (shouldUseAs && _key === 'as') continue;

          if ( // $FlowFixMe
          finalShouldForwardProp(_key)) {
            newProps[_key] = props[_key];
          }
        }

        newProps.className = className;
        newProps.ref = ref;
        return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(Insertion, {
          cache: cache,
          serialized: serialized,
          isStringTag: typeof FinalTag === 'string'
        }), /*#__PURE__*/React__namespace.createElement(FinalTag, newProps));
      });
      Styled.displayName = identifierName !== undefined ? identifierName : "Styled(" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + ")";
      Styled.defaultProps = tag.defaultProps;
      Styled.__emotion_real = Styled;
      Styled.__emotion_base = baseTag;
      Styled.__emotion_styles = styles;
      Styled.__emotion_forwardProp = shouldForwardProp;
      Object.defineProperty(Styled, 'toString', {
        value: function value() {
          if (targetClassName === undefined && "development" !== 'production') {
            return 'NO_COMPONENT_SELECTOR';
          } // $FlowFixMe: coerce undefined to string


          return "." + targetClassName;
        }
      });

      Styled.withComponent = function (nextTag, nextOptions) {
        return createStyled(nextTag, _extends({}, options, nextOptions, {
          shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)
        })).apply(void 0, styles);
      };

      return Styled;
    };
  };

  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
  'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];

  var newStyled = createStyled$1.bind();
  tags.forEach(function (tagName) {
    // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type
    newStyled[tagName] = newStyled(tagName);
  });

  React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner;

  var reactJsxRuntime_development = createCommonjsModule(function (module, exports) {

  {
    (function() {

  var React$1 = React;

  // ATTENTION
  // When adding new symbols to this file,
  // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
  // The Symbol used to tag the ReactElement-like types.
  var REACT_ELEMENT_TYPE = Symbol.for('react.element');
  var REACT_PORTAL_TYPE = Symbol.for('react.portal');
  var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
  var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
  var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
  var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
  var REACT_CONTEXT_TYPE = Symbol.for('react.context');
  var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
  var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
  var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
  var REACT_MEMO_TYPE = Symbol.for('react.memo');
  var REACT_LAZY_TYPE = Symbol.for('react.lazy');
  var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
  var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
  var FAUX_ITERATOR_SYMBOL = '@@iterator';
  function getIteratorFn(maybeIterable) {
    if (maybeIterable === null || typeof maybeIterable !== 'object') {
      return null;
    }

    var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];

    if (typeof maybeIterator === 'function') {
      return maybeIterator;
    }

    return null;
  }

  var ReactSharedInternals = React$1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;

  function error(format) {
    {
      {
        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
          args[_key2 - 1] = arguments[_key2];
        }

        printWarning('error', format, args);
      }
    }
  }

  function printWarning(level, format, args) {
    // When changing this logic, you might want to also
    // update consoleWithStackDev.www.js as well.
    {
      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
      var stack = ReactDebugCurrentFrame.getStackAddendum();

      if (stack !== '') {
        format += '%s';
        args = args.concat([stack]);
      } // eslint-disable-next-line react-internal/safe-string-coercion


      var argsWithFormat = args.map(function (item) {
        return String(item);
      }); // Careful: RN currently depends on this prefix

      argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
      // breaks IE9: https://github.com/facebook/react/issues/13610
      // eslint-disable-next-line react-internal/no-production-logging

      Function.prototype.apply.call(console[level], console, argsWithFormat);
    }
  }

  // -----------------------------------------------------------------------------

  var enableScopeAPI = false; // Experimental Create Event Handle API.
  var enableCacheElement = false;
  var enableTransitionTracing = false; // No known bugs, but needs performance testing

  var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
  // stuff. Intended to enable React core members to more easily debug scheduling
  // issues in DEV builds.

  var enableDebugTracing = false; // Track which Fiber(s) schedule render work.

  var REACT_MODULE_REFERENCE;

  {
    REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
  }

  function isValidElementType(type) {
    if (typeof type === 'string' || typeof type === 'function') {
      return true;
    } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).


    if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {
      return true;
    }

    if (typeof type === 'object' && type !== null) {
      if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
      // types supported by any Flight configuration anywhere since
      // we don't know which Flight build this will end up being used
      // with.
      type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
        return true;
      }
    }

    return false;
  }

  function getWrappedName(outerType, innerType, wrapperName) {
    var displayName = outerType.displayName;

    if (displayName) {
      return displayName;
    }

    var functionName = innerType.displayName || innerType.name || '';
    return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
  } // Keep in sync with react-reconciler/getComponentNameFromFiber


  function getContextName(type) {
    return type.displayName || 'Context';
  } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.


  function getComponentNameFromType(type) {
    if (type == null) {
      // Host root, text node or just invalid type.
      return null;
    }

    {
      if (typeof type.tag === 'number') {
        error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
      }
    }

    if (typeof type === 'function') {
      return type.displayName || type.name || null;
    }

    if (typeof type === 'string') {
      return type;
    }

    switch (type) {
      case REACT_FRAGMENT_TYPE:
        return 'Fragment';

      case REACT_PORTAL_TYPE:
        return 'Portal';

      case REACT_PROFILER_TYPE:
        return 'Profiler';

      case REACT_STRICT_MODE_TYPE:
        return 'StrictMode';

      case REACT_SUSPENSE_TYPE:
        return 'Suspense';

      case REACT_SUSPENSE_LIST_TYPE:
        return 'SuspenseList';

    }

    if (typeof type === 'object') {
      switch (type.$$typeof) {
        case REACT_CONTEXT_TYPE:
          var context = type;
          return getContextName(context) + '.Consumer';

        case REACT_PROVIDER_TYPE:
          var provider = type;
          return getContextName(provider._context) + '.Provider';

        case REACT_FORWARD_REF_TYPE:
          return getWrappedName(type, type.render, 'ForwardRef');

        case REACT_MEMO_TYPE:
          var outerName = type.displayName || null;

          if (outerName !== null) {
            return outerName;
          }

          return getComponentNameFromType(type.type) || 'Memo';

        case REACT_LAZY_TYPE:
          {
            var lazyComponent = type;
            var payload = lazyComponent._payload;
            var init = lazyComponent._init;

            try {
              return getComponentNameFromType(init(payload));
            } catch (x) {
              return null;
            }
          }

        // eslint-disable-next-line no-fallthrough
      }
    }

    return null;
  }

  var assign = Object.assign;

  // Helpers to patch console.logs to avoid logging during side-effect free
  // replaying on render function. This currently only patches the object
  // lazily which won't cover if the log function was extracted eagerly.
  // We could also eagerly patch the method.
  var disabledDepth = 0;
  var prevLog;
  var prevInfo;
  var prevWarn;
  var prevError;
  var prevGroup;
  var prevGroupCollapsed;
  var prevGroupEnd;

  function disabledLog() {}

  disabledLog.__reactDisabledLog = true;
  function disableLogs() {
    {
      if (disabledDepth === 0) {
        /* eslint-disable react-internal/no-production-logging */
        prevLog = console.log;
        prevInfo = console.info;
        prevWarn = console.warn;
        prevError = console.error;
        prevGroup = console.group;
        prevGroupCollapsed = console.groupCollapsed;
        prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099

        var props = {
          configurable: true,
          enumerable: true,
          value: disabledLog,
          writable: true
        }; // $FlowFixMe Flow thinks console is immutable.

        Object.defineProperties(console, {
          info: props,
          log: props,
          warn: props,
          error: props,
          group: props,
          groupCollapsed: props,
          groupEnd: props
        });
        /* eslint-enable react-internal/no-production-logging */
      }

      disabledDepth++;
    }
  }
  function reenableLogs() {
    {
      disabledDepth--;

      if (disabledDepth === 0) {
        /* eslint-disable react-internal/no-production-logging */
        var props = {
          configurable: true,
          enumerable: true,
          writable: true
        }; // $FlowFixMe Flow thinks console is immutable.

        Object.defineProperties(console, {
          log: assign({}, props, {
            value: prevLog
          }),
          info: assign({}, props, {
            value: prevInfo
          }),
          warn: assign({}, props, {
            value: prevWarn
          }),
          error: assign({}, props, {
            value: prevError
          }),
          group: assign({}, props, {
            value: prevGroup
          }),
          groupCollapsed: assign({}, props, {
            value: prevGroupCollapsed
          }),
          groupEnd: assign({}, props, {
            value: prevGroupEnd
          })
        });
        /* eslint-enable react-internal/no-production-logging */
      }

      if (disabledDepth < 0) {
        error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
      }
    }
  }

  var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
  var prefix;
  function describeBuiltInComponentFrame(name, source, ownerFn) {
    {
      if (prefix === undefined) {
        // Extract the VM specific prefix used by each line.
        try {
          throw Error();
        } catch (x) {
          var match = x.stack.trim().match(/\n( *(at )?)/);
          prefix = match && match[1] || '';
        }
      } // We use the prefix to ensure our stacks line up with native stack frames.


      return '\n' + prefix + name;
    }
  }
  var reentry = false;
  var componentFrameCache;

  {
    var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
    componentFrameCache = new PossiblyWeakMap();
  }

  function describeNativeComponentFrame(fn, construct) {
    // If something asked for a stack inside a fake render, it should get ignored.
    if ( !fn || reentry) {
      return '';
    }

    {
      var frame = componentFrameCache.get(fn);

      if (frame !== undefined) {
        return frame;
      }
    }

    var control;
    reentry = true;
    var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.

    Error.prepareStackTrace = undefined;
    var previousDispatcher;

    {
      previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function
      // for warnings.

      ReactCurrentDispatcher.current = null;
      disableLogs();
    }

    try {
      // This should throw.
      if (construct) {
        // Something should be setting the props in the constructor.
        var Fake = function () {
          throw Error();
        }; // $FlowFixMe


        Object.defineProperty(Fake.prototype, 'props', {
          set: function () {
            // We use a throwing setter instead of frozen or non-writable props
            // because that won't throw in a non-strict mode function.
            throw Error();
          }
        });

        if (typeof Reflect === 'object' && Reflect.construct) {
          // We construct a different control for this case to include any extra
          // frames added by the construct call.
          try {
            Reflect.construct(Fake, []);
          } catch (x) {
            control = x;
          }

          Reflect.construct(fn, [], Fake);
        } else {
          try {
            Fake.call();
          } catch (x) {
            control = x;
          }

          fn.call(Fake.prototype);
        }
      } else {
        try {
          throw Error();
        } catch (x) {
          control = x;
        }

        fn();
      }
    } catch (sample) {
      // This is inlined manually because closure doesn't do it for us.
      if (sample && control && typeof sample.stack === 'string') {
        // This extracts the first frame from the sample that isn't also in the control.
        // Skipping one frame that we assume is the frame that calls the two.
        var sampleLines = sample.stack.split('\n');
        var controlLines = control.stack.split('\n');
        var s = sampleLines.length - 1;
        var c = controlLines.length - 1;

        while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
          // We expect at least one stack frame to be shared.
          // Typically this will be the root most one. However, stack frames may be
          // cut off due to maximum stack limits. In this case, one maybe cut off
          // earlier than the other. We assume that the sample is longer or the same
          // and there for cut off earlier. So we should find the root most frame in
          // the sample somewhere in the control.
          c--;
        }

        for (; s >= 1 && c >= 0; s--, c--) {
          // Next we find the first one that isn't the same which should be the
          // frame that called our sample function and the control.
          if (sampleLines[s] !== controlLines[c]) {
            // In V8, the first line is describing the message but other VMs don't.
            // If we're about to return the first line, and the control is also on the same
            // line, that's a pretty good indicator that our sample threw at same line as
            // the control. I.e. before we entered the sample frame. So we ignore this result.
            // This can happen if you passed a class to function component, or non-function.
            if (s !== 1 || c !== 1) {
              do {
                s--;
                c--; // We may still have similar intermediate frames from the construct call.
                // The next one that isn't the same should be our match though.

                if (c < 0 || sampleLines[s] !== controlLines[c]) {
                  // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
                  var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
                  // but we have a user-provided "displayName"
                  // splice it in to make the stack more readable.


                  if (fn.displayName && _frame.includes('<anonymous>')) {
                    _frame = _frame.replace('<anonymous>', fn.displayName);
                  }

                  {
                    if (typeof fn === 'function') {
                      componentFrameCache.set(fn, _frame);
                    }
                  } // Return the line we found.


                  return _frame;
                }
              } while (s >= 1 && c >= 0);
            }

            break;
          }
        }
      }
    } finally {
      reentry = false;

      {
        ReactCurrentDispatcher.current = previousDispatcher;
        reenableLogs();
      }

      Error.prepareStackTrace = previousPrepareStackTrace;
    } // Fallback to just using the name if we couldn't make it throw.


    var name = fn ? fn.displayName || fn.name : '';
    var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';

    {
      if (typeof fn === 'function') {
        componentFrameCache.set(fn, syntheticFrame);
      }
    }

    return syntheticFrame;
  }
  function describeFunctionComponentFrame(fn, source, ownerFn) {
    {
      return describeNativeComponentFrame(fn, false);
    }
  }

  function shouldConstruct(Component) {
    var prototype = Component.prototype;
    return !!(prototype && prototype.isReactComponent);
  }

  function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {

    if (type == null) {
      return '';
    }

    if (typeof type === 'function') {
      {
        return describeNativeComponentFrame(type, shouldConstruct(type));
      }
    }

    if (typeof type === 'string') {
      return describeBuiltInComponentFrame(type);
    }

    switch (type) {
      case REACT_SUSPENSE_TYPE:
        return describeBuiltInComponentFrame('Suspense');

      case REACT_SUSPENSE_LIST_TYPE:
        return describeBuiltInComponentFrame('SuspenseList');
    }

    if (typeof type === 'object') {
      switch (type.$$typeof) {
        case REACT_FORWARD_REF_TYPE:
          return describeFunctionComponentFrame(type.render);

        case REACT_MEMO_TYPE:
          // Memo may contain any component type so we recursively resolve it.
          return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);

        case REACT_LAZY_TYPE:
          {
            var lazyComponent = type;
            var payload = lazyComponent._payload;
            var init = lazyComponent._init;

            try {
              // Lazy may contain any component type so we recursively resolve it.
              return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
            } catch (x) {}
          }
      }
    }

    return '';
  }

  var hasOwnProperty = Object.prototype.hasOwnProperty;

  var loggedTypeFailures = {};
  var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;

  function setCurrentlyValidatingElement(element) {
    {
      if (element) {
        var owner = element._owner;
        var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
        ReactDebugCurrentFrame.setExtraStackFrame(stack);
      } else {
        ReactDebugCurrentFrame.setExtraStackFrame(null);
      }
    }
  }

  function checkPropTypes(typeSpecs, values, location, componentName, element) {
    {
      // $FlowFixMe This is okay but Flow doesn't know it.
      var has = Function.call.bind(hasOwnProperty);

      for (var typeSpecName in typeSpecs) {
        if (has(typeSpecs, typeSpecName)) {
          var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
          // fail the render phase where it didn't fail before. So we log it.
          // After these have been cleaned up, we'll let them throw.

          try {
            // This is intentionally an invariant that gets caught. It's the same
            // behavior as without this statement except with a better message.
            if (typeof typeSpecs[typeSpecName] !== 'function') {
              // eslint-disable-next-line react-internal/prod-error-codes
              var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
              err.name = 'Invariant Violation';
              throw err;
            }

            error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
          } catch (ex) {
            error$1 = ex;
          }

          if (error$1 && !(error$1 instanceof Error)) {
            setCurrentlyValidatingElement(element);

            error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);

            setCurrentlyValidatingElement(null);
          }

          if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
            // Only monitor this failure once because there tends to be a lot of the
            // same error.
            loggedTypeFailures[error$1.message] = true;
            setCurrentlyValidatingElement(element);

            error('Failed %s type: %s', location, error$1.message);

            setCurrentlyValidatingElement(null);
          }
        }
      }
    }
  }

  var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare

  function isArray(a) {
    return isArrayImpl(a);
  }

  /*
   * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
   * and Temporal.* types. See https://github.com/facebook/react/pull/22064.
   *
   * The functions in this module will throw an easier-to-understand,
   * easier-to-debug exception with a clear errors message message explaining the
   * problem. (Instead of a confusing exception thrown inside the implementation
   * of the `value` object).
   */
  // $FlowFixMe only called in DEV, so void return is not possible.
  function typeName(value) {
    {
      // toStringTag is needed for namespaced types like Temporal.Instant
      var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
      var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
      return type;
    }
  } // $FlowFixMe only called in DEV, so void return is not possible.


  function willCoercionThrow(value) {
    {
      try {
        testStringCoercion(value);
        return false;
      } catch (e) {
        return true;
      }
    }
  }

  function testStringCoercion(value) {
    // If you ended up here by following an exception call stack, here's what's
    // happened: you supplied an object or symbol value to React (as a prop, key,
    // DOM attribute, CSS property, string ref, etc.) and when React tried to
    // coerce it to a string using `'' + value`, an exception was thrown.
    //
    // The most common types that will cause this exception are `Symbol` instances
    // and Temporal objects like `Temporal.Instant`. But any object that has a
    // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
    // exception. (Library authors do this to prevent users from using built-in
    // numeric operators like `+` or comparison operators like `>=` because custom
    // methods are needed to perform accurate arithmetic or comparison.)
    //
    // To fix the problem, coerce this object or symbol value to a string before
    // passing it to React. The most reliable way is usually `String(value)`.
    //
    // To find which value is throwing, check the browser or debugger console.
    // Before this exception was thrown, there should be `console.error` output
    // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
    // problem and how that type was used: key, atrribute, input value prop, etc.
    // In most cases, this console output also shows the component and its
    // ancestor components where the exception happened.
    //
    // eslint-disable-next-line react-internal/safe-string-coercion
    return '' + value;
  }
  function checkKeyStringCoercion(value) {
    {
      if (willCoercionThrow(value)) {
        error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }

  var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
  var RESERVED_PROPS = {
    key: true,
    ref: true,
    __self: true,
    __source: true
  };
  var specialPropKeyWarningShown;
  var specialPropRefWarningShown;
  var didWarnAboutStringRefs;

  {
    didWarnAboutStringRefs = {};
  }

  function hasValidRef(config) {
    {
      if (hasOwnProperty.call(config, 'ref')) {
        var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;

        if (getter && getter.isReactWarning) {
          return false;
        }
      }
    }

    return config.ref !== undefined;
  }

  function hasValidKey(config) {
    {
      if (hasOwnProperty.call(config, 'key')) {
        var getter = Object.getOwnPropertyDescriptor(config, 'key').get;

        if (getter && getter.isReactWarning) {
          return false;
        }
      }
    }

    return config.key !== undefined;
  }

  function warnIfStringRefCannotBeAutoConverted(config, self) {
    {
      if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {
        var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);

        if (!didWarnAboutStringRefs[componentName]) {
          error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);

          didWarnAboutStringRefs[componentName] = true;
        }
      }
    }
  }

  function defineKeyPropWarningGetter(props, displayName) {
    {
      var warnAboutAccessingKey = function () {
        if (!specialPropKeyWarningShown) {
          specialPropKeyWarningShown = true;

          error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
        }
      };

      warnAboutAccessingKey.isReactWarning = true;
      Object.defineProperty(props, 'key', {
        get: warnAboutAccessingKey,
        configurable: true
      });
    }
  }

  function defineRefPropWarningGetter(props, displayName) {
    {
      var warnAboutAccessingRef = function () {
        if (!specialPropRefWarningShown) {
          specialPropRefWarningShown = true;

          error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
        }
      };

      warnAboutAccessingRef.isReactWarning = true;
      Object.defineProperty(props, 'ref', {
        get: warnAboutAccessingRef,
        configurable: true
      });
    }
  }
  /**
   * Factory method to create a new React element. This no longer adheres to
   * the class pattern, so do not use new to call it. Also, instanceof check
   * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
   * if something is a React Element.
   *
   * @param {*} type
   * @param {*} props
   * @param {*} key
   * @param {string|object} ref
   * @param {*} owner
   * @param {*} self A *temporary* helper to detect places where `this` is
   * different from the `owner` when React.createElement is called, so that we
   * can warn. We want to get rid of owner and replace string `ref`s with arrow
   * functions, and as long as `this` and owner are the same, there will be no
   * change in behavior.
   * @param {*} source An annotation object (added by a transpiler or otherwise)
   * indicating filename, line number, and/or other information.
   * @internal
   */


  var ReactElement = function (type, key, ref, self, source, owner, props) {
    var element = {
      // This tag allows us to uniquely identify this as a React Element
      $$typeof: REACT_ELEMENT_TYPE,
      // Built-in properties that belong on the element
      type: type,
      key: key,
      ref: ref,
      props: props,
      // Record the component responsible for creating this element.
      _owner: owner
    };

    {
      // The validation flag is currently mutative. We put it on
      // an external backing store so that we can freeze the whole object.
      // This can be replaced with a WeakMap once they are implemented in
      // commonly used development environments.
      element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
      // the validation flag non-enumerable (where possible, which should
      // include every environment we run tests in), so the test framework
      // ignores it.

      Object.defineProperty(element._store, 'validated', {
        configurable: false,
        enumerable: false,
        writable: true,
        value: false
      }); // self and source are DEV only properties.

      Object.defineProperty(element, '_self', {
        configurable: false,
        enumerable: false,
        writable: false,
        value: self
      }); // Two elements created in two different places should be considered
      // equal for testing purposes and therefore we hide it from enumeration.

      Object.defineProperty(element, '_source', {
        configurable: false,
        enumerable: false,
        writable: false,
        value: source
      });

      if (Object.freeze) {
        Object.freeze(element.props);
        Object.freeze(element);
      }
    }

    return element;
  };
  /**
   * https://github.com/reactjs/rfcs/pull/107
   * @param {*} type
   * @param {object} props
   * @param {string} key
   */

  function jsxDEV(type, config, maybeKey, source, self) {
    {
      var propName; // Reserved names are extracted

      var props = {};
      var key = null;
      var ref = null; // Currently, key can be spread in as a prop. This causes a potential
      // issue if key is also explicitly declared (ie. <div {...props} key="Hi" />
      // or <div key="Hi" {...props} /> ). We want to deprecate key spread,
      // but as an intermediary step, we will use jsxDEV for everything except
      // <div {...props} key="Hi" />, because we aren't currently able to tell if
      // key is explicitly declared to be undefined or not.

      if (maybeKey !== undefined) {
        {
          checkKeyStringCoercion(maybeKey);
        }

        key = '' + maybeKey;
      }

      if (hasValidKey(config)) {
        {
          checkKeyStringCoercion(config.key);
        }

        key = '' + config.key;
      }

      if (hasValidRef(config)) {
        ref = config.ref;
        warnIfStringRefCannotBeAutoConverted(config, self);
      } // Remaining properties are added to a new props object


      for (propName in config) {
        if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
          props[propName] = config[propName];
        }
      } // Resolve default props


      if (type && type.defaultProps) {
        var defaultProps = type.defaultProps;

        for (propName in defaultProps) {
          if (props[propName] === undefined) {
            props[propName] = defaultProps[propName];
          }
        }
      }

      if (key || ref) {
        var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;

        if (key) {
          defineKeyPropWarningGetter(props, displayName);
        }

        if (ref) {
          defineRefPropWarningGetter(props, displayName);
        }
      }

      return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
    }
  }

  var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
  var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;

  function setCurrentlyValidatingElement$1(element) {
    {
      if (element) {
        var owner = element._owner;
        var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
        ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
      } else {
        ReactDebugCurrentFrame$1.setExtraStackFrame(null);
      }
    }
  }

  var propTypesMisspellWarningShown;

  {
    propTypesMisspellWarningShown = false;
  }
  /**
   * Verifies the object is a ReactElement.
   * See https://reactjs.org/docs/react-api.html#isvalidelement
   * @param {?object} object
   * @return {boolean} True if `object` is a ReactElement.
   * @final
   */


  function isValidElement(object) {
    {
      return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
    }
  }

  function getDeclarationErrorAddendum() {
    {
      if (ReactCurrentOwner$1.current) {
        var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);

        if (name) {
          return '\n\nCheck the render method of `' + name + '`.';
        }
      }

      return '';
    }
  }

  function getSourceInfoErrorAddendum(source) {
    {
      if (source !== undefined) {
        var fileName = source.fileName.replace(/^.*[\\\/]/, '');
        var lineNumber = source.lineNumber;
        return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
      }

      return '';
    }
  }
  /**
   * Warn if there's no key explicitly set on dynamic arrays of children or
   * object keys are not valid. This allows us to keep track of children between
   * updates.
   */


  var ownerHasKeyUseWarning = {};

  function getCurrentComponentErrorInfo(parentType) {
    {
      var info = getDeclarationErrorAddendum();

      if (!info) {
        var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;

        if (parentName) {
          info = "\n\nCheck the top-level render call using <" + parentName + ">.";
        }
      }

      return info;
    }
  }
  /**
   * Warn if the element doesn't have an explicit key assigned to it.
   * This element is in an array. The array could grow and shrink or be
   * reordered. All children that haven't already been validated are required to
   * have a "key" property assigned to it. Error statuses are cached so a warning
   * will only be shown once.
   *
   * @internal
   * @param {ReactElement} element Element that requires a key.
   * @param {*} parentType element's parent's type.
   */


  function validateExplicitKey(element, parentType) {
    {
      if (!element._store || element._store.validated || element.key != null) {
        return;
      }

      element._store.validated = true;
      var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);

      if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
        return;
      }

      ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
      // property, it may be the creator of the child that's responsible for
      // assigning it a key.

      var childOwner = '';

      if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {
        // Give the component that originally created this child.
        childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
      }

      setCurrentlyValidatingElement$1(element);

      error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);

      setCurrentlyValidatingElement$1(null);
    }
  }
  /**
   * Ensure that every element either is passed in a static location, in an
   * array with an explicit keys property defined, or in an object literal
   * with valid key property.
   *
   * @internal
   * @param {ReactNode} node Statically passed child of any type.
   * @param {*} parentType node's parent's type.
   */


  function validateChildKeys(node, parentType) {
    {
      if (typeof node !== 'object') {
        return;
      }

      if (isArray(node)) {
        for (var i = 0; i < node.length; i++) {
          var child = node[i];

          if (isValidElement(child)) {
            validateExplicitKey(child, parentType);
          }
        }
      } else if (isValidElement(node)) {
        // This element was passed in a valid location.
        if (node._store) {
          node._store.validated = true;
        }
      } else if (node) {
        var iteratorFn = getIteratorFn(node);

        if (typeof iteratorFn === 'function') {
          // Entry iterators used to provide implicit keys,
          // but now we print a separate warning for them later.
          if (iteratorFn !== node.entries) {
            var iterator = iteratorFn.call(node);
            var step;

            while (!(step = iterator.next()).done) {
              if (isValidElement(step.value)) {
                validateExplicitKey(step.value, parentType);
              }
            }
          }
        }
      }
    }
  }
  /**
   * Given an element, validate that its props follow the propTypes definition,
   * provided by the type.
   *
   * @param {ReactElement} element
   */


  function validatePropTypes(element) {
    {
      var type = element.type;

      if (type === null || type === undefined || typeof type === 'string') {
        return;
      }

      var propTypes;

      if (typeof type === 'function') {
        propTypes = type.propTypes;
      } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
      // Inner props are checked in the reconciler.
      type.$$typeof === REACT_MEMO_TYPE)) {
        propTypes = type.propTypes;
      } else {
        return;
      }

      if (propTypes) {
        // Intentionally inside to avoid triggering lazy initializers:
        var name = getComponentNameFromType(type);
        checkPropTypes(propTypes, element.props, 'prop', name, element);
      } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
        propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:

        var _name = getComponentNameFromType(type);

        error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
      }

      if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
        error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
      }
    }
  }
  /**
   * Given a fragment, validate that it can only be provided with fragment props
   * @param {ReactElement} fragment
   */


  function validateFragmentProps(fragment) {
    {
      var keys = Object.keys(fragment.props);

      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];

        if (key !== 'children' && key !== 'key') {
          setCurrentlyValidatingElement$1(fragment);

          error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);

          setCurrentlyValidatingElement$1(null);
          break;
        }
      }

      if (fragment.ref !== null) {
        setCurrentlyValidatingElement$1(fragment);

        error('Invalid attribute `ref` supplied to `React.Fragment`.');

        setCurrentlyValidatingElement$1(null);
      }
    }
  }

  function jsxWithValidation(type, props, key, isStaticChildren, source, self) {
    {
      var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
      // succeed and there will likely be errors in render.

      if (!validType) {
        var info = '';

        if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
          info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
        }

        var sourceInfo = getSourceInfoErrorAddendum(source);

        if (sourceInfo) {
          info += sourceInfo;
        } else {
          info += getDeclarationErrorAddendum();
        }

        var typeString;

        if (type === null) {
          typeString = 'null';
        } else if (isArray(type)) {
          typeString = 'array';
        } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
          typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />";
          info = ' Did you accidentally export a JSX literal instead of a component?';
        } else {
          typeString = typeof type;
        }

        error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
      }

      var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.
      // TODO: Drop this when these are no longer allowed as the type argument.

      if (element == null) {
        return element;
      } // Skip key warning if the type isn't valid since our key validation logic
      // doesn't expect a non-string/function type and can throw confusing errors.
      // We don't want exception behavior to differ between dev and prod.
      // (Rendering will throw with a helpful message and as soon as the type is
      // fixed, the key warnings will appear.)


      if (validType) {
        var children = props.children;

        if (children !== undefined) {
          if (isStaticChildren) {
            if (isArray(children)) {
              for (var i = 0; i < children.length; i++) {
                validateChildKeys(children[i], type);
              }

              if (Object.freeze) {
                Object.freeze(children);
              }
            } else {
              error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');
            }
          } else {
            validateChildKeys(children, type);
          }
        }
      }

      if (type === REACT_FRAGMENT_TYPE) {
        validateFragmentProps(element);
      } else {
        validatePropTypes(element);
      }

      return element;
    }
  } // These two functions exist to still get child warnings in dev
  // even with the prod transform. This means that jsxDEV is purely
  // opt-in behavior for better messages but that we won't stop
  // giving you warnings if you use production apis.

  function jsxWithValidationStatic(type, props, key) {
    {
      return jsxWithValidation(type, props, key, true);
    }
  }
  function jsxWithValidationDynamic(type, props, key) {
    {
      return jsxWithValidation(type, props, key, false);
    }
  }

  var jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.
  // for now we can ship identical prod functions

  var jsxs =  jsxWithValidationStatic ;

  exports.Fragment = REACT_FRAGMENT_TYPE;
  exports.jsx = jsx;
  exports.jsxs = jsxs;
    })();
  }
  });
  reactJsxRuntime_development.Fragment;
  reactJsxRuntime_development.jsx;
  reactJsxRuntime_development.jsxs;

  var jsxRuntime = createCommonjsModule(function (module) {

  {
    module.exports = reactJsxRuntime_development;
  }
  });
  var jsxRuntime_1 = jsxRuntime.jsx;
  var jsxRuntime_2 = jsxRuntime.jsxs;

  let cache;
  if (typeof document === 'object') {
    cache = createCache({
      key: 'css',
      prepend: true
    });
  }
  function StyledEngineProvider(props) {
    const {
      injectFirst,
      children
    } = props;
    return injectFirst && cache ? /*#__PURE__*/jsxRuntime_1(CacheProvider, {
      value: cache,
      children: children
    }) : children;
  }
  StyledEngineProvider.propTypes = {
    /**
     * Your component tree.
     */
    children: PropTypes.node,
    /**
     * By default, the styles are injected last in the <head> element of the page.
     * As a result, they gain more specificity than any other style sheet.
     * If you want to override MUI's styles, set this prop.
     */
    injectFirst: PropTypes.bool
  } ;

  function isEmpty$4(obj) {
    return obj === undefined || obj === null || Object.keys(obj).length === 0;
  }
  function GlobalStyles$2(props) {
    const {
      styles,
      defaultTheme = {}
    } = props;
    const globalStyles = typeof styles === 'function' ? themeInput => styles(isEmpty$4(themeInput) ? defaultTheme : themeInput) : styles;
    return /*#__PURE__*/jsxRuntime_1(Global, {
      styles: globalStyles
    });
  }
  GlobalStyles$2.propTypes = {
    defaultTheme: PropTypes.object,
    styles: PropTypes.oneOfType([PropTypes.array, PropTypes.string, PropTypes.object, PropTypes.func])
  } ;

  function styled$3(tag, options) {
    const stylesFactory = newStyled(tag, options);
    {
      return (...styles) => {
        const component = typeof tag === 'string' ? `"${tag}"` : 'component';
        if (styles.length === 0) {
          console.error([`MUI: Seems like you called \`styled(${component})()\` without a \`style\` argument.`, 'You must provide a `styles` argument: `styled("div")(styleYouForgotToPass)`.'].join('\n'));
        } else if (styles.some(style => style === undefined)) {
          console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);
        }
        return stylesFactory(...styles);
      };
    }
  }

  // eslint-disable-next-line @typescript-eslint/naming-convention
  const internal_processStyles = (tag, processor) => {
    // Emotion attaches all the styles as `__emotion_styles`.
    // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186
    if (Array.isArray(tag.__emotion_styles)) {
      tag.__emotion_styles = processor(tag.__emotion_styles);
    }
  };

  const _excluded$2o = ["values", "unit", "step"];
  const sortBreakpointsValues = values => {
    const breakpointsAsArray = Object.keys(values).map(key => ({
      key,
      val: values[key]
    })) || [];
    // Sort in ascending order
    breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);
    return breakpointsAsArray.reduce((acc, obj) => {
      return _extends({}, acc, {
        [obj.key]: obj.val
      });
    }, {});
  };

  // Keep in mind that @media is inclusive by the CSS specification.
  function createBreakpoints(breakpoints) {
    const {
        // The breakpoint **start** at this value.
        // For instance with the first breakpoint xs: [xs, sm).
        values = {
          xs: 0,
          // phone
          sm: 600,
          // tablet
          md: 900,
          // small laptop
          lg: 1200,
          // desktop
          xl: 1536 // large screen
        },
        unit = 'px',
        step = 5
      } = breakpoints,
      other = _objectWithoutPropertiesLoose(breakpoints, _excluded$2o);
    const sortedValues = sortBreakpointsValues(values);
    const keys = Object.keys(sortedValues);
    function up(key) {
      const value = typeof values[key] === 'number' ? values[key] : key;
      return `@media (min-width:${value}${unit})`;
    }
    function down(key) {
      const value = typeof values[key] === 'number' ? values[key] : key;
      return `@media (max-width:${value - step / 100}${unit})`;
    }
    function between(start, end) {
      const endIndex = keys.indexOf(end);
      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})`;
    }
    function only(key) {
      if (keys.indexOf(key) + 1 < keys.length) {
        return between(key, keys[keys.indexOf(key) + 1]);
      }
      return up(key);
    }
    function not(key) {
      // handle first and last key separately, for better readability
      const keyIndex = keys.indexOf(key);
      if (keyIndex === 0) {
        return up(keys[1]);
      }
      if (keyIndex === keys.length - 1) {
        return down(keys[keyIndex]);
      }
      return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');
    }
    return _extends({
      keys,
      values: sortedValues,
      up,
      down,
      between,
      only,
      not,
      unit
    }, other);
  }

  const shape = {
    borderRadius: 4
  };
  var shape$1 = shape;

  const responsivePropType = PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) ;
  var responsivePropType$1 = responsivePropType;

  function merge(acc, item) {
    if (!item) {
      return acc;
    }
    return deepmerge(acc, item, {
      clone: false // No need to clone deep, it's way faster.
    });
  }

  // The breakpoint **start** at this value.
  // For instance with the first breakpoint xs: [xs, sm[.
  const values$1 = {
    xs: 0,
    // phone
    sm: 600,
    // tablet
    md: 900,
    // small laptop
    lg: 1200,
    // desktop
    xl: 1536 // large screen
  };
  const defaultBreakpoints = {
    // Sorted ASC by size. That's important.
    // It can't be configured as it's used statically for propTypes.
    keys: ['xs', 'sm', 'md', 'lg', 'xl'],
    up: key => `@media (min-width:${values$1[key]}px)`
  };
  function handleBreakpoints(props, propValue, styleFromPropValue) {
    const theme = props.theme || {};
    if (Array.isArray(propValue)) {
      const themeBreakpoints = theme.breakpoints || defaultBreakpoints;
      return propValue.reduce((acc, item, index) => {
        acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);
        return acc;
      }, {});
    }
    if (typeof propValue === 'object') {
      const themeBreakpoints = theme.breakpoints || defaultBreakpoints;
      return Object.keys(propValue).reduce((acc, breakpoint) => {
        // key is breakpoint
        if (Object.keys(themeBreakpoints.values || values$1).indexOf(breakpoint) !== -1) {
          const mediaKey = themeBreakpoints.up(breakpoint);
          acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);
        } else {
          const cssKey = breakpoint;
          acc[cssKey] = propValue[cssKey];
        }
        return acc;
      }, {});
    }
    const output = styleFromPropValue(propValue);
    return output;
  }
  function createEmptyBreakpointObject(breakpointsInput = {}) {
    var _breakpointsInput$key;
    const breakpointsInOrder = (_breakpointsInput$key = breakpointsInput.keys) == null ? void 0 : _breakpointsInput$key.reduce((acc, key) => {
      const breakpointStyleKey = breakpointsInput.up(key);
      acc[breakpointStyleKey] = {};
      return acc;
    }, {});
    return breakpointsInOrder || {};
  }
  function removeUnusedBreakpoints(breakpointKeys, style) {
    return breakpointKeys.reduce((acc, key) => {
      const breakpointOutput = acc[key];
      const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;
      if (isBreakpointUnused) {
        delete acc[key];
      }
      return acc;
    }, style);
  }
  function mergeBreakpointsInOrder(breakpointsInput, ...styles) {
    const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);
    const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});
    return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);
  }

  // compute base for responsive values; e.g.,
  // [1,2,3] => {xs: true, sm: true, md: true}
  // {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}
  function computeBreakpointsBase(breakpointValues, themeBreakpoints) {
    // fixed value
    if (typeof breakpointValues !== 'object') {
      return {};
    }
    const base = {};
    const breakpointsKeys = Object.keys(themeBreakpoints);
    if (Array.isArray(breakpointValues)) {
      breakpointsKeys.forEach((breakpoint, i) => {
        if (i < breakpointValues.length) {
          base[breakpoint] = true;
        }
      });
    } else {
      breakpointsKeys.forEach(breakpoint => {
        if (breakpointValues[breakpoint] != null) {
          base[breakpoint] = true;
        }
      });
    }
    return base;
  }
  function resolveBreakpointValues({
    values: breakpointValues,
    breakpoints: themeBreakpoints,
    base: customBase
  }) {
    const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);
    const keys = Object.keys(base);
    if (keys.length === 0) {
      return breakpointValues;
    }
    let previous;
    return keys.reduce((acc, breakpoint, i) => {
      if (Array.isArray(breakpointValues)) {
        acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];
        previous = i;
      } else if (typeof breakpointValues === 'object') {
        acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];
        previous = breakpoint;
      } else {
        acc[breakpoint] = breakpointValues;
      }
      return acc;
    }, {});
  }

  function getPath(obj, path, checkVars = true) {
    if (!path || typeof path !== 'string') {
      return null;
    }

    // Check if CSS variables are used
    if (obj && obj.vars && checkVars) {
      const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);
      if (val != null) {
        return val;
      }
    }
    return path.split('.').reduce((acc, item) => {
      if (acc && acc[item] != null) {
        return acc[item];
      }
      return null;
    }, obj);
  }
  function getStyleValue$1(themeMapping, transform, propValueFinal, userValue = propValueFinal) {
    let value;
    if (typeof themeMapping === 'function') {
      value = themeMapping(propValueFinal);
    } else if (Array.isArray(themeMapping)) {
      value = themeMapping[propValueFinal] || userValue;
    } else {
      value = getPath(themeMapping, propValueFinal) || userValue;
    }
    if (transform) {
      value = transform(value, userValue, themeMapping);
    }
    return value;
  }
  function style$2(options) {
    const {
      prop,
      cssProperty = options.prop,
      themeKey,
      transform
    } = options;

    // false positive
    // eslint-disable-next-line react/function-component-definition
    const fn = props => {
      if (props[prop] == null) {
        return null;
      }
      const propValue = props[prop];
      const theme = props.theme;
      const themeMapping = getPath(theme, themeKey) || {};
      const styleFromPropValue = propValueFinal => {
        let value = getStyleValue$1(themeMapping, transform, propValueFinal);
        if (propValueFinal === value && typeof propValueFinal === 'string') {
          // Haven't found value
          value = getStyleValue$1(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);
        }
        if (cssProperty === false) {
          return value;
        }
        return {
          [cssProperty]: value
        };
      };
      return handleBreakpoints(props, propValue, styleFromPropValue);
    };
    fn.propTypes = {
      [prop]: responsivePropType$1
    } ;
    fn.filterProps = [prop];
    return fn;
  }

  function memoize(fn) {
    const cache = {};
    return arg => {
      if (cache[arg] === undefined) {
        cache[arg] = fn(arg);
      }
      return cache[arg];
    };
  }

  const properties = {
    m: 'margin',
    p: 'padding'
  };
  const directions = {
    t: 'Top',
    r: 'Right',
    b: 'Bottom',
    l: 'Left',
    x: ['Left', 'Right'],
    y: ['Top', 'Bottom']
  };
  const aliases = {
    marginX: 'mx',
    marginY: 'my',
    paddingX: 'px',
    paddingY: 'py'
  };

  // memoize() impact:
  // From 300,000 ops/sec
  // To 350,000 ops/sec
  const getCssProperties = memoize(prop => {
    // It's not a shorthand notation.
    if (prop.length > 2) {
      if (aliases[prop]) {
        prop = aliases[prop];
      } else {
        return [prop];
      }
    }
    const [a, b] = prop.split('');
    const property = properties[a];
    const direction = directions[b] || '';
    return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];
  });
  const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];
  const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];
  const spacingKeys = [...marginKeys, ...paddingKeys];
  function createUnaryUnit(theme, themeKey, defaultValue, propName) {
    var _getPath;
    const themeSpacing = (_getPath = getPath(theme, themeKey, false)) != null ? _getPath : defaultValue;
    if (typeof themeSpacing === 'number') {
      return abs => {
        if (typeof abs === 'string') {
          return abs;
        }
        {
          if (typeof abs !== 'number') {
            console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${abs}.`);
          }
        }
        return themeSpacing * abs;
      };
    }
    if (Array.isArray(themeSpacing)) {
      return abs => {
        if (typeof abs === 'string') {
          return abs;
        }
        {
          if (!Number.isInteger(abs)) {
            console.error([`MUI: The \`theme.${themeKey}\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \`theme.${themeKey}\` as a number.`].join('\n'));
          } else if (abs > themeSpacing.length - 1) {
            console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\n'));
          }
        }
        return themeSpacing[abs];
      };
    }
    if (typeof themeSpacing === 'function') {
      return themeSpacing;
    }
    {
      console.error([`MUI: The \`theme.${themeKey}\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\n'));
    }
    return () => undefined;
  }
  function createUnarySpacing(theme) {
    return createUnaryUnit(theme, 'spacing', 8, 'spacing');
  }
  function getValue(transformer, propValue) {
    if (typeof propValue === 'string' || propValue == null) {
      return propValue;
    }
    const abs = Math.abs(propValue);
    const transformed = transformer(abs);
    if (propValue >= 0) {
      return transformed;
    }
    if (typeof transformed === 'number') {
      return -transformed;
    }
    return `-${transformed}`;
  }
  function getStyleFromPropValue(cssProperties, transformer) {
    return propValue => cssProperties.reduce((acc, cssProperty) => {
      acc[cssProperty] = getValue(transformer, propValue);
      return acc;
    }, {});
  }
  function resolveCssProperty(props, keys, prop, transformer) {
    // Using a hash computation over an array iteration could be faster, but with only 28 items,
    // it's doesn't worth the bundle size.
    if (keys.indexOf(prop) === -1) {
      return null;
    }
    const cssProperties = getCssProperties(prop);
    const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);
    const propValue = props[prop];
    return handleBreakpoints(props, propValue, styleFromPropValue);
  }
  function style$1(props, keys) {
    const transformer = createUnarySpacing(props.theme);
    return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});
  }
  function margin(props) {
    return style$1(props, marginKeys);
  }
  margin.propTypes = marginKeys.reduce((obj, key) => {
    obj[key] = responsivePropType$1;
    return obj;
  }, {}) ;
  margin.filterProps = marginKeys;
  function padding(props) {
    return style$1(props, paddingKeys);
  }
  padding.propTypes = paddingKeys.reduce((obj, key) => {
    obj[key] = responsivePropType$1;
    return obj;
  }, {}) ;
  padding.filterProps = paddingKeys;
  spacingKeys.reduce((obj, key) => {
    obj[key] = responsivePropType$1;
    return obj;
  }, {}) ;

  // The different signatures imply different meaning for their arguments that can't be expressed structurally.
  // We express the difference with variable names.

  function createSpacing(spacingInput = 8) {
    // Already transformed.
    if (spacingInput.mui) {
      return spacingInput;
    }

    // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.
    // Smaller components, such as icons, can align to a 4dp grid.
    // https://m2.material.io/design/layout/understanding-layout.html
    const transform = createUnarySpacing({
      spacing: spacingInput
    });
    const spacing = (...argsInput) => {
      {
        if (!(argsInput.length <= 4)) {
          console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);
        }
      }
      const args = argsInput.length === 0 ? [1] : argsInput;
      return args.map(argument => {
        const output = transform(argument);
        return typeof output === 'number' ? `${output}px` : output;
      }).join(' ');
    };
    spacing.mui = true;
    return spacing;
  }

  function compose(...styles) {
    const handlers = styles.reduce((acc, style) => {
      style.filterProps.forEach(prop => {
        acc[prop] = style;
      });
      return acc;
    }, {});

    // false positive
    // eslint-disable-next-line react/function-component-definition
    const fn = props => {
      return Object.keys(props).reduce((acc, prop) => {
        if (handlers[prop]) {
          return merge(acc, handlers[prop](props));
        }
        return acc;
      }, {});
    };
    fn.propTypes = styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) ;
    fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);
    return fn;
  }

  function borderTransform(value) {
    if (typeof value !== 'number') {
      return value;
    }
    return `${value}px solid`;
  }
  function createBorderStyle(prop, transform) {
    return style$2({
      prop,
      themeKey: 'borders',
      transform
    });
  }
  const border = createBorderStyle('border', borderTransform);
  const borderTop = createBorderStyle('borderTop', borderTransform);
  const borderRight = createBorderStyle('borderRight', borderTransform);
  const borderBottom = createBorderStyle('borderBottom', borderTransform);
  const borderLeft = createBorderStyle('borderLeft', borderTransform);
  const borderColor = createBorderStyle('borderColor');
  const borderTopColor = createBorderStyle('borderTopColor');
  const borderRightColor = createBorderStyle('borderRightColor');
  const borderBottomColor = createBorderStyle('borderBottomColor');
  const borderLeftColor = createBorderStyle('borderLeftColor');
  const outline = createBorderStyle('outline', borderTransform);
  const outlineColor = createBorderStyle('outlineColor');

  // false positive
  // eslint-disable-next-line react/function-component-definition
  const borderRadius = props => {
    if (props.borderRadius !== undefined && props.borderRadius !== null) {
      const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');
      const styleFromPropValue = propValue => ({
        borderRadius: getValue(transformer, propValue)
      });
      return handleBreakpoints(props, props.borderRadius, styleFromPropValue);
    }
    return null;
  };
  borderRadius.propTypes = {
    borderRadius: responsivePropType$1
  } ;
  borderRadius.filterProps = ['borderRadius'];
  compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);

  // false positive
  // eslint-disable-next-line react/function-component-definition
  const gap = props => {
    if (props.gap !== undefined && props.gap !== null) {
      const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');
      const styleFromPropValue = propValue => ({
        gap: getValue(transformer, propValue)
      });
      return handleBreakpoints(props, props.gap, styleFromPropValue);
    }
    return null;
  };
  gap.propTypes = {
    gap: responsivePropType$1
  } ;
  gap.filterProps = ['gap'];

  // false positive
  // eslint-disable-next-line react/function-component-definition
  const columnGap = props => {
    if (props.columnGap !== undefined && props.columnGap !== null) {
      const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');
      const styleFromPropValue = propValue => ({
        columnGap: getValue(transformer, propValue)
      });
      return handleBreakpoints(props, props.columnGap, styleFromPropValue);
    }
    return null;
  };
  columnGap.propTypes = {
    columnGap: responsivePropType$1
  } ;
  columnGap.filterProps = ['columnGap'];

  // false positive
  // eslint-disable-next-line react/function-component-definition
  const rowGap = props => {
    if (props.rowGap !== undefined && props.rowGap !== null) {
      const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');
      const styleFromPropValue = propValue => ({
        rowGap: getValue(transformer, propValue)
      });
      return handleBreakpoints(props, props.rowGap, styleFromPropValue);
    }
    return null;
  };
  rowGap.propTypes = {
    rowGap: responsivePropType$1
  } ;
  rowGap.filterProps = ['rowGap'];
  const gridColumn = style$2({
    prop: 'gridColumn'
  });
  const gridRow = style$2({
    prop: 'gridRow'
  });
  const gridAutoFlow = style$2({
    prop: 'gridAutoFlow'
  });
  const gridAutoColumns = style$2({
    prop: 'gridAutoColumns'
  });
  const gridAutoRows = style$2({
    prop: 'gridAutoRows'
  });
  const gridTemplateColumns = style$2({
    prop: 'gridTemplateColumns'
  });
  const gridTemplateRows = style$2({
    prop: 'gridTemplateRows'
  });
  const gridTemplateAreas = style$2({
    prop: 'gridTemplateAreas'
  });
  const gridArea = style$2({
    prop: 'gridArea'
  });
  compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);

  function paletteTransform(value, userValue) {
    if (userValue === 'grey') {
      return userValue;
    }
    return value;
  }
  const color = style$2({
    prop: 'color',
    themeKey: 'palette',
    transform: paletteTransform
  });
  const bgcolor = style$2({
    prop: 'bgcolor',
    cssProperty: 'backgroundColor',
    themeKey: 'palette',
    transform: paletteTransform
  });
  const backgroundColor = style$2({
    prop: 'backgroundColor',
    themeKey: 'palette',
    transform: paletteTransform
  });
  compose(color, bgcolor, backgroundColor);

  function sizingTransform(value) {
    return value <= 1 && value !== 0 ? `${value * 100}%` : value;
  }
  const width = style$2({
    prop: 'width',
    transform: sizingTransform
  });
  const maxWidth = props => {
    if (props.maxWidth !== undefined && props.maxWidth !== null) {
      const styleFromPropValue = propValue => {
        var _props$theme, _props$theme2;
        const breakpoint = ((_props$theme = props.theme) == null || (_props$theme = _props$theme.breakpoints) == null || (_props$theme = _props$theme.values) == null ? void 0 : _props$theme[propValue]) || values$1[propValue];
        if (!breakpoint) {
          return {
            maxWidth: sizingTransform(propValue)
          };
        }
        if (((_props$theme2 = props.theme) == null || (_props$theme2 = _props$theme2.breakpoints) == null ? void 0 : _props$theme2.unit) !== 'px') {
          return {
            maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`
          };
        }
        return {
          maxWidth: breakpoint
        };
      };
      return handleBreakpoints(props, props.maxWidth, styleFromPropValue);
    }
    return null;
  };
  maxWidth.filterProps = ['maxWidth'];
  const minWidth = style$2({
    prop: 'minWidth',
    transform: sizingTransform
  });
  const height = style$2({
    prop: 'height',
    transform: sizingTransform
  });
  const maxHeight = style$2({
    prop: 'maxHeight',
    transform: sizingTransform
  });
  const minHeight = style$2({
    prop: 'minHeight',
    transform: sizingTransform
  });
  style$2({
    prop: 'size',
    cssProperty: 'width',
    transform: sizingTransform
  });
  style$2({
    prop: 'size',
    cssProperty: 'height',
    transform: sizingTransform
  });
  const boxSizing = style$2({
    prop: 'boxSizing'
  });
  compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);

  const defaultSxConfig = {
    // borders
    border: {
      themeKey: 'borders',
      transform: borderTransform
    },
    borderTop: {
      themeKey: 'borders',
      transform: borderTransform
    },
    borderRight: {
      themeKey: 'borders',
      transform: borderTransform
    },
    borderBottom: {
      themeKey: 'borders',
      transform: borderTransform
    },
    borderLeft: {
      themeKey: 'borders',
      transform: borderTransform
    },
    borderColor: {
      themeKey: 'palette'
    },
    borderTopColor: {
      themeKey: 'palette'
    },
    borderRightColor: {
      themeKey: 'palette'
    },
    borderBottomColor: {
      themeKey: 'palette'
    },
    borderLeftColor: {
      themeKey: 'palette'
    },
    outline: {
      themeKey: 'borders',
      transform: borderTransform
    },
    outlineColor: {
      themeKey: 'palette'
    },
    borderRadius: {
      themeKey: 'shape.borderRadius',
      style: borderRadius
    },
    // palette
    color: {
      themeKey: 'palette',
      transform: paletteTransform
    },
    bgcolor: {
      themeKey: 'palette',
      cssProperty: 'backgroundColor',
      transform: paletteTransform
    },
    backgroundColor: {
      themeKey: 'palette',
      transform: paletteTransform
    },
    // spacing
    p: {
      style: padding
    },
    pt: {
      style: padding
    },
    pr: {
      style: padding
    },
    pb: {
      style: padding
    },
    pl: {
      style: padding
    },
    px: {
      style: padding
    },
    py: {
      style: padding
    },
    padding: {
      style: padding
    },
    paddingTop: {
      style: padding
    },
    paddingRight: {
      style: padding
    },
    paddingBottom: {
      style: padding
    },
    paddingLeft: {
      style: padding
    },
    paddingX: {
      style: padding
    },
    paddingY: {
      style: padding
    },
    paddingInline: {
      style: padding
    },
    paddingInlineStart: {
      style: padding
    },
    paddingInlineEnd: {
      style: padding
    },
    paddingBlock: {
      style: padding
    },
    paddingBlockStart: {
      style: padding
    },
    paddingBlockEnd: {
      style: padding
    },
    m: {
      style: margin
    },
    mt: {
      style: margin
    },
    mr: {
      style: margin
    },
    mb: {
      style: margin
    },
    ml: {
      style: margin
    },
    mx: {
      style: margin
    },
    my: {
      style: margin
    },
    margin: {
      style: margin
    },
    marginTop: {
      style: margin
    },
    marginRight: {
      style: margin
    },
    marginBottom: {
      style: margin
    },
    marginLeft: {
      style: margin
    },
    marginX: {
      style: margin
    },
    marginY: {
      style: margin
    },
    marginInline: {
      style: margin
    },
    marginInlineStart: {
      style: margin
    },
    marginInlineEnd: {
      style: margin
    },
    marginBlock: {
      style: margin
    },
    marginBlockStart: {
      style: margin
    },
    marginBlockEnd: {
      style: margin
    },
    // display
    displayPrint: {
      cssProperty: false,
      transform: value => ({
        '@media print': {
          display: value
        }
      })
    },
    display: {},
    overflow: {},
    textOverflow: {},
    visibility: {},
    whiteSpace: {},
    // flexbox
    flexBasis: {},
    flexDirection: {},
    flexWrap: {},
    justifyContent: {},
    alignItems: {},
    alignContent: {},
    order: {},
    flex: {},
    flexGrow: {},
    flexShrink: {},
    alignSelf: {},
    justifyItems: {},
    justifySelf: {},
    // grid
    gap: {
      style: gap
    },
    rowGap: {
      style: rowGap
    },
    columnGap: {
      style: columnGap
    },
    gridColumn: {},
    gridRow: {},
    gridAutoFlow: {},
    gridAutoColumns: {},
    gridAutoRows: {},
    gridTemplateColumns: {},
    gridTemplateRows: {},
    gridTemplateAreas: {},
    gridArea: {},
    // positions
    position: {},
    zIndex: {
      themeKey: 'zIndex'
    },
    top: {},
    right: {},
    bottom: {},
    left: {},
    // shadows
    boxShadow: {
      themeKey: 'shadows'
    },
    // sizing
    width: {
      transform: sizingTransform
    },
    maxWidth: {
      style: maxWidth
    },
    minWidth: {
      transform: sizingTransform
    },
    height: {
      transform: sizingTransform
    },
    maxHeight: {
      transform: sizingTransform
    },
    minHeight: {
      transform: sizingTransform
    },
    boxSizing: {},
    // typography
    fontFamily: {
      themeKey: 'typography'
    },
    fontSize: {
      themeKey: 'typography'
    },
    fontStyle: {
      themeKey: 'typography'
    },
    fontWeight: {
      themeKey: 'typography'
    },
    letterSpacing: {},
    textTransform: {},
    lineHeight: {},
    textAlign: {},
    typography: {
      cssProperty: false,
      themeKey: 'typography'
    }
  };
  var defaultSxConfig$1 = defaultSxConfig;

  function objectsHaveSameKeys(...objects) {
    const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);
    const union = new Set(allKeys);
    return objects.every(object => union.size === Object.keys(object).length);
  }
  function callIfFn(maybeFn, arg) {
    return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;
  }

  // eslint-disable-next-line @typescript-eslint/naming-convention
  function unstable_createStyleFunctionSx() {
    function getThemeValue(prop, val, theme, config) {
      const props = {
        [prop]: val,
        theme
      };
      const options = config[prop];
      if (!options) {
        return {
          [prop]: val
        };
      }
      const {
        cssProperty = prop,
        themeKey,
        transform,
        style
      } = options;
      if (val == null) {
        return null;
      }

      // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123
      if (themeKey === 'typography' && val === 'inherit') {
        return {
          [prop]: val
        };
      }
      const themeMapping = getPath(theme, themeKey) || {};
      if (style) {
        return style(props);
      }
      const styleFromPropValue = propValueFinal => {
        let value = getStyleValue$1(themeMapping, transform, propValueFinal);
        if (propValueFinal === value && typeof propValueFinal === 'string') {
          // Haven't found value
          value = getStyleValue$1(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);
        }
        if (cssProperty === false) {
          return value;
        }
        return {
          [cssProperty]: value
        };
      };
      return handleBreakpoints(props, val, styleFromPropValue);
    }
    function styleFunctionSx(props) {
      var _theme$unstable_sxCon;
      const {
        sx,
        theme = {}
      } = props || {};
      if (!sx) {
        return null; // Emotion & styled-components will neglect null
      }
      const config = (_theme$unstable_sxCon = theme.unstable_sxConfig) != null ? _theme$unstable_sxCon : defaultSxConfig$1;

      /*
       * Receive `sxInput` as object or callback
       * and then recursively check keys & values to create media query object styles.
       * (the result will be used in `styled`)
       */
      function traverse(sxInput) {
        let sxObject = sxInput;
        if (typeof sxInput === 'function') {
          sxObject = sxInput(theme);
        } else if (typeof sxInput !== 'object') {
          // value
          return sxInput;
        }
        if (!sxObject) {
          return null;
        }
        const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);
        const breakpointsKeys = Object.keys(emptyBreakpoints);
        let css = emptyBreakpoints;
        Object.keys(sxObject).forEach(styleKey => {
          const value = callIfFn(sxObject[styleKey], theme);
          if (value !== null && value !== undefined) {
            if (typeof value === 'object') {
              if (config[styleKey]) {
                css = merge(css, getThemeValue(styleKey, value, theme, config));
              } else {
                const breakpointsValues = handleBreakpoints({
                  theme
                }, value, x => ({
                  [styleKey]: x
                }));
                if (objectsHaveSameKeys(breakpointsValues, value)) {
                  css[styleKey] = styleFunctionSx({
                    sx: value,
                    theme
                  });
                } else {
                  css = merge(css, breakpointsValues);
                }
              }
            } else {
              css = merge(css, getThemeValue(styleKey, value, theme, config));
            }
          }
        });
        return removeUnusedBreakpoints(breakpointsKeys, css);
      }
      return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);
    }
    return styleFunctionSx;
  }
  const styleFunctionSx = unstable_createStyleFunctionSx();
  styleFunctionSx.filterProps = ['sx'];
  var styleFunctionSx$1 = styleFunctionSx;

  const _excluded$2n = ["breakpoints", "palette", "spacing", "shape"];
  function createTheme$1(options = {}, ...args) {
    const {
        breakpoints: breakpointsInput = {},
        palette: paletteInput = {},
        spacing: spacingInput,
        shape: shapeInput = {}
      } = options,
      other = _objectWithoutPropertiesLoose(options, _excluded$2n);
    const breakpoints = createBreakpoints(breakpointsInput);
    const spacing = createSpacing(spacingInput);
    let muiTheme = deepmerge({
      breakpoints,
      direction: 'ltr',
      components: {},
      // Inject component definitions.
      palette: _extends({
        mode: 'light'
      }, paletteInput),
      spacing,
      shape: _extends({}, shape$1, shapeInput)
    }, other);
    muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);
    muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig$1, other == null ? void 0 : other.unstable_sxConfig);
    muiTheme.unstable_sx = function sx(props) {
      return styleFunctionSx$1({
        sx: props,
        theme: this
      });
    };
    return muiTheme;
  }

  function isObjectEmpty(obj) {
    return Object.keys(obj).length === 0;
  }
  function useTheme$3(defaultTheme = null) {
    const contextTheme = React__namespace.useContext(ThemeContext$2);
    return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;
  }

  const systemDefaultTheme$1 = createTheme$1();
  function useTheme$2(defaultTheme = systemDefaultTheme$1) {
    return useTheme$3(defaultTheme);
  }

  function GlobalStyles$1({
    styles,
    themeId,
    defaultTheme = {}
  }) {
    const upperTheme = useTheme$2(defaultTheme);
    const globalStyles = typeof styles === 'function' ? styles(themeId ? upperTheme[themeId] || upperTheme : upperTheme) : styles;
    return /*#__PURE__*/jsxRuntime_1(GlobalStyles$2, {
      styles: globalStyles
    });
  }
  GlobalStyles$1.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * @ignore
     */
    defaultTheme: PropTypes.object,
    /**
     * @ignore
     */
    styles: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.array, PropTypes.func, PropTypes.number, PropTypes.object, PropTypes.string, PropTypes.bool]),
    /**
     * @ignore
     */
    themeId: PropTypes.string
  } ;

  const _excluded$2m = ["sx"];
  const splitProps = props => {
    var _props$theme$unstable, _props$theme;
    const result = {
      systemProps: {},
      otherProps: {}
    };
    const config = (_props$theme$unstable = props == null || (_props$theme = props.theme) == null ? void 0 : _props$theme.unstable_sxConfig) != null ? _props$theme$unstable : defaultSxConfig$1;
    Object.keys(props).forEach(prop => {
      if (config[prop]) {
        result.systemProps[prop] = props[prop];
      } else {
        result.otherProps[prop] = props[prop];
      }
    });
    return result;
  };
  function extendSxProp(props) {
    const {
        sx: inSx
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$2m);
    const {
      systemProps,
      otherProps
    } = splitProps(other);
    let finalSx;
    if (Array.isArray(inSx)) {
      finalSx = [systemProps, ...inSx];
    } else if (typeof inSx === 'function') {
      finalSx = (...args) => {
        const result = inSx(...args);
        if (!isPlainObject(result)) {
          return systemProps;
        }
        return _extends({}, systemProps, result);
      };
    } else {
      finalSx = _extends({}, systemProps, inSx);
    }
    return _extends({}, otherProps, {
      sx: finalSx
    });
  }

  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))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}

  const _excluded$2l = ["className", "component"];
  function createBox(options = {}) {
    const {
      themeId,
      defaultTheme,
      defaultClassName = 'MuiBox-root',
      generateClassName
    } = options;
    const BoxRoot = styled$3('div', {
      shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'
    })(styleFunctionSx$1);
    const Box = /*#__PURE__*/React__namespace.forwardRef(function Box(inProps, ref) {
      const theme = useTheme$2(defaultTheme);
      const _extendSxProp = extendSxProp(inProps),
        {
          className,
          component = 'div'
        } = _extendSxProp,
        other = _objectWithoutPropertiesLoose(_extendSxProp, _excluded$2l);
      return /*#__PURE__*/jsxRuntime_1(BoxRoot, _extends({
        as: component,
        ref: ref,
        className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),
        theme: themeId ? theme[themeId] || theme : theme
      }, other));
    });
    return Box;
  }

  const _excluded$2k = ["variant"];
  function isEmpty$3(string) {
    return string.length === 0;
  }

  /**
   * Generates string classKey based on the properties provided. It starts with the
   * variant if defined, and then it appends all other properties in alphabetical order.
   * @param {object} props - the properties for which the classKey should be created.
   */
  function propsToClassKey(props) {
    const {
        variant
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$2k);
    let classKey = variant || '';
    Object.keys(other).sort().forEach(key => {
      if (key === 'color') {
        classKey += isEmpty$3(classKey) ? props[key] : capitalize(props[key]);
      } else {
        classKey += `${isEmpty$3(classKey) ? key : capitalize(key)}${capitalize(props[key].toString())}`;
      }
    });
    return classKey;
  }

  const _excluded$2j = ["name", "slot", "skipVariantsResolver", "skipSx", "overridesResolver"];
  function isEmpty$2(obj) {
    return Object.keys(obj).length === 0;
  }

  // https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40
  function isStringTag(tag) {
    return typeof tag === 'string' &&
    // 96 is one less than the char code
    // for "a" so this is checking that
    // it's a lowercase character
    tag.charCodeAt(0) > 96;
  }
  const getStyleOverrides = (name, theme) => {
    if (theme.components && theme.components[name] && theme.components[name].styleOverrides) {
      return theme.components[name].styleOverrides;
    }
    return null;
  };
  const transformVariants = variants => {
    const variantsStyles = {};
    if (variants) {
      variants.forEach(definition => {
        const key = propsToClassKey(definition.props);
        variantsStyles[key] = definition.style;
      });
    }
    return variantsStyles;
  };
  const getVariantStyles = (name, theme) => {
    let variants = [];
    if (theme && theme.components && theme.components[name] && theme.components[name].variants) {
      variants = theme.components[name].variants;
    }
    return transformVariants(variants);
  };
  const variantsResolver = (props, styles, variants) => {
    const {
      ownerState = {}
    } = props;
    const variantsStyles = [];
    if (variants) {
      variants.forEach(variant => {
        let isMatch = true;
        Object.keys(variant.props).forEach(key => {
          if (ownerState[key] !== variant.props[key] && props[key] !== variant.props[key]) {
            isMatch = false;
          }
        });
        if (isMatch) {
          variantsStyles.push(styles[propsToClassKey(variant.props)]);
        }
      });
    }
    return variantsStyles;
  };
  const themeVariantsResolver = (props, styles, theme, name) => {
    var _theme$components;
    const themeVariants = theme == null || (_theme$components = theme.components) == null || (_theme$components = _theme$components[name]) == null ? void 0 : _theme$components.variants;
    return variantsResolver(props, styles, themeVariants);
  };

  // Update /system/styled/#api in case if this changes
  function shouldForwardProp(prop) {
    return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';
  }
  const systemDefaultTheme = createTheme$1();
  const lowercaseFirstLetter = string => {
    if (!string) {
      return string;
    }
    return string.charAt(0).toLowerCase() + string.slice(1);
  };
  function resolveTheme({
    defaultTheme,
    theme,
    themeId
  }) {
    return isEmpty$2(theme) ? defaultTheme : theme[themeId] || theme;
  }
  function defaultOverridesResolver(slot) {
    if (!slot) {
      return null;
    }
    return (props, styles) => styles[slot];
  }
  const muiStyledFunctionResolver = ({
    styledArg,
    props,
    defaultTheme,
    themeId
  }) => {
    const resolvedStyles = styledArg(_extends({}, props, {
      theme: resolveTheme(_extends({}, props, {
        defaultTheme,
        themeId
      }))
    }));
    let optionalVariants;
    if (resolvedStyles && resolvedStyles.variants) {
      optionalVariants = resolvedStyles.variants;
      delete resolvedStyles.variants;
    }
    if (optionalVariants) {
      const variantsStyles = variantsResolver(props, transformVariants(optionalVariants), optionalVariants);
      return [resolvedStyles, ...variantsStyles];
    }
    return resolvedStyles;
  };
  function createStyled(input = {}) {
    const {
      themeId,
      defaultTheme = systemDefaultTheme,
      rootShouldForwardProp = shouldForwardProp,
      slotShouldForwardProp = shouldForwardProp
    } = input;
    const systemSx = props => {
      return styleFunctionSx$1(_extends({}, props, {
        theme: resolveTheme(_extends({}, props, {
          defaultTheme,
          themeId
        }))
      }));
    };
    systemSx.__mui_systemSx = true;
    return (tag, inputOptions = {}) => {
      // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.
      internal_processStyles(tag, styles => styles.filter(style => !(style != null && style.__mui_systemSx)));
      const {
          name: componentName,
          slot: componentSlot,
          skipVariantsResolver: inputSkipVariantsResolver,
          skipSx: inputSkipSx,
          // TODO v6: remove `lowercaseFirstLetter()` in the next major release
          // For more details: https://github.com/mui/material-ui/pull/37908
          overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot))
        } = inputOptions,
        options = _objectWithoutPropertiesLoose(inputOptions, _excluded$2j);

      // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.
      const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :
      // TODO v6: remove `Root` in the next major release
      // For more details: https://github.com/mui/material-ui/pull/37908
      componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;
      const skipSx = inputSkipSx || false;
      let label;
      {
        if (componentName) {
          // TODO v6: remove `lowercaseFirstLetter()` in the next major release
          // For more details: https://github.com/mui/material-ui/pull/37908
          label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;
        }
      }
      let shouldForwardPropOption = shouldForwardProp;

      // TODO v6: remove `Root` in the next major release
      // For more details: https://github.com/mui/material-ui/pull/37908
      if (componentSlot === 'Root' || componentSlot === 'root') {
        shouldForwardPropOption = rootShouldForwardProp;
      } else if (componentSlot) {
        // any other slot specified
        shouldForwardPropOption = slotShouldForwardProp;
      } else if (isStringTag(tag)) {
        // for string (html) tag, preserve the behavior in emotion & styled-components.
        shouldForwardPropOption = undefined;
      }
      const defaultStyledResolver = styled$3(tag, _extends({
        shouldForwardProp: shouldForwardPropOption,
        label
      }, options));
      const muiStyledResolver = (styleArg, ...expressions) => {
        const expressionsWithDefaultTheme = expressions ? expressions.map(stylesArg => {
          // On the server Emotion doesn't use React.forwardRef for creating components, so the created
          // component stays as a function. This condition makes sure that we do not interpolate functions
          // which are basically components used as a selectors.
          if (typeof stylesArg === 'function' && stylesArg.__emotion_real !== stylesArg) {
            return props => muiStyledFunctionResolver({
              styledArg: stylesArg,
              props,
              defaultTheme,
              themeId
            });
          }
          if (isPlainObject(stylesArg)) {
            let transformedStylesArg = stylesArg;
            let styledArgVariants;
            if (stylesArg && stylesArg.variants) {
              styledArgVariants = stylesArg.variants;
              delete transformedStylesArg.variants;
              transformedStylesArg = props => {
                let result = stylesArg;
                const variantStyles = variantsResolver(props, transformVariants(styledArgVariants), styledArgVariants);
                variantStyles.forEach(variantStyle => {
                  result = deepmerge(result, variantStyle);
                });
                return result;
              };
            }
            return transformedStylesArg;
          }
          return stylesArg;
        }) : [];
        let transformedStyleArg = styleArg;
        if (isPlainObject(styleArg)) {
          let styledArgVariants;
          if (styleArg && styleArg.variants) {
            styledArgVariants = styleArg.variants;
            delete transformedStyleArg.variants;
            transformedStyleArg = props => {
              let result = styleArg;
              const variantStyles = variantsResolver(props, transformVariants(styledArgVariants), styledArgVariants);
              variantStyles.forEach(variantStyle => {
                result = deepmerge(result, variantStyle);
              });
              return result;
            };
          }
        } else if (typeof styleArg === 'function' &&
        // On the server Emotion doesn't use React.forwardRef for creating components, so the created
        // component stays as a function. This condition makes sure that we do not interpolate functions
        // which are basically components used as a selectors.
        styleArg.__emotion_real !== styleArg) {
          // If the type is function, we need to define the default theme.
          transformedStyleArg = props => muiStyledFunctionResolver({
            styledArg: styleArg,
            props,
            defaultTheme,
            themeId
          });
        }
        if (componentName && overridesResolver) {
          expressionsWithDefaultTheme.push(props => {
            const theme = resolveTheme(_extends({}, props, {
              defaultTheme,
              themeId
            }));
            const styleOverrides = getStyleOverrides(componentName, theme);
            if (styleOverrides) {
              const resolvedStyleOverrides = {};
              Object.entries(styleOverrides).forEach(([slotKey, slotStyle]) => {
                resolvedStyleOverrides[slotKey] = typeof slotStyle === 'function' ? slotStyle(_extends({}, props, {
                  theme
                })) : slotStyle;
              });
              return overridesResolver(props, resolvedStyleOverrides);
            }
            return null;
          });
        }
        if (componentName && !skipVariantsResolver) {
          expressionsWithDefaultTheme.push(props => {
            const theme = resolveTheme(_extends({}, props, {
              defaultTheme,
              themeId
            }));
            return themeVariantsResolver(props, getVariantStyles(componentName, theme), theme, componentName);
          });
        }
        if (!skipSx) {
          expressionsWithDefaultTheme.push(systemSx);
        }
        const numOfCustomFnsApplied = expressionsWithDefaultTheme.length - expressions.length;
        if (Array.isArray(styleArg) && numOfCustomFnsApplied > 0) {
          const placeholders = new Array(numOfCustomFnsApplied).fill('');
          // If the type is array, than we need to add placeholders in the template for the overrides, variants and the sx styles.
          transformedStyleArg = [...styleArg, ...placeholders];
          transformedStyleArg.raw = [...styleArg.raw, ...placeholders];
        }
        const Component = defaultStyledResolver(transformedStyleArg, ...expressionsWithDefaultTheme);
        {
          let displayName;
          if (componentName) {
            displayName = `${componentName}${capitalize(componentSlot || '')}`;
          }
          if (displayName === undefined) {
            displayName = `Styled(${getDisplayName(tag)})`;
          }
          Component.displayName = displayName;
        }
        if (tag.muiName) {
          Component.muiName = tag.muiName;
        }
        return Component;
      };
      if (defaultStyledResolver.withConfig) {
        muiStyledResolver.withConfig = defaultStyledResolver.withConfig;
      }
      return muiStyledResolver;
    };
  }

  const styled$2 = createStyled();
  var systemStyled = styled$2;

  function getThemeProps(params) {
    const {
      theme,
      name,
      props
    } = params;
    if (!theme || !theme.components || !theme.components[name] || !theme.components[name].defaultProps) {
      return props;
    }
    return resolveProps(theme.components[name].defaultProps, props);
  }

  function useThemeProps$1({
    props,
    name,
    defaultTheme,
    themeId
  }) {
    let theme = useTheme$2(defaultTheme);
    if (themeId) {
      theme = theme[themeId] || theme;
    }
    const mergedProps = getThemeProps({
      theme,
      name,
      props
    });
    return mergedProps;
  }

  /* eslint-disable @typescript-eslint/naming-convention */
  /**
   * Returns a number whose value is limited to the given range.
   * @param {number} value The value to be clamped
   * @param {number} min The lower boundary of the output range
   * @param {number} max The upper boundary of the output range
   * @returns {number} A number in the range [min, max]
   */
  function clamp$3(value, min = 0, max = 1) {
    {
      if (value < min || value > max) {
        console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);
      }
    }
    return Math.min(Math.max(min, value), max);
  }

  /**
   * Converts a color from CSS hex format to CSS rgb format.
   * @param {string} color - Hex color, i.e. #nnn or #nnnnnn
   * @returns {string} A CSS rgb color string
   */
  function hexToRgb(color) {
    color = color.slice(1);
    const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');
    let colors = color.match(re);
    if (colors && colors[0].length === 1) {
      colors = colors.map(n => n + n);
    }
    return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {
    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;
  }).join(', ')})` : '';
  }
  function intToHex(int) {
    const hex = int.toString(16);
    return hex.length === 1 ? `0${hex}` : hex;
  }

  /**
   * Returns an object with the type and values of a color.
   *
   * Note: Does not support rgb % values.
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @returns {object} - A MUI color object: {type: string, values: number[]}
   */
  function decomposeColor(color) {
    // Idempotent
    if (color.type) {
      return color;
    }
    if (color.charAt(0) === '#') {
      return decomposeColor(hexToRgb(color));
    }
    const marker = color.indexOf('(');
    const type = color.substring(0, marker);
    if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {
      throw new Error(`MUI: Unsupported \`${color}\` color.
The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` );
    }
    let values = color.substring(marker + 1, color.length - 1);
    let colorSpace;
    if (type === 'color') {
      values = values.split(' ');
      colorSpace = values.shift();
      if (values.length === 4 && values[3].charAt(0) === '/') {
        values[3] = values[3].slice(1);
      }
      if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {
        throw new Error(`MUI: unsupported \`${colorSpace}\` color space.
The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.` );
      }
    } else {
      values = values.split(',');
    }
    values = values.map(value => parseFloat(value));
    return {
      type,
      values,
      colorSpace
    };
  }

  /**
   * Returns a channel created from the input color.
   *
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @returns {string} - The channel for the color, that can be used in rgba or hsla colors
   */
  const colorChannel = color => {
    const decomposedColor = decomposeColor(color);
    return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');
  };
  const private_safeColorChannel = (color, warning) => {
    try {
      return colorChannel(color);
    } catch (error) {
      if (warning && "development" !== 'production') {
        console.warn(warning);
      }
      return color;
    }
  };

  /**
   * Converts a color object with type and values to a string.
   * @param {object} color - Decomposed color
   * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'
   * @param {array} color.values - [n,n,n] or [n,n,n,n]
   * @returns {string} A CSS color string
   */
  function recomposeColor(color) {
    const {
      type,
      colorSpace
    } = color;
    let {
      values
    } = color;
    if (type.indexOf('rgb') !== -1) {
      // Only convert the first 3 values to int (i.e. not alpha)
      values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);
    } else if (type.indexOf('hsl') !== -1) {
      values[1] = `${values[1]}%`;
      values[2] = `${values[2]}%`;
    }
    if (type.indexOf('color') !== -1) {
      values = `${colorSpace} ${values.join(' ')}`;
    } else {
      values = `${values.join(', ')}`;
    }
    return `${type}(${values})`;
  }

  /**
   * Converts a color from CSS rgb format to CSS hex format.
   * @param {string} color - RGB color, i.e. rgb(n, n, n)
   * @returns {string} A CSS rgb color string, i.e. #nnnnnn
   */
  function rgbToHex(color) {
    // Idempotent
    if (color.indexOf('#') === 0) {
      return color;
    }
    const {
      values
    } = decomposeColor(color);
    return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;
  }

  /**
   * Converts a color from hsl format to rgb format.
   * @param {string} color - HSL color values
   * @returns {string} rgb color values
   */
  function hslToRgb(color) {
    color = decomposeColor(color);
    const {
      values
    } = color;
    const h = values[0];
    const s = values[1] / 100;
    const l = values[2] / 100;
    const a = s * Math.min(l, 1 - l);
    const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
    let type = 'rgb';
    const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];
    if (color.type === 'hsla') {
      type += 'a';
      rgb.push(values[3]);
    }
    return recomposeColor({
      type,
      values: rgb
    });
  }
  /**
   * The relative brightness of any point in a color space,
   * normalized to 0 for darkest black and 1 for lightest white.
   *
   * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @returns {number} The relative brightness of the color in the range 0 - 1
   */
  function getLuminance(color) {
    color = decomposeColor(color);
    let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;
    rgb = rgb.map(val => {
      if (color.type !== 'color') {
        val /= 255; // normalized
      }
      return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;
    });

    // Truncate at 3 digits
    return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));
  }

  /**
   * Calculates the contrast ratio between two colors.
   *
   * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests
   * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()
   * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()
   * @returns {number} A contrast ratio value in the range 0 - 21.
   */
  function getContrastRatio(foreground, background) {
    const lumA = getLuminance(foreground);
    const lumB = getLuminance(background);
    return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);
  }

  /**
   * Sets the absolute transparency of a color.
   * Any existing alpha values are overwritten.
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @param {number} value - value to set the alpha channel to in the range 0 - 1
   * @returns {string} A CSS color string. Hex input values are returned as rgb
   */
  function alpha(color, value) {
    color = decomposeColor(color);
    value = clamp$3(value);
    if (color.type === 'rgb' || color.type === 'hsl') {
      color.type += 'a';
    }
    if (color.type === 'color') {
      color.values[3] = `/${value}`;
    } else {
      color.values[3] = value;
    }
    return recomposeColor(color);
  }
  function private_safeAlpha(color, value, warning) {
    try {
      return alpha(color, value);
    } catch (error) {
      if (warning && "development" !== 'production') {
        console.warn(warning);
      }
      return color;
    }
  }

  /**
   * Darkens a color.
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @param {number} coefficient - multiplier in the range 0 - 1
   * @returns {string} A CSS color string. Hex input values are returned as rgb
   */
  function darken(color, coefficient) {
    color = decomposeColor(color);
    coefficient = clamp$3(coefficient);
    if (color.type.indexOf('hsl') !== -1) {
      color.values[2] *= 1 - coefficient;
    } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {
      for (let i = 0; i < 3; i += 1) {
        color.values[i] *= 1 - coefficient;
      }
    }
    return recomposeColor(color);
  }
  function private_safeDarken(color, coefficient, warning) {
    try {
      return darken(color, coefficient);
    } catch (error) {
      if (warning && "development" !== 'production') {
        console.warn(warning);
      }
      return color;
    }
  }

  /**
   * Lightens a color.
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @param {number} coefficient - multiplier in the range 0 - 1
   * @returns {string} A CSS color string. Hex input values are returned as rgb
   */
  function lighten(color, coefficient) {
    color = decomposeColor(color);
    coefficient = clamp$3(coefficient);
    if (color.type.indexOf('hsl') !== -1) {
      color.values[2] += (100 - color.values[2]) * coefficient;
    } else if (color.type.indexOf('rgb') !== -1) {
      for (let i = 0; i < 3; i += 1) {
        color.values[i] += (255 - color.values[i]) * coefficient;
      }
    } else if (color.type.indexOf('color') !== -1) {
      for (let i = 0; i < 3; i += 1) {
        color.values[i] += (1 - color.values[i]) * coefficient;
      }
    }
    return recomposeColor(color);
  }
  function private_safeLighten(color, coefficient, warning) {
    try {
      return lighten(color, coefficient);
    } catch (error) {
      if (warning && "development" !== 'production') {
        console.warn(warning);
      }
      return color;
    }
  }

  /**
   * Darken or lighten a color, depending on its luminance.
   * Light colors are darkened, dark colors are lightened.
   * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()
   * @param {number} coefficient=0.15 - multiplier in the range 0 - 1
   * @returns {string} A CSS color string. Hex input values are returned as rgb
   */
  function emphasize(color, coefficient = 0.15) {
    return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);
  }
  function private_safeEmphasize(color, coefficient, warning) {
    try {
      return private_safeEmphasize(color, coefficient);
    } catch (error) {
      if (warning && "development" !== 'production') {
        console.warn(warning);
      }
      return color;
    }
  }

  const ThemeContext = /*#__PURE__*/React__namespace.createContext(null);
  {
    ThemeContext.displayName = 'ThemeContext';
  }
  var ThemeContext$1 = ThemeContext;

  function useTheme$1() {
    const theme = React__namespace.useContext(ThemeContext$1);
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useDebugValue(theme);
    }
    return theme;
  }

  const hasSymbol = typeof Symbol === 'function' && Symbol.for;
  var nested = hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__';

  function mergeOuterLocalTheme(outerTheme, localTheme) {
    if (typeof localTheme === 'function') {
      const mergedTheme = localTheme(outerTheme);
      {
        if (!mergedTheme) {
          console.error(['MUI: You should return an object from your theme function, i.e.', '<ThemeProvider theme={() => ({})} />'].join('\n'));
        }
      }
      return mergedTheme;
    }
    return _extends({}, outerTheme, localTheme);
  }

  /**
   * This component takes a `theme` prop.
   * It makes the `theme` available down the React tree thanks to React context.
   * This component should preferably be used at **the root of your component tree**.
   */
  function ThemeProvider$2(props) {
    const {
      children,
      theme: localTheme
    } = props;
    const outerTheme = useTheme$1();
    {
      if (outerTheme === null && typeof localTheme === 'function') {
        console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\n'));
      }
    }
    const theme = React__namespace.useMemo(() => {
      const output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);
      if (output != null) {
        output[nested] = outerTheme !== null;
      }
      return output;
    }, [localTheme, outerTheme]);
    return /*#__PURE__*/jsxRuntime_1(ThemeContext$1.Provider, {
      value: theme,
      children: children
    });
  }
  ThemeProvider$2.propTypes = {
    /**
     * Your component tree.
     */
    children: PropTypes.node,
    /**
     * A theme object. You can provide a function to extend the outer theme.
     */
    theme: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired
  } ;
  {
    ThemeProvider$2.propTypes = exactProp(ThemeProvider$2.propTypes) ;
  }

  const EMPTY_THEME = {};
  function useThemeScoping(themeId, upperTheme, localTheme, isPrivate = false) {
    return React__namespace.useMemo(() => {
      const resolvedTheme = themeId ? upperTheme[themeId] || upperTheme : upperTheme;
      if (typeof localTheme === 'function') {
        const mergedTheme = localTheme(resolvedTheme);
        const result = themeId ? _extends({}, upperTheme, {
          [themeId]: mergedTheme
        }) : mergedTheme;
        // must return a function for the private theme to NOT merge with the upper theme.
        // see the test case "use provided theme from a callback" in ThemeProvider.test.js
        if (isPrivate) {
          return () => result;
        }
        return result;
      }
      return themeId ? _extends({}, upperTheme, {
        [themeId]: localTheme
      }) : _extends({}, upperTheme, localTheme);
    }, [themeId, upperTheme, localTheme, isPrivate]);
  }

  /**
   * This component makes the `theme` available down the React tree.
   * It should preferably be used at **the root of your component tree**.
   *
   * <ThemeProvider theme={theme}> // existing use case
   * <ThemeProvider theme={{ id: theme }}> // theme scoping
   */
  function ThemeProvider$1(props) {
    const {
      children,
      theme: localTheme,
      themeId
    } = props;
    const upperTheme = useTheme$3(EMPTY_THEME);
    const upperPrivateTheme = useTheme$1() || EMPTY_THEME;
    {
      if (upperTheme === null && typeof localTheme === 'function' || themeId && upperTheme && !upperTheme[themeId] && typeof localTheme === 'function') {
        console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\n'));
      }
    }
    const engineTheme = useThemeScoping(themeId, upperTheme, localTheme);
    const privateTheme = useThemeScoping(themeId, upperPrivateTheme, localTheme, true);
    return /*#__PURE__*/jsxRuntime_1(ThemeProvider$2, {
      theme: privateTheme,
      children: /*#__PURE__*/jsxRuntime_1(ThemeContext$2.Provider, {
        value: engineTheme,
        children: children
      })
    });
  }
  ThemeProvider$1.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Your component tree.
     */
    children: PropTypes.node,
    /**
     * A theme object. You can provide a function to extend the outer theme.
     */
    theme: PropTypes.oneOfType([PropTypes.func, PropTypes.object]).isRequired,
    /**
     * The design system's unique id for getting the corresponded theme when there are multiple design systems.
     */
    themeId: PropTypes.string
  } ;
  {
    ThemeProvider$1.propTypes = exactProp(ThemeProvider$1.propTypes) ;
  }

  const DEFAULT_MODE_STORAGE_KEY = 'mode';
  const DEFAULT_COLOR_SCHEME_STORAGE_KEY = 'color-scheme';
  const DEFAULT_ATTRIBUTE = 'data-color-scheme';
  function getInitColorSchemeScript$1(options) {
    const {
      defaultMode = 'light',
      defaultLightColorScheme = 'light',
      defaultDarkColorScheme = 'dark',
      modeStorageKey = DEFAULT_MODE_STORAGE_KEY,
      colorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,
      attribute = DEFAULT_ATTRIBUTE,
      colorSchemeNode = 'document.documentElement'
    } = options || {};
    return /*#__PURE__*/jsxRuntime_1("script", {
      // eslint-disable-next-line react/no-danger
      dangerouslySetInnerHTML: {
        __html: `(function() {
try {
  var mode = localStorage.getItem('${modeStorageKey}') || '${defaultMode}';
  var colorScheme = '';
  if (mode === 'system') {
    // handle system mode
    var mql = window.matchMedia('(prefers-color-scheme: dark)');
    if (mql.matches) {
      colorScheme = localStorage.getItem('${colorSchemeStorageKey}-dark') || '${defaultDarkColorScheme}';
    } else {
      colorScheme = localStorage.getItem('${colorSchemeStorageKey}-light') || '${defaultLightColorScheme}';
    }
  }
  if (mode === 'light') {
    colorScheme = localStorage.getItem('${colorSchemeStorageKey}-light') || '${defaultLightColorScheme}';
  }
  if (mode === 'dark') {
    colorScheme = localStorage.getItem('${colorSchemeStorageKey}-dark') || '${defaultDarkColorScheme}';
  }
  if (colorScheme) {
    ${colorSchemeNode}.setAttribute('${attribute}', colorScheme);
  }
} catch(e){}})();`
      }
    }, "mui-color-scheme-init");
  }

  function getSystemMode(mode) {
    if (typeof window !== 'undefined' && mode === 'system') {
      const mql = window.matchMedia('(prefers-color-scheme: dark)');
      if (mql.matches) {
        return 'dark';
      }
      return 'light';
    }
    return undefined;
  }
  function processState(state, callback) {
    if (state.mode === 'light' || state.mode === 'system' && state.systemMode === 'light') {
      return callback('light');
    }
    if (state.mode === 'dark' || state.mode === 'system' && state.systemMode === 'dark') {
      return callback('dark');
    }
    return undefined;
  }
  function getColorScheme(state) {
    return processState(state, mode => {
      if (mode === 'light') {
        return state.lightColorScheme;
      }
      if (mode === 'dark') {
        return state.darkColorScheme;
      }
      return undefined;
    });
  }
  function initializeValue(key, defaultValue) {
    if (typeof window === 'undefined') {
      return undefined;
    }
    let value;
    try {
      value = localStorage.getItem(key) || undefined;
      if (!value) {
        // the first time that user enters the site.
        localStorage.setItem(key, defaultValue);
      }
    } catch (e) {
      // Unsupported
    }
    return value || defaultValue;
  }
  function useCurrentColorScheme(options) {
    const {
      defaultMode = 'light',
      defaultLightColorScheme,
      defaultDarkColorScheme,
      supportedColorSchemes = [],
      modeStorageKey = DEFAULT_MODE_STORAGE_KEY,
      colorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,
      storageWindow = typeof window === 'undefined' ? undefined : window
    } = options;
    const joinedColorSchemes = supportedColorSchemes.join(',');
    const [state, setState] = React__namespace.useState(() => {
      const initialMode = initializeValue(modeStorageKey, defaultMode);
      const lightColorScheme = initializeValue(`${colorSchemeStorageKey}-light`, defaultLightColorScheme);
      const darkColorScheme = initializeValue(`${colorSchemeStorageKey}-dark`, defaultDarkColorScheme);
      return {
        mode: initialMode,
        systemMode: getSystemMode(initialMode),
        lightColorScheme,
        darkColorScheme
      };
    });
    const colorScheme = getColorScheme(state);
    const setMode = React__namespace.useCallback(mode => {
      setState(currentState => {
        if (mode === currentState.mode) {
          // do nothing if mode does not change
          return currentState;
        }
        const newMode = !mode ? defaultMode : mode;
        try {
          localStorage.setItem(modeStorageKey, newMode);
        } catch (e) {
          // Unsupported
        }
        return _extends({}, currentState, {
          mode: newMode,
          systemMode: getSystemMode(newMode)
        });
      });
    }, [modeStorageKey, defaultMode]);
    const setColorScheme = React__namespace.useCallback(value => {
      if (!value) {
        setState(currentState => {
          try {
            localStorage.setItem(`${colorSchemeStorageKey}-light`, defaultLightColorScheme);
            localStorage.setItem(`${colorSchemeStorageKey}-dark`, defaultDarkColorScheme);
          } catch (e) {
            // Unsupported
          }
          return _extends({}, currentState, {
            lightColorScheme: defaultLightColorScheme,
            darkColorScheme: defaultDarkColorScheme
          });
        });
      } else if (typeof value === 'string') {
        if (value && !joinedColorSchemes.includes(value)) {
          console.error(`\`${value}\` does not exist in \`theme.colorSchemes\`.`);
        } else {
          setState(currentState => {
            const newState = _extends({}, currentState);
            processState(currentState, mode => {
              try {
                localStorage.setItem(`${colorSchemeStorageKey}-${mode}`, value);
              } catch (e) {
                // Unsupported
              }
              if (mode === 'light') {
                newState.lightColorScheme = value;
              }
              if (mode === 'dark') {
                newState.darkColorScheme = value;
              }
            });
            return newState;
          });
        }
      } else {
        setState(currentState => {
          const newState = _extends({}, currentState);
          const newLightColorScheme = value.light === null ? defaultLightColorScheme : value.light;
          const newDarkColorScheme = value.dark === null ? defaultDarkColorScheme : value.dark;
          if (newLightColorScheme) {
            if (!joinedColorSchemes.includes(newLightColorScheme)) {
              console.error(`\`${newLightColorScheme}\` does not exist in \`theme.colorSchemes\`.`);
            } else {
              newState.lightColorScheme = newLightColorScheme;
              try {
                localStorage.setItem(`${colorSchemeStorageKey}-light`, newLightColorScheme);
              } catch (error) {
                // Unsupported
              }
            }
          }
          if (newDarkColorScheme) {
            if (!joinedColorSchemes.includes(newDarkColorScheme)) {
              console.error(`\`${newDarkColorScheme}\` does not exist in \`theme.colorSchemes\`.`);
            } else {
              newState.darkColorScheme = newDarkColorScheme;
              try {
                localStorage.setItem(`${colorSchemeStorageKey}-dark`, newDarkColorScheme);
              } catch (error) {
                // Unsupported
              }
            }
          }
          return newState;
        });
      }
    }, [joinedColorSchemes, colorSchemeStorageKey, defaultLightColorScheme, defaultDarkColorScheme]);
    const handleMediaQuery = React__namespace.useCallback(e => {
      if (state.mode === 'system') {
        setState(currentState => _extends({}, currentState, {
          systemMode: e != null && e.matches ? 'dark' : 'light'
        }));
      }
    }, [state.mode]);

    // Ref hack to avoid adding handleMediaQuery as a dep
    const mediaListener = React__namespace.useRef(handleMediaQuery);
    mediaListener.current = handleMediaQuery;
    React__namespace.useEffect(() => {
      const handler = (...args) => mediaListener.current(...args);

      // Always listen to System preference
      const media = window.matchMedia('(prefers-color-scheme: dark)');

      // Intentionally use deprecated listener methods to support iOS & old browsers
      media.addListener(handler);
      handler(media);
      return () => media.removeListener(handler);
    }, []);

    // Handle when localStorage has changed
    React__namespace.useEffect(() => {
      const handleStorage = event => {
        const value = event.newValue;
        if (typeof event.key === 'string' && event.key.startsWith(colorSchemeStorageKey) && (!value || joinedColorSchemes.match(value))) {
          // If the key is deleted, value will be null then reset color scheme to the default one.
          if (event.key.endsWith('light')) {
            setColorScheme({
              light: value
            });
          }
          if (event.key.endsWith('dark')) {
            setColorScheme({
              dark: value
            });
          }
        }
        if (event.key === modeStorageKey && (!value || ['light', 'dark', 'system'].includes(value))) {
          setMode(value || defaultMode);
        }
      };
      if (storageWindow) {
        // For syncing color-scheme changes between iframes
        storageWindow.addEventListener('storage', handleStorage);
        return () => storageWindow.removeEventListener('storage', handleStorage);
      }
      return undefined;
    }, [setColorScheme, setMode, modeStorageKey, colorSchemeStorageKey, joinedColorSchemes, defaultMode, storageWindow]);
    return _extends({}, state, {
      colorScheme,
      setMode,
      setColorScheme
    });
  }

  const _excluded$2i = ["colorSchemes", "components", "generateCssVars", "cssVarPrefix"];
  const DISABLE_CSS_TRANSITION = '*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}';
  function createCssVarsProvider(options) {
    const {
      themeId,
      /**
       * This `theme` object needs to follow a certain structure to
       * be used correctly by the finel `CssVarsProvider`. It should have a
       * `colorSchemes` key with the light and dark (and any other) palette.
       * It should also ideally have a vars object created using `prepareCssVars`.
       */
      theme: defaultTheme = {},
      attribute: defaultAttribute = DEFAULT_ATTRIBUTE,
      modeStorageKey: defaultModeStorageKey = DEFAULT_MODE_STORAGE_KEY,
      colorSchemeStorageKey: defaultColorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,
      defaultMode: designSystemMode = 'light',
      defaultColorScheme: designSystemColorScheme,
      disableTransitionOnChange: designSystemTransitionOnChange = false,
      resolveTheme,
      excludeVariablesFromRoot
    } = options;
    if (!defaultTheme.colorSchemes || typeof designSystemColorScheme === 'string' && !defaultTheme.colorSchemes[designSystemColorScheme] || typeof designSystemColorScheme === 'object' && !defaultTheme.colorSchemes[designSystemColorScheme == null ? void 0 : designSystemColorScheme.light] || typeof designSystemColorScheme === 'object' && !defaultTheme.colorSchemes[designSystemColorScheme == null ? void 0 : designSystemColorScheme.dark]) {
      console.error(`MUI: \`${designSystemColorScheme}\` does not exist in \`theme.colorSchemes\`.`);
    }
    const ColorSchemeContext = /*#__PURE__*/React__namespace.createContext(undefined);
    const useColorScheme = () => {
      const value = React__namespace.useContext(ColorSchemeContext);
      if (!value) {
        throw new Error(`MUI: \`useColorScheme\` must be called under <CssVarsProvider />` );
      }
      return value;
    };
    function CssVarsProvider({
      children,
      theme: themeProp = defaultTheme,
      modeStorageKey = defaultModeStorageKey,
      colorSchemeStorageKey = defaultColorSchemeStorageKey,
      attribute = defaultAttribute,
      defaultMode = designSystemMode,
      defaultColorScheme = designSystemColorScheme,
      disableTransitionOnChange = designSystemTransitionOnChange,
      storageWindow = typeof window === 'undefined' ? undefined : window,
      documentNode = typeof document === 'undefined' ? undefined : document,
      colorSchemeNode = typeof document === 'undefined' ? undefined : document.documentElement,
      colorSchemeSelector = ':root',
      disableNestedContext = false,
      disableStyleSheetGeneration = false
    }) {
      const hasMounted = React__namespace.useRef(false);
      const upperTheme = useTheme$1();
      const ctx = React__namespace.useContext(ColorSchemeContext);
      const nested = !!ctx && !disableNestedContext;
      const scopedTheme = themeProp[themeId];
      const _ref = scopedTheme || themeProp,
        {
          colorSchemes = {},
          components = {},
          generateCssVars = () => ({
            vars: {},
            css: {}
          }),
          cssVarPrefix
        } = _ref,
        restThemeProp = _objectWithoutPropertiesLoose(_ref, _excluded$2i);
      const allColorSchemes = Object.keys(colorSchemes);
      const defaultLightColorScheme = typeof defaultColorScheme === 'string' ? defaultColorScheme : defaultColorScheme.light;
      const defaultDarkColorScheme = typeof defaultColorScheme === 'string' ? defaultColorScheme : defaultColorScheme.dark;

      // 1. Get the data about the `mode`, `colorScheme`, and setter functions.
      const {
        mode: stateMode,
        setMode,
        systemMode,
        lightColorScheme,
        darkColorScheme,
        colorScheme: stateColorScheme,
        setColorScheme
      } = useCurrentColorScheme({
        supportedColorSchemes: allColorSchemes,
        defaultLightColorScheme,
        defaultDarkColorScheme,
        modeStorageKey,
        colorSchemeStorageKey,
        defaultMode,
        storageWindow
      });
      let mode = stateMode;
      let colorScheme = stateColorScheme;
      if (nested) {
        mode = ctx.mode;
        colorScheme = ctx.colorScheme;
      }
      const calculatedMode = (() => {
        if (mode) {
          return mode;
        }
        // This scope occurs on the server
        if (defaultMode === 'system') {
          return designSystemMode;
        }
        return defaultMode;
      })();
      const calculatedColorScheme = (() => {
        if (!colorScheme) {
          // This scope occurs on the server
          if (calculatedMode === 'dark') {
            return defaultDarkColorScheme;
          }
          // use light color scheme, if default mode is 'light' | 'system'
          return defaultLightColorScheme;
        }
        return colorScheme;
      })();

      // 2. Create CSS variables and store them in objects (to be generated in stylesheets in the final step)
      const {
        css: rootCss,
        vars: rootVars
      } = generateCssVars();

      // 3. Start composing the theme object
      const theme = _extends({}, restThemeProp, {
        components,
        colorSchemes,
        cssVarPrefix,
        vars: rootVars,
        getColorSchemeSelector: targetColorScheme => `[${attribute}="${targetColorScheme}"] &`
      });

      // 4. Create color CSS variables and store them in objects (to be generated in stylesheets in the final step)
      //    The default color scheme stylesheet is constructed to have the least CSS specificity.
      //    The other color schemes uses selector, default as data attribute, to increase the CSS specificity so that they can override the default color scheme stylesheet.
      const defaultColorSchemeStyleSheet = {};
      const otherColorSchemesStyleSheet = {};
      Object.entries(colorSchemes).forEach(([key, scheme]) => {
        const {
          css,
          vars
        } = generateCssVars(key);
        theme.vars = deepmerge(theme.vars, vars);
        if (key === calculatedColorScheme) {
          // 4.1 Merge the selected color scheme to the theme
          Object.keys(scheme).forEach(schemeKey => {
            if (scheme[schemeKey] && typeof scheme[schemeKey] === 'object') {
              // shallow merge the 1st level structure of the theme.
              theme[schemeKey] = _extends({}, theme[schemeKey], scheme[schemeKey]);
            } else {
              theme[schemeKey] = scheme[schemeKey];
            }
          });
          if (theme.palette) {
            theme.palette.colorScheme = key;
          }
        }
        const resolvedDefaultColorScheme = (() => {
          if (typeof defaultColorScheme === 'string') {
            return defaultColorScheme;
          }
          if (defaultMode === 'dark') {
            return defaultColorScheme.dark;
          }
          return defaultColorScheme.light;
        })();
        if (key === resolvedDefaultColorScheme) {
          if (excludeVariablesFromRoot) {
            const excludedVariables = {};
            excludeVariablesFromRoot(cssVarPrefix).forEach(cssVar => {
              excludedVariables[cssVar] = css[cssVar];
              delete css[cssVar];
            });
            defaultColorSchemeStyleSheet[`[${attribute}="${key}"]`] = excludedVariables;
          }
          defaultColorSchemeStyleSheet[`${colorSchemeSelector}, [${attribute}="${key}"]`] = css;
        } else {
          otherColorSchemesStyleSheet[`${colorSchemeSelector === ':root' ? '' : colorSchemeSelector}[${attribute}="${key}"]`] = css;
        }
      });
      theme.vars = deepmerge(theme.vars, rootVars);

      // 5. Declaring effects
      // 5.1 Updates the selector value to use the current color scheme which tells CSS to use the proper stylesheet.
      React__namespace.useEffect(() => {
        if (colorScheme && colorSchemeNode) {
          // attaches attribute to <html> because the css variables are attached to :root (html)
          colorSchemeNode.setAttribute(attribute, colorScheme);
        }
      }, [colorScheme, attribute, colorSchemeNode]);

      // 5.2 Remove the CSS transition when color scheme changes to create instant experience.
      // credit: https://github.com/pacocoursey/next-themes/blob/b5c2bad50de2d61ad7b52a9c5cdc801a78507d7a/index.tsx#L313
      React__namespace.useEffect(() => {
        let timer;
        if (disableTransitionOnChange && hasMounted.current && documentNode) {
          const css = documentNode.createElement('style');
          css.appendChild(documentNode.createTextNode(DISABLE_CSS_TRANSITION));
          documentNode.head.appendChild(css);

          // Force browser repaint
          (() => window.getComputedStyle(documentNode.body))();
          timer = setTimeout(() => {
            documentNode.head.removeChild(css);
          }, 1);
        }
        return () => {
          clearTimeout(timer);
        };
      }, [colorScheme, disableTransitionOnChange, documentNode]);
      React__namespace.useEffect(() => {
        hasMounted.current = true;
        return () => {
          hasMounted.current = false;
        };
      }, []);
      const contextValue = React__namespace.useMemo(() => ({
        mode,
        systemMode,
        setMode,
        lightColorScheme,
        darkColorScheme,
        colorScheme,
        setColorScheme,
        allColorSchemes
      }), [allColorSchemes, colorScheme, darkColorScheme, lightColorScheme, mode, setColorScheme, setMode, systemMode]);
      let shouldGenerateStyleSheet = true;
      if (disableStyleSheetGeneration || nested && (upperTheme == null ? void 0 : upperTheme.cssVarPrefix) === cssVarPrefix) {
        shouldGenerateStyleSheet = false;
      }
      const element = /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
        children: [shouldGenerateStyleSheet && /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
          children: [/*#__PURE__*/jsxRuntime_1(GlobalStyles$2, {
            styles: {
              [colorSchemeSelector]: rootCss
            }
          }), /*#__PURE__*/jsxRuntime_1(GlobalStyles$2, {
            styles: defaultColorSchemeStyleSheet
          }), /*#__PURE__*/jsxRuntime_1(GlobalStyles$2, {
            styles: otherColorSchemesStyleSheet
          })]
        }), /*#__PURE__*/jsxRuntime_1(ThemeProvider$1, {
          themeId: scopedTheme ? themeId : undefined,
          theme: resolveTheme ? resolveTheme(theme) : theme,
          children: children
        })]
      });
      if (nested) {
        return element;
      }
      return /*#__PURE__*/jsxRuntime_1(ColorSchemeContext.Provider, {
        value: contextValue,
        children: element
      });
    }
    CssVarsProvider.propTypes = {
      /**
       * The body attribute name to attach colorScheme.
       */
      attribute: PropTypes.string,
      /**
       * The component tree.
       */
      children: PropTypes.node,
      /**
       * The node used to attach the color-scheme attribute
       */
      colorSchemeNode: PropTypes.any,
      /**
       * The CSS selector for attaching the generated custom properties
       */
      colorSchemeSelector: PropTypes.string,
      /**
       * localStorage key used to store `colorScheme`
       */
      colorSchemeStorageKey: PropTypes.string,
      /**
       * The initial color scheme used.
       */
      defaultColorScheme: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
      /**
       * The initial mode used.
       */
      defaultMode: PropTypes.string,
      /**
       * If `true`, the provider creates its own context and generate stylesheet as if it is a root `CssVarsProvider`.
       */
      disableNestedContext: PropTypes.bool,
      /**
       * If `true`, the style sheet won't be generated.
       *
       * This is useful for controlling nested CssVarsProvider behavior.
       */
      disableStyleSheetGeneration: PropTypes.bool,
      /**
       * Disable CSS transitions when switching between modes or color schemes.
       */
      disableTransitionOnChange: PropTypes.bool,
      /**
       * The document to attach the attribute to.
       */
      documentNode: PropTypes.any,
      /**
       * The key in the local storage used to store current color scheme.
       */
      modeStorageKey: PropTypes.string,
      /**
       * The window that attaches the 'storage' event listener.
       * @default window
       */
      storageWindow: PropTypes.any,
      /**
       * The calculated theme object that will be passed through context.
       */
      theme: PropTypes.object
    } ;
    const defaultLightColorScheme = typeof designSystemColorScheme === 'string' ? designSystemColorScheme : designSystemColorScheme.light;
    const defaultDarkColorScheme = typeof designSystemColorScheme === 'string' ? designSystemColorScheme : designSystemColorScheme.dark;
    const getInitColorSchemeScript = params => getInitColorSchemeScript$1(_extends({
      attribute: defaultAttribute,
      colorSchemeStorageKey: defaultColorSchemeStorageKey,
      defaultMode: designSystemMode,
      defaultLightColorScheme,
      defaultDarkColorScheme,
      modeStorageKey: defaultModeStorageKey
    }, params));
    return {
      CssVarsProvider,
      useColorScheme,
      getInitColorSchemeScript
    };
  }

  /**
   * The benefit of this function is to help developers get CSS var from theme without specifying the whole variable
   * and they does not need to remember the prefix (defined once).
   */
  function createGetCssVar$1(prefix = '') {
    function appendVar(...vars) {
      if (!vars.length) {
        return '';
      }
      const value = vars[0];
      if (typeof value === 'string' && !value.match(/(#|\(|\)|(-?(\d*\.)?\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\d*\.)?\d+)$|(\d+ \d+ \d+)/)) {
        return `, var(--${prefix ? `${prefix}-` : ''}${value}${appendVar(...vars.slice(1))})`;
      }
      return `, ${value}`;
    }

    // AdditionalVars makes `getCssVar` less strict, so it can be use like this `getCssVar('non-mui-variable')` without type error.
    const getCssVar = (field, ...fallbacks) => {
      return `var(--${prefix ? `${prefix}-` : ''}${field}${appendVar(...fallbacks)})`;
    };
    return getCssVar;
  }

  /**
   * This function create an object from keys, value and then assign to target
   *
   * @param {Object} obj : the target object to be assigned
   * @param {string[]} keys
   * @param {string | number} value
   *
   * @example
   * const source = {}
   * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')
   * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }
   *
   * @example
   * const source = { palette: { primary: 'var(--palette-primary)' } }
   * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')
   * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }
   */
  const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {
    let temp = obj;
    keys.forEach((k, index) => {
      if (index === keys.length - 1) {
        if (Array.isArray(temp)) {
          temp[Number(k)] = value;
        } else if (temp && typeof temp === 'object') {
          temp[k] = value;
        }
      } else if (temp && typeof temp === 'object') {
        if (!temp[k]) {
          temp[k] = arrayKeys.includes(k) ? [] : {};
        }
        temp = temp[k];
      }
    });
  };

  /**
   *
   * @param {Object} obj : source object
   * @param {Function} callback : a function that will be called when
   *                   - the deepest key in source object is reached
   *                   - the value of the deepest key is NOT `undefined` | `null`
   *
   * @example
   * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)
   * // ['palette', 'primary', 'main'] '#000000'
   */
  const walkObjectDeep = (obj, callback, shouldSkipPaths) => {
    function recurse(object, parentKeys = [], arrayKeys = []) {
      Object.entries(object).forEach(([key, value]) => {
        if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {
          if (value !== undefined && value !== null) {
            if (typeof value === 'object' && Object.keys(value).length > 0) {
              recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);
            } else {
              callback([...parentKeys, key], value, arrayKeys);
            }
          }
        }
      });
    }
    recurse(obj);
  };
  const getCssValue = (keys, value) => {
    if (typeof value === 'number') {
      if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {
        // CSS property that are unitless
        return value;
      }
      const lastKey = keys[keys.length - 1];
      if (lastKey.toLowerCase().indexOf('opacity') >= 0) {
        // opacity values are unitless
        return value;
      }
      return `${value}px`;
    }
    return value;
  };

  /**
   * a function that parse theme and return { css, vars }
   *
   * @param {Object} theme
   * @param {{
   *  prefix?: string,
   *  shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean
   * }} options.
   *  `prefix`: The prefix of the generated CSS variables. This function does not change the value.
   *
   * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).
   *
   * @example
   * const { css, vars } = parser({
   *   fontSize: 12,
   *   lineHeight: 1.2,
   *   palette: { primary: { 500: 'var(--color)' } }
   * }, { prefix: 'foo' })
   *
   * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }
   * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }
   */
  function cssVarsParser(theme, options) {
    const {
      prefix,
      shouldSkipGeneratingVar
    } = options || {};
    const css = {};
    const vars = {};
    const varsWithDefaults = {};
    walkObjectDeep(theme, (keys, value, arrayKeys) => {
      if (typeof value === 'string' || typeof value === 'number') {
        if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {
          // only create css & var if `shouldSkipGeneratingVar` return false
          const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;
          Object.assign(css, {
            [cssVar]: getCssValue(keys, value)
          });
          assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);
          assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${value})`, arrayKeys);
        }
      }
    }, keys => keys[0] === 'vars' // skip 'vars/*' paths
    );
    return {
      css,
      vars,
      varsWithDefaults
    };
  }

  const _excluded$2h = ["colorSchemes", "components"],
    _excluded2$e = ["light"];
  function prepareCssVars(theme, parserConfig) {
    // @ts-ignore - ignore components do not exist
    const {
        colorSchemes = {}
      } = theme,
      otherTheme = _objectWithoutPropertiesLoose(theme, _excluded$2h);
    const {
      vars: rootVars,
      css: rootCss,
      varsWithDefaults: rootVarsWithDefaults
    } = cssVarsParser(otherTheme, parserConfig);
    let themeVars = rootVarsWithDefaults;
    const colorSchemesMap = {};
    const {
        light
      } = colorSchemes,
      otherColorSchemes = _objectWithoutPropertiesLoose(colorSchemes, _excluded2$e);
    Object.entries(otherColorSchemes || {}).forEach(([key, scheme]) => {
      const {
        vars,
        css,
        varsWithDefaults
      } = cssVarsParser(scheme, parserConfig);
      themeVars = deepmerge(themeVars, varsWithDefaults);
      colorSchemesMap[key] = {
        css,
        vars
      };
    });
    if (light) {
      // light color scheme vars should be merged last to set as default
      const {
        css,
        vars,
        varsWithDefaults
      } = cssVarsParser(light, parserConfig);
      themeVars = deepmerge(themeVars, varsWithDefaults);
      colorSchemesMap.light = {
        css,
        vars
      };
    }
    const generateCssVars = colorScheme => {
      if (!colorScheme) {
        return {
          css: _extends({}, rootCss),
          vars: rootVars
        };
      }
      return {
        css: _extends({}, colorSchemesMap[colorScheme].css),
        vars: colorSchemesMap[colorScheme].vars
      };
    };
    return {
      vars: themeVars,
      generateCssVars
    };
  }

  const _excluded$2g = ["className", "component", "disableGutters", "fixed", "maxWidth", "classes"];
  const defaultTheme$6 = createTheme$1();
  const defaultCreateStyledComponent$2 = systemStyled('div', {
    name: 'MuiContainer',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`maxWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fixed && styles.fixed, ownerState.disableGutters && styles.disableGutters];
    }
  });
  const useThemePropsDefault$2 = inProps => useThemeProps$1({
    props: inProps,
    name: 'MuiContainer',
    defaultTheme: defaultTheme$6
  });
  const useUtilityClasses$1P = (ownerState, componentName) => {
    const getContainerUtilityClass = slot => {
      return generateUtilityClass(componentName, slot);
    };
    const {
      classes,
      fixed,
      disableGutters,
      maxWidth
    } = ownerState;
    const slots = {
      root: ['root', maxWidth && `maxWidth${capitalize(String(maxWidth))}`, fixed && 'fixed', disableGutters && 'disableGutters']
    };
    return composeClasses(slots, getContainerUtilityClass, classes);
  };
  function createContainer(options = {}) {
    const {
      // This will allow adding custom styled fn (for example for custom sx style function)
      createStyledComponent = defaultCreateStyledComponent$2,
      useThemeProps = useThemePropsDefault$2,
      componentName = 'MuiContainer'
    } = options;
    const ContainerRoot = createStyledComponent(({
      theme,
      ownerState
    }) => _extends({
      width: '100%',
      marginLeft: 'auto',
      boxSizing: 'border-box',
      marginRight: 'auto',
      display: 'block'
    }, !ownerState.disableGutters && {
      paddingLeft: theme.spacing(2),
      paddingRight: theme.spacing(2),
      // @ts-ignore module augmentation fails if custom breakpoints are used
      [theme.breakpoints.up('sm')]: {
        paddingLeft: theme.spacing(3),
        paddingRight: theme.spacing(3)
      }
    }), ({
      theme,
      ownerState
    }) => ownerState.fixed && Object.keys(theme.breakpoints.values).reduce((acc, breakpointValueKey) => {
      const breakpoint = breakpointValueKey;
      const value = theme.breakpoints.values[breakpoint];
      if (value !== 0) {
        // @ts-ignore
        acc[theme.breakpoints.up(breakpoint)] = {
          maxWidth: `${value}${theme.breakpoints.unit}`
        };
      }
      return acc;
    }, {}), ({
      theme,
      ownerState
    }) => _extends({}, ownerState.maxWidth === 'xs' && {
      // @ts-ignore module augmentation fails if custom breakpoints are used
      [theme.breakpoints.up('xs')]: {
        // @ts-ignore module augmentation fails if custom breakpoints are used
        maxWidth: Math.max(theme.breakpoints.values.xs, 444)
      }
    }, ownerState.maxWidth &&
    // @ts-ignore module augmentation fails if custom breakpoints are used
    ownerState.maxWidth !== 'xs' && {
      // @ts-ignore module augmentation fails if custom breakpoints are used
      [theme.breakpoints.up(ownerState.maxWidth)]: {
        // @ts-ignore module augmentation fails if custom breakpoints are used
        maxWidth: `${theme.breakpoints.values[ownerState.maxWidth]}${theme.breakpoints.unit}`
      }
    }));
    const Container = /*#__PURE__*/React__namespace.forwardRef(function Container(inProps, ref) {
      const props = useThemeProps(inProps);
      const {
          className,
          component = 'div',
          disableGutters = false,
          fixed = false,
          maxWidth = 'lg'
        } = props,
        other = _objectWithoutPropertiesLoose(props, _excluded$2g);
      const ownerState = _extends({}, props, {
        component,
        disableGutters,
        fixed,
        maxWidth
      });

      // @ts-ignore module augmentation fails if custom breakpoints are used
      const classes = useUtilityClasses$1P(ownerState, componentName);
      return (
        /*#__PURE__*/
        // @ts-ignore theme is injected by the styled util
        jsxRuntime_1(ContainerRoot, _extends({
          as: component
          // @ts-ignore module augmentation fails if custom breakpoints are used
          ,
          ownerState: ownerState,
          className: clsx(classes.root, className),
          ref: ref
        }, other))
      );
    });
    Container.propTypes /* remove-proptypes */ = {
      children: PropTypes.node,
      classes: PropTypes.object,
      className: PropTypes.string,
      component: PropTypes.elementType,
      disableGutters: PropTypes.bool,
      fixed: PropTypes.bool,
      maxWidth: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),
      sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
    } ;
    return Container;
  }

  const filterBreakpointKeys = (breakpointsKeys, responsiveKeys) => breakpointsKeys.filter(key => responsiveKeys.includes(key));
  const traverseBreakpoints = (breakpoints, responsive, iterator) => {
    const smallestBreakpoint = breakpoints.keys[0]; // the keys is sorted from smallest to largest by `createBreakpoints`.

    if (Array.isArray(responsive)) {
      responsive.forEach((breakpointValue, index) => {
        iterator((responsiveStyles, style) => {
          if (index <= breakpoints.keys.length - 1) {
            if (index === 0) {
              Object.assign(responsiveStyles, style);
            } else {
              responsiveStyles[breakpoints.up(breakpoints.keys[index])] = style;
            }
          }
        }, breakpointValue);
      });
    } else if (responsive && typeof responsive === 'object') {
      // prevent null
      // responsive could be a very big object, pick the smallest responsive values

      const keys = Object.keys(responsive).length > breakpoints.keys.length ? breakpoints.keys : filterBreakpointKeys(breakpoints.keys, Object.keys(responsive));
      keys.forEach(key => {
        if (breakpoints.keys.indexOf(key) !== -1) {
          // @ts-ignore already checked that responsive is an object
          const breakpointValue = responsive[key];
          if (breakpointValue !== undefined) {
            iterator((responsiveStyles, style) => {
              if (smallestBreakpoint === key) {
                Object.assign(responsiveStyles, style);
              } else {
                responsiveStyles[breakpoints.up(key)] = style;
              }
            }, breakpointValue);
          }
        }
      });
    } else if (typeof responsive === 'number' || typeof responsive === 'string') {
      iterator((responsiveStyles, style) => {
        Object.assign(responsiveStyles, style);
      }, responsive);
    }
  };

  function appendLevel(level) {
    if (!level) {
      return '';
    }
    return `Level${level}`;
  }
  function isNestedContainer(ownerState) {
    return ownerState.unstable_level > 0 && ownerState.container;
  }
  function createGetSelfSpacing(ownerState) {
    return function getSelfSpacing(axis) {
      return `var(--Grid-${axis}Spacing${appendLevel(ownerState.unstable_level)})`;
    };
  }
  function createGetParentSpacing(ownerState) {
    return function getParentSpacing(axis) {
      if (ownerState.unstable_level === 0) {
        return `var(--Grid-${axis}Spacing)`;
      }
      return `var(--Grid-${axis}Spacing${appendLevel(ownerState.unstable_level - 1)})`;
    };
  }
  function getParentColumns(ownerState) {
    if (ownerState.unstable_level === 0) {
      return `var(--Grid-columns)`;
    }
    return `var(--Grid-columns${appendLevel(ownerState.unstable_level - 1)})`;
  }
  const generateGridSizeStyles = ({
    theme,
    ownerState
  }) => {
    const getSelfSpacing = createGetSelfSpacing(ownerState);
    const styles = {};
    traverseBreakpoints(theme.breakpoints, ownerState.gridSize, (appendStyle, value) => {
      let style = {};
      if (value === true) {
        style = {
          flexBasis: 0,
          flexGrow: 1,
          maxWidth: '100%'
        };
      }
      if (value === 'auto') {
        style = {
          flexBasis: 'auto',
          flexGrow: 0,
          flexShrink: 0,
          maxWidth: 'none',
          width: 'auto'
        };
      }
      if (typeof value === 'number') {
        style = {
          flexGrow: 0,
          flexBasis: 'auto',
          width: `calc(100% * ${value} / ${getParentColumns(ownerState)}${isNestedContainer(ownerState) ? ` + ${getSelfSpacing('column')}` : ''})`
        };
      }
      appendStyle(styles, style);
    });
    return styles;
  };
  const generateGridOffsetStyles = ({
    theme,
    ownerState
  }) => {
    const styles = {};
    traverseBreakpoints(theme.breakpoints, ownerState.gridOffset, (appendStyle, value) => {
      let style = {};
      if (value === 'auto') {
        style = {
          marginLeft: 'auto'
        };
      }
      if (typeof value === 'number') {
        style = {
          marginLeft: value === 0 ? '0px' : `calc(100% * ${value} / ${getParentColumns(ownerState)})`
        };
      }
      appendStyle(styles, style);
    });
    return styles;
  };
  const generateGridColumnsStyles = ({
    theme,
    ownerState
  }) => {
    if (!ownerState.container) {
      return {};
    }
    const styles = isNestedContainer(ownerState) ? {
      [`--Grid-columns${appendLevel(ownerState.unstable_level)}`]: getParentColumns(ownerState)
    } : {
      '--Grid-columns': 12
    };
    traverseBreakpoints(theme.breakpoints, ownerState.columns, (appendStyle, value) => {
      appendStyle(styles, {
        [`--Grid-columns${appendLevel(ownerState.unstable_level)}`]: value
      });
    });
    return styles;
  };
  const generateGridRowSpacingStyles = ({
    theme,
    ownerState
  }) => {
    if (!ownerState.container) {
      return {};
    }
    const getParentSpacing = createGetParentSpacing(ownerState);
    const styles = isNestedContainer(ownerState) ? {
      // Set the default spacing as its parent spacing.
      // It will be overridden if spacing props are provided
      [`--Grid-rowSpacing${appendLevel(ownerState.unstable_level)}`]: getParentSpacing('row')
    } : {};
    traverseBreakpoints(theme.breakpoints, ownerState.rowSpacing, (appendStyle, value) => {
      var _theme$spacing;
      appendStyle(styles, {
        [`--Grid-rowSpacing${appendLevel(ownerState.unstable_level)}`]: typeof value === 'string' ? value : (_theme$spacing = theme.spacing) == null ? void 0 : _theme$spacing.call(theme, value)
      });
    });
    return styles;
  };
  const generateGridColumnSpacingStyles = ({
    theme,
    ownerState
  }) => {
    if (!ownerState.container) {
      return {};
    }
    const getParentSpacing = createGetParentSpacing(ownerState);
    const styles = isNestedContainer(ownerState) ? {
      // Set the default spacing as its parent spacing.
      // It will be overridden if spacing props are provided
      [`--Grid-columnSpacing${appendLevel(ownerState.unstable_level)}`]: getParentSpacing('column')
    } : {};
    traverseBreakpoints(theme.breakpoints, ownerState.columnSpacing, (appendStyle, value) => {
      var _theme$spacing2;
      appendStyle(styles, {
        [`--Grid-columnSpacing${appendLevel(ownerState.unstable_level)}`]: typeof value === 'string' ? value : (_theme$spacing2 = theme.spacing) == null ? void 0 : _theme$spacing2.call(theme, value)
      });
    });
    return styles;
  };
  const generateGridDirectionStyles = ({
    theme,
    ownerState
  }) => {
    if (!ownerState.container) {
      return {};
    }
    const styles = {};
    traverseBreakpoints(theme.breakpoints, ownerState.direction, (appendStyle, value) => {
      appendStyle(styles, {
        flexDirection: value
      });
    });
    return styles;
  };
  const generateGridStyles = ({
    ownerState
  }) => {
    const getSelfSpacing = createGetSelfSpacing(ownerState);
    const getParentSpacing = createGetParentSpacing(ownerState);
    return _extends({
      minWidth: 0,
      boxSizing: 'border-box'
    }, ownerState.container && _extends({
      display: 'flex',
      flexWrap: 'wrap'
    }, ownerState.wrap && ownerState.wrap !== 'wrap' && {
      flexWrap: ownerState.wrap
    }, {
      margin: `calc(${getSelfSpacing('row')} / -2) calc(${getSelfSpacing('column')} / -2)`
    }, ownerState.disableEqualOverflow && {
      margin: `calc(${getSelfSpacing('row')} * -1) 0px 0px calc(${getSelfSpacing('column')} * -1)`
    }), (!ownerState.container || isNestedContainer(ownerState)) && _extends({
      padding: `calc(${getParentSpacing('row')} / 2) calc(${getParentSpacing('column')} / 2)`
    }, (ownerState.disableEqualOverflow || ownerState.parentDisableEqualOverflow) && {
      padding: `${getParentSpacing('row')} 0px 0px ${getParentSpacing('column')}`
    }));
  };
  const generateSizeClassNames = gridSize => {
    const classNames = [];
    Object.entries(gridSize).forEach(([key, value]) => {
      if (value !== false && value !== undefined) {
        classNames.push(`grid-${key}-${String(value)}`);
      }
    });
    return classNames;
  };
  const generateSpacingClassNames = (spacing, smallestBreakpoint = 'xs') => {
    function isValidSpacing(val) {
      if (val === undefined) {
        return false;
      }
      return typeof val === 'string' && !Number.isNaN(Number(val)) || typeof val === 'number' && val > 0;
    }
    if (isValidSpacing(spacing)) {
      return [`spacing-${smallestBreakpoint}-${String(spacing)}`];
    }
    if (typeof spacing === 'object' && !Array.isArray(spacing)) {
      const classNames = [];
      Object.entries(spacing).forEach(([key, value]) => {
        if (isValidSpacing(value)) {
          classNames.push(`spacing-${key}-${String(value)}`);
        }
      });
      return classNames;
    }
    return [];
  };
  const generateDirectionClasses = direction => {
    if (direction === undefined) {
      return [];
    }
    if (typeof direction === 'object') {
      return Object.entries(direction).map(([key, value]) => `direction-${key}-${value}`);
    }
    return [`direction-xs-${String(direction)}`];
  };

  const _excluded$2f = ["className", "children", "columns", "container", "component", "direction", "wrap", "spacing", "rowSpacing", "columnSpacing", "disableEqualOverflow", "unstable_level"];
  const defaultTheme$5 = createTheme$1();

  // widening Theme to any so that the consumer can own the theme structure.
  const defaultCreateStyledComponent$1 = systemStyled('div', {
    name: 'MuiGrid',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  });
  function useThemePropsDefault$1(props) {
    return useThemeProps$1({
      props,
      name: 'MuiGrid',
      defaultTheme: defaultTheme$5
    });
  }
  function createGrid(options = {}) {
    const {
      // This will allow adding custom styled fn (for example for custom sx style function)
      createStyledComponent = defaultCreateStyledComponent$1,
      useThemeProps = useThemePropsDefault$1,
      componentName = 'MuiGrid'
    } = options;
    const OverflowContext = /*#__PURE__*/React__namespace.createContext(undefined);
    const useUtilityClasses = (ownerState, theme) => {
      const {
        container,
        direction,
        spacing,
        wrap,
        gridSize
      } = ownerState;
      const slots = {
        root: ['root', container && 'container', wrap !== 'wrap' && `wrap-xs-${String(wrap)}`, ...generateDirectionClasses(direction), ...generateSizeClassNames(gridSize), ...(container ? generateSpacingClassNames(spacing, theme.breakpoints.keys[0]) : [])]
      };
      return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});
    };
    const GridRoot = createStyledComponent(generateGridColumnsStyles, generateGridColumnSpacingStyles, generateGridRowSpacingStyles, generateGridSizeStyles, generateGridDirectionStyles, generateGridStyles, generateGridOffsetStyles);
    const Grid = /*#__PURE__*/React__namespace.forwardRef(function Grid(inProps, ref) {
      var _inProps$columns, _inProps$spacing, _ref, _inProps$rowSpacing, _ref2, _inProps$columnSpacin, _ref3, _disableEqualOverflow;
      const theme = useTheme$2();
      const themeProps = useThemeProps(inProps);
      const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.
      const overflow = React__namespace.useContext(OverflowContext);
      const {
          className,
          children,
          columns: columnsProp = 12,
          container = false,
          component = 'div',
          direction = 'row',
          wrap = 'wrap',
          spacing: spacingProp = 0,
          rowSpacing: rowSpacingProp = spacingProp,
          columnSpacing: columnSpacingProp = spacingProp,
          disableEqualOverflow: themeDisableEqualOverflow,
          unstable_level: level = 0
        } = props,
        rest = _objectWithoutPropertiesLoose(props, _excluded$2f);
      // Because `disableEqualOverflow` can be set from the theme's defaultProps, the **nested** grid should look at the instance props instead.
      let disableEqualOverflow = themeDisableEqualOverflow;
      if (level && themeDisableEqualOverflow !== undefined) {
        disableEqualOverflow = inProps.disableEqualOverflow;
      }
      // collect breakpoints related props because they can be customized from the theme.
      const gridSize = {};
      const gridOffset = {};
      const other = {};
      Object.entries(rest).forEach(([key, val]) => {
        if (theme.breakpoints.values[key] !== undefined) {
          gridSize[key] = val;
        } else if (theme.breakpoints.values[key.replace('Offset', '')] !== undefined) {
          gridOffset[key.replace('Offset', '')] = val;
        } else {
          other[key] = val;
        }
      });
      const columns = (_inProps$columns = inProps.columns) != null ? _inProps$columns : level ? undefined : columnsProp;
      const spacing = (_inProps$spacing = inProps.spacing) != null ? _inProps$spacing : level ? undefined : spacingProp;
      const rowSpacing = (_ref = (_inProps$rowSpacing = inProps.rowSpacing) != null ? _inProps$rowSpacing : inProps.spacing) != null ? _ref : level ? undefined : rowSpacingProp;
      const columnSpacing = (_ref2 = (_inProps$columnSpacin = inProps.columnSpacing) != null ? _inProps$columnSpacin : inProps.spacing) != null ? _ref2 : level ? undefined : columnSpacingProp;
      const ownerState = _extends({}, props, {
        level,
        columns,
        container,
        direction,
        wrap,
        spacing,
        rowSpacing,
        columnSpacing,
        gridSize,
        gridOffset,
        disableEqualOverflow: (_ref3 = (_disableEqualOverflow = disableEqualOverflow) != null ? _disableEqualOverflow : overflow) != null ? _ref3 : false,
        // use context value if exists.
        parentDisableEqualOverflow: overflow // for nested grid
      });
      const classes = useUtilityClasses(ownerState, theme);
      let result = /*#__PURE__*/jsxRuntime_1(GridRoot, _extends({
        ref: ref,
        as: component,
        ownerState: ownerState,
        className: clsx(classes.root, className)
      }, other, {
        children: React__namespace.Children.map(children, child => {
          if ( /*#__PURE__*/React__namespace.isValidElement(child) && isMuiElement(child, ['Grid'])) {
            var _child$props$unstable;
            return /*#__PURE__*/React__namespace.cloneElement(child, {
              unstable_level: (_child$props$unstable = child.props.unstable_level) != null ? _child$props$unstable : level + 1
            });
          }
          return child;
        })
      }));
      if (disableEqualOverflow !== undefined && disableEqualOverflow !== (overflow != null ? overflow : false)) {
        // There are 2 possibilities that should wrap with the OverflowContext to communicate with the nested grids:
        // 1. It is the root grid with `disableEqualOverflow`.
        // 2. It is a nested grid with different `disableEqualOverflow` from the context.
        result = /*#__PURE__*/jsxRuntime_1(OverflowContext.Provider, {
          value: disableEqualOverflow,
          children: result
        });
      }
      return result;
    });
    Grid.propTypes /* remove-proptypes */ = {
      children: PropTypes.node,
      className: PropTypes.string,
      columns: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object]),
      columnSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
      component: PropTypes.elementType,
      container: PropTypes.bool,
      direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),
      disableEqualOverflow: PropTypes.bool,
      lg: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
      lgOffset: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
      md: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
      mdOffset: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
      rowSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
      sm: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
      smOffset: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
      spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
      sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
      wrap: PropTypes.oneOf(['nowrap', 'wrap-reverse', 'wrap']),
      xl: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
      xlOffset: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
      xs: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
      xsOffset: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number])
    } ;

    // @ts-ignore internal logic for nested grid
    Grid.muiName = 'Grid';
    return Grid;
  }

  const _excluded$2e = ["component", "direction", "spacing", "divider", "children", "className", "useFlexGap"];
  const defaultTheme$4 = createTheme$1();
  // widening Theme to any so that the consumer can own the theme structure.
  const defaultCreateStyledComponent = systemStyled('div', {
    name: 'MuiStack',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  });
  function useThemePropsDefault(props) {
    return useThemeProps$1({
      props,
      name: 'MuiStack',
      defaultTheme: defaultTheme$4
    });
  }

  /**
   * Return an array with the separator React element interspersed between
   * each React node of the input children.
   *
   * > joinChildren([1,2,3], 0)
   * [1,0,2,0,3]
   */
  function joinChildren(children, separator) {
    const childrenArray = React__namespace.Children.toArray(children).filter(Boolean);
    return childrenArray.reduce((output, child, index) => {
      output.push(child);
      if (index < childrenArray.length - 1) {
        output.push( /*#__PURE__*/React__namespace.cloneElement(separator, {
          key: `separator-${index}`
        }));
      }
      return output;
    }, []);
  }
  const getSideFromDirection = direction => {
    return {
      row: 'Left',
      'row-reverse': 'Right',
      column: 'Top',
      'column-reverse': 'Bottom'
    }[direction];
  };
  const style = ({
    ownerState,
    theme
  }) => {
    let styles = _extends({
      display: 'flex',
      flexDirection: 'column'
    }, handleBreakpoints({
      theme
    }, resolveBreakpointValues({
      values: ownerState.direction,
      breakpoints: theme.breakpoints.values
    }), propValue => ({
      flexDirection: propValue
    })));
    if (ownerState.spacing) {
      const transformer = createUnarySpacing(theme);
      const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {
        if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {
          acc[breakpoint] = true;
        }
        return acc;
      }, {});
      const directionValues = resolveBreakpointValues({
        values: ownerState.direction,
        base
      });
      const spacingValues = resolveBreakpointValues({
        values: ownerState.spacing,
        base
      });
      if (typeof directionValues === 'object') {
        Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {
          const directionValue = directionValues[breakpoint];
          if (!directionValue) {
            const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';
            directionValues[breakpoint] = previousDirectionValue;
          }
        });
      }
      const styleFromPropValue = (propValue, breakpoint) => {
        if (ownerState.useFlexGap) {
          return {
            gap: getValue(transformer, propValue)
          };
        }
        return {
          // The useFlexGap={false} implement relies on each child to give up control of the margin.
          // We need to reset the margin to avoid double spacing.
          '& > :not(style):not(style)': {
            margin: 0
          },
          '& > :not(style) ~ :not(style)': {
            [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)
          }
        };
      };
      styles = deepmerge(styles, handleBreakpoints({
        theme
      }, spacingValues, styleFromPropValue));
    }
    styles = mergeBreakpointsInOrder(theme.breakpoints, styles);
    return styles;
  };
  function createStack(options = {}) {
    const {
      // This will allow adding custom styled fn (for example for custom sx style function)
      createStyledComponent = defaultCreateStyledComponent,
      useThemeProps = useThemePropsDefault,
      componentName = 'MuiStack'
    } = options;
    const useUtilityClasses = () => {
      const slots = {
        root: ['root']
      };
      return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});
    };
    const StackRoot = createStyledComponent(style);
    const Stack = /*#__PURE__*/React__namespace.forwardRef(function Grid(inProps, ref) {
      const themeProps = useThemeProps(inProps);
      const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.
      const {
          component = 'div',
          direction = 'column',
          spacing = 0,
          divider,
          children,
          className,
          useFlexGap = false
        } = props,
        other = _objectWithoutPropertiesLoose(props, _excluded$2e);
      const ownerState = {
        direction,
        spacing,
        useFlexGap
      };
      const classes = useUtilityClasses();
      return /*#__PURE__*/jsxRuntime_1(StackRoot, _extends({
        as: component,
        ownerState: ownerState,
        ref: ref,
        className: clsx(classes.root, className)
      }, other, {
        children: divider ? joinChildren(children, divider) : children
      }));
    });
    Stack.propTypes /* remove-proptypes */ = {
      children: PropTypes.node,
      direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),
      divider: PropTypes.node,
      spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
      sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
    } ;
    return Stack;
  }

  const _excluded$2d = ["defaultProps", "mixins", "overrides", "palette", "props", "styleOverrides"],
    _excluded2$d = ["type", "mode"];
  function adaptV4Theme(inputTheme) {
    {
      console.warn(['MUI: adaptV4Theme() is deprecated.', 'Follow the upgrade guide on https://mui.com/r/migration-v4#theme.'].join('\n'));
    }
    const {
        defaultProps = {},
        mixins = {},
        overrides = {},
        palette = {},
        props = {},
        styleOverrides = {}
      } = inputTheme,
      other = _objectWithoutPropertiesLoose(inputTheme, _excluded$2d);
    const theme = _extends({}, other, {
      components: {}
    });

    // default props
    Object.keys(defaultProps).forEach(component => {
      const componentValue = theme.components[component] || {};
      componentValue.defaultProps = defaultProps[component];
      theme.components[component] = componentValue;
    });
    Object.keys(props).forEach(component => {
      const componentValue = theme.components[component] || {};
      componentValue.defaultProps = props[component];
      theme.components[component] = componentValue;
    });

    // CSS overrides
    Object.keys(styleOverrides).forEach(component => {
      const componentValue = theme.components[component] || {};
      componentValue.styleOverrides = styleOverrides[component];
      theme.components[component] = componentValue;
    });
    Object.keys(overrides).forEach(component => {
      const componentValue = theme.components[component] || {};
      componentValue.styleOverrides = overrides[component];
      theme.components[component] = componentValue;
    });

    // theme.spacing
    theme.spacing = createSpacing(inputTheme.spacing);

    // theme.mixins.gutters
    const breakpoints = createBreakpoints(inputTheme.breakpoints || {});
    const spacing = theme.spacing;
    theme.mixins = _extends({
      gutters: (styles = {}) => {
        return _extends({
          paddingLeft: spacing(2),
          paddingRight: spacing(2)
        }, styles, {
          [breakpoints.up('sm')]: _extends({
            paddingLeft: spacing(3),
            paddingRight: spacing(3)
          }, styles[breakpoints.up('sm')])
        });
      }
    }, mixins);
    const {
        type: typeInput,
        mode: modeInput
      } = palette,
      paletteRest = _objectWithoutPropertiesLoose(palette, _excluded2$d);
    const finalMode = modeInput || typeInput || 'light';
    theme.palette = _extends({
      // theme.palette.text.hint
      text: {
        hint: finalMode === 'dark' ? 'rgba(255, 255, 255, 0.5)' : 'rgba(0, 0, 0, 0.38)'
      },
      mode: finalMode,
      type: finalMode
    }, paletteRest);
    return theme;
  }

  function createMixins(breakpoints, mixins) {
    return _extends({
      toolbar: {
        minHeight: 56,
        [breakpoints.up('xs')]: {
          '@media (orientation: landscape)': {
            minHeight: 48
          }
        },
        [breakpoints.up('sm')]: {
          minHeight: 64
        }
      }
    }, mixins);
  }

  const _excluded$2c = ["mode", "contrastThreshold", "tonalOffset"];
  const light = {
    // The colors used to style the text.
    text: {
      // The most important text.
      primary: 'rgba(0, 0, 0, 0.87)',
      // Secondary text.
      secondary: 'rgba(0, 0, 0, 0.6)',
      // Disabled text have even lower visual prominence.
      disabled: 'rgba(0, 0, 0, 0.38)'
    },
    // The color used to divide different elements.
    divider: 'rgba(0, 0, 0, 0.12)',
    // The background colors used to style the surfaces.
    // Consistency between these values is important.
    background: {
      paper: common$1.white,
      default: common$1.white
    },
    // The colors used to style the action elements.
    action: {
      // The color of an active action like an icon button.
      active: 'rgba(0, 0, 0, 0.54)',
      // The color of an hovered action.
      hover: 'rgba(0, 0, 0, 0.04)',
      hoverOpacity: 0.04,
      // The color of a selected action.
      selected: 'rgba(0, 0, 0, 0.08)',
      selectedOpacity: 0.08,
      // The color of a disabled action.
      disabled: 'rgba(0, 0, 0, 0.26)',
      // The background color of a disabled action.
      disabledBackground: 'rgba(0, 0, 0, 0.12)',
      disabledOpacity: 0.38,
      focus: 'rgba(0, 0, 0, 0.12)',
      focusOpacity: 0.12,
      activatedOpacity: 0.12
    }
  };
  const dark = {
    text: {
      primary: common$1.white,
      secondary: 'rgba(255, 255, 255, 0.7)',
      disabled: 'rgba(255, 255, 255, 0.5)',
      icon: 'rgba(255, 255, 255, 0.5)'
    },
    divider: 'rgba(255, 255, 255, 0.12)',
    background: {
      paper: '#121212',
      default: '#121212'
    },
    action: {
      active: common$1.white,
      hover: 'rgba(255, 255, 255, 0.08)',
      hoverOpacity: 0.08,
      selected: 'rgba(255, 255, 255, 0.16)',
      selectedOpacity: 0.16,
      disabled: 'rgba(255, 255, 255, 0.3)',
      disabledBackground: 'rgba(255, 255, 255, 0.12)',
      disabledOpacity: 0.38,
      focus: 'rgba(255, 255, 255, 0.12)',
      focusOpacity: 0.12,
      activatedOpacity: 0.24
    }
  };
  function addLightOrDark(intent, direction, shade, tonalOffset) {
    const tonalOffsetLight = tonalOffset.light || tonalOffset;
    const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;
    if (!intent[direction]) {
      if (intent.hasOwnProperty(shade)) {
        intent[direction] = intent[shade];
      } else if (direction === 'light') {
        intent.light = lighten(intent.main, tonalOffsetLight);
      } else if (direction === 'dark') {
        intent.dark = darken(intent.main, tonalOffsetDark);
      }
    }
  }
  function getDefaultPrimary(mode = 'light') {
    if (mode === 'dark') {
      return {
        main: blue$1[200],
        light: blue$1[50],
        dark: blue$1[400]
      };
    }
    return {
      main: blue$1[700],
      light: blue$1[400],
      dark: blue$1[800]
    };
  }
  function getDefaultSecondary(mode = 'light') {
    if (mode === 'dark') {
      return {
        main: purple$1[200],
        light: purple$1[50],
        dark: purple$1[400]
      };
    }
    return {
      main: purple$1[500],
      light: purple$1[300],
      dark: purple$1[700]
    };
  }
  function getDefaultError(mode = 'light') {
    if (mode === 'dark') {
      return {
        main: red$1[500],
        light: red$1[300],
        dark: red$1[700]
      };
    }
    return {
      main: red$1[700],
      light: red$1[400],
      dark: red$1[800]
    };
  }
  function getDefaultInfo(mode = 'light') {
    if (mode === 'dark') {
      return {
        main: lightBlue$1[400],
        light: lightBlue$1[300],
        dark: lightBlue$1[700]
      };
    }
    return {
      main: lightBlue$1[700],
      light: lightBlue$1[500],
      dark: lightBlue$1[900]
    };
  }
  function getDefaultSuccess(mode = 'light') {
    if (mode === 'dark') {
      return {
        main: green$1[400],
        light: green$1[300],
        dark: green$1[700]
      };
    }
    return {
      main: green$1[800],
      light: green$1[500],
      dark: green$1[900]
    };
  }
  function getDefaultWarning(mode = 'light') {
    if (mode === 'dark') {
      return {
        main: orange$1[400],
        light: orange$1[300],
        dark: orange$1[700]
      };
    }
    return {
      main: '#ed6c02',
      // closest to orange[800] that pass 3:1.
      light: orange$1[500],
      dark: orange$1[900]
    };
  }
  function createPalette(palette) {
    const {
        mode = 'light',
        contrastThreshold = 3,
        tonalOffset = 0.2
      } = palette,
      other = _objectWithoutPropertiesLoose(palette, _excluded$2c);
    const primary = palette.primary || getDefaultPrimary(mode);
    const secondary = palette.secondary || getDefaultSecondary(mode);
    const error = palette.error || getDefaultError(mode);
    const info = palette.info || getDefaultInfo(mode);
    const success = palette.success || getDefaultSuccess(mode);
    const warning = palette.warning || getDefaultWarning(mode);

    // Use the same logic as
    // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59
    // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54
    function getContrastText(background) {
      const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;
      {
        const contrast = getContrastRatio(background, contrastText);
        if (contrast < 3) {
          console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\n'));
        }
      }
      return contrastText;
    }
    const augmentColor = ({
      color,
      name,
      mainShade = 500,
      lightShade = 300,
      darkShade = 700
    }) => {
      color = _extends({}, color);
      if (!color.main && color[mainShade]) {
        color.main = color[mainShade];
      }
      if (!color.hasOwnProperty('main')) {
        throw new Error(`MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.
The color object needs to have a \`main\` property or a \`${mainShade}\` property.` );
      }
      if (typeof color.main !== 'string') {
        throw new Error(`MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.
\`color.main\` should be a string, but \`${JSON.stringify(color.main)}\` was provided instead.

Did you intend to use one of the following approaches?

import { green } from "@mui/material/colors";

const theme1 = createTheme({ palette: {
  primary: green,
} });

const theme2 = createTheme({ palette: {
  primary: { main: green[500] },
} });` );
      }
      addLightOrDark(color, 'light', lightShade, tonalOffset);
      addLightOrDark(color, 'dark', darkShade, tonalOffset);
      if (!color.contrastText) {
        color.contrastText = getContrastText(color.main);
      }
      return color;
    };
    const modes = {
      dark,
      light
    };
    {
      if (!modes[mode]) {
        console.error(`MUI: The palette mode \`${mode}\` is not supported.`);
      }
    }
    const paletteOutput = deepmerge(_extends({
      // A collection of common colors.
      common: _extends({}, common$1),
      // prevent mutable object.
      // The palette mode, can be light or dark.
      mode,
      // The colors used to represent primary interface elements for a user.
      primary: augmentColor({
        color: primary,
        name: 'primary'
      }),
      // The colors used to represent secondary interface elements for a user.
      secondary: augmentColor({
        color: secondary,
        name: 'secondary',
        mainShade: 'A400',
        lightShade: 'A200',
        darkShade: 'A700'
      }),
      // The colors used to represent interface elements that the user should be made aware of.
      error: augmentColor({
        color: error,
        name: 'error'
      }),
      // The colors used to represent potentially dangerous actions or important messages.
      warning: augmentColor({
        color: warning,
        name: 'warning'
      }),
      // The colors used to present information to the user that is neutral and not necessarily important.
      info: augmentColor({
        color: info,
        name: 'info'
      }),
      // The colors used to indicate the successful completion of an action that user triggered.
      success: augmentColor({
        color: success,
        name: 'success'
      }),
      // The grey colors.
      grey: grey$1,
      // Used by `getContrastText()` to maximize the contrast between
      // the background and the text.
      contrastThreshold,
      // Takes a background color and returns the text color that maximizes the contrast.
      getContrastText,
      // Generate a rich color object.
      augmentColor,
      // Used by the functions below to shift a color's luminance by approximately
      // two indexes within its tonal palette.
      // E.g., shift from Red 500 to Red 300 or Red 700.
      tonalOffset
    }, modes[mode]), other);
    return paletteOutput;
  }

  const _excluded$2b = ["fontFamily", "fontSize", "fontWeightLight", "fontWeightRegular", "fontWeightMedium", "fontWeightBold", "htmlFontSize", "allVariants", "pxToRem"];
  function round$2(value) {
    return Math.round(value * 1e5) / 1e5;
  }
  const caseAllCaps = {
    textTransform: 'uppercase'
  };
  const defaultFontFamily = '"Roboto", "Helvetica", "Arial", sans-serif';

  /**
   * @see @link{https://m2.material.io/design/typography/the-type-system.html}
   * @see @link{https://m2.material.io/design/typography/understanding-typography.html}
   */
  function createTypography(palette, typography) {
    const _ref = typeof typography === 'function' ? typography(palette) : typography,
      {
        fontFamily = defaultFontFamily,
        // The default font size of the Material Specification.
        fontSize = 14,
        // px
        fontWeightLight = 300,
        fontWeightRegular = 400,
        fontWeightMedium = 500,
        fontWeightBold = 700,
        // Tell MUI what's the font-size on the html element.
        // 16px is the default font-size used by browsers.
        htmlFontSize = 16,
        // Apply the CSS properties to all the variants.
        allVariants,
        pxToRem: pxToRem2
      } = _ref,
      other = _objectWithoutPropertiesLoose(_ref, _excluded$2b);
    {
      if (typeof fontSize !== 'number') {
        console.error('MUI: `fontSize` is required to be a number.');
      }
      if (typeof htmlFontSize !== 'number') {
        console.error('MUI: `htmlFontSize` is required to be a number.');
      }
    }
    const coef = fontSize / 14;
    const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);
    const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => _extends({
      fontFamily,
      fontWeight,
      fontSize: pxToRem(size),
      // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/
      lineHeight
    }, fontFamily === defaultFontFamily ? {
      letterSpacing: `${round$2(letterSpacing / size)}em`
    } : {}, casing, allVariants);
    const variants = {
      h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),
      h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),
      h3: buildVariant(fontWeightRegular, 48, 1.167, 0),
      h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),
      h5: buildVariant(fontWeightRegular, 24, 1.334, 0),
      h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),
      subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),
      subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),
      body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),
      body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),
      button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),
      caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),
      overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),
      // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.
      inherit: {
        fontFamily: 'inherit',
        fontWeight: 'inherit',
        fontSize: 'inherit',
        lineHeight: 'inherit',
        letterSpacing: 'inherit'
      }
    };
    return deepmerge(_extends({
      htmlFontSize,
      pxToRem,
      fontFamily,
      fontSize,
      fontWeightLight,
      fontWeightRegular,
      fontWeightMedium,
      fontWeightBold
    }, variants), other, {
      clone: false // No need to clone deep
    });
  }

  const shadowKeyUmbraOpacity = 0.2;
  const shadowKeyPenumbraOpacity = 0.14;
  const shadowAmbientShadowOpacity = 0.12;
  function createShadow(...px) {
    return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');
  }

  // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss
  const shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];
  var shadows$1 = shadows;

  const _excluded$2a = ["duration", "easing", "delay"];
  // Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves
  // to learn the context in which each easing should be used.
  const easing = {
    // This is the most common easing curve.
    easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',
    // Objects enter the screen at full velocity from off-screen and
    // slowly decelerate to a resting point.
    easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',
    // Objects leave the screen at full velocity. They do not decelerate when off-screen.
    easeIn: 'cubic-bezier(0.4, 0, 1, 1)',
    // The sharp curve is used by objects that may return to the screen at any time.
    sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'
  };

  // Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations
  // to learn when use what timing
  const duration = {
    shortest: 150,
    shorter: 200,
    short: 250,
    // most basic recommended timing
    standard: 300,
    // this is to be used in complex animations
    complex: 375,
    // recommended when something is entering screen
    enteringScreen: 225,
    // recommended when something is leaving screen
    leavingScreen: 195
  };
  function formatMs(milliseconds) {
    return `${Math.round(milliseconds)}ms`;
  }
  function getAutoHeightDuration(height) {
    if (!height) {
      return 0;
    }
    const constant = height / 36;

    // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10
    return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);
  }
  function createTransitions(inputTransitions) {
    const mergedEasing = _extends({}, easing, inputTransitions.easing);
    const mergedDuration = _extends({}, duration, inputTransitions.duration);
    const create = (props = ['all'], options = {}) => {
      const {
          duration: durationOption = mergedDuration.standard,
          easing: easingOption = mergedEasing.easeInOut,
          delay = 0
        } = options,
        other = _objectWithoutPropertiesLoose(options, _excluded$2a);
      {
        const isString = value => typeof value === 'string';
        // IE11 support, replace with Number.isNaN
        // eslint-disable-next-line no-restricted-globals
        const isNumber = value => !isNaN(parseFloat(value));
        if (!isString(props) && !Array.isArray(props)) {
          console.error('MUI: Argument "props" must be a string or Array.');
        }
        if (!isNumber(durationOption) && !isString(durationOption)) {
          console.error(`MUI: Argument "duration" must be a number or a string but found ${durationOption}.`);
        }
        if (!isString(easingOption)) {
          console.error('MUI: Argument "easing" must be a string.');
        }
        if (!isNumber(delay) && !isString(delay)) {
          console.error('MUI: Argument "delay" must be a number or a string.');
        }
        if (typeof options !== 'object') {
          console.error(['MUI: Secong argument of transition.create must be an object.', "Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`"].join('\n'));
        }
        if (Object.keys(other).length !== 0) {
          console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);
        }
      }
      return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');
    };
    return _extends({
      getAutoHeightDuration,
      create
    }, inputTransitions, {
      easing: mergedEasing,
      duration: mergedDuration
    });
  }

  // We need to centralize the zIndex definitions as they work
  // like global values in the browser.
  const zIndex = {
    mobileStepper: 1000,
    fab: 1050,
    speedDial: 1050,
    appBar: 1100,
    drawer: 1200,
    modal: 1300,
    snackbar: 1400,
    tooltip: 1500
  };
  var zIndex$1 = zIndex;

  const _excluded$29 = ["breakpoints", "mixins", "spacing", "palette", "transitions", "typography", "shape"];
  function createTheme(options = {}, ...args) {
    const {
        mixins: mixinsInput = {},
        palette: paletteInput = {},
        transitions: transitionsInput = {},
        typography: typographyInput = {}
      } = options,
      other = _objectWithoutPropertiesLoose(options, _excluded$29);
    if (options.vars) {
      throw new Error(`MUI: \`vars\` is a private field used for CSS variables support.
Please use another name.` );
    }
    const palette = createPalette(paletteInput);
    const systemTheme = createTheme$1(options);
    let muiTheme = deepmerge(systemTheme, {
      mixins: createMixins(systemTheme.breakpoints, mixinsInput),
      palette,
      // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.
      shadows: shadows$1.slice(),
      typography: createTypography(palette, typographyInput),
      transitions: createTransitions(transitionsInput),
      zIndex: _extends({}, zIndex$1)
    });
    muiTheme = deepmerge(muiTheme, other);
    muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);
    {
      // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.
      const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];
      const traverse = (node, component) => {
        let key;

        // eslint-disable-next-line guard-for-in, no-restricted-syntax
        for (key in node) {
          const child = node[key];
          if (stateClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {
            {
              const stateClass = generateUtilityClass('', key);
              console.error([`MUI: The \`${component}\` component increases ` + `the CSS specificity of the \`${key}\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({
                root: {
                  [`&.${stateClass}`]: child
                }
              }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\n'));
            }
            // Remove the style to prevent global conflicts.
            node[key] = {};
          }
        }
      };
      Object.keys(muiTheme.components).forEach(component => {
        const styleOverrides = muiTheme.components[component].styleOverrides;
        if (styleOverrides && component.indexOf('Mui') === 0) {
          traverse(styleOverrides, component);
        }
      });
    }
    muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig$1, other == null ? void 0 : other.unstable_sxConfig);
    muiTheme.unstable_sx = function sx(props) {
      return styleFunctionSx$1({
        sx: props,
        theme: this
      });
    };
    return muiTheme;
  }
  let warnedOnce$1 = false;
  function createMuiTheme(...args) {
    {
      if (!warnedOnce$1) {
        warnedOnce$1 = true;
        console.error(['MUI: the createMuiTheme function was renamed to createTheme.', '', "You should use `import { createTheme } from '@mui/material/styles'`"].join('\n'));
      }
    }
    return createTheme(...args);
  }

  function createMuiStrictModeTheme(options, ...args) {
    return createTheme(deepmerge({
      unstable_strictMode: true
    }, options), ...args);
  }

  let warnedOnce = false;

  // To remove in v6
  function createStyles(styles) {
    if (!warnedOnce) {
      console.warn(['MUI: createStyles from @mui/material/styles is deprecated.', 'Please use @mui/styles/createStyles'].join('\n'));
      warnedOnce = true;
    }
    return styles;
  }

  function isUnitless(value) {
    return String(parseFloat(value)).length === String(value).length;
  }

  // Ported from Compass
  // https://github.com/Compass/compass/blob/master/core/stylesheets/compass/typography/_units.scss
  // Emulate the sass function "unit"
  function getUnit(input) {
    return String(input).match(/[\d.\-+]*\s*(.*)/)[1] || '';
  }

  // Emulate the sass function "unitless"
  function toUnitless(length) {
    return parseFloat(length);
  }

  // Convert any CSS <length> or <percentage> value to any another.
  // From https://github.com/KyleAMathews/convert-css-length
  function convertLength(baseFontSize) {
    return (length, toUnit) => {
      const fromUnit = getUnit(length);

      // Optimize for cases where `from` and `to` units are accidentally the same.
      if (fromUnit === toUnit) {
        return length;
      }

      // Convert input length to pixels.
      let pxLength = toUnitless(length);
      if (fromUnit !== 'px') {
        if (fromUnit === 'em') {
          pxLength = toUnitless(length) * toUnitless(baseFontSize);
        } else if (fromUnit === 'rem') {
          pxLength = toUnitless(length) * toUnitless(baseFontSize);
        }
      }

      // Convert length in pixels to the output unit
      let outputLength = pxLength;
      if (toUnit !== 'px') {
        if (toUnit === 'em') {
          outputLength = pxLength / toUnitless(baseFontSize);
        } else if (toUnit === 'rem') {
          outputLength = pxLength / toUnitless(baseFontSize);
        } else {
          return length;
        }
      }
      return parseFloat(outputLength.toFixed(5)) + toUnit;
    };
  }
  function alignProperty({
    size,
    grid
  }) {
    const sizeBelow = size - size % grid;
    const sizeAbove = sizeBelow + grid;
    return size - sizeBelow < sizeAbove - size ? sizeBelow : sizeAbove;
  }

  // fontGrid finds a minimal grid (in rem) for the fontSize values so that the
  // lineHeight falls under a x pixels grid, 4px in the case of Material Design,
  // without changing the relative line height
  function fontGrid({
    lineHeight,
    pixels,
    htmlFontSize
  }) {
    return pixels / (lineHeight * htmlFontSize);
  }

  /**
   * generate a responsive version of a given CSS property
   * @example
   * responsiveProperty({
   *   cssProperty: 'fontSize',
   *   min: 15,
   *   max: 20,
   *   unit: 'px',
   *   breakpoints: [300, 600],
   * })
   *
   * // this returns
   *
   * {
   *   fontSize: '15px',
   *   '@media (min-width:300px)': {
   *     fontSize: '17.5px',
   *   },
   *   '@media (min-width:600px)': {
   *     fontSize: '20px',
   *   },
   * }
   * @param {Object} params
   * @param {string} params.cssProperty - The CSS property to be made responsive
   * @param {number} params.min - The smallest value of the CSS property
   * @param {number} params.max - The largest value of the CSS property
   * @param {string} [params.unit] - The unit to be used for the CSS property
   * @param {Array.number} [params.breakpoints]  - An array of breakpoints
   * @param {number} [params.alignStep] - Round scaled value to fall under this grid
   * @returns {Object} responsive styles for {params.cssProperty}
   */
  function responsiveProperty({
    cssProperty,
    min,
    max,
    unit = 'rem',
    breakpoints = [600, 900, 1200],
    transform = null
  }) {
    const output = {
      [cssProperty]: `${min}${unit}`
    };
    const factor = (max - min) / breakpoints[breakpoints.length - 1];
    breakpoints.forEach(breakpoint => {
      let value = min + factor * breakpoint;
      if (transform !== null) {
        value = transform(value);
      }
      output[`@media (min-width:${breakpoint}px)`] = {
        [cssProperty]: `${Math.round(value * 10000) / 10000}${unit}`
      };
    });
    return output;
  }

  function responsiveFontSizes(themeInput, options = {}) {
    const {
      breakpoints = ['sm', 'md', 'lg'],
      disableAlign = false,
      factor = 2,
      variants = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'caption', 'button', 'overline']
    } = options;
    const theme = _extends({}, themeInput);
    theme.typography = _extends({}, theme.typography);
    const typography = theme.typography;

    // Convert between CSS lengths e.g. em->px or px->rem
    // Set the baseFontSize for your project. Defaults to 16px (also the browser default).
    const convert = convertLength(typography.htmlFontSize);
    const breakpointValues = breakpoints.map(x => theme.breakpoints.values[x]);
    variants.forEach(variant => {
      const style = typography[variant];
      const remFontSize = parseFloat(convert(style.fontSize, 'rem'));
      if (remFontSize <= 1) {
        return;
      }
      const maxFontSize = remFontSize;
      const minFontSize = 1 + (maxFontSize - 1) / factor;
      let {
        lineHeight
      } = style;
      if (!isUnitless(lineHeight) && !disableAlign) {
        throw new Error(`MUI: Unsupported non-unitless line height with grid alignment.
Use unitless line heights instead.` );
      }
      if (!isUnitless(lineHeight)) {
        // make it unitless
        lineHeight = parseFloat(convert(lineHeight, 'rem')) / parseFloat(remFontSize);
      }
      let transform = null;
      if (!disableAlign) {
        transform = value => alignProperty({
          size: value,
          grid: fontGrid({
            pixels: 4,
            lineHeight,
            htmlFontSize: typography.htmlFontSize
          })
        });
      }
      typography[variant] = _extends({}, style, responsiveProperty({
        cssProperty: 'fontSize',
        min: minFontSize,
        max: maxFontSize,
        unit: 'rem',
        breakpoints: breakpointValues,
        transform
      }));
    });
    return theme;
  }

  const defaultTheme$2 = createTheme();
  var defaultTheme$3 = defaultTheme$2;

  function useTheme() {
    const theme = useTheme$2(defaultTheme$3);
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useDebugValue(theme);
    }
    return theme[THEME_ID] || theme;
  }

  function useThemeProps({
    props,
    name
  }) {
    return useThemeProps$1({
      props,
      name,
      defaultTheme: defaultTheme$3,
      themeId: THEME_ID
    });
  }

  const rootShouldForwardProp = prop => shouldForwardProp(prop) && prop !== 'classes';
  const slotShouldForwardProp = shouldForwardProp;
  const styled = createStyled({
    themeId: THEME_ID,
    defaultTheme: defaultTheme$3,
    rootShouldForwardProp
  });
  var styled$1 = styled;

  const _excluded$28 = ["theme"];
  function ThemeProvider(_ref) {
    let {
        theme: themeInput
      } = _ref,
      props = _objectWithoutPropertiesLoose(_ref, _excluded$28);
    const scopedTheme = themeInput[THEME_ID];
    return /*#__PURE__*/jsxRuntime_1(ThemeProvider$1, _extends({}, props, {
      themeId: scopedTheme ? THEME_ID : undefined,
      theme: scopedTheme || themeInput
    }));
  }
  ThemeProvider.propTypes = {
    /**
     * Your component tree.
     */
    children: PropTypes.node,
    /**
     * A theme object. You can provide a function to extend the outer theme.
     */
    theme: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired
  } ;

  function makeStyles() {
    throw new Error(`MUI: makeStyles is no longer exported from @mui/material/styles.
You have to import it from @mui/styles.
See https://mui.com/r/migration-v4/#mui-material-styles for more details.` );
  }

  function withStyles() {
    throw new Error(`MUI: withStyles is no longer exported from @mui/material/styles.
You have to import it from @mui/styles.
See https://mui.com/r/migration-v4/#mui-material-styles for more details.` );
  }

  function withTheme() {
    throw new Error(`MUI: withTheme is no longer exported from @mui/material/styles.
You have to import it from @mui/styles.
See https://mui.com/r/migration-v4/#mui-material-styles for more details.` );
  }

  function shouldSkipGeneratingVar(keys) {
    var _keys$;
    return !!keys[0].match(/(cssVarPrefix|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||
    // ends with sxConfig
    keys[0] === 'palette' && !!((_keys$ = keys[1]) != null && _keys$.match(/(mode|contrastThreshold|tonalOffset)/));
  }

  // Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61
  const getOverlayAlpha = elevation => {
    let alphaValue;
    if (elevation < 1) {
      alphaValue = 5.11916 * elevation ** 2;
    } else {
      alphaValue = 4.5 * Math.log(elevation + 1) + 2;
    }
    return (alphaValue / 100).toFixed(2);
  };
  var getOverlayAlpha$1 = getOverlayAlpha;

  const _excluded$27 = ["colorSchemes", "cssVarPrefix", "shouldSkipGeneratingVar"],
    _excluded2$c = ["palette"];
  const defaultDarkOverlays = [...Array(25)].map((_, index) => {
    if (index === 0) {
      return undefined;
    }
    const overlay = getOverlayAlpha$1(index);
    return `linear-gradient(rgba(255 255 255 / ${overlay}), rgba(255 255 255 / ${overlay}))`;
  });
  function assignNode(obj, keys) {
    keys.forEach(k => {
      if (!obj[k]) {
        obj[k] = {};
      }
    });
  }
  function setColor(obj, key, defaultValue) {
    if (!obj[key] && defaultValue) {
      obj[key] = defaultValue;
    }
  }
  function setColorChannel(obj, key) {
    if (!(`${key}Channel` in obj)) {
      // custom channel token is not provided, generate one.
      // if channel token can't be generated, show a warning.
      obj[`${key}Channel`] = private_safeColorChannel(obj[key], `MUI: Can't create \`palette.${key}Channel\` because \`palette.${key}\` is not one of these formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` + '\n' + `To suppress this warning, you need to explicitly provide the \`palette.${key}Channel\` as a string (in rgb format, e.g. "12 12 12") or undefined if you want to remove the channel token.`);
    }
  }
  const silent = fn => {
    try {
      return fn();
    } catch (error) {
      // ignore error
    }
    return undefined;
  };
  const createGetCssVar = (cssVarPrefix = 'mui') => createGetCssVar$1(cssVarPrefix);
  function extendTheme(options = {}, ...args) {
    var _colorSchemesInput$li, _colorSchemesInput$da, _colorSchemesInput$li2, _colorSchemesInput$li3, _colorSchemesInput$da2, _colorSchemesInput$da3;
    const {
        colorSchemes: colorSchemesInput = {},
        cssVarPrefix = 'mui',
        shouldSkipGeneratingVar: shouldSkipGeneratingVar$1 = shouldSkipGeneratingVar
      } = options,
      input = _objectWithoutPropertiesLoose(options, _excluded$27);
    const getCssVar = createGetCssVar(cssVarPrefix);
    const _createThemeWithoutVa = createTheme(_extends({}, input, colorSchemesInput.light && {
        palette: (_colorSchemesInput$li = colorSchemesInput.light) == null ? void 0 : _colorSchemesInput$li.palette
      })),
      {
        palette: lightPalette
      } = _createThemeWithoutVa,
      muiTheme = _objectWithoutPropertiesLoose(_createThemeWithoutVa, _excluded2$c);
    const {
      palette: darkPalette
    } = createTheme({
      palette: _extends({
        mode: 'dark'
      }, (_colorSchemesInput$da = colorSchemesInput.dark) == null ? void 0 : _colorSchemesInput$da.palette)
    });
    let theme = _extends({}, muiTheme, {
      cssVarPrefix,
      getCssVar,
      colorSchemes: _extends({}, colorSchemesInput, {
        light: _extends({}, colorSchemesInput.light, {
          palette: lightPalette,
          opacity: _extends({
            inputPlaceholder: 0.42,
            inputUnderline: 0.42,
            switchTrackDisabled: 0.12,
            switchTrack: 0.38
          }, (_colorSchemesInput$li2 = colorSchemesInput.light) == null ? void 0 : _colorSchemesInput$li2.opacity),
          overlays: ((_colorSchemesInput$li3 = colorSchemesInput.light) == null ? void 0 : _colorSchemesInput$li3.overlays) || []
        }),
        dark: _extends({}, colorSchemesInput.dark, {
          palette: darkPalette,
          opacity: _extends({
            inputPlaceholder: 0.5,
            inputUnderline: 0.7,
            switchTrackDisabled: 0.2,
            switchTrack: 0.3
          }, (_colorSchemesInput$da2 = colorSchemesInput.dark) == null ? void 0 : _colorSchemesInput$da2.opacity),
          overlays: ((_colorSchemesInput$da3 = colorSchemesInput.dark) == null ? void 0 : _colorSchemesInput$da3.overlays) || defaultDarkOverlays
        })
      })
    });
    Object.keys(theme.colorSchemes).forEach(key => {
      const palette = theme.colorSchemes[key].palette;
      const setCssVarColor = cssVar => {
        const tokens = cssVar.split('-');
        const color = tokens[1];
        const colorToken = tokens[2];
        return getCssVar(cssVar, palette[color][colorToken]);
      };

      // attach black & white channels to common node
      if (key === 'light') {
        setColor(palette.common, 'background', '#fff');
        setColor(palette.common, 'onBackground', '#000');
      } else {
        setColor(palette.common, 'background', '#000');
        setColor(palette.common, 'onBackground', '#fff');
      }

      // assign component variables
      assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);
      if (key === 'light') {
        setColor(palette.Alert, 'errorColor', private_safeDarken(palette.error.light, 0.6));
        setColor(palette.Alert, 'infoColor', private_safeDarken(palette.info.light, 0.6));
        setColor(palette.Alert, 'successColor', private_safeDarken(palette.success.light, 0.6));
        setColor(palette.Alert, 'warningColor', private_safeDarken(palette.warning.light, 0.6));
        setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));
        setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));
        setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));
        setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));
        setColor(palette.Alert, 'errorFilledColor', silent(() => lightPalette.getContrastText(palette.error.main)));
        setColor(palette.Alert, 'infoFilledColor', silent(() => lightPalette.getContrastText(palette.info.main)));
        setColor(palette.Alert, 'successFilledColor', silent(() => lightPalette.getContrastText(palette.success.main)));
        setColor(palette.Alert, 'warningFilledColor', silent(() => lightPalette.getContrastText(palette.warning.main)));
        setColor(palette.Alert, 'errorStandardBg', private_safeLighten(palette.error.light, 0.9));
        setColor(palette.Alert, 'infoStandardBg', private_safeLighten(palette.info.light, 0.9));
        setColor(palette.Alert, 'successStandardBg', private_safeLighten(palette.success.light, 0.9));
        setColor(palette.Alert, 'warningStandardBg', private_safeLighten(palette.warning.light, 0.9));
        setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));
        setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));
        setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));
        setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));
        setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-100'));
        setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-400'));
        setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-300'));
        setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-A100'));
        setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-400'));
        setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-700'));
        setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-700'));
        setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');
        setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');
        setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');
        setColor(palette.LinearProgress, 'primaryBg', private_safeLighten(palette.primary.main, 0.62));
        setColor(palette.LinearProgress, 'secondaryBg', private_safeLighten(palette.secondary.main, 0.62));
        setColor(palette.LinearProgress, 'errorBg', private_safeLighten(palette.error.main, 0.62));
        setColor(palette.LinearProgress, 'infoBg', private_safeLighten(palette.info.main, 0.62));
        setColor(palette.LinearProgress, 'successBg', private_safeLighten(palette.success.main, 0.62));
        setColor(palette.LinearProgress, 'warningBg', private_safeLighten(palette.warning.main, 0.62));
        setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);
        setColor(palette.Slider, 'primaryTrack', private_safeLighten(palette.primary.main, 0.62));
        setColor(palette.Slider, 'secondaryTrack', private_safeLighten(palette.secondary.main, 0.62));
        setColor(palette.Slider, 'errorTrack', private_safeLighten(palette.error.main, 0.62));
        setColor(palette.Slider, 'infoTrack', private_safeLighten(palette.info.main, 0.62));
        setColor(palette.Slider, 'successTrack', private_safeLighten(palette.success.main, 0.62));
        setColor(palette.Slider, 'warningTrack', private_safeLighten(palette.warning.main, 0.62));
        const snackbarContentBackground = private_safeEmphasize(palette.background.default, 0.8);
        setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
        setColor(palette.SnackbarContent, 'color', silent(() => lightPalette.getContrastText(snackbarContentBackground)));
        setColor(palette.SpeedDialAction, 'fabHoverBg', private_safeEmphasize(palette.background.paper, 0.15));
        setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));
        setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));
        setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));
        setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));
        setColor(palette.Switch, 'primaryDisabledColor', private_safeLighten(palette.primary.main, 0.62));
        setColor(palette.Switch, 'secondaryDisabledColor', private_safeLighten(palette.secondary.main, 0.62));
        setColor(palette.Switch, 'errorDisabledColor', private_safeLighten(palette.error.main, 0.62));
        setColor(palette.Switch, 'infoDisabledColor', private_safeLighten(palette.info.main, 0.62));
        setColor(palette.Switch, 'successDisabledColor', private_safeLighten(palette.success.main, 0.62));
        setColor(palette.Switch, 'warningDisabledColor', private_safeLighten(palette.warning.main, 0.62));
        setColor(palette.TableCell, 'border', private_safeLighten(private_safeAlpha(palette.divider, 1), 0.88));
        setColor(palette.Tooltip, 'bg', private_safeAlpha(palette.grey[700], 0.92));
      } else {
        setColor(palette.Alert, 'errorColor', private_safeLighten(palette.error.light, 0.6));
        setColor(palette.Alert, 'infoColor', private_safeLighten(palette.info.light, 0.6));
        setColor(palette.Alert, 'successColor', private_safeLighten(palette.success.light, 0.6));
        setColor(palette.Alert, 'warningColor', private_safeLighten(palette.warning.light, 0.6));
        setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));
        setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));
        setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));
        setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));
        setColor(palette.Alert, 'errorFilledColor', silent(() => darkPalette.getContrastText(palette.error.dark)));
        setColor(palette.Alert, 'infoFilledColor', silent(() => darkPalette.getContrastText(palette.info.dark)));
        setColor(palette.Alert, 'successFilledColor', silent(() => darkPalette.getContrastText(palette.success.dark)));
        setColor(palette.Alert, 'warningFilledColor', silent(() => darkPalette.getContrastText(palette.warning.dark)));
        setColor(palette.Alert, 'errorStandardBg', private_safeDarken(palette.error.light, 0.9));
        setColor(palette.Alert, 'infoStandardBg', private_safeDarken(palette.info.light, 0.9));
        setColor(palette.Alert, 'successStandardBg', private_safeDarken(palette.success.light, 0.9));
        setColor(palette.Alert, 'warningStandardBg', private_safeDarken(palette.warning.light, 0.9));
        setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));
        setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));
        setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));
        setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));
        setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-900'));
        setColor(palette.AppBar, 'darkBg', setCssVarColor('palette-background-paper')); // specific for dark mode
        setColor(palette.AppBar, 'darkColor', setCssVarColor('palette-text-primary')); // specific for dark mode
        setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-600'));
        setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-800'));
        setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-700'));
        setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-700'));
        setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-300'));
        setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-300'));
        setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');
        setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');
        setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');
        setColor(palette.LinearProgress, 'primaryBg', private_safeDarken(palette.primary.main, 0.5));
        setColor(palette.LinearProgress, 'secondaryBg', private_safeDarken(palette.secondary.main, 0.5));
        setColor(palette.LinearProgress, 'errorBg', private_safeDarken(palette.error.main, 0.5));
        setColor(palette.LinearProgress, 'infoBg', private_safeDarken(palette.info.main, 0.5));
        setColor(palette.LinearProgress, 'successBg', private_safeDarken(palette.success.main, 0.5));
        setColor(palette.LinearProgress, 'warningBg', private_safeDarken(palette.warning.main, 0.5));
        setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);
        setColor(palette.Slider, 'primaryTrack', private_safeDarken(palette.primary.main, 0.5));
        setColor(palette.Slider, 'secondaryTrack', private_safeDarken(palette.secondary.main, 0.5));
        setColor(palette.Slider, 'errorTrack', private_safeDarken(palette.error.main, 0.5));
        setColor(palette.Slider, 'infoTrack', private_safeDarken(palette.info.main, 0.5));
        setColor(palette.Slider, 'successTrack', private_safeDarken(palette.success.main, 0.5));
        setColor(palette.Slider, 'warningTrack', private_safeDarken(palette.warning.main, 0.5));
        const snackbarContentBackground = private_safeEmphasize(palette.background.default, 0.98);
        setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
        setColor(palette.SnackbarContent, 'color', silent(() => darkPalette.getContrastText(snackbarContentBackground)));
        setColor(palette.SpeedDialAction, 'fabHoverBg', private_safeEmphasize(palette.background.paper, 0.15));
        setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));
        setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));
        setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));
        setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));
        setColor(palette.Switch, 'primaryDisabledColor', private_safeDarken(palette.primary.main, 0.55));
        setColor(palette.Switch, 'secondaryDisabledColor', private_safeDarken(palette.secondary.main, 0.55));
        setColor(palette.Switch, 'errorDisabledColor', private_safeDarken(palette.error.main, 0.55));
        setColor(palette.Switch, 'infoDisabledColor', private_safeDarken(palette.info.main, 0.55));
        setColor(palette.Switch, 'successDisabledColor', private_safeDarken(palette.success.main, 0.55));
        setColor(palette.Switch, 'warningDisabledColor', private_safeDarken(palette.warning.main, 0.55));
        setColor(palette.TableCell, 'border', private_safeDarken(private_safeAlpha(palette.divider, 1), 0.68));
        setColor(palette.Tooltip, 'bg', private_safeAlpha(palette.grey[700], 0.92));
      }

      // MUI X - DataGrid needs this token.
      setColorChannel(palette.background, 'default');
      setColorChannel(palette.common, 'background');
      setColorChannel(palette.common, 'onBackground');
      setColorChannel(palette, 'divider');
      Object.keys(palette).forEach(color => {
        const colors = palette[color];

        // The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.

        if (colors && typeof colors === 'object') {
          // Silent the error for custom palettes.
          if (colors.main) {
            setColor(palette[color], 'mainChannel', private_safeColorChannel(colors.main));
          }
          if (colors.light) {
            setColor(palette[color], 'lightChannel', private_safeColorChannel(colors.light));
          }
          if (colors.dark) {
            setColor(palette[color], 'darkChannel', private_safeColorChannel(colors.dark));
          }
          if (colors.contrastText) {
            setColor(palette[color], 'contrastTextChannel', private_safeColorChannel(colors.contrastText));
          }
          if (color === 'text') {
            // Text colors: text.primary, text.secondary
            setColorChannel(palette[color], 'primary');
            setColorChannel(palette[color], 'secondary');
          }
          if (color === 'action') {
            // Action colors: action.active, action.selected
            if (colors.active) {
              setColorChannel(palette[color], 'active');
            }
            if (colors.selected) {
              setColorChannel(palette[color], 'selected');
            }
          }
        }
      });
    });
    theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);
    const parserConfig = {
      prefix: cssVarPrefix,
      shouldSkipGeneratingVar: shouldSkipGeneratingVar$1
    };
    const {
      vars: themeVars,
      generateCssVars
    } = prepareCssVars(theme, parserConfig);
    theme.vars = themeVars;
    theme.generateCssVars = generateCssVars;
    theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar$1;
    theme.unstable_sxConfig = _extends({}, defaultSxConfig$1, input == null ? void 0 : input.unstable_sxConfig);
    theme.unstable_sx = function sx(props) {
      return styleFunctionSx$1({
        sx: props,
        theme: this
      });
    };
    return theme;
  }

  /**
   * @internal These variables should not appear in the :root stylesheet when the `defaultMode="dark"`
   */
  const excludeVariablesFromRoot = cssVarPrefix => [...[...Array(24)].map((_, index) => `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}overlays-${index + 1}`), `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkBg`, `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkColor`];
  var excludeVariablesFromRoot$1 = excludeVariablesFromRoot;

  const defaultTheme$1 = extendTheme();
  const {
    CssVarsProvider,
    useColorScheme,
    getInitColorSchemeScript
  } = createCssVarsProvider({
    themeId: THEME_ID,
    theme: defaultTheme$1,
    attribute: 'data-mui-color-scheme',
    modeStorageKey: 'mui-mode',
    colorSchemeStorageKey: 'mui-color-scheme',
    defaultColorScheme: {
      light: 'light',
      dark: 'dark'
    },
    resolveTheme: theme => {
      const newTheme = _extends({}, theme, {
        typography: createTypography(theme.palette, theme.typography)
      });
      newTheme.unstable_sx = function sx(props) {
        return styleFunctionSx$1({
          sx: props,
          theme: this
        });
      };
      return newTheme;
    },
    excludeVariablesFromRoot: excludeVariablesFromRoot$1
  });

  // TODO: Remove this function in v6.
  // eslint-disable-next-line @typescript-eslint/naming-convention
  function experimental_sx() {
    throw new Error(`MUI: The \`experimental_sx\` has been moved to \`theme.unstable_sx\`.For more details, see https://github.com/mui/material-ui/pull/35150.` );
  }

  function getSvgIconUtilityClass(slot) {
    return generateUtilityClass('MuiSvgIcon', slot);
  }
  const svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);
  var svgIconClasses$1 = svgIconClasses;

  const _excluded$26 = ["children", "className", "color", "component", "fontSize", "htmlColor", "inheritViewBox", "titleAccess", "viewBox"];
  const useUtilityClasses$1O = ownerState => {
    const {
      color,
      fontSize,
      classes
    } = ownerState;
    const slots = {
      root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]
    };
    return composeClasses(slots, getSvgIconUtilityClass, classes);
  };
  const SvgIconRoot = styled$1('svg', {
    name: 'MuiSvgIcon',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    var _theme$transitions, _theme$transitions$cr, _theme$transitions2, _theme$typography, _theme$typography$pxT, _theme$typography2, _theme$typography2$px, _theme$typography3, _theme$typography3$px, _palette$ownerState$c, _palette, _palette2, _palette3;
    return {
      userSelect: 'none',
      width: '1em',
      height: '1em',
      display: 'inline-block',
      // the <svg> will define the property that has `currentColor`
      // e.g. heroicons uses fill="none" and stroke="currentColor"
      fill: ownerState.hasSvgAsChild ? undefined : 'currentColor',
      flexShrink: 0,
      transition: (_theme$transitions = theme.transitions) == null || (_theme$transitions$cr = _theme$transitions.create) == null ? void 0 : _theme$transitions$cr.call(_theme$transitions, 'fill', {
        duration: (_theme$transitions2 = theme.transitions) == null || (_theme$transitions2 = _theme$transitions2.duration) == null ? void 0 : _theme$transitions2.shorter
      }),
      fontSize: {
        inherit: 'inherit',
        small: ((_theme$typography = theme.typography) == null || (_theme$typography$pxT = _theme$typography.pxToRem) == null ? void 0 : _theme$typography$pxT.call(_theme$typography, 20)) || '1.25rem',
        medium: ((_theme$typography2 = theme.typography) == null || (_theme$typography2$px = _theme$typography2.pxToRem) == null ? void 0 : _theme$typography2$px.call(_theme$typography2, 24)) || '1.5rem',
        large: ((_theme$typography3 = theme.typography) == null || (_theme$typography3$px = _theme$typography3.pxToRem) == null ? void 0 : _theme$typography3$px.call(_theme$typography3, 35)) || '2.1875rem'
      }[ownerState.fontSize],
      // TODO v5 deprecate, v6 remove for sx
      color: (_palette$ownerState$c = (_palette = (theme.vars || theme).palette) == null || (_palette = _palette[ownerState.color]) == null ? void 0 : _palette.main) != null ? _palette$ownerState$c : {
        action: (_palette2 = (theme.vars || theme).palette) == null || (_palette2 = _palette2.action) == null ? void 0 : _palette2.active,
        disabled: (_palette3 = (theme.vars || theme).palette) == null || (_palette3 = _palette3.action) == null ? void 0 : _palette3.disabled,
        inherit: undefined
      }[ownerState.color]
    };
  });
  const SvgIcon = /*#__PURE__*/React__namespace.forwardRef(function SvgIcon(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSvgIcon'
    });
    const {
        children,
        className,
        color = 'inherit',
        component = 'svg',
        fontSize = 'medium',
        htmlColor,
        inheritViewBox = false,
        titleAccess,
        viewBox = '0 0 24 24'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$26);
    const hasSvgAsChild = /*#__PURE__*/React__namespace.isValidElement(children) && children.type === 'svg';
    const ownerState = _extends({}, props, {
      color,
      component,
      fontSize,
      instanceFontSize: inProps.fontSize,
      inheritViewBox,
      viewBox,
      hasSvgAsChild
    });
    const more = {};
    if (!inheritViewBox) {
      more.viewBox = viewBox;
    }
    const classes = useUtilityClasses$1O(ownerState);
    return /*#__PURE__*/jsxRuntime_2(SvgIconRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      focusable: "false",
      color: htmlColor,
      "aria-hidden": titleAccess ? undefined : true,
      role: titleAccess ? 'img' : undefined,
      ref: ref
    }, more, other, hasSvgAsChild && children.props, {
      ownerState: ownerState,
      children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/jsxRuntime_1("title", {
        children: titleAccess
      }) : null]
    }));
  });
  SvgIcon.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Node passed into the SVG element.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * You can use the `htmlColor` prop to apply a color attribute to the SVG element.
     * @default 'inherit'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.
     * @default 'medium'
     */
    fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),
    /**
     * Applies a color attribute to the SVG element.
     */
    htmlColor: PropTypes.string,
    /**
     * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`
     * prop will be ignored.
     * Useful when you want to reference a custom `component` and have `SvgIcon` pass that
     * `component`'s viewBox to the root node.
     * @default false
     */
    inheritViewBox: PropTypes.bool,
    /**
     * The shape-rendering attribute. The behavior of the different options is described on the
     * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).
     * If you are having issues with blurry icons you should investigate this prop.
     */
    shapeRendering: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Provides a human-readable title for the element that contains it.
     * https://www.w3.org/TR/SVG-access/#Equivalent
     */
    titleAccess: PropTypes.string,
    /**
     * Allows you to redefine what the coordinates without units mean inside an SVG element.
     * For example, if the SVG element is 500 (width) by 200 (height),
     * and you pass viewBox="0 0 50 20",
     * this means that the coordinates inside the SVG will go from the top left corner (0,0)
     * to bottom right (50,20) and each unit will be worth 10px.
     * @default '0 0 24 24'
     */
    viewBox: PropTypes.string
  } ;
  SvgIcon.muiName = 'SvgIcon';
  var SvgIcon$1 = SvgIcon;

  function createSvgIcon(path, displayName) {
    function Component(props, ref) {
      return /*#__PURE__*/jsxRuntime_1(SvgIcon$1, _extends({
        "data-testid": `${displayName}Icon`,
        ref: ref
      }, props, {
        children: path
      }));
    }
    {
      // Need to set `displayName` on the inner component for React.memo.
      // React prior to 16.14 ignores `displayName` on the wrapper.
      Component.displayName = `${displayName}Icon`;
    }
    Component.muiName = SvgIcon$1.muiName;
    return /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.forwardRef(Component));
  }

  // TODO: remove this export once ClassNameGenerator is stable
  // eslint-disable-next-line @typescript-eslint/naming-convention
  const unstable_ClassNameGenerator = {
    configure: generator => {
      {
        console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', "You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\n'));
      }
      ClassNameGenerator$1.configure(generator);
    }
  };

  function _setPrototypeOf(o, p) {
    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
      o.__proto__ = p;
      return o;
    };
    return _setPrototypeOf(o, p);
  }

  function _inheritsLoose(subClass, superClass) {
    subClass.prototype = Object.create(superClass.prototype);
    subClass.prototype.constructor = subClass;
    _setPrototypeOf(subClass, superClass);
  }

  var config = {
    disabled: false
  };

  var timeoutsShape = PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
    enter: PropTypes.number,
    exit: PropTypes.number,
    appear: PropTypes.number
  }).isRequired]) ;
  PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
    enter: PropTypes.string,
    exit: PropTypes.string,
    active: PropTypes.string
  }), PropTypes.shape({
    enter: PropTypes.string,
    enterDone: PropTypes.string,
    enterActive: PropTypes.string,
    exit: PropTypes.string,
    exitDone: PropTypes.string,
    exitActive: PropTypes.string
  })]) ;

  var TransitionGroupContext = React.createContext(null);

  var forceReflow = function forceReflow(node) {
    return node.scrollTop;
  };

  var UNMOUNTED = 'unmounted';
  var EXITED = 'exited';
  var ENTERING = 'entering';
  var ENTERED = 'entered';
  var EXITING = 'exiting';
  /**
   * The Transition component lets you describe a transition from one component
   * state to another _over time_ with a simple declarative API. Most commonly
   * it's used to animate the mounting and unmounting of a component, but can also
   * be used to describe in-place transition states as well.
   *
   * ---
   *
   * **Note**: `Transition` is a platform-agnostic base component. If you're using
   * transitions in CSS, you'll probably want to use
   * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)
   * instead. It inherits all the features of `Transition`, but contains
   * additional features necessary to play nice with CSS transitions (hence the
   * name of the component).
   *
   * ---
   *
   * By default the `Transition` component does not alter the behavior of the
   * component it renders, it only tracks "enter" and "exit" states for the
   * components. It's up to you to give meaning and effect to those states. For
   * example we can add styles to a component when it enters or exits:
   *
   * ```jsx
   * import { Transition } from 'react-transition-group';
   *
   * const duration = 300;
   *
   * const defaultStyle = {
   *   transition: `opacity ${duration}ms ease-in-out`,
   *   opacity: 0,
   * }
   *
   * const transitionStyles = {
   *   entering: { opacity: 1 },
   *   entered:  { opacity: 1 },
   *   exiting:  { opacity: 0 },
   *   exited:  { opacity: 0 },
   * };
   *
   * const Fade = ({ in: inProp }) => (
   *   <Transition in={inProp} timeout={duration}>
   *     {state => (
   *       <div style={{
   *         ...defaultStyle,
   *         ...transitionStyles[state]
   *       }}>
   *         I'm a fade Transition!
   *       </div>
   *     )}
   *   </Transition>
   * );
   * ```
   *
   * There are 4 main states a Transition can be in:
   *  - `'entering'`
   *  - `'entered'`
   *  - `'exiting'`
   *  - `'exited'`
   *
   * Transition state is toggled via the `in` prop. When `true` the component
   * begins the "Enter" stage. During this stage, the component will shift from
   * its current transition state, to `'entering'` for the duration of the
   * transition and then to the `'entered'` stage once it's complete. Let's take
   * the following example (we'll use the
   * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):
   *
   * ```jsx
   * function App() {
   *   const [inProp, setInProp] = useState(false);
   *   return (
   *     <div>
   *       <Transition in={inProp} timeout={500}>
   *         {state => (
   *           // ...
   *         )}
   *       </Transition>
   *       <button onClick={() => setInProp(true)}>
   *         Click to Enter
   *       </button>
   *     </div>
   *   );
   * }
   * ```
   *
   * When the button is clicked the component will shift to the `'entering'` state
   * and stay there for 500ms (the value of `timeout`) before it finally switches
   * to `'entered'`.
   *
   * When `in` is `false` the same thing happens except the state moves from
   * `'exiting'` to `'exited'`.
   */

  var Transition = /*#__PURE__*/function (_React$Component) {
    _inheritsLoose(Transition, _React$Component);

    function Transition(props, context) {
      var _this;

      _this = _React$Component.call(this, props, context) || this;
      var parentGroup = context; // In the context of a TransitionGroup all enters are really appears

      var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;
      var initialStatus;
      _this.appearStatus = null;

      if (props.in) {
        if (appear) {
          initialStatus = EXITED;
          _this.appearStatus = ENTERING;
        } else {
          initialStatus = ENTERED;
        }
      } else {
        if (props.unmountOnExit || props.mountOnEnter) {
          initialStatus = UNMOUNTED;
        } else {
          initialStatus = EXITED;
        }
      }

      _this.state = {
        status: initialStatus
      };
      _this.nextCallback = null;
      return _this;
    }

    Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {
      var nextIn = _ref.in;

      if (nextIn && prevState.status === UNMOUNTED) {
        return {
          status: EXITED
        };
      }

      return null;
    } // getSnapshotBeforeUpdate(prevProps) {
    //   let nextStatus = null
    //   if (prevProps !== this.props) {
    //     const { status } = this.state
    //     if (this.props.in) {
    //       if (status !== ENTERING && status !== ENTERED) {
    //         nextStatus = ENTERING
    //       }
    //     } else {
    //       if (status === ENTERING || status === ENTERED) {
    //         nextStatus = EXITING
    //       }
    //     }
    //   }
    //   return { nextStatus }
    // }
    ;

    var _proto = Transition.prototype;

    _proto.componentDidMount = function componentDidMount() {
      this.updateStatus(true, this.appearStatus);
    };

    _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
      var nextStatus = null;

      if (prevProps !== this.props) {
        var status = this.state.status;

        if (this.props.in) {
          if (status !== ENTERING && status !== ENTERED) {
            nextStatus = ENTERING;
          }
        } else {
          if (status === ENTERING || status === ENTERED) {
            nextStatus = EXITING;
          }
        }
      }

      this.updateStatus(false, nextStatus);
    };

    _proto.componentWillUnmount = function componentWillUnmount() {
      this.cancelNextCallback();
    };

    _proto.getTimeouts = function getTimeouts() {
      var timeout = this.props.timeout;
      var exit, enter, appear;
      exit = enter = appear = timeout;

      if (timeout != null && typeof timeout !== 'number') {
        exit = timeout.exit;
        enter = timeout.enter; // TODO: remove fallback for next major

        appear = timeout.appear !== undefined ? timeout.appear : enter;
      }

      return {
        exit: exit,
        enter: enter,
        appear: appear
      };
    };

    _proto.updateStatus = function updateStatus(mounting, nextStatus) {
      if (mounting === void 0) {
        mounting = false;
      }

      if (nextStatus !== null) {
        // nextStatus will always be ENTERING or EXITING.
        this.cancelNextCallback();

        if (nextStatus === ENTERING) {
          if (this.props.unmountOnExit || this.props.mountOnEnter) {
            var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
            // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
            // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.

            if (node) forceReflow(node);
          }

          this.performEnter(mounting);
        } else {
          this.performExit();
        }
      } else if (this.props.unmountOnExit && this.state.status === EXITED) {
        this.setState({
          status: UNMOUNTED
        });
      }
    };

    _proto.performEnter = function performEnter(mounting) {
      var _this2 = this;

      var enter = this.props.enter;
      var appearing = this.context ? this.context.isMounting : mounting;

      var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],
          maybeNode = _ref2[0],
          maybeAppearing = _ref2[1];

      var timeouts = this.getTimeouts();
      var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
      // if we are mounting and running this it means appear _must_ be set

      if (!mounting && !enter || config.disabled) {
        this.safeSetState({
          status: ENTERED
        }, function () {
          _this2.props.onEntered(maybeNode);
        });
        return;
      }

      this.props.onEnter(maybeNode, maybeAppearing);
      this.safeSetState({
        status: ENTERING
      }, function () {
        _this2.props.onEntering(maybeNode, maybeAppearing);

        _this2.onTransitionEnd(enterTimeout, function () {
          _this2.safeSetState({
            status: ENTERED
          }, function () {
            _this2.props.onEntered(maybeNode, maybeAppearing);
          });
        });
      });
    };

    _proto.performExit = function performExit() {
      var _this3 = this;

      var exit = this.props.exit;
      var timeouts = this.getTimeouts();
      var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED

      if (!exit || config.disabled) {
        this.safeSetState({
          status: EXITED
        }, function () {
          _this3.props.onExited(maybeNode);
        });
        return;
      }

      this.props.onExit(maybeNode);
      this.safeSetState({
        status: EXITING
      }, function () {
        _this3.props.onExiting(maybeNode);

        _this3.onTransitionEnd(timeouts.exit, function () {
          _this3.safeSetState({
            status: EXITED
          }, function () {
            _this3.props.onExited(maybeNode);
          });
        });
      });
    };

    _proto.cancelNextCallback = function cancelNextCallback() {
      if (this.nextCallback !== null) {
        this.nextCallback.cancel();
        this.nextCallback = null;
      }
    };

    _proto.safeSetState = function safeSetState(nextState, callback) {
      // This shouldn't be necessary, but there are weird race conditions with
      // setState callbacks and unmounting in testing, so always make sure that
      // we can cancel any pending setState callbacks after we unmount.
      callback = this.setNextCallback(callback);
      this.setState(nextState, callback);
    };

    _proto.setNextCallback = function setNextCallback(callback) {
      var _this4 = this;

      var active = true;

      this.nextCallback = function (event) {
        if (active) {
          active = false;
          _this4.nextCallback = null;
          callback(event);
        }
      };

      this.nextCallback.cancel = function () {
        active = false;
      };

      return this.nextCallback;
    };

    _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {
      this.setNextCallback(handler);
      var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);
      var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;

      if (!node || doesNotHaveTimeoutOrListener) {
        setTimeout(this.nextCallback, 0);
        return;
      }

      if (this.props.addEndListener) {
        var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],
            maybeNode = _ref3[0],
            maybeNextCallback = _ref3[1];

        this.props.addEndListener(maybeNode, maybeNextCallback);
      }

      if (timeout != null) {
        setTimeout(this.nextCallback, timeout);
      }
    };

    _proto.render = function render() {
      var status = this.state.status;

      if (status === UNMOUNTED) {
        return null;
      }

      var _this$props = this.props,
          children = _this$props.children;
          _this$props.in;
          _this$props.mountOnEnter;
          _this$props.unmountOnExit;
          _this$props.appear;
          _this$props.enter;
          _this$props.exit;
          _this$props.timeout;
          _this$props.addEndListener;
          _this$props.onEnter;
          _this$props.onEntering;
          _this$props.onEntered;
          _this$props.onExit;
          _this$props.onExiting;
          _this$props.onExited;
          _this$props.nodeRef;
          var childProps = _objectWithoutPropertiesLoose(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]);

      return (
        /*#__PURE__*/
        // allows for nested Transitions
        React.createElement(TransitionGroupContext.Provider, {
          value: null
        }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))
      );
    };

    return Transition;
  }(React.Component);

  Transition.contextType = TransitionGroupContext;
  Transition.propTypes = {
    /**
     * A React reference to DOM element that need to transition:
     * https://stackoverflow.com/a/51127130/4671932
     *
     *   - When `nodeRef` prop is used, `node` is not passed to callback functions
     *      (e.g. `onEnter`) because user already has direct access to the node.
     *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new
     *     `nodeRef` need to be provided to `Transition` with changed `key` prop
     *     (see
     *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
     */
    nodeRef: PropTypes.shape({
      current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {
        var value = propValue[key];
        return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);
      }
    }),

    /**
     * A `function` child can be used instead of a React element. This function is
     * called with the current transition status (`'entering'`, `'entered'`,
     * `'exiting'`, `'exited'`), which can be used to apply context
     * specific props to a component.
     *
     * ```jsx
     * <Transition in={this.state.in} timeout={150}>
     *   {state => (
     *     <MyComponent className={`fade fade-${state}`} />
     *   )}
     * </Transition>
     * ```
     */
    children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,

    /**
     * Show the component; triggers the enter or exit states
     */
    in: PropTypes.bool,

    /**
     * By default the child component is mounted immediately along with
     * the parent `Transition` component. If you want to "lazy mount" the component on the
     * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay
     * mounted, even on "exited", unless you also specify `unmountOnExit`.
     */
    mountOnEnter: PropTypes.bool,

    /**
     * By default the child component stays mounted after it reaches the `'exited'` state.
     * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.
     */
    unmountOnExit: PropTypes.bool,

    /**
     * By default the child component does not perform the enter transition when
     * it first mounts, regardless of the value of `in`. If you want this
     * behavior, set both `appear` and `in` to `true`.
     *
     * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop
     * > only adds an additional enter transition. However, in the
     * > `<CSSTransition>` component that first enter transition does result in
     * > additional `.appear-*` classes, that way you can choose to style it
     * > differently.
     */
    appear: PropTypes.bool,

    /**
     * Enable or disable enter transitions.
     */
    enter: PropTypes.bool,

    /**
     * Enable or disable exit transitions.
     */
    exit: PropTypes.bool,

    /**
     * The duration of the transition, in milliseconds.
     * Required unless `addEndListener` is provided.
     *
     * You may specify a single timeout for all transitions:
     *
     * ```jsx
     * timeout={500}
     * ```
     *
     * or individually:
     *
     * ```jsx
     * timeout={{
     *  appear: 500,
     *  enter: 300,
     *  exit: 500,
     * }}
     * ```
     *
     * - `appear` defaults to the value of `enter`
     * - `enter` defaults to `0`
     * - `exit` defaults to `0`
     *
     * @type {number | { enter?: number, exit?: number, appear?: number }}
     */
    timeout: function timeout(props) {
      var pt = timeoutsShape;
      if (!props.addEndListener) pt = pt.isRequired;

      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        args[_key - 1] = arguments[_key];
      }

      return pt.apply(void 0, [props].concat(args));
    },

    /**
     * Add a custom transition end trigger. Called with the transitioning
     * DOM node and a `done` callback. Allows for more fine grained transition end
     * logic. Timeouts are still used as a fallback if provided.
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
     *
     * ```jsx
     * addEndListener={(node, done) => {
     *   // use the css transitionend event to mark the finish of a transition
     *   node.addEventListener('transitionend', done, false);
     * }}
     * ```
     */
    addEndListener: PropTypes.func,

    /**
     * Callback fired before the "entering" status is applied. An extra parameter
     * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
     *
     * @type Function(node: HtmlElement, isAppearing: bool) -> void
     */
    onEnter: PropTypes.func,

    /**
     * Callback fired after the "entering" status is applied. An extra parameter
     * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
     *
     * @type Function(node: HtmlElement, isAppearing: bool)
     */
    onEntering: PropTypes.func,

    /**
     * Callback fired after the "entered" status is applied. An extra parameter
     * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
     *
     * @type Function(node: HtmlElement, isAppearing: bool) -> void
     */
    onEntered: PropTypes.func,

    /**
     * Callback fired before the "exiting" status is applied.
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
     *
     * @type Function(node: HtmlElement) -> void
     */
    onExit: PropTypes.func,

    /**
     * Callback fired after the "exiting" status is applied.
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
     *
     * @type Function(node: HtmlElement) -> void
     */
    onExiting: PropTypes.func,

    /**
     * Callback fired after the "exited" status is applied.
     *
     * **Note**: when `nodeRef` prop is passed, `node` is not passed
     *
     * @type Function(node: HtmlElement) -> void
     */
    onExited: PropTypes.func
  } ; // Name the function so it is clearer in the documentation

  function noop() {}

  Transition.defaultProps = {
    in: false,
    mountOnEnter: false,
    unmountOnExit: false,
    appear: false,
    enter: true,
    exit: true,
    onEnter: noop,
    onEntering: noop,
    onEntered: noop,
    onExit: noop,
    onExiting: noop,
    onExited: noop
  };
  Transition.UNMOUNTED = UNMOUNTED;
  Transition.EXITED = EXITED;
  Transition.ENTERING = ENTERING;
  Transition.ENTERED = ENTERED;
  Transition.EXITING = EXITING;
  var Transition$1 = Transition;

  function _assertThisInitialized(self) {
    if (self === void 0) {
      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
    }
    return self;
  }

  /**
   * Given `this.props.children`, return an object mapping key to child.
   *
   * @param {*} children `this.props.children`
   * @return {object} Mapping of key to child
   */

  function getChildMapping(children, mapFn) {
    var mapper = function mapper(child) {
      return mapFn && React.isValidElement(child) ? mapFn(child) : child;
    };

    var result = Object.create(null);
    if (children) React.Children.map(children, function (c) {
      return c;
    }).forEach(function (child) {
      // run the map function here instead so that the key is the computed one
      result[child.key] = mapper(child);
    });
    return result;
  }
  /**
   * When you're adding or removing children some may be added or removed in the
   * same render pass. We want to show *both* since we want to simultaneously
   * animate elements in and out. This function takes a previous set of keys
   * and a new set of keys and merges them with its best guess of the correct
   * ordering. In the future we may expose some of the utilities in
   * ReactMultiChild to make this easy, but for now React itself does not
   * directly have this concept of the union of prevChildren and nextChildren
   * so we implement it here.
   *
   * @param {object} prev prev children as returned from
   * `ReactTransitionChildMapping.getChildMapping()`.
   * @param {object} next next children as returned from
   * `ReactTransitionChildMapping.getChildMapping()`.
   * @return {object} a key set that contains all keys in `prev` and all keys
   * in `next` in a reasonable order.
   */

  function mergeChildMappings(prev, next) {
    prev = prev || {};
    next = next || {};

    function getValueForKey(key) {
      return key in next ? next[key] : prev[key];
    } // For each key of `next`, the list of keys to insert before that key in
    // the combined list


    var nextKeysPending = Object.create(null);
    var pendingKeys = [];

    for (var prevKey in prev) {
      if (prevKey in next) {
        if (pendingKeys.length) {
          nextKeysPending[prevKey] = pendingKeys;
          pendingKeys = [];
        }
      } else {
        pendingKeys.push(prevKey);
      }
    }

    var i;
    var childMapping = {};

    for (var nextKey in next) {
      if (nextKeysPending[nextKey]) {
        for (i = 0; i < nextKeysPending[nextKey].length; i++) {
          var pendingNextKey = nextKeysPending[nextKey][i];
          childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);
        }
      }

      childMapping[nextKey] = getValueForKey(nextKey);
    } // Finally, add the keys which didn't appear before any key in `next`


    for (i = 0; i < pendingKeys.length; i++) {
      childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
    }

    return childMapping;
  }

  function getProp(child, prop, props) {
    return props[prop] != null ? props[prop] : child.props[prop];
  }

  function getInitialChildMapping(props, onExited) {
    return getChildMapping(props.children, function (child) {
      return React.cloneElement(child, {
        onExited: onExited.bind(null, child),
        in: true,
        appear: getProp(child, 'appear', props),
        enter: getProp(child, 'enter', props),
        exit: getProp(child, 'exit', props)
      });
    });
  }
  function getNextChildMapping(nextProps, prevChildMapping, onExited) {
    var nextChildMapping = getChildMapping(nextProps.children);
    var children = mergeChildMappings(prevChildMapping, nextChildMapping);
    Object.keys(children).forEach(function (key) {
      var child = children[key];
      if (!React.isValidElement(child)) return;
      var hasPrev = (key in prevChildMapping);
      var hasNext = (key in nextChildMapping);
      var prevChild = prevChildMapping[key];
      var isLeaving = React.isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)

      if (hasNext && (!hasPrev || isLeaving)) {
        // console.log('entering', key)
        children[key] = React.cloneElement(child, {
          onExited: onExited.bind(null, child),
          in: true,
          exit: getProp(child, 'exit', nextProps),
          enter: getProp(child, 'enter', nextProps)
        });
      } else if (!hasNext && hasPrev && !isLeaving) {
        // item is old (exiting)
        // console.log('leaving', key)
        children[key] = React.cloneElement(child, {
          in: false
        });
      } else if (hasNext && hasPrev && React.isValidElement(prevChild)) {
        // item hasn't changed transition states
        // copy over the last transition props;
        // console.log('unchanged', key)
        children[key] = React.cloneElement(child, {
          onExited: onExited.bind(null, child),
          in: prevChild.props.in,
          exit: getProp(child, 'exit', nextProps),
          enter: getProp(child, 'enter', nextProps)
        });
      }
    });
    return children;
  }

  var values = Object.values || function (obj) {
    return Object.keys(obj).map(function (k) {
      return obj[k];
    });
  };

  var defaultProps = {
    component: 'div',
    childFactory: function childFactory(child) {
      return child;
    }
  };
  /**
   * The `<TransitionGroup>` component manages a set of transition components
   * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition
   * components, `<TransitionGroup>` is a state machine for managing the mounting
   * and unmounting of components over time.
   *
   * Consider the example below. As items are removed or added to the TodoList the
   * `in` prop is toggled automatically by the `<TransitionGroup>`.
   *
   * Note that `<TransitionGroup>`  does not define any animation behavior!
   * Exactly _how_ a list item animates is up to the individual transition
   * component. This means you can mix and match animations across different list
   * items.
   */

  var TransitionGroup = /*#__PURE__*/function (_React$Component) {
    _inheritsLoose(TransitionGroup, _React$Component);

    function TransitionGroup(props, context) {
      var _this;

      _this = _React$Component.call(this, props, context) || this;

      var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear


      _this.state = {
        contextValue: {
          isMounting: true
        },
        handleExited: handleExited,
        firstRender: true
      };
      return _this;
    }

    var _proto = TransitionGroup.prototype;

    _proto.componentDidMount = function componentDidMount() {
      this.mounted = true;
      this.setState({
        contextValue: {
          isMounting: false
        }
      });
    };

    _proto.componentWillUnmount = function componentWillUnmount() {
      this.mounted = false;
    };

    TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {
      var prevChildMapping = _ref.children,
          handleExited = _ref.handleExited,
          firstRender = _ref.firstRender;
      return {
        children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),
        firstRender: false
      };
    } // node is `undefined` when user provided `nodeRef` prop
    ;

    _proto.handleExited = function handleExited(child, node) {
      var currentChildMapping = getChildMapping(this.props.children);
      if (child.key in currentChildMapping) return;

      if (child.props.onExited) {
        child.props.onExited(node);
      }

      if (this.mounted) {
        this.setState(function (state) {
          var children = _extends({}, state.children);

          delete children[child.key];
          return {
            children: children
          };
        });
      }
    };

    _proto.render = function render() {
      var _this$props = this.props,
          Component = _this$props.component,
          childFactory = _this$props.childFactory,
          props = _objectWithoutPropertiesLoose(_this$props, ["component", "childFactory"]);

      var contextValue = this.state.contextValue;
      var children = values(this.state.children).map(childFactory);
      delete props.appear;
      delete props.enter;
      delete props.exit;

      if (Component === null) {
        return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {
          value: contextValue
        }, children);
      }

      return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {
        value: contextValue
      }, /*#__PURE__*/React.createElement(Component, props, children));
    };

    return TransitionGroup;
  }(React.Component);

  TransitionGroup.propTypes = {
    /**
     * `<TransitionGroup>` renders a `<div>` by default. You can change this
     * behavior by providing a `component` prop.
     * If you use React v16+ and would like to avoid a wrapping `<div>` element
     * you can pass in `component={null}`. This is useful if the wrapping div
     * borks your css styles.
     */
    component: PropTypes.any,

    /**
     * A set of `<Transition>` components, that are toggled `in` and out as they
     * leave. the `<TransitionGroup>` will inject specific transition props, so
     * remember to spread them through if you are wrapping the `<Transition>` as
     * with our `<Fade>` example.
     *
     * While this component is meant for multiple `Transition` or `CSSTransition`
     * children, sometimes you may want to have a single transition child with
     * content that you want to be transitioned out and in when you change it
     * (e.g. routes, images etc.) In that case you can change the `key` prop of
     * the transition child as you change its content, this will cause
     * `TransitionGroup` to transition the child out and back in.
     */
    children: PropTypes.node,

    /**
     * A convenience prop that enables or disables appear animations
     * for all children. Note that specifying this will override any defaults set
     * on individual children Transitions.
     */
    appear: PropTypes.bool,

    /**
     * A convenience prop that enables or disables enter animations
     * for all children. Note that specifying this will override any defaults set
     * on individual children Transitions.
     */
    enter: PropTypes.bool,

    /**
     * A convenience prop that enables or disables exit animations
     * for all children. Note that specifying this will override any defaults set
     * on individual children Transitions.
     */
    exit: PropTypes.bool,

    /**
     * You may need to apply reactive updates to a child as it is exiting.
     * This is generally done by using `cloneElement` however in the case of an exiting
     * child the element has already been removed and not accessible to the consumer.
     *
     * If you do need to update a child as it leaves you can provide a `childFactory`
     * to wrap every child, even the ones that are leaving.
     *
     * @type Function(child: ReactElement) -> ReactElement
     */
    childFactory: PropTypes.func
  } ;
  TransitionGroup.defaultProps = defaultProps;
  var TransitionGroup$1 = TransitionGroup;

  const reflow = node => node.scrollTop;
  function getTransitionProps(props, options) {
    var _style$transitionDura, _style$transitionTimi;
    const {
      timeout,
      easing,
      style = {}
    } = props;
    return {
      duration: (_style$transitionDura = style.transitionDuration) != null ? _style$transitionDura : typeof timeout === 'number' ? timeout : timeout[options.mode] || 0,
      easing: (_style$transitionTimi = style.transitionTimingFunction) != null ? _style$transitionTimi : typeof easing === 'object' ? easing[options.mode] : easing,
      delay: style.transitionDelay
    };
  }

  function getCollapseUtilityClass(slot) {
    return generateUtilityClass('MuiCollapse', slot);
  }
  const collapseClasses = generateUtilityClasses('MuiCollapse', ['root', 'horizontal', 'vertical', 'entered', 'hidden', 'wrapper', 'wrapperInner']);
  var collapseClasses$1 = collapseClasses;

  const _excluded$25 = ["addEndListener", "children", "className", "collapsedSize", "component", "easing", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "orientation", "style", "timeout", "TransitionComponent"];
  const useUtilityClasses$1N = ownerState => {
    const {
      orientation,
      classes
    } = ownerState;
    const slots = {
      root: ['root', `${orientation}`],
      entered: ['entered'],
      hidden: ['hidden'],
      wrapper: ['wrapper', `${orientation}`],
      wrapperInner: ['wrapperInner', `${orientation}`]
    };
    return composeClasses(slots, getCollapseUtilityClass, classes);
  };
  const CollapseRoot = styled$1('div', {
    name: 'MuiCollapse',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.orientation], ownerState.state === 'entered' && styles.entered, ownerState.state === 'exited' && !ownerState.in && ownerState.collapsedSize === '0px' && styles.hidden];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    height: 0,
    overflow: 'hidden',
    transition: theme.transitions.create('height')
  }, ownerState.orientation === 'horizontal' && {
    height: 'auto',
    width: 0,
    transition: theme.transitions.create('width')
  }, ownerState.state === 'entered' && _extends({
    height: 'auto',
    overflow: 'visible'
  }, ownerState.orientation === 'horizontal' && {
    width: 'auto'
  }), ownerState.state === 'exited' && !ownerState.in && ownerState.collapsedSize === '0px' && {
    visibility: 'hidden'
  }));
  const CollapseWrapper = styled$1('div', {
    name: 'MuiCollapse',
    slot: 'Wrapper',
    overridesResolver: (props, styles) => styles.wrapper
  })(({
    ownerState
  }) => _extends({
    // Hack to get children with a negative margin to not falsify the height computation.
    display: 'flex',
    width: '100%'
  }, ownerState.orientation === 'horizontal' && {
    width: 'auto',
    height: '100%'
  }));
  const CollapseWrapperInner = styled$1('div', {
    name: 'MuiCollapse',
    slot: 'WrapperInner',
    overridesResolver: (props, styles) => styles.wrapperInner
  })(({
    ownerState
  }) => _extends({
    width: '100%'
  }, ownerState.orientation === 'horizontal' && {
    width: 'auto',
    height: '100%'
  }));

  /**
   * The Collapse transition is used by the
   * [Vertical Stepper](/material-ui/react-stepper/#vertical-stepper) StepContent component.
   * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
   */
  const Collapse = /*#__PURE__*/React__namespace.forwardRef(function Collapse(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCollapse'
    });
    const {
        addEndListener,
        children,
        className,
        collapsedSize: collapsedSizeProp = '0px',
        component,
        easing,
        in: inProp,
        onEnter,
        onEntered,
        onEntering,
        onExit,
        onExited,
        onExiting,
        orientation = 'vertical',
        style,
        timeout = duration.standard,
        // eslint-disable-next-line react/prop-types
        TransitionComponent = Transition$1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$25);
    const ownerState = _extends({}, props, {
      orientation,
      collapsedSize: collapsedSizeProp
    });
    const classes = useUtilityClasses$1N(ownerState);
    const theme = useTheme();
    const timer = React__namespace.useRef();
    const wrapperRef = React__namespace.useRef(null);
    const autoTransitionDuration = React__namespace.useRef();
    const collapsedSize = typeof collapsedSizeProp === 'number' ? `${collapsedSizeProp}px` : collapsedSizeProp;
    const isHorizontal = orientation === 'horizontal';
    const size = isHorizontal ? 'width' : 'height';
    React__namespace.useEffect(() => {
      return () => {
        clearTimeout(timer.current);
      };
    }, []);
    const nodeRef = React__namespace.useRef(null);
    const handleRef = useForkRef(ref, nodeRef);
    const normalizedTransitionCallback = callback => maybeIsAppearing => {
      if (callback) {
        const node = nodeRef.current;

        // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
        if (maybeIsAppearing === undefined) {
          callback(node);
        } else {
          callback(node, maybeIsAppearing);
        }
      }
    };
    const getWrapperSize = () => wrapperRef.current ? wrapperRef.current[isHorizontal ? 'clientWidth' : 'clientHeight'] : 0;
    const handleEnter = normalizedTransitionCallback((node, isAppearing) => {
      if (wrapperRef.current && isHorizontal) {
        // Set absolute position to get the size of collapsed content
        wrapperRef.current.style.position = 'absolute';
      }
      node.style[size] = collapsedSize;
      if (onEnter) {
        onEnter(node, isAppearing);
      }
    });
    const handleEntering = normalizedTransitionCallback((node, isAppearing) => {
      const wrapperSize = getWrapperSize();
      if (wrapperRef.current && isHorizontal) {
        // After the size is read reset the position back to default
        wrapperRef.current.style.position = '';
      }
      const {
        duration: transitionDuration,
        easing: transitionTimingFunction
      } = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'enter'
      });
      if (timeout === 'auto') {
        const duration2 = theme.transitions.getAutoHeightDuration(wrapperSize);
        node.style.transitionDuration = `${duration2}ms`;
        autoTransitionDuration.current = duration2;
      } else {
        node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : `${transitionDuration}ms`;
      }
      node.style[size] = `${wrapperSize}px`;
      node.style.transitionTimingFunction = transitionTimingFunction;
      if (onEntering) {
        onEntering(node, isAppearing);
      }
    });
    const handleEntered = normalizedTransitionCallback((node, isAppearing) => {
      node.style[size] = 'auto';
      if (onEntered) {
        onEntered(node, isAppearing);
      }
    });
    const handleExit = normalizedTransitionCallback(node => {
      node.style[size] = `${getWrapperSize()}px`;
      if (onExit) {
        onExit(node);
      }
    });
    const handleExited = normalizedTransitionCallback(onExited);
    const handleExiting = normalizedTransitionCallback(node => {
      const wrapperSize = getWrapperSize();
      const {
        duration: transitionDuration,
        easing: transitionTimingFunction
      } = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'exit'
      });
      if (timeout === 'auto') {
        // TODO: rename getAutoHeightDuration to something more generic (width support)
        // Actually it just calculates animation duration based on size
        const duration2 = theme.transitions.getAutoHeightDuration(wrapperSize);
        node.style.transitionDuration = `${duration2}ms`;
        autoTransitionDuration.current = duration2;
      } else {
        node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : `${transitionDuration}ms`;
      }
      node.style[size] = collapsedSize;
      node.style.transitionTimingFunction = transitionTimingFunction;
      if (onExiting) {
        onExiting(node);
      }
    });
    const handleAddEndListener = next => {
      if (timeout === 'auto') {
        timer.current = setTimeout(next, autoTransitionDuration.current || 0);
      }
      if (addEndListener) {
        // Old call signature before `react-transition-group` implemented `nodeRef`
        addEndListener(nodeRef.current, next);
      }
    };
    return /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      in: inProp,
      onEnter: handleEnter,
      onEntered: handleEntered,
      onEntering: handleEntering,
      onExit: handleExit,
      onExited: handleExited,
      onExiting: handleExiting,
      addEndListener: handleAddEndListener,
      nodeRef: nodeRef,
      timeout: timeout === 'auto' ? null : timeout
    }, other, {
      children: (state, childProps) => /*#__PURE__*/jsxRuntime_1(CollapseRoot, _extends({
        as: component,
        className: clsx(classes.root, className, {
          'entered': classes.entered,
          'exited': !inProp && collapsedSize === '0px' && classes.hidden
        }[state]),
        style: _extends({
          [isHorizontal ? 'minWidth' : 'minHeight']: collapsedSize
        }, style),
        ownerState: _extends({}, ownerState, {
          state
        }),
        ref: handleRef
      }, childProps, {
        children: /*#__PURE__*/jsxRuntime_1(CollapseWrapper, {
          ownerState: _extends({}, ownerState, {
            state
          }),
          className: classes.wrapper,
          ref: wrapperRef,
          children: /*#__PURE__*/jsxRuntime_1(CollapseWrapperInner, {
            ownerState: _extends({}, ownerState, {
              state
            }),
            className: classes.wrapperInner,
            children: children
          })
        })
      }))
    }));
  });
  Collapse.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Add a custom transition end trigger. Called with the transitioning DOM
     * node and a done callback. Allows for more fine grained transition end
     * logic. Note: Timeouts are still used as a fallback if provided.
     */
    addEndListener: PropTypes.func,
    /**
     * The content node to be collapsed.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The width (horizontal) or height (vertical) of the container when collapsed.
     * @default '0px'
     */
    collapsedSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: elementTypeAcceptingRef$1,
    /**
     * The transition timing function.
     * You may specify a single easing or a object containing enter and exit values.
     */
    easing: PropTypes.oneOfType([PropTypes.shape({
      enter: PropTypes.string,
      exit: PropTypes.string
    }), PropTypes.string]),
    /**
     * If `true`, the component will transition in.
     */
    in: PropTypes.bool,
    /**
     * @ignore
     */
    onEnter: PropTypes.func,
    /**
     * @ignore
     */
    onEntered: PropTypes.func,
    /**
     * @ignore
     */
    onEntering: PropTypes.func,
    /**
     * @ignore
     */
    onExit: PropTypes.func,
    /**
     * @ignore
     */
    onExited: PropTypes.func,
    /**
     * @ignore
     */
    onExiting: PropTypes.func,
    /**
     * The transition orientation.
     * @default 'vertical'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     *
     * Set to 'auto' to automatically calculate transition time based on height.
     * @default duration.standard
     */
    timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })])
  } ;
  Collapse.muiSupportAuto = true;
  var Collapse$1 = Collapse;

  function getPaperUtilityClass(slot) {
    return generateUtilityClass('MuiPaper', slot);
  }
  const paperClasses = generateUtilityClasses('MuiPaper', ['root', 'rounded', 'outlined', 'elevation', 'elevation0', 'elevation1', 'elevation2', 'elevation3', 'elevation4', 'elevation5', 'elevation6', 'elevation7', 'elevation8', 'elevation9', 'elevation10', 'elevation11', 'elevation12', 'elevation13', 'elevation14', 'elevation15', 'elevation16', 'elevation17', 'elevation18', 'elevation19', 'elevation20', 'elevation21', 'elevation22', 'elevation23', 'elevation24']);
  var paperClasses$1 = paperClasses;

  const _excluded$24 = ["className", "component", "elevation", "square", "variant"];
  const useUtilityClasses$1M = ownerState => {
    const {
      square,
      elevation,
      variant,
      classes
    } = ownerState;
    const slots = {
      root: ['root', variant, !square && 'rounded', variant === 'elevation' && `elevation${elevation}`]
    };
    return composeClasses(slots, getPaperUtilityClass, classes);
  };
  const PaperRoot = styled$1('div', {
    name: 'MuiPaper',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], !ownerState.square && styles.rounded, ownerState.variant === 'elevation' && styles[`elevation${ownerState.elevation}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    var _theme$vars$overlays;
    return _extends({
      backgroundColor: (theme.vars || theme).palette.background.paper,
      color: (theme.vars || theme).palette.text.primary,
      transition: theme.transitions.create('box-shadow')
    }, !ownerState.square && {
      borderRadius: theme.shape.borderRadius
    }, ownerState.variant === 'outlined' && {
      border: `1px solid ${(theme.vars || theme).palette.divider}`
    }, ownerState.variant === 'elevation' && _extends({
      boxShadow: (theme.vars || theme).shadows[ownerState.elevation]
    }, !theme.vars && theme.palette.mode === 'dark' && {
      backgroundImage: `linear-gradient(${alpha('#fff', getOverlayAlpha$1(ownerState.elevation))}, ${alpha('#fff', getOverlayAlpha$1(ownerState.elevation))})`
    }, theme.vars && {
      backgroundImage: (_theme$vars$overlays = theme.vars.overlays) == null ? void 0 : _theme$vars$overlays[ownerState.elevation]
    }));
  });
  const Paper = /*#__PURE__*/React__namespace.forwardRef(function Paper(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiPaper'
    });
    const {
        className,
        component = 'div',
        elevation = 1,
        square = false,
        variant = 'elevation'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$24);
    const ownerState = _extends({}, props, {
      component,
      elevation,
      square,
      variant
    });
    const classes = useUtilityClasses$1M(ownerState);
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      const theme = useTheme();
      if (theme.shadows[elevation] === undefined) {
        console.error([`MUI: The elevation provided <Paper elevation={${elevation}}> is not available in the theme.`, `Please make sure that \`theme.shadows[${elevation}]\` is defined.`].join('\n'));
      }
    }
    return /*#__PURE__*/jsxRuntime_1(PaperRoot, _extends({
      as: component,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other));
  });
  Paper.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Shadow depth, corresponds to `dp` in the spec.
     * It accepts values between 0 and 24 inclusive.
     * @default 1
     */
    elevation: chainPropTypes(integerPropType, props => {
      const {
        elevation,
        variant
      } = props;
      if (elevation > 0 && variant === 'outlined') {
        return new Error(`MUI: Combining \`elevation={${elevation}}\` with \`variant="${variant}"\` has no effect. Either use \`elevation={0}\` or use a different \`variant\`.`);
      }
      return null;
    }),
    /**
     * If `true`, rounded corners are disabled.
     * @default false
     */
    square: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'elevation'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['elevation', 'outlined']), PropTypes.string])
  } ;
  var Paper$1 = Paper;

  /**
   * @ignore - internal component.
   * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}
   */
  const AccordionContext = /*#__PURE__*/React__namespace.createContext({});
  {
    AccordionContext.displayName = 'AccordionContext';
  }
  var AccordionContext$1 = AccordionContext;

  function getAccordionUtilityClass(slot) {
    return generateUtilityClass('MuiAccordion', slot);
  }
  const accordionClasses = generateUtilityClasses('MuiAccordion', ['root', 'rounded', 'expanded', 'disabled', 'gutters', 'region']);
  var accordionClasses$1 = accordionClasses;

  const _excluded$23 = ["children", "className", "defaultExpanded", "disabled", "disableGutters", "expanded", "onChange", "square", "TransitionComponent", "TransitionProps"];
  const useUtilityClasses$1L = ownerState => {
    const {
      classes,
      square,
      expanded,
      disabled,
      disableGutters
    } = ownerState;
    const slots = {
      root: ['root', !square && 'rounded', expanded && 'expanded', disabled && 'disabled', !disableGutters && 'gutters'],
      region: ['region']
    };
    return composeClasses(slots, getAccordionUtilityClass, classes);
  };
  const AccordionRoot = styled$1(Paper$1, {
    name: 'MuiAccordion',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${accordionClasses$1.region}`]: styles.region
      }, styles.root, !ownerState.square && styles.rounded, !ownerState.disableGutters && styles.gutters];
    }
  })(({
    theme
  }) => {
    const transition = {
      duration: theme.transitions.duration.shortest
    };
    return {
      position: 'relative',
      transition: theme.transitions.create(['margin'], transition),
      overflowAnchor: 'none',
      // Keep the same scrolling position
      '&:before': {
        position: 'absolute',
        left: 0,
        top: -1,
        right: 0,
        height: 1,
        content: '""',
        opacity: 1,
        backgroundColor: (theme.vars || theme).palette.divider,
        transition: theme.transitions.create(['opacity', 'background-color'], transition)
      },
      '&:first-of-type': {
        '&:before': {
          display: 'none'
        }
      },
      [`&.${accordionClasses$1.expanded}`]: {
        '&:before': {
          opacity: 0
        },
        '&:first-of-type': {
          marginTop: 0
        },
        '&:last-of-type': {
          marginBottom: 0
        },
        '& + &': {
          '&:before': {
            display: 'none'
          }
        }
      },
      [`&.${accordionClasses$1.disabled}`]: {
        backgroundColor: (theme.vars || theme).palette.action.disabledBackground
      }
    };
  }, ({
    theme,
    ownerState
  }) => _extends({}, !ownerState.square && {
    borderRadius: 0,
    '&:first-of-type': {
      borderTopLeftRadius: (theme.vars || theme).shape.borderRadius,
      borderTopRightRadius: (theme.vars || theme).shape.borderRadius
    },
    '&:last-of-type': {
      borderBottomLeftRadius: (theme.vars || theme).shape.borderRadius,
      borderBottomRightRadius: (theme.vars || theme).shape.borderRadius,
      // Fix a rendering issue on Edge
      '@supports (-ms-ime-align: auto)': {
        borderBottomLeftRadius: 0,
        borderBottomRightRadius: 0
      }
    }
  }, !ownerState.disableGutters && {
    [`&.${accordionClasses$1.expanded}`]: {
      margin: '16px 0'
    }
  }));
  const Accordion = /*#__PURE__*/React__namespace.forwardRef(function Accordion(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAccordion'
    });
    const {
        children: childrenProp,
        className,
        defaultExpanded = false,
        disabled = false,
        disableGutters = false,
        expanded: expandedProp,
        onChange,
        square = false,
        TransitionComponent = Collapse$1,
        TransitionProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$23);
    const [expanded, setExpandedState] = useControlled({
      controlled: expandedProp,
      default: defaultExpanded,
      name: 'Accordion',
      state: 'expanded'
    });
    const handleChange = React__namespace.useCallback(event => {
      setExpandedState(!expanded);
      if (onChange) {
        onChange(event, !expanded);
      }
    }, [expanded, onChange, setExpandedState]);
    const [summary, ...children] = React__namespace.Children.toArray(childrenProp);
    const contextValue = React__namespace.useMemo(() => ({
      expanded,
      disabled,
      disableGutters,
      toggle: handleChange
    }), [expanded, disabled, disableGutters, handleChange]);
    const ownerState = _extends({}, props, {
      square,
      disabled,
      disableGutters,
      expanded
    });
    const classes = useUtilityClasses$1L(ownerState);
    return /*#__PURE__*/jsxRuntime_2(AccordionRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState,
      square: square
    }, other, {
      children: [/*#__PURE__*/jsxRuntime_1(AccordionContext$1.Provider, {
        value: contextValue,
        children: summary
      }), /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
        in: expanded,
        timeout: "auto"
      }, TransitionProps, {
        children: /*#__PURE__*/jsxRuntime_1("div", {
          "aria-labelledby": summary.props.id,
          id: summary.props['aria-controls'],
          role: "region",
          className: classes.region,
          children: children
        })
      }))]
    }));
  });
  Accordion.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: chainPropTypes(PropTypes.node.isRequired, props => {
      const summary = React__namespace.Children.toArray(props.children)[0];
      if (reactIs_2(summary)) {
        return new Error("MUI: The Accordion doesn't accept a Fragment as a child. " + 'Consider providing an array instead.');
      }
      if (! /*#__PURE__*/React__namespace.isValidElement(summary)) {
        return new Error('MUI: Expected the first child of Accordion to be a valid element.');
      }
      return null;
    }),
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, expands the accordion by default.
     * @default false
     */
    defaultExpanded: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, it removes the margin between two expanded accordion items and the increase of height.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * If `true`, expands the accordion, otherwise collapse it.
     * Setting this prop enables control over the accordion.
     */
    expanded: PropTypes.bool,
    /**
     * Callback fired when the expand/collapse state is changed.
     *
     * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.
     * @param {boolean} expanded The `expanded` state of the accordion.
     */
    onChange: PropTypes.func,
    /**
     * If `true`, rounded corners are disabled.
     * @default false
     */
    square: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Collapse
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     */
    TransitionProps: PropTypes.object
  } ;
  var Accordion$1 = Accordion;

  function getAccordionActionsUtilityClass(slot) {
    return generateUtilityClass('MuiAccordionActions', slot);
  }
  const accordionActionsClasses = generateUtilityClasses('MuiAccordionActions', ['root', 'spacing']);
  var accordionActionsClasses$1 = accordionActionsClasses;

  const _excluded$22 = ["className", "disableSpacing"];
  const useUtilityClasses$1K = ownerState => {
    const {
      classes,
      disableSpacing
    } = ownerState;
    const slots = {
      root: ['root', !disableSpacing && 'spacing']
    };
    return composeClasses(slots, getAccordionActionsUtilityClass, classes);
  };
  const AccordionActionsRoot = styled$1('div', {
    name: 'MuiAccordionActions',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.disableSpacing && styles.spacing];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex',
    alignItems: 'center',
    padding: 8,
    justifyContent: 'flex-end'
  }, !ownerState.disableSpacing && {
    '& > :not(:first-of-type)': {
      marginLeft: 8
    }
  }));
  const AccordionActions = /*#__PURE__*/React__namespace.forwardRef(function AccordionActions(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAccordionActions'
    });
    const {
        className,
        disableSpacing = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$22);
    const ownerState = _extends({}, props, {
      disableSpacing
    });
    const classes = useUtilityClasses$1K(ownerState);
    return /*#__PURE__*/jsxRuntime_1(AccordionActionsRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other));
  });
  AccordionActions.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the actions do not have additional margin.
     * @default false
     */
    disableSpacing: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var AccordionActions$1 = AccordionActions;

  function getAccordionDetailsUtilityClass(slot) {
    return generateUtilityClass('MuiAccordionDetails', slot);
  }
  const accordionDetailsClasses = generateUtilityClasses('MuiAccordionDetails', ['root']);
  var accordionDetailsClasses$1 = accordionDetailsClasses;

  const _excluded$21 = ["className"];
  const useUtilityClasses$1J = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getAccordionDetailsUtilityClass, classes);
  };
  const AccordionDetailsRoot = styled$1('div', {
    name: 'MuiAccordionDetails',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => ({
    padding: theme.spacing(1, 2, 2)
  }));
  const AccordionDetails = /*#__PURE__*/React__namespace.forwardRef(function AccordionDetails(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAccordionDetails'
    });
    const {
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$21);
    const ownerState = props;
    const classes = useUtilityClasses$1J(ownerState);
    return /*#__PURE__*/jsxRuntime_1(AccordionDetailsRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other));
  });
  AccordionDetails.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var AccordionDetails$1 = AccordionDetails;

  function Ripple(props) {
    const {
      className,
      classes,
      pulsate = false,
      rippleX,
      rippleY,
      rippleSize,
      in: inProp,
      onExited,
      timeout
    } = props;
    const [leaving, setLeaving] = React__namespace.useState(false);
    const rippleClassName = clsx(className, classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);
    const rippleStyles = {
      width: rippleSize,
      height: rippleSize,
      top: -(rippleSize / 2) + rippleY,
      left: -(rippleSize / 2) + rippleX
    };
    const childClassName = clsx(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);
    if (!inProp && !leaving) {
      setLeaving(true);
    }
    React__namespace.useEffect(() => {
      if (!inProp && onExited != null) {
        // react-transition-group#onExited
        const timeoutId = setTimeout(onExited, timeout);
        return () => {
          clearTimeout(timeoutId);
        };
      }
      return undefined;
    }, [onExited, inProp, timeout]);
    return /*#__PURE__*/jsxRuntime_1("span", {
      className: rippleClassName,
      style: rippleStyles,
      children: /*#__PURE__*/jsxRuntime_1("span", {
        className: childClassName
      })
    });
  }
  Ripple.propTypes = {
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object.isRequired,
    className: PropTypes.string,
    /**
     * @ignore - injected from TransitionGroup
     */
    in: PropTypes.bool,
    /**
     * @ignore - injected from TransitionGroup
     */
    onExited: PropTypes.func,
    /**
     * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.
     */
    pulsate: PropTypes.bool,
    /**
     * Diameter of the ripple.
     */
    rippleSize: PropTypes.number,
    /**
     * Horizontal position of the ripple center.
     */
    rippleX: PropTypes.number,
    /**
     * Vertical position of the ripple center.
     */
    rippleY: PropTypes.number,
    /**
     * exit delay
     */
    timeout: PropTypes.number.isRequired
  } ;

  function getTouchRippleUtilityClass(slot) {
    return generateUtilityClass('MuiTouchRipple', slot);
  }
  const touchRippleClasses = generateUtilityClasses('MuiTouchRipple', ['root', 'ripple', 'rippleVisible', 'ripplePulsate', 'child', 'childLeaving', 'childPulsate']);
  var touchRippleClasses$1 = touchRippleClasses;

  const _excluded$20 = ["center", "classes", "className"];
  let _$3 = t => t,
    _t$3,
    _t2$3,
    _t3$3,
    _t4$3;
  const DURATION = 550;
  const DELAY_RIPPLE = 80;
  const enterKeyframe = keyframes(_t$3 || (_t$3 = _$3`
  0% {
    transform: scale(0);
    opacity: 0.1;
  }

  100% {
    transform: scale(1);
    opacity: 0.3;
  }
`));
  const exitKeyframe = keyframes(_t2$3 || (_t2$3 = _$3`
  0% {
    opacity: 1;
  }

  100% {
    opacity: 0;
  }
`));
  const pulsateKeyframe = keyframes(_t3$3 || (_t3$3 = _$3`
  0% {
    transform: scale(1);
  }

  50% {
    transform: scale(0.92);
  }

  100% {
    transform: scale(1);
  }
`));
  const TouchRippleRoot = styled$1('span', {
    name: 'MuiTouchRipple',
    slot: 'Root'
  })({
    overflow: 'hidden',
    pointerEvents: 'none',
    position: 'absolute',
    zIndex: 0,
    top: 0,
    right: 0,
    bottom: 0,
    left: 0,
    borderRadius: 'inherit'
  });

  // This `styled()` function invokes keyframes. `styled-components` only supports keyframes
  // in string templates. Do not convert these styles in JS object as it will break.
  const TouchRippleRipple = styled$1(Ripple, {
    name: 'MuiTouchRipple',
    slot: 'Ripple'
  })(_t4$3 || (_t4$3 = _$3`
  opacity: 0;
  position: absolute;

  &.${0} {
    opacity: 0.3;
    transform: scale(1);
    animation-name: ${0};
    animation-duration: ${0}ms;
    animation-timing-function: ${0};
  }

  &.${0} {
    animation-duration: ${0}ms;
  }

  & .${0} {
    opacity: 1;
    display: block;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background-color: currentColor;
  }

  & .${0} {
    opacity: 0;
    animation-name: ${0};
    animation-duration: ${0}ms;
    animation-timing-function: ${0};
  }

  & .${0} {
    position: absolute;
    /* @noflip */
    left: 0px;
    top: 0;
    animation-name: ${0};
    animation-duration: 2500ms;
    animation-timing-function: ${0};
    animation-iteration-count: infinite;
    animation-delay: 200ms;
  }
`), touchRippleClasses$1.rippleVisible, enterKeyframe, DURATION, ({
    theme
  }) => theme.transitions.easing.easeInOut, touchRippleClasses$1.ripplePulsate, ({
    theme
  }) => theme.transitions.duration.shorter, touchRippleClasses$1.child, touchRippleClasses$1.childLeaving, exitKeyframe, DURATION, ({
    theme
  }) => theme.transitions.easing.easeInOut, touchRippleClasses$1.childPulsate, pulsateKeyframe, ({
    theme
  }) => theme.transitions.easing.easeInOut);

  /**
   * @ignore - internal component.
   *
   * TODO v5: Make private
   */
  const TouchRipple = /*#__PURE__*/React__namespace.forwardRef(function TouchRipple(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTouchRipple'
    });
    const {
        center: centerProp = false,
        classes = {},
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$20);
    const [ripples, setRipples] = React__namespace.useState([]);
    const nextKey = React__namespace.useRef(0);
    const rippleCallback = React__namespace.useRef(null);
    React__namespace.useEffect(() => {
      if (rippleCallback.current) {
        rippleCallback.current();
        rippleCallback.current = null;
      }
    }, [ripples]);

    // Used to filter out mouse emulated events on mobile.
    const ignoringMouseDown = React__namespace.useRef(false);
    // We use a timer in order to only show the ripples for touch "click" like events.
    // We don't want to display the ripple for touch scroll events.
    const startTimer = React__namespace.useRef(0);

    // This is the hook called once the previous timeout is ready.
    const startTimerCommit = React__namespace.useRef(null);
    const container = React__namespace.useRef(null);
    React__namespace.useEffect(() => {
      return () => {
        if (startTimer.current) {
          clearTimeout(startTimer.current);
        }
      };
    }, []);
    const startCommit = React__namespace.useCallback(params => {
      const {
        pulsate,
        rippleX,
        rippleY,
        rippleSize,
        cb
      } = params;
      setRipples(oldRipples => [...oldRipples, /*#__PURE__*/jsxRuntime_1(TouchRippleRipple, {
        classes: {
          ripple: clsx(classes.ripple, touchRippleClasses$1.ripple),
          rippleVisible: clsx(classes.rippleVisible, touchRippleClasses$1.rippleVisible),
          ripplePulsate: clsx(classes.ripplePulsate, touchRippleClasses$1.ripplePulsate),
          child: clsx(classes.child, touchRippleClasses$1.child),
          childLeaving: clsx(classes.childLeaving, touchRippleClasses$1.childLeaving),
          childPulsate: clsx(classes.childPulsate, touchRippleClasses$1.childPulsate)
        },
        timeout: DURATION,
        pulsate: pulsate,
        rippleX: rippleX,
        rippleY: rippleY,
        rippleSize: rippleSize
      }, nextKey.current)]);
      nextKey.current += 1;
      rippleCallback.current = cb;
    }, [classes]);
    const start = React__namespace.useCallback((event = {}, options = {}, cb = () => {}) => {
      const {
        pulsate = false,
        center = centerProp || options.pulsate,
        fakeElement = false // For test purposes
      } = options;
      if ((event == null ? void 0 : event.type) === 'mousedown' && ignoringMouseDown.current) {
        ignoringMouseDown.current = false;
        return;
      }
      if ((event == null ? void 0 : event.type) === 'touchstart') {
        ignoringMouseDown.current = true;
      }
      const element = fakeElement ? null : container.current;
      const rect = element ? element.getBoundingClientRect() : {
        width: 0,
        height: 0,
        left: 0,
        top: 0
      };

      // Get the size of the ripple
      let rippleX;
      let rippleY;
      let rippleSize;
      if (center || event === undefined || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {
        rippleX = Math.round(rect.width / 2);
        rippleY = Math.round(rect.height / 2);
      } else {
        const {
          clientX,
          clientY
        } = event.touches && event.touches.length > 0 ? event.touches[0] : event;
        rippleX = Math.round(clientX - rect.left);
        rippleY = Math.round(clientY - rect.top);
      }
      if (center) {
        rippleSize = Math.sqrt((2 * rect.width ** 2 + rect.height ** 2) / 3);

        // For some reason the animation is broken on Mobile Chrome if the size is even.
        if (rippleSize % 2 === 0) {
          rippleSize += 1;
        }
      } else {
        const sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;
        const sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;
        rippleSize = Math.sqrt(sizeX ** 2 + sizeY ** 2);
      }

      // Touche devices
      if (event != null && event.touches) {
        // check that this isn't another touchstart due to multitouch
        // otherwise we will only clear a single timer when unmounting while two
        // are running
        if (startTimerCommit.current === null) {
          // Prepare the ripple effect.
          startTimerCommit.current = () => {
            startCommit({
              pulsate,
              rippleX,
              rippleY,
              rippleSize,
              cb
            });
          };
          // Delay the execution of the ripple effect.
          startTimer.current = setTimeout(() => {
            if (startTimerCommit.current) {
              startTimerCommit.current();
              startTimerCommit.current = null;
            }
          }, DELAY_RIPPLE); // We have to make a tradeoff with this value.
        }
      } else {
        startCommit({
          pulsate,
          rippleX,
          rippleY,
          rippleSize,
          cb
        });
      }
    }, [centerProp, startCommit]);
    const pulsate = React__namespace.useCallback(() => {
      start({}, {
        pulsate: true
      });
    }, [start]);
    const stop = React__namespace.useCallback((event, cb) => {
      clearTimeout(startTimer.current);

      // The touch interaction occurs too quickly.
      // We still want to show ripple effect.
      if ((event == null ? void 0 : event.type) === 'touchend' && startTimerCommit.current) {
        startTimerCommit.current();
        startTimerCommit.current = null;
        startTimer.current = setTimeout(() => {
          stop(event, cb);
        });
        return;
      }
      startTimerCommit.current = null;
      setRipples(oldRipples => {
        if (oldRipples.length > 0) {
          return oldRipples.slice(1);
        }
        return oldRipples;
      });
      rippleCallback.current = cb;
    }, []);
    React__namespace.useImperativeHandle(ref, () => ({
      pulsate,
      start,
      stop
    }), [pulsate, start, stop]);
    return /*#__PURE__*/jsxRuntime_1(TouchRippleRoot, _extends({
      className: clsx(touchRippleClasses$1.root, classes.root, className),
      ref: container
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(TransitionGroup$1, {
        component: null,
        exit: true,
        children: ripples
      })
    }));
  });
  TouchRipple.propTypes = {
    /**
     * If `true`, the ripple starts at the center of the component
     * rather than at the point of interaction.
     */
    center: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string
  } ;
  var TouchRipple$1 = TouchRipple;

  function getButtonBaseUtilityClass(slot) {
    return generateUtilityClass('MuiButtonBase', slot);
  }
  const buttonBaseClasses = generateUtilityClasses('MuiButtonBase', ['root', 'disabled', 'focusVisible']);
  var buttonBaseClasses$1 = buttonBaseClasses;

  const _excluded$1$ = ["action", "centerRipple", "children", "className", "component", "disabled", "disableRipple", "disableTouchRipple", "focusRipple", "focusVisibleClassName", "LinkComponent", "onBlur", "onClick", "onContextMenu", "onDragLeave", "onFocus", "onFocusVisible", "onKeyDown", "onKeyUp", "onMouseDown", "onMouseLeave", "onMouseUp", "onTouchEnd", "onTouchMove", "onTouchStart", "tabIndex", "TouchRippleProps", "touchRippleRef", "type"];
  const useUtilityClasses$1I = ownerState => {
    const {
      disabled,
      focusVisible,
      focusVisibleClassName,
      classes
    } = ownerState;
    const slots = {
      root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']
    };
    const composedClasses = composeClasses(slots, getButtonBaseUtilityClass, classes);
    if (focusVisible && focusVisibleClassName) {
      composedClasses.root += ` ${focusVisibleClassName}`;
    }
    return composedClasses;
  };
  const ButtonBaseRoot = styled$1('button', {
    name: 'MuiButtonBase',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    display: 'inline-flex',
    alignItems: 'center',
    justifyContent: 'center',
    position: 'relative',
    boxSizing: 'border-box',
    WebkitTapHighlightColor: 'transparent',
    backgroundColor: 'transparent',
    // Reset default value
    // We disable the focus ring for mouse, touch and keyboard users.
    outline: 0,
    border: 0,
    margin: 0,
    // Remove the margin in Safari
    borderRadius: 0,
    padding: 0,
    // Remove the padding in Firefox
    cursor: 'pointer',
    userSelect: 'none',
    verticalAlign: 'middle',
    MozAppearance: 'none',
    // Reset
    WebkitAppearance: 'none',
    // Reset
    textDecoration: 'none',
    // So we take precedent over the style of a native <a /> element.
    color: 'inherit',
    '&::-moz-focus-inner': {
      borderStyle: 'none' // Remove Firefox dotted outline.
    },
    [`&.${buttonBaseClasses$1.disabled}`]: {
      pointerEvents: 'none',
      // Disable link interactions
      cursor: 'default'
    },
    '@media print': {
      colorAdjust: 'exact'
    }
  });

  /**
   * `ButtonBase` contains as few styles as possible.
   * It aims to be a simple building block for creating a button.
   * It contains a load of style reset and some focus/ripple logic.
   */
  const ButtonBase = /*#__PURE__*/React__namespace.forwardRef(function ButtonBase(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiButtonBase'
    });
    const {
        action,
        centerRipple = false,
        children,
        className,
        component = 'button',
        disabled = false,
        disableRipple = false,
        disableTouchRipple = false,
        focusRipple = false,
        LinkComponent = 'a',
        onBlur,
        onClick,
        onContextMenu,
        onDragLeave,
        onFocus,
        onFocusVisible,
        onKeyDown,
        onKeyUp,
        onMouseDown,
        onMouseLeave,
        onMouseUp,
        onTouchEnd,
        onTouchMove,
        onTouchStart,
        tabIndex = 0,
        TouchRippleProps,
        touchRippleRef,
        type
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1$);
    const buttonRef = React__namespace.useRef(null);
    const rippleRef = React__namespace.useRef(null);
    const handleRippleRef = useForkRef(rippleRef, touchRippleRef);
    const {
      isFocusVisibleRef,
      onFocus: handleFocusVisible,
      onBlur: handleBlurVisible,
      ref: focusVisibleRef
    } = useIsFocusVisible();
    const [focusVisible, setFocusVisible] = React__namespace.useState(false);
    if (disabled && focusVisible) {
      setFocusVisible(false);
    }
    React__namespace.useImperativeHandle(action, () => ({
      focusVisible: () => {
        setFocusVisible(true);
        buttonRef.current.focus();
      }
    }), []);
    const [mountedState, setMountedState] = React__namespace.useState(false);
    React__namespace.useEffect(() => {
      setMountedState(true);
    }, []);
    const enableTouchRipple = mountedState && !disableRipple && !disabled;
    React__namespace.useEffect(() => {
      if (focusVisible && focusRipple && !disableRipple && mountedState) {
        rippleRef.current.pulsate();
      }
    }, [disableRipple, focusRipple, focusVisible, mountedState]);
    function useRippleHandler(rippleAction, eventCallback, skipRippleAction = disableTouchRipple) {
      return useEventCallback(event => {
        if (eventCallback) {
          eventCallback(event);
        }
        const ignore = skipRippleAction;
        if (!ignore && rippleRef.current) {
          rippleRef.current[rippleAction](event);
        }
        return true;
      });
    }
    const handleMouseDown = useRippleHandler('start', onMouseDown);
    const handleContextMenu = useRippleHandler('stop', onContextMenu);
    const handleDragLeave = useRippleHandler('stop', onDragLeave);
    const handleMouseUp = useRippleHandler('stop', onMouseUp);
    const handleMouseLeave = useRippleHandler('stop', event => {
      if (focusVisible) {
        event.preventDefault();
      }
      if (onMouseLeave) {
        onMouseLeave(event);
      }
    });
    const handleTouchStart = useRippleHandler('start', onTouchStart);
    const handleTouchEnd = useRippleHandler('stop', onTouchEnd);
    const handleTouchMove = useRippleHandler('stop', onTouchMove);
    const handleBlur = useRippleHandler('stop', event => {
      handleBlurVisible(event);
      if (isFocusVisibleRef.current === false) {
        setFocusVisible(false);
      }
      if (onBlur) {
        onBlur(event);
      }
    }, false);
    const handleFocus = useEventCallback(event => {
      // Fix for https://github.com/facebook/react/issues/7769
      if (!buttonRef.current) {
        buttonRef.current = event.currentTarget;
      }
      handleFocusVisible(event);
      if (isFocusVisibleRef.current === true) {
        setFocusVisible(true);
        if (onFocusVisible) {
          onFocusVisible(event);
        }
      }
      if (onFocus) {
        onFocus(event);
      }
    });
    const isNonNativeButton = () => {
      const button = buttonRef.current;
      return component && component !== 'button' && !(button.tagName === 'A' && button.href);
    };

    /**
     * IE11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat
     */
    const keydownRef = React__namespace.useRef(false);
    const handleKeyDown = useEventCallback(event => {
      // Check if key is already down to avoid repeats being counted as multiple activations
      if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {
        keydownRef.current = true;
        rippleRef.current.stop(event, () => {
          rippleRef.current.start(event);
        });
      }
      if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {
        event.preventDefault();
      }
      if (onKeyDown) {
        onKeyDown(event);
      }

      // Keyboard accessibility for non interactive elements
      if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {
        event.preventDefault();
        if (onClick) {
          onClick(event);
        }
      }
    });
    const handleKeyUp = useEventCallback(event => {
      // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
      // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
      if (focusRipple && event.key === ' ' && rippleRef.current && focusVisible && !event.defaultPrevented) {
        keydownRef.current = false;
        rippleRef.current.stop(event, () => {
          rippleRef.current.pulsate(event);
        });
      }
      if (onKeyUp) {
        onKeyUp(event);
      }

      // Keyboard accessibility for non interactive elements
      if (onClick && event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented) {
        onClick(event);
      }
    });
    let ComponentProp = component;
    if (ComponentProp === 'button' && (other.href || other.to)) {
      ComponentProp = LinkComponent;
    }
    const buttonProps = {};
    if (ComponentProp === 'button') {
      buttonProps.type = type === undefined ? 'button' : type;
      buttonProps.disabled = disabled;
    } else {
      if (!other.href && !other.to) {
        buttonProps.role = 'button';
      }
      if (disabled) {
        buttonProps['aria-disabled'] = disabled;
      }
    }
    const handleRef = useForkRef(ref, focusVisibleRef, buttonRef);
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useEffect(() => {
        if (enableTouchRipple && !rippleRef.current) {
          console.error(['MUI: The `component` prop provided to ButtonBase is invalid.', 'Please make sure the children prop is rendered in this custom component.'].join('\n'));
        }
      }, [enableTouchRipple]);
    }
    const ownerState = _extends({}, props, {
      centerRipple,
      component,
      disabled,
      disableRipple,
      disableTouchRipple,
      focusRipple,
      tabIndex,
      focusVisible
    });
    const classes = useUtilityClasses$1I(ownerState);
    return /*#__PURE__*/jsxRuntime_2(ButtonBaseRoot, _extends({
      as: ComponentProp,
      className: clsx(classes.root, className),
      ownerState: ownerState,
      onBlur: handleBlur,
      onClick: onClick,
      onContextMenu: handleContextMenu,
      onFocus: handleFocus,
      onKeyDown: handleKeyDown,
      onKeyUp: handleKeyUp,
      onMouseDown: handleMouseDown,
      onMouseLeave: handleMouseLeave,
      onMouseUp: handleMouseUp,
      onDragLeave: handleDragLeave,
      onTouchEnd: handleTouchEnd,
      onTouchMove: handleTouchMove,
      onTouchStart: handleTouchStart,
      ref: handleRef,
      tabIndex: disabled ? -1 : tabIndex,
      type: type
    }, buttonProps, other, {
      children: [children, enableTouchRipple ?
      /*#__PURE__*/
      /* TouchRipple is only needed client-side, x2 boost on the server. */
      jsxRuntime_1(TouchRipple$1, _extends({
        ref: handleRippleRef,
        center: centerRipple
      }, TouchRippleProps)) : null]
    }));
  });
  ButtonBase.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * A ref for imperative actions.
     * It currently only supports `focusVisible()` action.
     */
    action: refType$1,
    /**
     * If `true`, the ripples are centered.
     * They won't start at the cursor interaction position.
     * @default false
     */
    centerRipple: PropTypes.bool,
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: elementTypeAcceptingRef$1,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     *
     * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
     * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * If `true`, the touch ripple effect is disabled.
     * @default false
     */
    disableTouchRipple: PropTypes.bool,
    /**
     * If `true`, the base button will have a keyboard focus ripple.
     * @default false
     */
    focusRipple: PropTypes.bool,
    /**
     * This prop can help identify which element has keyboard focus.
     * The class name will be applied when the element gains the focus through keyboard interaction.
     * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).
     * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).
     * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components
     * if needed.
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * @ignore
     */
    href: PropTypes /* @typescript-to-proptypes-ignore */.any,
    /**
     * The component used to render a link when the `href` prop is provided.
     * @default 'a'
     */
    LinkComponent: PropTypes.elementType,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * @ignore
     */
    onClick: PropTypes.func,
    /**
     * @ignore
     */
    onContextMenu: PropTypes.func,
    /**
     * @ignore
     */
    onDragLeave: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * Callback fired when the component is focused with a keyboard.
     * We trigger a `onFocus` callback too.
     */
    onFocusVisible: PropTypes.func,
    /**
     * @ignore
     */
    onKeyDown: PropTypes.func,
    /**
     * @ignore
     */
    onKeyUp: PropTypes.func,
    /**
     * @ignore
     */
    onMouseDown: PropTypes.func,
    /**
     * @ignore
     */
    onMouseLeave: PropTypes.func,
    /**
     * @ignore
     */
    onMouseUp: PropTypes.func,
    /**
     * @ignore
     */
    onTouchEnd: PropTypes.func,
    /**
     * @ignore
     */
    onTouchMove: PropTypes.func,
    /**
     * @ignore
     */
    onTouchStart: PropTypes.func,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * @default 0
     */
    tabIndex: PropTypes.number,
    /**
     * Props applied to the `TouchRipple` element.
     */
    TouchRippleProps: PropTypes.object,
    /**
     * A ref that points to the `TouchRipple` element.
     */
    touchRippleRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
      current: PropTypes.shape({
        pulsate: PropTypes.func.isRequired,
        start: PropTypes.func.isRequired,
        stop: PropTypes.func.isRequired
      })
    })]),
    /**
     * @ignore
     */
    type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string])
  } ;
  var ButtonBase$1 = ButtonBase;

  function getAccordionSummaryUtilityClass(slot) {
    return generateUtilityClass('MuiAccordionSummary', slot);
  }
  const accordionSummaryClasses = generateUtilityClasses('MuiAccordionSummary', ['root', 'expanded', 'focusVisible', 'disabled', 'gutters', 'contentGutters', 'content', 'expandIconWrapper']);
  var accordionSummaryClasses$1 = accordionSummaryClasses;

  const _excluded$1_ = ["children", "className", "expandIcon", "focusVisibleClassName", "onClick"];
  const useUtilityClasses$1H = ownerState => {
    const {
      classes,
      expanded,
      disabled,
      disableGutters
    } = ownerState;
    const slots = {
      root: ['root', expanded && 'expanded', disabled && 'disabled', !disableGutters && 'gutters'],
      focusVisible: ['focusVisible'],
      content: ['content', expanded && 'expanded', !disableGutters && 'contentGutters'],
      expandIconWrapper: ['expandIconWrapper', expanded && 'expanded']
    };
    return composeClasses(slots, getAccordionSummaryUtilityClass, classes);
  };
  const AccordionSummaryRoot = styled$1(ButtonBase$1, {
    name: 'MuiAccordionSummary',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme,
    ownerState
  }) => {
    const transition = {
      duration: theme.transitions.duration.shortest
    };
    return _extends({
      display: 'flex',
      minHeight: 48,
      padding: theme.spacing(0, 2),
      transition: theme.transitions.create(['min-height', 'background-color'], transition),
      [`&.${accordionSummaryClasses$1.focusVisible}`]: {
        backgroundColor: (theme.vars || theme).palette.action.focus
      },
      [`&.${accordionSummaryClasses$1.disabled}`]: {
        opacity: (theme.vars || theme).palette.action.disabledOpacity
      },
      [`&:hover:not(.${accordionSummaryClasses$1.disabled})`]: {
        cursor: 'pointer'
      }
    }, !ownerState.disableGutters && {
      [`&.${accordionSummaryClasses$1.expanded}`]: {
        minHeight: 64
      }
    });
  });
  const AccordionSummaryContent = styled$1('div', {
    name: 'MuiAccordionSummary',
    slot: 'Content',
    overridesResolver: (props, styles) => styles.content
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'flex',
    flexGrow: 1,
    margin: '12px 0'
  }, !ownerState.disableGutters && {
    transition: theme.transitions.create(['margin'], {
      duration: theme.transitions.duration.shortest
    }),
    [`&.${accordionSummaryClasses$1.expanded}`]: {
      margin: '20px 0'
    }
  }));
  const AccordionSummaryExpandIconWrapper = styled$1('div', {
    name: 'MuiAccordionSummary',
    slot: 'ExpandIconWrapper',
    overridesResolver: (props, styles) => styles.expandIconWrapper
  })(({
    theme
  }) => ({
    display: 'flex',
    color: (theme.vars || theme).palette.action.active,
    transform: 'rotate(0deg)',
    transition: theme.transitions.create('transform', {
      duration: theme.transitions.duration.shortest
    }),
    [`&.${accordionSummaryClasses$1.expanded}`]: {
      transform: 'rotate(180deg)'
    }
  }));
  const AccordionSummary = /*#__PURE__*/React__namespace.forwardRef(function AccordionSummary(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAccordionSummary'
    });
    const {
        children,
        className,
        expandIcon,
        focusVisibleClassName,
        onClick
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1_);
    const {
      disabled = false,
      disableGutters,
      expanded,
      toggle
    } = React__namespace.useContext(AccordionContext$1);
    const handleChange = event => {
      if (toggle) {
        toggle(event);
      }
      if (onClick) {
        onClick(event);
      }
    };
    const ownerState = _extends({}, props, {
      expanded,
      disabled,
      disableGutters
    });
    const classes = useUtilityClasses$1H(ownerState);
    return /*#__PURE__*/jsxRuntime_2(AccordionSummaryRoot, _extends({
      focusRipple: false,
      disableRipple: true,
      disabled: disabled,
      component: "div",
      "aria-expanded": expanded,
      className: clsx(classes.root, className),
      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
      onClick: handleChange,
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [/*#__PURE__*/jsxRuntime_1(AccordionSummaryContent, {
        className: classes.content,
        ownerState: ownerState,
        children: children
      }), expandIcon && /*#__PURE__*/jsxRuntime_1(AccordionSummaryExpandIconWrapper, {
        className: classes.expandIconWrapper,
        ownerState: ownerState,
        children: expandIcon
      })]
    }));
  });
  AccordionSummary.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The icon to display as the expand indicator.
     */
    expandIcon: PropTypes.node,
    /**
     * This prop can help identify which element has keyboard focus.
     * The class name will be applied when the element gains the focus through keyboard interaction.
     * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).
     * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).
     * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components
     * if needed.
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * @ignore
     */
    onClick: PropTypes.func,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var AccordionSummary$1 = AccordionSummary;

  function getAlertUtilityClass(slot) {
    return generateUtilityClass('MuiAlert', slot);
  }
  const alertClasses = generateUtilityClasses('MuiAlert', ['root', 'action', 'icon', 'message', 'filled', 'filledSuccess', 'filledInfo', 'filledWarning', 'filledError', 'outlined', 'outlinedSuccess', 'outlinedInfo', 'outlinedWarning', 'outlinedError', 'standard', 'standardSuccess', 'standardInfo', 'standardWarning', 'standardError']);
  var alertClasses$1 = alertClasses;

  function getIconButtonUtilityClass(slot) {
    return generateUtilityClass('MuiIconButton', slot);
  }
  const iconButtonClasses = generateUtilityClasses('MuiIconButton', ['root', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'edgeStart', 'edgeEnd', 'sizeSmall', 'sizeMedium', 'sizeLarge']);
  var iconButtonClasses$1 = iconButtonClasses;

  const _excluded$1Z = ["edge", "children", "className", "color", "disabled", "disableFocusRipple", "size"];
  const useUtilityClasses$1G = ownerState => {
    const {
      classes,
      disabled,
      color,
      edge,
      size
    } = ownerState;
    const slots = {
      root: ['root', disabled && 'disabled', color !== 'default' && `color${capitalize(color)}`, edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`]
    };
    return composeClasses(slots, getIconButtonUtilityClass, classes);
  };
  const IconButtonRoot = styled$1(ButtonBase$1, {
    name: 'MuiIconButton',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    textAlign: 'center',
    flex: '0 0 auto',
    fontSize: theme.typography.pxToRem(24),
    padding: 8,
    borderRadius: '50%',
    overflow: 'visible',
    // Explicitly set the default value to solve a bug on IE11.
    color: (theme.vars || theme).palette.action.active,
    transition: theme.transitions.create('background-color', {
      duration: theme.transitions.duration.shortest
    })
  }, !ownerState.disableRipple && {
    '&:hover': {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    }
  }, ownerState.edge === 'start' && {
    marginLeft: ownerState.size === 'small' ? -3 : -12
  }, ownerState.edge === 'end' && {
    marginRight: ownerState.size === 'small' ? -3 : -12
  }), ({
    theme,
    ownerState
  }) => {
    var _palette;
    const palette = (_palette = (theme.vars || theme).palette) == null ? void 0 : _palette[ownerState.color];
    return _extends({}, ownerState.color === 'inherit' && {
      color: 'inherit'
    }, ownerState.color !== 'inherit' && ownerState.color !== 'default' && _extends({
      color: palette == null ? void 0 : palette.main
    }, !ownerState.disableRipple && {
      '&:hover': _extends({}, palette && {
        backgroundColor: theme.vars ? `rgba(${palette.mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(palette.main, theme.palette.action.hoverOpacity)
      }, {
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      })
    }), ownerState.size === 'small' && {
      padding: 5,
      fontSize: theme.typography.pxToRem(18)
    }, ownerState.size === 'large' && {
      padding: 12,
      fontSize: theme.typography.pxToRem(28)
    }, {
      [`&.${iconButtonClasses$1.disabled}`]: {
        backgroundColor: 'transparent',
        color: (theme.vars || theme).palette.action.disabled
      }
    });
  });

  /**
   * Refer to the [Icons](/material-ui/icons/) section of the documentation
   * regarding the available icon options.
   */
  const IconButton = /*#__PURE__*/React__namespace.forwardRef(function IconButton(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiIconButton'
    });
    const {
        edge = false,
        children,
        className,
        color = 'default',
        disabled = false,
        disableFocusRipple = false,
        size = 'medium'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1Z);
    const ownerState = _extends({}, props, {
      edge,
      color,
      disabled,
      disableFocusRipple,
      size
    });
    const classes = useUtilityClasses$1G(ownerState);
    return /*#__PURE__*/jsxRuntime_1(IconButtonRoot, _extends({
      className: clsx(classes.root, className),
      centerRipple: true,
      focusRipple: !disableFocusRipple,
      disabled: disabled,
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: children
    }));
  });
  IconButton.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The icon to display.
     */
    children: chainPropTypes(PropTypes.node, props => {
      const found = React__namespace.Children.toArray(props.children).some(child => /*#__PURE__*/React__namespace.isValidElement(child) && child.props.onClick);
      if (found) {
        return new Error(['MUI: You are providing an onClick event listener to a child of a button element.', 'Prefer applying it to the IconButton directly.', 'This guarantees that the whole <button> will be responsive to click events.'].join('\n'));
      }
      return null;
    }),
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'default'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the  keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     *
     * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
     * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * If given, uses a negative margin to counteract the padding on one
     * side (this is often helpful for aligning the left or right
     * side of the icon with content above or below, without ruining the border
     * size and shape).
     * @default false
     */
    edge: PropTypes.oneOf(['end', 'start', false]),
    /**
     * The size of the component.
     * `small` is equivalent to the dense button styling.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var IconButton$1 = IconButton;

  var SuccessOutlinedIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z"
  }), 'SuccessOutlined');

  var ReportProblemOutlinedIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z"
  }), 'ReportProblemOutlined');

  var ErrorOutlineIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
  }), 'ErrorOutline');

  var InfoOutlinedIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z"
  }), 'InfoOutlined');

  var ClearIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
  }), 'Close');

  const _excluded$1Y = ["action", "children", "className", "closeText", "color", "components", "componentsProps", "icon", "iconMapping", "onClose", "role", "severity", "slotProps", "slots", "variant"];
  const useUtilityClasses$1F = ownerState => {
    const {
      variant,
      color,
      severity,
      classes
    } = ownerState;
    const slots = {
      root: ['root', `${variant}${capitalize(color || severity)}`, `${variant}`],
      icon: ['icon'],
      message: ['message'],
      action: ['action']
    };
    return composeClasses(slots, getAlertUtilityClass, classes);
  };
  const AlertRoot = styled$1(Paper$1, {
    name: 'MuiAlert',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color || ownerState.severity)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    const getColor = theme.palette.mode === 'light' ? darken : lighten;
    const getBackgroundColor = theme.palette.mode === 'light' ? lighten : darken;
    const color = ownerState.color || ownerState.severity;
    return _extends({}, theme.typography.body2, {
      backgroundColor: 'transparent',
      display: 'flex',
      padding: '6px 16px'
    }, color && ownerState.variant === 'standard' && {
      color: theme.vars ? theme.vars.palette.Alert[`${color}Color`] : getColor(theme.palette[color].light, 0.6),
      backgroundColor: theme.vars ? theme.vars.palette.Alert[`${color}StandardBg`] : getBackgroundColor(theme.palette[color].light, 0.9),
      [`& .${alertClasses$1.icon}`]: theme.vars ? {
        color: theme.vars.palette.Alert[`${color}IconColor`]
      } : {
        color: theme.palette[color].main
      }
    }, color && ownerState.variant === 'outlined' && {
      color: theme.vars ? theme.vars.palette.Alert[`${color}Color`] : getColor(theme.palette[color].light, 0.6),
      border: `1px solid ${(theme.vars || theme).palette[color].light}`,
      [`& .${alertClasses$1.icon}`]: theme.vars ? {
        color: theme.vars.palette.Alert[`${color}IconColor`]
      } : {
        color: theme.palette[color].main
      }
    }, color && ownerState.variant === 'filled' && _extends({
      fontWeight: theme.typography.fontWeightMedium
    }, theme.vars ? {
      color: theme.vars.palette.Alert[`${color}FilledColor`],
      backgroundColor: theme.vars.palette.Alert[`${color}FilledBg`]
    } : {
      backgroundColor: theme.palette.mode === 'dark' ? theme.palette[color].dark : theme.palette[color].main,
      color: theme.palette.getContrastText(theme.palette[color].main)
    }));
  });
  const AlertIcon = styled$1('div', {
    name: 'MuiAlert',
    slot: 'Icon',
    overridesResolver: (props, styles) => styles.icon
  })({
    marginRight: 12,
    padding: '7px 0',
    display: 'flex',
    fontSize: 22,
    opacity: 0.9
  });
  const AlertMessage = styled$1('div', {
    name: 'MuiAlert',
    slot: 'Message',
    overridesResolver: (props, styles) => styles.message
  })({
    padding: '8px 0',
    minWidth: 0,
    overflow: 'auto'
  });
  const AlertAction = styled$1('div', {
    name: 'MuiAlert',
    slot: 'Action',
    overridesResolver: (props, styles) => styles.action
  })({
    display: 'flex',
    alignItems: 'flex-start',
    padding: '4px 0 0 16px',
    marginLeft: 'auto',
    marginRight: -8
  });
  const defaultIconMapping = {
    success: /*#__PURE__*/jsxRuntime_1(SuccessOutlinedIcon, {
      fontSize: "inherit"
    }),
    warning: /*#__PURE__*/jsxRuntime_1(ReportProblemOutlinedIcon, {
      fontSize: "inherit"
    }),
    error: /*#__PURE__*/jsxRuntime_1(ErrorOutlineIcon, {
      fontSize: "inherit"
    }),
    info: /*#__PURE__*/jsxRuntime_1(InfoOutlinedIcon, {
      fontSize: "inherit"
    })
  };
  const Alert = /*#__PURE__*/React__namespace.forwardRef(function Alert(inProps, ref) {
    var _ref, _slots$closeButton, _ref2, _slots$closeIcon, _slotProps$closeButto, _slotProps$closeIcon;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAlert'
    });
    const {
        action,
        children,
        className,
        closeText = 'Close',
        color,
        components = {},
        componentsProps = {},
        icon,
        iconMapping = defaultIconMapping,
        onClose,
        role = 'alert',
        severity = 'success',
        slotProps = {},
        slots = {},
        variant = 'standard'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1Y);
    const ownerState = _extends({}, props, {
      color,
      severity,
      variant
    });
    const classes = useUtilityClasses$1F(ownerState);
    const AlertCloseButton = (_ref = (_slots$closeButton = slots.closeButton) != null ? _slots$closeButton : components.CloseButton) != null ? _ref : IconButton$1;
    const AlertCloseIcon = (_ref2 = (_slots$closeIcon = slots.closeIcon) != null ? _slots$closeIcon : components.CloseIcon) != null ? _ref2 : ClearIcon;
    const closeButtonProps = (_slotProps$closeButto = slotProps.closeButton) != null ? _slotProps$closeButto : componentsProps.closeButton;
    const closeIconProps = (_slotProps$closeIcon = slotProps.closeIcon) != null ? _slotProps$closeIcon : componentsProps.closeIcon;
    return /*#__PURE__*/jsxRuntime_2(AlertRoot, _extends({
      role: role,
      elevation: 0,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other, {
      children: [icon !== false ? /*#__PURE__*/jsxRuntime_1(AlertIcon, {
        ownerState: ownerState,
        className: classes.icon,
        children: icon || iconMapping[severity] || defaultIconMapping[severity]
      }) : null, /*#__PURE__*/jsxRuntime_1(AlertMessage, {
        ownerState: ownerState,
        className: classes.message,
        children: children
      }), action != null ? /*#__PURE__*/jsxRuntime_1(AlertAction, {
        ownerState: ownerState,
        className: classes.action,
        children: action
      }) : null, action == null && onClose ? /*#__PURE__*/jsxRuntime_1(AlertAction, {
        ownerState: ownerState,
        className: classes.action,
        children: /*#__PURE__*/jsxRuntime_1(AlertCloseButton, _extends({
          size: "small",
          "aria-label": closeText,
          title: closeText,
          color: "inherit",
          onClick: onClose
        }, closeButtonProps, {
          children: /*#__PURE__*/jsxRuntime_1(AlertCloseIcon, _extends({
            fontSize: "small"
          }, closeIconProps))
        }))
      }) : null]
    }));
  });
  Alert.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The action to display. It renders after the message, at the end of the alert.
     */
    action: PropTypes.node,
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Override the default label for the *close popup* icon button.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Close'
     */
    closeText: PropTypes.string,
    /**
     * The color of the component. Unless provided, the value is taken from the `severity` prop.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      CloseButton: PropTypes.elementType,
      CloseIcon: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      closeButton: PropTypes.object,
      closeIcon: PropTypes.object
    }),
    /**
     * Override the icon displayed before the children.
     * Unless provided, the icon is mapped to the value of the `severity` prop.
     * Set to `false` to remove the `icon`.
     */
    icon: PropTypes.node,
    /**
     * The component maps the `severity` prop to a range of different icons,
     * for instance success to `<SuccessOutlined>`.
     * If you wish to change this mapping, you can provide your own.
     * Alternatively, you can use the `icon` prop to override the icon displayed.
     */
    iconMapping: PropTypes.shape({
      error: PropTypes.node,
      info: PropTypes.node,
      success: PropTypes.node,
      warning: PropTypes.node
    }),
    /**
     * Callback fired when the component requests to be closed.
     * When provided and no `action` prop is set, a close icon button is displayed that triggers the callback when clicked.
     * @param {React.SyntheticEvent} event The event source of the callback.
     */
    onClose: PropTypes.func,
    /**
     * The ARIA role attribute of the element.
     * @default 'alert'
     */
    role: PropTypes.string,
    /**
     * The severity of the alert. This defines the color and icon used.
     * @default 'success'
     */
    severity: PropTypes.oneOf(['error', 'info', 'success', 'warning']),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      closeButton: PropTypes.object,
      closeIcon: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      closeButton: PropTypes.elementType,
      closeIcon: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'standard'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])
  } ;
  var Alert$1 = Alert;

  function getTypographyUtilityClass(slot) {
    return generateUtilityClass('MuiTypography', slot);
  }
  const typographyClasses = generateUtilityClasses('MuiTypography', ['root', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'inherit', 'button', 'caption', 'overline', 'alignLeft', 'alignRight', 'alignCenter', 'alignJustify', 'noWrap', 'gutterBottom', 'paragraph']);
  var typographyClasses$1 = typographyClasses;

  const _excluded$1X = ["align", "className", "component", "gutterBottom", "noWrap", "paragraph", "variant", "variantMapping"];
  const useUtilityClasses$1E = ownerState => {
    const {
      align,
      gutterBottom,
      noWrap,
      paragraph,
      variant,
      classes
    } = ownerState;
    const slots = {
      root: ['root', variant, ownerState.align !== 'inherit' && `align${capitalize(align)}`, gutterBottom && 'gutterBottom', noWrap && 'noWrap', paragraph && 'paragraph']
    };
    return composeClasses(slots, getTypographyUtilityClass, classes);
  };
  const TypographyRoot = styled$1('span', {
    name: 'MuiTypography',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.variant && styles[ownerState.variant], ownerState.align !== 'inherit' && styles[`align${capitalize(ownerState.align)}`], ownerState.noWrap && styles.noWrap, ownerState.gutterBottom && styles.gutterBottom, ownerState.paragraph && styles.paragraph];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    margin: 0
  }, ownerState.variant === 'inherit' && {
    // Some elements, like <button> on Chrome have default font that doesn't inherit, reset this.
    font: 'inherit'
  }, ownerState.variant !== 'inherit' && theme.typography[ownerState.variant], ownerState.align !== 'inherit' && {
    textAlign: ownerState.align
  }, ownerState.noWrap && {
    overflow: 'hidden',
    textOverflow: 'ellipsis',
    whiteSpace: 'nowrap'
  }, ownerState.gutterBottom && {
    marginBottom: '0.35em'
  }, ownerState.paragraph && {
    marginBottom: 16
  }));
  const defaultVariantMapping = {
    h1: 'h1',
    h2: 'h2',
    h3: 'h3',
    h4: 'h4',
    h5: 'h5',
    h6: 'h6',
    subtitle1: 'h6',
    subtitle2: 'h6',
    body1: 'p',
    body2: 'p',
    inherit: 'p'
  };

  // TODO v6: deprecate these color values in v5.x and remove the transformation in v6
  const colorTransformations$1 = {
    primary: 'primary.main',
    textPrimary: 'text.primary',
    secondary: 'secondary.main',
    textSecondary: 'text.secondary',
    error: 'error.main'
  };
  const transformDeprecatedColors$1 = color => {
    return colorTransformations$1[color] || color;
  };
  const Typography = /*#__PURE__*/React__namespace.forwardRef(function Typography(inProps, ref) {
    const themeProps = useThemeProps({
      props: inProps,
      name: 'MuiTypography'
    });
    const color = transformDeprecatedColors$1(themeProps.color);
    const props = extendSxProp(_extends({}, themeProps, {
      color
    }));
    const {
        align = 'inherit',
        className,
        component,
        gutterBottom = false,
        noWrap = false,
        paragraph = false,
        variant = 'body1',
        variantMapping = defaultVariantMapping
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1X);
    const ownerState = _extends({}, props, {
      align,
      color,
      className,
      component,
      gutterBottom,
      noWrap,
      paragraph,
      variant,
      variantMapping
    });
    const Component = component || (paragraph ? 'p' : variantMapping[variant] || defaultVariantMapping[variant]) || 'span';
    const classes = useUtilityClasses$1E(ownerState);
    return /*#__PURE__*/jsxRuntime_1(TypographyRoot, _extends({
      as: Component,
      ref: ref,
      ownerState: ownerState,
      className: clsx(classes.root, className)
    }, other));
  });
  Typography.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Set the text-align on the component.
     * @default 'inherit'
     */
    align: PropTypes.oneOf(['center', 'inherit', 'justify', 'left', 'right']),
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the text will have a bottom margin.
     * @default false
     */
    gutterBottom: PropTypes.bool,
    /**
     * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.
     *
     * Note that text overflow can only happen with block or inline-block level elements
     * (the element needs to have a width in order to overflow).
     * @default false
     */
    noWrap: PropTypes.bool,
    /**
     * If `true`, the element will be a paragraph element.
     * @default false
     */
    paragraph: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Applies the theme typography styles.
     * @default 'body1'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['body1', 'body2', 'button', 'caption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'inherit', 'overline', 'subtitle1', 'subtitle2']), PropTypes.string]),
    /**
     * The component maps the variant prop to a range of different HTML element types.
     * For instance, subtitle1 to `<h6>`.
     * If you wish to change that mapping, you can provide your own.
     * Alternatively, you can use the `component` prop.
     * @default {
     *   h1: 'h1',
     *   h2: 'h2',
     *   h3: 'h3',
     *   h4: 'h4',
     *   h5: 'h5',
     *   h6: 'h6',
     *   subtitle1: 'h6',
     *   subtitle2: 'h6',
     *   body1: 'p',
     *   body2: 'p',
     *   inherit: 'p',
     * }
     */
    variantMapping: PropTypes /* @typescript-to-proptypes-ignore */.object
  } ;
  var Typography$1 = Typography;

  function getAlertTitleUtilityClass(slot) {
    return generateUtilityClass('MuiAlertTitle', slot);
  }
  const alertTitleClasses = generateUtilityClasses('MuiAlertTitle', ['root']);
  var alertTitleClasses$1 = alertTitleClasses;

  const _excluded$1W = ["className"];
  const useUtilityClasses$1D = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getAlertTitleUtilityClass, classes);
  };
  const AlertTitleRoot = styled$1(Typography$1, {
    name: 'MuiAlertTitle',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => {
    return {
      fontWeight: theme.typography.fontWeightMedium,
      marginTop: -2
    };
  });
  const AlertTitle = /*#__PURE__*/React__namespace.forwardRef(function AlertTitle(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAlertTitle'
    });
    const {
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1W);
    const ownerState = props;
    const classes = useUtilityClasses$1D(ownerState);
    return /*#__PURE__*/jsxRuntime_1(AlertTitleRoot, _extends({
      gutterBottom: true,
      component: "div",
      ownerState: ownerState,
      ref: ref,
      className: clsx(classes.root, className)
    }, other));
  });
  AlertTitle.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var AlertTitle$1 = AlertTitle;

  function getAppBarUtilityClass(slot) {
    return generateUtilityClass('MuiAppBar', slot);
  }
  const appBarClasses = generateUtilityClasses('MuiAppBar', ['root', 'positionFixed', 'positionAbsolute', 'positionSticky', 'positionStatic', 'positionRelative', 'colorDefault', 'colorPrimary', 'colorSecondary', 'colorInherit', 'colorTransparent', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning']);
  var appBarClasses$1 = appBarClasses;

  const _excluded$1V = ["className", "color", "enableColorOnDark", "position"];
  const useUtilityClasses$1C = ownerState => {
    const {
      color,
      position,
      classes
    } = ownerState;
    const slots = {
      root: ['root', `color${capitalize(color)}`, `position${capitalize(position)}`]
    };
    return composeClasses(slots, getAppBarUtilityClass, classes);
  };

  // var2 is the fallback.
  // Ex. var1: 'var(--a)', var2: 'var(--b)'; return: 'var(--a, var(--b))'
  const joinVars = (var1, var2) => var1 ? `${var1 == null ? void 0 : var1.replace(')', '')}, ${var2})` : var2;
  const AppBarRoot = styled$1(Paper$1, {
    name: 'MuiAppBar',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`position${capitalize(ownerState.position)}`], styles[`color${capitalize(ownerState.color)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    const backgroundColorDefault = theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];
    return _extends({
      display: 'flex',
      flexDirection: 'column',
      width: '100%',
      boxSizing: 'border-box',
      // Prevent padding issue with the Modal and fixed positioned AppBar.
      flexShrink: 0
    }, ownerState.position === 'fixed' && {
      position: 'fixed',
      zIndex: (theme.vars || theme).zIndex.appBar,
      top: 0,
      left: 'auto',
      right: 0,
      '@media print': {
        // Prevent the app bar to be visible on each printed page.
        position: 'absolute'
      }
    }, ownerState.position === 'absolute' && {
      position: 'absolute',
      zIndex: (theme.vars || theme).zIndex.appBar,
      top: 0,
      left: 'auto',
      right: 0
    }, ownerState.position === 'sticky' && {
      // ⚠️ sticky is not supported by IE11.
      position: 'sticky',
      zIndex: (theme.vars || theme).zIndex.appBar,
      top: 0,
      left: 'auto',
      right: 0
    }, ownerState.position === 'static' && {
      position: 'static'
    }, ownerState.position === 'relative' && {
      position: 'relative'
    }, !theme.vars && _extends({}, ownerState.color === 'default' && {
      backgroundColor: backgroundColorDefault,
      color: theme.palette.getContrastText(backgroundColorDefault)
    }, ownerState.color && ownerState.color !== 'default' && ownerState.color !== 'inherit' && ownerState.color !== 'transparent' && {
      backgroundColor: theme.palette[ownerState.color].main,
      color: theme.palette[ownerState.color].contrastText
    }, ownerState.color === 'inherit' && {
      color: 'inherit'
    }, theme.palette.mode === 'dark' && !ownerState.enableColorOnDark && {
      backgroundColor: null,
      color: null
    }, ownerState.color === 'transparent' && _extends({
      backgroundColor: 'transparent',
      color: 'inherit'
    }, theme.palette.mode === 'dark' && {
      backgroundImage: 'none'
    })), theme.vars && _extends({}, ownerState.color === 'default' && {
      '--AppBar-background': ownerState.enableColorOnDark ? theme.vars.palette.AppBar.defaultBg : joinVars(theme.vars.palette.AppBar.darkBg, theme.vars.palette.AppBar.defaultBg),
      '--AppBar-color': ownerState.enableColorOnDark ? theme.vars.palette.text.primary : joinVars(theme.vars.palette.AppBar.darkColor, theme.vars.palette.text.primary)
    }, ownerState.color && !ownerState.color.match(/^(default|inherit|transparent)$/) && {
      '--AppBar-background': ownerState.enableColorOnDark ? theme.vars.palette[ownerState.color].main : joinVars(theme.vars.palette.AppBar.darkBg, theme.vars.palette[ownerState.color].main),
      '--AppBar-color': ownerState.enableColorOnDark ? theme.vars.palette[ownerState.color].contrastText : joinVars(theme.vars.palette.AppBar.darkColor, theme.vars.palette[ownerState.color].contrastText)
    }, {
      backgroundColor: 'var(--AppBar-background)',
      color: ownerState.color === 'inherit' ? 'inherit' : 'var(--AppBar-color)'
    }, ownerState.color === 'transparent' && {
      backgroundImage: 'none',
      backgroundColor: 'transparent',
      color: 'inherit'
    }));
  });
  const AppBar = /*#__PURE__*/React__namespace.forwardRef(function AppBar(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAppBar'
    });
    const {
        className,
        color = 'primary',
        enableColorOnDark = false,
        position = 'fixed'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1V);
    const ownerState = _extends({}, props, {
      color,
      position,
      enableColorOnDark
    });
    const classes = useUtilityClasses$1C(ownerState);
    return /*#__PURE__*/jsxRuntime_1(AppBarRoot, _extends({
      square: true,
      component: "header",
      ownerState: ownerState,
      elevation: 4,
      className: clsx(classes.root, className, position === 'fixed' && 'mui-fixed'),
      ref: ref
    }, other));
  });
  AppBar.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary', 'transparent', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * If true, the `color` prop is applied in dark mode.
     * @default false
     */
    enableColorOnDark: PropTypes.bool,
    /**
     * The positioning type. The behavior of the different options is described
     * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).
     * Note: `sticky` is not universally supported and will fall back to `static` when unavailable.
     * @default 'fixed'
     */
    position: PropTypes.oneOf(['absolute', 'fixed', 'relative', 'static', 'sticky']),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var AppBar$1 = AppBar;

  /**
   * Determines if a given element is a DOM element name (i.e. not a React component).
   */
  function isHostComponent(element) {
    return typeof element === 'string';
  }

  /**
   * Type of the ownerState based on the type of an element it applies to.
   * This resolves to the provided OwnerState for React components and `undefined` for host components.
   * Falls back to `OwnerState | undefined` when the exact type can't be determined in development time.
   */

  /**
   * Appends the ownerState object to the props, merging with the existing one if necessary.
   *
   * @param elementType Type of the element that owns the `existingProps`. If the element is a DOM node or undefined, `ownerState` is not applied.
   * @param otherProps Props of the element.
   * @param ownerState
   */
  function appendOwnerState(elementType, otherProps, ownerState) {
    if (elementType === undefined || isHostComponent(elementType)) {
      return otherProps;
    }
    return _extends({}, otherProps, {
      ownerState: _extends({}, otherProps.ownerState, ownerState)
    });
  }

  function areArraysEqual(array1, array2, itemComparer = (a, b) => a === b) {
    return array1.length === array2.length && array1.every((value, index) => itemComparer(value, array2[index]));
  }

  const defaultContextValue = {
    disableDefaultClasses: false
  };
  const ClassNameConfiguratorContext = /*#__PURE__*/React__namespace.createContext(defaultContextValue);
  /**
   * @ignore - internal hook.
   *
   * Wraps the `generateUtilityClass` function and controls how the classes are generated.
   * Currently it only affects whether the classes are applied or not.
   *
   * @returns Function to be called with the `generateUtilityClass` function specific to a component to generate the classes.
   */
  function useClassNamesOverride(generateUtilityClass) {
    const {
      disableDefaultClasses
    } = React__namespace.useContext(ClassNameConfiguratorContext);
    return slot => {
      if (disableDefaultClasses) {
        return '';
      }
      return generateUtilityClass(slot);
    };
  }

  /**
   * Extracts event handlers from a given object.
   * A prop is considered an event handler if it is a function and its name starts with `on`.
   *
   * @param object An object to extract event handlers from.
   * @param excludeKeys An array of keys to exclude from the returned object.
   */
  function extractEventHandlers(object, excludeKeys = []) {
    if (object === undefined) {
      return {};
    }
    const result = {};
    Object.keys(object).filter(prop => prop.match(/^on[A-Z]/) && typeof object[prop] === 'function' && !excludeKeys.includes(prop)).forEach(prop => {
      result[prop] = object[prop];
    });
    return result;
  }

  /**
   * If `componentProps` is a function, calls it with the provided `ownerState`.
   * Otherwise, just returns `componentProps`.
   */
  function resolveComponentProps(componentProps, ownerState, slotState) {
    if (typeof componentProps === 'function') {
      return componentProps(ownerState, slotState);
    }
    return componentProps;
  }

  /**
   * Removes event handlers from the given object.
   * A field is considered an event handler if it is a function with a name beginning with `on`.
   *
   * @param object Object to remove event handlers from.
   * @returns Object with event handlers removed.
   */
  function omitEventHandlers(object) {
    if (object === undefined) {
      return {};
    }
    const result = {};
    Object.keys(object).filter(prop => !(prop.match(/^on[A-Z]/) && typeof object[prop] === 'function')).forEach(prop => {
      result[prop] = object[prop];
    });
    return result;
  }

  /**
   * Merges the slot component internal props (usually coming from a hook)
   * with the externally provided ones.
   *
   * The merge order is (the latter overrides the former):
   * 1. The internal props (specified as a getter function to work with get*Props hook result)
   * 2. Additional props (specified internally on a Base UI component)
   * 3. External props specified on the owner component. These should only be used on a root slot.
   * 4. External props specified in the `slotProps.*` prop.
   * 5. The `className` prop - combined from all the above.
   * @param parameters
   * @returns
   */
  function mergeSlotProps(parameters) {
    const {
      getSlotProps,
      additionalProps,
      externalSlotProps,
      externalForwardedProps,
      className
    } = parameters;
    if (!getSlotProps) {
      // The simpler case - getSlotProps is not defined, so no internal event handlers are defined,
      // so we can simply merge all the props without having to worry about extracting event handlers.
      const joinedClasses = clsx(additionalProps == null ? void 0 : additionalProps.className, className, externalForwardedProps == null ? void 0 : externalForwardedProps.className, externalSlotProps == null ? void 0 : externalSlotProps.className);
      const mergedStyle = _extends({}, additionalProps == null ? void 0 : additionalProps.style, externalForwardedProps == null ? void 0 : externalForwardedProps.style, externalSlotProps == null ? void 0 : externalSlotProps.style);
      const props = _extends({}, additionalProps, externalForwardedProps, externalSlotProps);
      if (joinedClasses.length > 0) {
        props.className = joinedClasses;
      }
      if (Object.keys(mergedStyle).length > 0) {
        props.style = mergedStyle;
      }
      return {
        props,
        internalRef: undefined
      };
    }

    // In this case, getSlotProps is responsible for calling the external event handlers.
    // We don't need to include them in the merged props because of this.

    const eventHandlers = extractEventHandlers(_extends({}, externalForwardedProps, externalSlotProps));
    const componentsPropsWithoutEventHandlers = omitEventHandlers(externalSlotProps);
    const otherPropsWithoutEventHandlers = omitEventHandlers(externalForwardedProps);
    const internalSlotProps = getSlotProps(eventHandlers);

    // The order of classes is important here.
    // Emotion (that we use in libraries consuming Base UI) depends on this order
    // to properly override style. It requires the most important classes to be last
    // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.
    const joinedClasses = clsx(internalSlotProps == null ? void 0 : internalSlotProps.className, additionalProps == null ? void 0 : additionalProps.className, className, externalForwardedProps == null ? void 0 : externalForwardedProps.className, externalSlotProps == null ? void 0 : externalSlotProps.className);
    const mergedStyle = _extends({}, internalSlotProps == null ? void 0 : internalSlotProps.style, additionalProps == null ? void 0 : additionalProps.style, externalForwardedProps == null ? void 0 : externalForwardedProps.style, externalSlotProps == null ? void 0 : externalSlotProps.style);
    const props = _extends({}, internalSlotProps, additionalProps, otherPropsWithoutEventHandlers, componentsPropsWithoutEventHandlers);
    if (joinedClasses.length > 0) {
      props.className = joinedClasses;
    }
    if (Object.keys(mergedStyle).length > 0) {
      props.style = mergedStyle;
    }
    return {
      props,
      internalRef: internalSlotProps.ref
    };
  }

  const _excluded$1U = ["elementType", "externalSlotProps", "ownerState", "skipResolvingSlotProps"];
  /**
   * @ignore - do not document.
   * Builds the props to be passed into the slot of an unstyled component.
   * It merges the internal props of the component with the ones supplied by the user, allowing to customize the behavior.
   * If the slot component is not a host component, it also merges in the `ownerState`.
   *
   * @param parameters.getSlotProps - A function that returns the props to be passed to the slot component.
   */
  function useSlotProps(parameters) {
    var _parameters$additiona;
    const {
        elementType,
        externalSlotProps,
        ownerState,
        skipResolvingSlotProps = false
      } = parameters,
      rest = _objectWithoutPropertiesLoose(parameters, _excluded$1U);
    const resolvedComponentsProps = skipResolvingSlotProps ? {} : resolveComponentProps(externalSlotProps, ownerState);
    const {
      props: mergedProps,
      internalRef
    } = mergeSlotProps(_extends({}, rest, {
      externalSlotProps: resolvedComponentsProps
    }));
    const ref = useForkRef(internalRef, resolvedComponentsProps == null ? void 0 : resolvedComponentsProps.ref, (_parameters$additiona = parameters.additionalProps) == null ? void 0 : _parameters$additiona.ref);
    const props = appendOwnerState(elementType, _extends({}, mergedProps, {
      ref
    }), ownerState);
    return props;
  }

  /**
   *
   * Demos:
   *
   * - [Badge](https://mui.com/base-ui/react-badge/#hook)
   *
   * API:
   *
   * - [useBadge API](https://mui.com/base-ui/react-badge/hooks-api/#use-badge)
   */
  function useBadge(parameters) {
    const {
      badgeContent: badgeContentProp,
      invisible: invisibleProp = false,
      max: maxProp = 99,
      showZero = false
    } = parameters;
    const prevProps = usePreviousProps$1({
      badgeContent: badgeContentProp,
      max: maxProp
    });
    let invisible = invisibleProp;
    if (invisibleProp === false && badgeContentProp === 0 && !showZero) {
      invisible = true;
    }
    const {
      badgeContent,
      max = maxProp
    } = invisible ? prevProps : parameters;
    const displayValue = badgeContent && Number(badgeContent) > max ? `${max}+` : badgeContent;
    return {
      badgeContent,
      invisible,
      max,
      displayValue
    };
  }

  function mapEventPropToEvent(eventProp) {
    return eventProp.substring(2).toLowerCase();
  }
  function clickedRootScrollbar(event, doc) {
    return doc.documentElement.clientWidth < event.clientX || doc.documentElement.clientHeight < event.clientY;
  }
  /**
   * Listen for click events that occur somewhere in the document, outside of the element itself.
   * For instance, if you need to hide a menu when people click anywhere else on your page.
   *
   * Demos:
   *
   * - [Click-Away Listener](https://mui.com/base-ui/react-click-away-listener/)
   *
   * API:
   *
   * - [ClickAwayListener API](https://mui.com/base-ui/react-click-away-listener/components-api/#click-away-listener)
   */
  function ClickAwayListener(props) {
    const {
      children,
      disableReactTree = false,
      mouseEvent = 'onClick',
      onClickAway,
      touchEvent = 'onTouchEnd'
    } = props;
    const movedRef = React__namespace.useRef(false);
    const nodeRef = React__namespace.useRef(null);
    const activatedRef = React__namespace.useRef(false);
    const syntheticEventRef = React__namespace.useRef(false);
    React__namespace.useEffect(() => {
      // Ensure that this component is not "activated" synchronously.
      // https://github.com/facebook/react/issues/20074
      setTimeout(() => {
        activatedRef.current = true;
      }, 0);
      return () => {
        activatedRef.current = false;
      };
    }, []);
    const handleRef = useForkRef(
    // @ts-expect-error TODO upstream fix
    children.ref, nodeRef);

    // The handler doesn't take event.defaultPrevented into account:
    //
    // event.preventDefault() is meant to stop default behaviors like
    // clicking a checkbox to check it, hitting a button to submit a form,
    // and hitting left arrow to move the cursor in a text input etc.
    // Only special HTML elements have these default behaviors.
    const handleClickAway = useEventCallback(event => {
      // Given developers can stop the propagation of the synthetic event,
      // we can only be confident with a positive value.
      const insideReactTree = syntheticEventRef.current;
      syntheticEventRef.current = false;
      const doc = ownerDocument(nodeRef.current);

      // 1. IE11 support, which trigger the handleClickAway even after the unbind
      // 2. The child might render null.
      // 3. Behave like a blur listener.
      if (!activatedRef.current || !nodeRef.current || 'clientX' in event && clickedRootScrollbar(event, doc)) {
        return;
      }

      // Do not act if user performed touchmove
      if (movedRef.current) {
        movedRef.current = false;
        return;
      }
      let insideDOM;

      // If not enough, can use https://github.com/DieterHolvoet/event-propagation-path/blob/master/propagationPath.js
      if (event.composedPath) {
        insideDOM = event.composedPath().indexOf(nodeRef.current) > -1;
      } else {
        insideDOM = !doc.documentElement.contains(
        // @ts-expect-error returns `false` as intended when not dispatched from a Node
        event.target) || nodeRef.current.contains(
        // @ts-expect-error returns `false` as intended when not dispatched from a Node
        event.target);
      }
      if (!insideDOM && (disableReactTree || !insideReactTree)) {
        onClickAway(event);
      }
    });

    // Keep track of mouse/touch events that bubbled up through the portal.
    const createHandleSynthetic = handlerName => event => {
      syntheticEventRef.current = true;
      const childrenPropsHandler = children.props[handlerName];
      if (childrenPropsHandler) {
        childrenPropsHandler(event);
      }
    };
    const childrenProps = {
      ref: handleRef
    };
    if (touchEvent !== false) {
      childrenProps[touchEvent] = createHandleSynthetic(touchEvent);
    }
    React__namespace.useEffect(() => {
      if (touchEvent !== false) {
        const mappedTouchEvent = mapEventPropToEvent(touchEvent);
        const doc = ownerDocument(nodeRef.current);
        const handleTouchMove = () => {
          movedRef.current = true;
        };
        doc.addEventListener(mappedTouchEvent, handleClickAway);
        doc.addEventListener('touchmove', handleTouchMove);
        return () => {
          doc.removeEventListener(mappedTouchEvent, handleClickAway);
          doc.removeEventListener('touchmove', handleTouchMove);
        };
      }
      return undefined;
    }, [handleClickAway, touchEvent]);
    if (mouseEvent !== false) {
      childrenProps[mouseEvent] = createHandleSynthetic(mouseEvent);
    }
    React__namespace.useEffect(() => {
      if (mouseEvent !== false) {
        const mappedMouseEvent = mapEventPropToEvent(mouseEvent);
        const doc = ownerDocument(nodeRef.current);
        doc.addEventListener(mappedMouseEvent, handleClickAway);
        return () => {
          doc.removeEventListener(mappedMouseEvent, handleClickAway);
        };
      }
      return undefined;
    }, [handleClickAway, mouseEvent]);
    return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
      children: /*#__PURE__*/React__namespace.cloneElement(children, childrenProps)
    });
  }
  ClickAwayListener.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * The wrapped element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * If `true`, the React tree is ignored and only the DOM tree is considered.
     * This prop changes how portaled elements are handled.
     * @default false
     */
    disableReactTree: PropTypes.bool,
    /**
     * The mouse event to listen to. You can disable the listener by providing `false`.
     * @default 'onClick'
     */
    mouseEvent: PropTypes.oneOf(['onClick', 'onMouseDown', 'onMouseUp', 'onPointerDown', 'onPointerUp', false]),
    /**
     * Callback fired when a "click away" event is detected.
     */
    onClickAway: PropTypes.func.isRequired,
    /**
     * The touch event to listen to. You can disable the listener by providing `false`.
     * @default 'onTouchEnd'
     */
    touchEvent: PropTypes.oneOf(['onTouchEnd', 'onTouchStart', false])
  } ;
  {
    // eslint-disable-next-line
    ClickAwayListener['propTypes' + ''] = exactProp(ClickAwayListener.propTypes);
  }

  // Inspired by https://github.com/focus-trap/tabbable
  const candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable="false"])'].join(',');
  function getTabIndex(node) {
    const tabindexAttr = parseInt(node.getAttribute('tabindex') || '', 10);
    if (!Number.isNaN(tabindexAttr)) {
      return tabindexAttr;
    }

    // Browsers do not return `tabIndex` correctly for contentEditable nodes;
    // https://bugs.chromium.org/p/chromium/issues/detail?id=661108&q=contenteditable%20tabindex&can=2
    // so if they don't have a tabindex attribute specifically set, assume it's 0.
    // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default
    //  `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,
    //  yet they are still part of the regular tab order; in FF, they get a default
    //  `tabIndex` of 0; since Chrome still puts those elements in the regular tab
    //  order, consider their tab index to be 0.
    if (node.contentEditable === 'true' || (node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO' || node.nodeName === 'DETAILS') && node.getAttribute('tabindex') === null) {
      return 0;
    }
    return node.tabIndex;
  }
  function isNonTabbableRadio(node) {
    if (node.tagName !== 'INPUT' || node.type !== 'radio') {
      return false;
    }
    if (!node.name) {
      return false;
    }
    const getRadio = selector => node.ownerDocument.querySelector(`input[type="radio"]${selector}`);
    let roving = getRadio(`[name="${node.name}"]:checked`);
    if (!roving) {
      roving = getRadio(`[name="${node.name}"]`);
    }
    return roving !== node;
  }
  function isNodeMatchingSelectorFocusable(node) {
    if (node.disabled || node.tagName === 'INPUT' && node.type === 'hidden' || isNonTabbableRadio(node)) {
      return false;
    }
    return true;
  }
  function defaultGetTabbable(root) {
    const regularTabNodes = [];
    const orderedTabNodes = [];
    Array.from(root.querySelectorAll(candidatesSelector)).forEach((node, i) => {
      const nodeTabIndex = getTabIndex(node);
      if (nodeTabIndex === -1 || !isNodeMatchingSelectorFocusable(node)) {
        return;
      }
      if (nodeTabIndex === 0) {
        regularTabNodes.push(node);
      } else {
        orderedTabNodes.push({
          documentOrder: i,
          tabIndex: nodeTabIndex,
          node: node
        });
      }
    });
    return orderedTabNodes.sort((a, b) => a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex).map(a => a.node).concat(regularTabNodes);
  }
  function defaultIsEnabled() {
    return true;
  }

  /**
   * Utility component that locks focus inside the component.
   *
   * Demos:
   *
   * - [Focus Trap](https://mui.com/base-ui/react-focus-trap/)
   *
   * API:
   *
   * - [FocusTrap API](https://mui.com/base-ui/react-focus-trap/components-api/#focus-trap)
   */
  function FocusTrap(props) {
    const {
      children,
      disableAutoFocus = false,
      disableEnforceFocus = false,
      disableRestoreFocus = false,
      getTabbable = defaultGetTabbable,
      isEnabled = defaultIsEnabled,
      open
    } = props;
    const ignoreNextEnforceFocus = React__namespace.useRef(false);
    const sentinelStart = React__namespace.useRef(null);
    const sentinelEnd = React__namespace.useRef(null);
    const nodeToRestore = React__namespace.useRef(null);
    const reactFocusEventTarget = React__namespace.useRef(null);
    // This variable is useful when disableAutoFocus is true.
    // It waits for the active element to move into the component to activate.
    const activated = React__namespace.useRef(false);
    const rootRef = React__namespace.useRef(null);
    // @ts-expect-error TODO upstream fix
    const handleRef = useForkRef(children.ref, rootRef);
    const lastKeydown = React__namespace.useRef(null);
    React__namespace.useEffect(() => {
      // We might render an empty child.
      if (!open || !rootRef.current) {
        return;
      }
      activated.current = !disableAutoFocus;
    }, [disableAutoFocus, open]);
    React__namespace.useEffect(() => {
      // We might render an empty child.
      if (!open || !rootRef.current) {
        return;
      }
      const doc = ownerDocument(rootRef.current);
      if (!rootRef.current.contains(doc.activeElement)) {
        if (!rootRef.current.hasAttribute('tabIndex')) {
          {
            console.error(['MUI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to "-1".'].join('\n'));
          }
          rootRef.current.setAttribute('tabIndex', '-1');
        }
        if (activated.current) {
          rootRef.current.focus();
        }
      }
      return () => {
        // restoreLastFocus()
        if (!disableRestoreFocus) {
          // In IE11 it is possible for document.activeElement to be null resulting
          // in nodeToRestore.current being null.
          // Not all elements in IE11 have a focus method.
          // Once IE11 support is dropped the focus() call can be unconditional.
          if (nodeToRestore.current && nodeToRestore.current.focus) {
            ignoreNextEnforceFocus.current = true;
            nodeToRestore.current.focus();
          }
          nodeToRestore.current = null;
        }
      };
      // Missing `disableRestoreFocus` which is fine.
      // We don't support changing that prop on an open FocusTrap
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [open]);
    React__namespace.useEffect(() => {
      // We might render an empty child.
      if (!open || !rootRef.current) {
        return;
      }
      const doc = ownerDocument(rootRef.current);
      const loopFocus = nativeEvent => {
        lastKeydown.current = nativeEvent;
        if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {
          return;
        }

        // Make sure the next tab starts from the right place.
        // doc.activeElement refers to the origin.
        if (doc.activeElement === rootRef.current && nativeEvent.shiftKey) {
          // We need to ignore the next contain as
          // it will try to move the focus back to the rootRef element.
          ignoreNextEnforceFocus.current = true;
          if (sentinelEnd.current) {
            sentinelEnd.current.focus();
          }
        }
      };
      const contain = () => {
        const rootElement = rootRef.current;

        // Cleanup functions are executed lazily in React 17.
        // Contain can be called between the component being unmounted and its cleanup function being run.
        if (rootElement === null) {
          return;
        }
        if (!doc.hasFocus() || !isEnabled() || ignoreNextEnforceFocus.current) {
          ignoreNextEnforceFocus.current = false;
          return;
        }

        // The focus is already inside
        if (rootElement.contains(doc.activeElement)) {
          return;
        }

        // The disableEnforceFocus is set and the focus is outside of the focus trap (and sentinel nodes)
        if (disableEnforceFocus && doc.activeElement !== sentinelStart.current && doc.activeElement !== sentinelEnd.current) {
          return;
        }

        // if the focus event is not coming from inside the children's react tree, reset the refs
        if (doc.activeElement !== reactFocusEventTarget.current) {
          reactFocusEventTarget.current = null;
        } else if (reactFocusEventTarget.current !== null) {
          return;
        }
        if (!activated.current) {
          return;
        }
        let tabbable = [];
        if (doc.activeElement === sentinelStart.current || doc.activeElement === sentinelEnd.current) {
          tabbable = getTabbable(rootRef.current);
        }

        // one of the sentinel nodes was focused, so move the focus
        // to the first/last tabbable element inside the focus trap
        if (tabbable.length > 0) {
          var _lastKeydown$current, _lastKeydown$current2;
          const isShiftTab = Boolean(((_lastKeydown$current = lastKeydown.current) == null ? void 0 : _lastKeydown$current.shiftKey) && ((_lastKeydown$current2 = lastKeydown.current) == null ? void 0 : _lastKeydown$current2.key) === 'Tab');
          const focusNext = tabbable[0];
          const focusPrevious = tabbable[tabbable.length - 1];
          if (typeof focusNext !== 'string' && typeof focusPrevious !== 'string') {
            if (isShiftTab) {
              focusPrevious.focus();
            } else {
              focusNext.focus();
            }
          }
          // no tabbable elements in the trap focus or the focus was outside of the focus trap
        } else {
          rootElement.focus();
        }
      };
      doc.addEventListener('focusin', contain);
      doc.addEventListener('keydown', loopFocus, true);

      // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area.
      // e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=559561.
      // Instead, we can look if the active element was restored on the BODY element.
      //
      // The whatwg spec defines how the browser should behave but does not explicitly mention any events:
      // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.
      const interval = setInterval(() => {
        if (doc.activeElement && doc.activeElement.tagName === 'BODY') {
          contain();
        }
      }, 50);
      return () => {
        clearInterval(interval);
        doc.removeEventListener('focusin', contain);
        doc.removeEventListener('keydown', loopFocus, true);
      };
    }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open, getTabbable]);
    const onFocus = event => {
      if (nodeToRestore.current === null) {
        nodeToRestore.current = event.relatedTarget;
      }
      activated.current = true;
      reactFocusEventTarget.current = event.target;
      const childrenPropsHandler = children.props.onFocus;
      if (childrenPropsHandler) {
        childrenPropsHandler(event);
      }
    };
    const handleFocusSentinel = event => {
      if (nodeToRestore.current === null) {
        nodeToRestore.current = event.relatedTarget;
      }
      activated.current = true;
    };
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1("div", {
        tabIndex: open ? 0 : -1,
        onFocus: handleFocusSentinel,
        ref: sentinelStart,
        "data-testid": "sentinelStart"
      }), /*#__PURE__*/React__namespace.cloneElement(children, {
        ref: handleRef,
        onFocus
      }), /*#__PURE__*/jsxRuntime_1("div", {
        tabIndex: open ? 0 : -1,
        onFocus: handleFocusSentinel,
        ref: sentinelEnd,
        "data-testid": "sentinelEnd"
      })]
    });
  }
  FocusTrap.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * A single child content element.
     */
    children: elementAcceptingRef$1,
    /**
     * If `true`, the focus trap will not automatically shift focus to itself when it opens, and
     * replace it to the last focused element when it closes.
     * This also works correctly with any focus trap children that have the `disableAutoFocus` prop.
     *
     * Generally this should never be set to `true` as it makes the focus trap less
     * accessible to assistive technologies, like screen readers.
     * @default false
     */
    disableAutoFocus: PropTypes.bool,
    /**
     * If `true`, the focus trap will not prevent focus from leaving the focus trap while open.
     *
     * Generally this should never be set to `true` as it makes the focus trap less
     * accessible to assistive technologies, like screen readers.
     * @default false
     */
    disableEnforceFocus: PropTypes.bool,
    /**
     * If `true`, the focus trap will not restore focus to previously focused element once
     * focus trap is hidden or unmounted.
     * @default false
     */
    disableRestoreFocus: PropTypes.bool,
    /**
     * Returns an array of ordered tabbable nodes (i.e. in tab order) within the root.
     * For instance, you can provide the "tabbable" npm dependency.
     * @param {HTMLElement} root
     */
    getTabbable: PropTypes.func,
    /**
     * This prop extends the `open` prop.
     * It allows to toggle the open state without having to wait for a rerender when changing the `open` prop.
     * This prop should be memoized.
     * It can be used to support multiple focus trap mounted at the same time.
     * @default function defaultIsEnabled(): boolean {
     *   return true;
     * }
     */
    isEnabled: PropTypes.func,
    /**
     * If `true`, focus is locked.
     */
    open: PropTypes.bool.isRequired
  } ;
  {
    // eslint-disable-next-line
    FocusTrap['propTypes' + ''] = exactProp(FocusTrap.propTypes);
  }

  var top = 'top';
  var bottom = 'bottom';
  var right = 'right';
  var left = 'left';
  var auto = 'auto';
  var basePlacements = [top, bottom, right, left];
  var start = 'start';
  var end = 'end';
  var clippingParents = 'clippingParents';
  var viewport = 'viewport';
  var popper = 'popper';
  var reference = 'reference';
  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
    return acc.concat([placement + "-" + start, placement + "-" + end]);
  }, []);
  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
  }, []); // modifiers that need to read the DOM

  var beforeRead = 'beforeRead';
  var read = 'read';
  var afterRead = 'afterRead'; // pure-logic modifiers

  var beforeMain = 'beforeMain';
  var main = 'main';
  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)

  var beforeWrite = 'beforeWrite';
  var write = 'write';
  var afterWrite = 'afterWrite';
  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];

  function getNodeName(element) {
    return element ? (element.nodeName || '').toLowerCase() : null;
  }

  function getWindow(node) {
    if (node == null) {
      return window;
    }

    if (node.toString() !== '[object Window]') {
      var ownerDocument = node.ownerDocument;
      return ownerDocument ? ownerDocument.defaultView || window : window;
    }

    return node;
  }

  function isElement(node) {
    var OwnElement = getWindow(node).Element;
    return node instanceof OwnElement || node instanceof Element;
  }

  function isHTMLElement$1(node) {
    var OwnElement = getWindow(node).HTMLElement;
    return node instanceof OwnElement || node instanceof HTMLElement;
  }

  function isShadowRoot(node) {
    // IE 11 has no ShadowRoot
    if (typeof ShadowRoot === 'undefined') {
      return false;
    }

    var OwnElement = getWindow(node).ShadowRoot;
    return node instanceof OwnElement || node instanceof ShadowRoot;
  }

  // and applies them to the HTMLElements such as popper and arrow

  function applyStyles(_ref) {
    var state = _ref.state;
    Object.keys(state.elements).forEach(function (name) {
      var style = state.styles[name] || {};
      var attributes = state.attributes[name] || {};
      var element = state.elements[name]; // arrow is optional + virtual elements

      if (!isHTMLElement$1(element) || !getNodeName(element)) {
        return;
      } // Flow doesn't support to extend this property, but it's the most
      // effective way to apply styles to an HTMLElement
      // $FlowFixMe[cannot-write]


      Object.assign(element.style, style);
      Object.keys(attributes).forEach(function (name) {
        var value = attributes[name];

        if (value === false) {
          element.removeAttribute(name);
        } else {
          element.setAttribute(name, value === true ? '' : value);
        }
      });
    });
  }

  function effect$2(_ref2) {
    var state = _ref2.state;
    var initialStyles = {
      popper: {
        position: state.options.strategy,
        left: '0',
        top: '0',
        margin: '0'
      },
      arrow: {
        position: 'absolute'
      },
      reference: {}
    };
    Object.assign(state.elements.popper.style, initialStyles.popper);
    state.styles = initialStyles;

    if (state.elements.arrow) {
      Object.assign(state.elements.arrow.style, initialStyles.arrow);
    }

    return function () {
      Object.keys(state.elements).forEach(function (name) {
        var element = state.elements[name];
        var attributes = state.attributes[name] || {};
        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them

        var style = styleProperties.reduce(function (style, property) {
          style[property] = '';
          return style;
        }, {}); // arrow is optional + virtual elements

        if (!isHTMLElement$1(element) || !getNodeName(element)) {
          return;
        }

        Object.assign(element.style, style);
        Object.keys(attributes).forEach(function (attribute) {
          element.removeAttribute(attribute);
        });
      });
    };
  } // eslint-disable-next-line import/no-unused-modules


  var applyStyles$1 = {
    name: 'applyStyles',
    enabled: true,
    phase: 'write',
    fn: applyStyles,
    effect: effect$2,
    requires: ['computeStyles']
  };

  function getBasePlacement(placement) {
    return placement.split('-')[0];
  }

  var max = Math.max;
  var min = Math.min;
  var round$1 = Math.round;

  function getUAString() {
    var uaData = navigator.userAgentData;

    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
      return uaData.brands.map(function (item) {
        return item.brand + "/" + item.version;
      }).join(' ');
    }

    return navigator.userAgent;
  }

  function isLayoutViewport() {
    return !/^((?!chrome|android).)*safari/i.test(getUAString());
  }

  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
    if (includeScale === void 0) {
      includeScale = false;
    }

    if (isFixedStrategy === void 0) {
      isFixedStrategy = false;
    }

    var clientRect = element.getBoundingClientRect();
    var scaleX = 1;
    var scaleY = 1;

    if (includeScale && isHTMLElement$1(element)) {
      scaleX = element.offsetWidth > 0 ? round$1(clientRect.width) / element.offsetWidth || 1 : 1;
      scaleY = element.offsetHeight > 0 ? round$1(clientRect.height) / element.offsetHeight || 1 : 1;
    }

    var _ref = isElement(element) ? getWindow(element) : window,
        visualViewport = _ref.visualViewport;

    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
    var width = clientRect.width / scaleX;
    var height = clientRect.height / scaleY;
    return {
      width: width,
      height: height,
      top: y,
      right: x + width,
      bottom: y + height,
      left: x,
      x: x,
      y: y
    };
  }

  // means it doesn't take into account transforms.

  function getLayoutRect(element) {
    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
    // Fixes https://github.com/popperjs/popper-core/issues/1223

    var width = element.offsetWidth;
    var height = element.offsetHeight;

    if (Math.abs(clientRect.width - width) <= 1) {
      width = clientRect.width;
    }

    if (Math.abs(clientRect.height - height) <= 1) {
      height = clientRect.height;
    }

    return {
      x: element.offsetLeft,
      y: element.offsetTop,
      width: width,
      height: height
    };
  }

  function contains(parent, child) {
    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method

    if (parent.contains(child)) {
      return true;
    } // then fallback to custom implementation with Shadow DOM support
    else if (rootNode && isShadowRoot(rootNode)) {
        var next = child;

        do {
          if (next && parent.isSameNode(next)) {
            return true;
          } // $FlowFixMe[prop-missing]: need a better way to handle this...


          next = next.parentNode || next.host;
        } while (next);
      } // Give up, the result is false


    return false;
  }

  function getComputedStyle(element) {
    return getWindow(element).getComputedStyle(element);
  }

  function isTableElement(element) {
    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
  }

  function getDocumentElement(element) {
    // $FlowFixMe[incompatible-return]: assume body is always available
    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
    element.document) || window.document).documentElement;
  }

  function getParentNode(element) {
    if (getNodeName(element) === 'html') {
      return element;
    }

    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
      // $FlowFixMe[incompatible-return]
      // $FlowFixMe[prop-missing]
      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
      element.parentNode || ( // DOM Element detected
      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
      getDocumentElement(element) // fallback

    );
  }

  function getTrueOffsetParent(element) {
    if (!isHTMLElement$1(element) || // https://github.com/popperjs/popper-core/issues/837
    getComputedStyle(element).position === 'fixed') {
      return null;
    }

    return element.offsetParent;
  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
  // return the containing block


  function getContainingBlock(element) {
    var isFirefox = /firefox/i.test(getUAString());
    var isIE = /Trident/i.test(getUAString());

    if (isIE && isHTMLElement$1(element)) {
      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
      var elementCss = getComputedStyle(element);

      if (elementCss.position === 'fixed') {
        return null;
      }
    }

    var currentNode = getParentNode(element);

    if (isShadowRoot(currentNode)) {
      currentNode = currentNode.host;
    }

    while (isHTMLElement$1(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
      var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
      // create a containing block.
      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block

      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
        return currentNode;
      } else {
        currentNode = currentNode.parentNode;
      }
    }

    return null;
  } // Gets the closest ancestor positioned element. Handles some edge cases,
  // such as table ancestors and cross browser bugs.


  function getOffsetParent(element) {
    var window = getWindow(element);
    var offsetParent = getTrueOffsetParent(element);

    while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
      offsetParent = getTrueOffsetParent(offsetParent);
    }

    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
      return window;
    }

    return offsetParent || getContainingBlock(element) || window;
  }

  function getMainAxisFromPlacement(placement) {
    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
  }

  function within(min$1, value, max$1) {
    return max(min$1, min(value, max$1));
  }
  function withinMaxClamp(min, value, max) {
    var v = within(min, value, max);
    return v > max ? max : v;
  }

  function getFreshSideObject() {
    return {
      top: 0,
      right: 0,
      bottom: 0,
      left: 0
    };
  }

  function mergePaddingObject(paddingObject) {
    return Object.assign({}, getFreshSideObject(), paddingObject);
  }

  function expandToHashMap(value, keys) {
    return keys.reduce(function (hashMap, key) {
      hashMap[key] = value;
      return hashMap;
    }, {});
  }

  var toPaddingObject = function toPaddingObject(padding, state) {
    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
      placement: state.placement
    })) : padding;
    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
  };

  function arrow(_ref) {
    var _state$modifiersData$;

    var state = _ref.state,
        name = _ref.name,
        options = _ref.options;
    var arrowElement = state.elements.arrow;
    var popperOffsets = state.modifiersData.popperOffsets;
    var basePlacement = getBasePlacement(state.placement);
    var axis = getMainAxisFromPlacement(basePlacement);
    var isVertical = [left, right].indexOf(basePlacement) >= 0;
    var len = isVertical ? 'height' : 'width';

    if (!arrowElement || !popperOffsets) {
      return;
    }

    var paddingObject = toPaddingObject(options.padding, state);
    var arrowRect = getLayoutRect(arrowElement);
    var minProp = axis === 'y' ? top : left;
    var maxProp = axis === 'y' ? bottom : right;
    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
    var arrowOffsetParent = getOffsetParent(arrowElement);
    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
    // outside of the popper bounds

    var min = paddingObject[minProp];
    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
    var offset = within(min, center, max); // Prevents breaking syntax highlighting...

    var axisProp = axis;
    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
  }

  function effect$1(_ref2) {
    var state = _ref2.state,
        options = _ref2.options;
    var _options$element = options.element,
        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;

    if (arrowElement == null) {
      return;
    } // CSS selector


    if (typeof arrowElement === 'string') {
      arrowElement = state.elements.popper.querySelector(arrowElement);

      if (!arrowElement) {
        return;
      }
    }

    if (!contains(state.elements.popper, arrowElement)) {
      return;
    }

    state.elements.arrow = arrowElement;
  } // eslint-disable-next-line import/no-unused-modules


  var arrow$1 = {
    name: 'arrow',
    enabled: true,
    phase: 'main',
    fn: arrow,
    effect: effect$1,
    requires: ['popperOffsets'],
    requiresIfExists: ['preventOverflow']
  };

  function getVariation(placement) {
    return placement.split('-')[1];
  }

  var unsetSides = {
    top: 'auto',
    right: 'auto',
    bottom: 'auto',
    left: 'auto'
  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
  // Zooming can change the DPR, but it seems to report a value that will
  // cleanly divide the values into the appropriate subpixels.

  function roundOffsetsByDPR(_ref, win) {
    var x = _ref.x,
        y = _ref.y;
    var dpr = win.devicePixelRatio || 1;
    return {
      x: round$1(x * dpr) / dpr || 0,
      y: round$1(y * dpr) / dpr || 0
    };
  }

  function mapToStyles(_ref2) {
    var _Object$assign2;

    var popper = _ref2.popper,
        popperRect = _ref2.popperRect,
        placement = _ref2.placement,
        variation = _ref2.variation,
        offsets = _ref2.offsets,
        position = _ref2.position,
        gpuAcceleration = _ref2.gpuAcceleration,
        adaptive = _ref2.adaptive,
        roundOffsets = _ref2.roundOffsets,
        isFixed = _ref2.isFixed;
    var _offsets$x = offsets.x,
        x = _offsets$x === void 0 ? 0 : _offsets$x,
        _offsets$y = offsets.y,
        y = _offsets$y === void 0 ? 0 : _offsets$y;

    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
      x: x,
      y: y
    }) : {
      x: x,
      y: y
    };

    x = _ref3.x;
    y = _ref3.y;
    var hasX = offsets.hasOwnProperty('x');
    var hasY = offsets.hasOwnProperty('y');
    var sideX = left;
    var sideY = top;
    var win = window;

    if (adaptive) {
      var offsetParent = getOffsetParent(popper);
      var heightProp = 'clientHeight';
      var widthProp = 'clientWidth';

      if (offsetParent === getWindow(popper)) {
        offsetParent = getDocumentElement(popper);

        if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
          heightProp = 'scrollHeight';
          widthProp = 'scrollWidth';
        }
      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it


      offsetParent = offsetParent;

      if (placement === top || (placement === left || placement === right) && variation === end) {
        sideY = bottom;
        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
        offsetParent[heightProp];
        y -= offsetY - popperRect.height;
        y *= gpuAcceleration ? 1 : -1;
      }

      if (placement === left || (placement === top || placement === bottom) && variation === end) {
        sideX = right;
        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
        offsetParent[widthProp];
        x -= offsetX - popperRect.width;
        x *= gpuAcceleration ? 1 : -1;
      }
    }

    var commonStyles = Object.assign({
      position: position
    }, adaptive && unsetSides);

    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
      x: x,
      y: y
    }, getWindow(popper)) : {
      x: x,
      y: y
    };

    x = _ref4.x;
    y = _ref4.y;

    if (gpuAcceleration) {
      var _Object$assign;

      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
    }

    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
  }

  function computeStyles(_ref5) {
    var state = _ref5.state,
        options = _ref5.options;
    var _options$gpuAccelerat = options.gpuAcceleration,
        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
        _options$adaptive = options.adaptive,
        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
        _options$roundOffsets = options.roundOffsets,
        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
    var commonStyles = {
      placement: getBasePlacement(state.placement),
      variation: getVariation(state.placement),
      popper: state.elements.popper,
      popperRect: state.rects.popper,
      gpuAcceleration: gpuAcceleration,
      isFixed: state.options.strategy === 'fixed'
    };

    if (state.modifiersData.popperOffsets != null) {
      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
        offsets: state.modifiersData.popperOffsets,
        position: state.options.strategy,
        adaptive: adaptive,
        roundOffsets: roundOffsets
      })));
    }

    if (state.modifiersData.arrow != null) {
      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
        offsets: state.modifiersData.arrow,
        position: 'absolute',
        adaptive: false,
        roundOffsets: roundOffsets
      })));
    }

    state.attributes.popper = Object.assign({}, state.attributes.popper, {
      'data-popper-placement': state.placement
    });
  } // eslint-disable-next-line import/no-unused-modules


  var computeStyles$1 = {
    name: 'computeStyles',
    enabled: true,
    phase: 'beforeWrite',
    fn: computeStyles,
    data: {}
  };

  var passive = {
    passive: true
  };

  function effect(_ref) {
    var state = _ref.state,
        instance = _ref.instance,
        options = _ref.options;
    var _options$scroll = options.scroll,
        scroll = _options$scroll === void 0 ? true : _options$scroll,
        _options$resize = options.resize,
        resize = _options$resize === void 0 ? true : _options$resize;
    var window = getWindow(state.elements.popper);
    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);

    if (scroll) {
      scrollParents.forEach(function (scrollParent) {
        scrollParent.addEventListener('scroll', instance.update, passive);
      });
    }

    if (resize) {
      window.addEventListener('resize', instance.update, passive);
    }

    return function () {
      if (scroll) {
        scrollParents.forEach(function (scrollParent) {
          scrollParent.removeEventListener('scroll', instance.update, passive);
        });
      }

      if (resize) {
        window.removeEventListener('resize', instance.update, passive);
      }
    };
  } // eslint-disable-next-line import/no-unused-modules


  var eventListeners = {
    name: 'eventListeners',
    enabled: true,
    phase: 'write',
    fn: function fn() {},
    effect: effect,
    data: {}
  };

  var hash$1 = {
    left: 'right',
    right: 'left',
    bottom: 'top',
    top: 'bottom'
  };
  function getOppositePlacement(placement) {
    return placement.replace(/left|right|bottom|top/g, function (matched) {
      return hash$1[matched];
    });
  }

  var hash = {
    start: 'end',
    end: 'start'
  };
  function getOppositeVariationPlacement(placement) {
    return placement.replace(/start|end/g, function (matched) {
      return hash[matched];
    });
  }

  function getWindowScroll(node) {
    var win = getWindow(node);
    var scrollLeft = win.pageXOffset;
    var scrollTop = win.pageYOffset;
    return {
      scrollLeft: scrollLeft,
      scrollTop: scrollTop
    };
  }

  function getWindowScrollBarX(element) {
    // If <html> has a CSS width greater than the viewport, then this will be
    // incorrect for RTL.
    // Popper 1 is broken in this case and never had a bug report so let's assume
    // it's not an issue. I don't think anyone ever specifies width on <html>
    // anyway.
    // Browsers where the left scrollbar doesn't cause an issue report `0` for
    // this (e.g. Edge 2019, IE11, Safari)
    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
  }

  function getViewportRect(element, strategy) {
    var win = getWindow(element);
    var html = getDocumentElement(element);
    var visualViewport = win.visualViewport;
    var width = html.clientWidth;
    var height = html.clientHeight;
    var x = 0;
    var y = 0;

    if (visualViewport) {
      width = visualViewport.width;
      height = visualViewport.height;
      var layoutViewport = isLayoutViewport();

      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
        x = visualViewport.offsetLeft;
        y = visualViewport.offsetTop;
      }
    }

    return {
      width: width,
      height: height,
      x: x + getWindowScrollBarX(element),
      y: y
    };
  }

  // of the `<html>` and `<body>` rect bounds if horizontally scrollable

  function getDocumentRect(element) {
    var _element$ownerDocumen;

    var html = getDocumentElement(element);
    var winScroll = getWindowScroll(element);
    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
    var y = -winScroll.scrollTop;

    if (getComputedStyle(body || html).direction === 'rtl') {
      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
    }

    return {
      width: width,
      height: height,
      x: x,
      y: y
    };
  }

  function isScrollParent(element) {
    // Firefox wants us to check `-x` and `-y` variations as well
    var _getComputedStyle = getComputedStyle(element),
        overflow = _getComputedStyle.overflow,
        overflowX = _getComputedStyle.overflowX,
        overflowY = _getComputedStyle.overflowY;

    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
  }

  function getScrollParent(node) {
    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
      // $FlowFixMe[incompatible-return]: assume body is always available
      return node.ownerDocument.body;
    }

    if (isHTMLElement$1(node) && isScrollParent(node)) {
      return node;
    }

    return getScrollParent(getParentNode(node));
  }

  /*
  given a DOM element, return the list of all scroll parents, up the list of ancesors
  until we get to the top window object. This list is what we attach scroll listeners
  to, because if any of these parent elements scroll, we'll need to re-calculate the
  reference element's position.
  */

  function listScrollParents(element, list) {
    var _element$ownerDocumen;

    if (list === void 0) {
      list = [];
    }

    var scrollParent = getScrollParent(element);
    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
    var win = getWindow(scrollParent);
    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
    var updatedList = list.concat(target);
    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
    updatedList.concat(listScrollParents(getParentNode(target)));
  }

  function rectToClientRect(rect) {
    return Object.assign({}, rect, {
      left: rect.x,
      top: rect.y,
      right: rect.x + rect.width,
      bottom: rect.y + rect.height
    });
  }

  function getInnerBoundingClientRect(element, strategy) {
    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
    rect.top = rect.top + element.clientTop;
    rect.left = rect.left + element.clientLeft;
    rect.bottom = rect.top + element.clientHeight;
    rect.right = rect.left + element.clientWidth;
    rect.width = element.clientWidth;
    rect.height = element.clientHeight;
    rect.x = rect.left;
    rect.y = rect.top;
    return rect;
  }

  function getClientRectFromMixedType(element, clippingParent, strategy) {
    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
  } // A "clipping parent" is an overflowable container with the characteristic of
  // clipping (or hiding) overflowing elements with a position different from
  // `initial`


  function getClippingParents(element) {
    var clippingParents = listScrollParents(getParentNode(element));
    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
    var clipperElement = canEscapeClipping && isHTMLElement$1(element) ? getOffsetParent(element) : element;

    if (!isElement(clipperElement)) {
      return [];
    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414


    return clippingParents.filter(function (clippingParent) {
      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
    });
  } // Gets the maximum area that the element is visible in due to any number of
  // clipping parents


  function getClippingRect(element, boundary, rootBoundary, strategy) {
    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
    var firstClippingParent = clippingParents[0];
    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
      accRect.top = max(rect.top, accRect.top);
      accRect.right = min(rect.right, accRect.right);
      accRect.bottom = min(rect.bottom, accRect.bottom);
      accRect.left = max(rect.left, accRect.left);
      return accRect;
    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
    clippingRect.width = clippingRect.right - clippingRect.left;
    clippingRect.height = clippingRect.bottom - clippingRect.top;
    clippingRect.x = clippingRect.left;
    clippingRect.y = clippingRect.top;
    return clippingRect;
  }

  function computeOffsets(_ref) {
    var reference = _ref.reference,
        element = _ref.element,
        placement = _ref.placement;
    var basePlacement = placement ? getBasePlacement(placement) : null;
    var variation = placement ? getVariation(placement) : null;
    var commonX = reference.x + reference.width / 2 - element.width / 2;
    var commonY = reference.y + reference.height / 2 - element.height / 2;
    var offsets;

    switch (basePlacement) {
      case top:
        offsets = {
          x: commonX,
          y: reference.y - element.height
        };
        break;

      case bottom:
        offsets = {
          x: commonX,
          y: reference.y + reference.height
        };
        break;

      case right:
        offsets = {
          x: reference.x + reference.width,
          y: commonY
        };
        break;

      case left:
        offsets = {
          x: reference.x - element.width,
          y: commonY
        };
        break;

      default:
        offsets = {
          x: reference.x,
          y: reference.y
        };
    }

    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;

    if (mainAxis != null) {
      var len = mainAxis === 'y' ? 'height' : 'width';

      switch (variation) {
        case start:
          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
          break;

        case end:
          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
          break;
      }
    }

    return offsets;
  }

  function detectOverflow(state, options) {
    if (options === void 0) {
      options = {};
    }

    var _options = options,
        _options$placement = _options.placement,
        placement = _options$placement === void 0 ? state.placement : _options$placement,
        _options$strategy = _options.strategy,
        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
        _options$boundary = _options.boundary,
        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
        _options$rootBoundary = _options.rootBoundary,
        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
        _options$elementConte = _options.elementContext,
        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
        _options$altBoundary = _options.altBoundary,
        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
        _options$padding = _options.padding,
        padding = _options$padding === void 0 ? 0 : _options$padding;
    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
    var altContext = elementContext === popper ? reference : popper;
    var popperRect = state.rects.popper;
    var element = state.elements[altBoundary ? altContext : elementContext];
    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
    var referenceClientRect = getBoundingClientRect(state.elements.reference);
    var popperOffsets = computeOffsets({
      reference: referenceClientRect,
      element: popperRect,
      strategy: 'absolute',
      placement: placement
    });
    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
    // 0 or negative = within the clipping rect

    var overflowOffsets = {
      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
    };
    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element

    if (elementContext === popper && offsetData) {
      var offset = offsetData[placement];
      Object.keys(overflowOffsets).forEach(function (key) {
        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
        overflowOffsets[key] += offset[axis] * multiply;
      });
    }

    return overflowOffsets;
  }

  function computeAutoPlacement(state, options) {
    if (options === void 0) {
      options = {};
    }

    var _options = options,
        placement = _options.placement,
        boundary = _options.boundary,
        rootBoundary = _options.rootBoundary,
        padding = _options.padding,
        flipVariations = _options.flipVariations,
        _options$allowedAutoP = _options.allowedAutoPlacements,
        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
    var variation = getVariation(placement);
    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
      return getVariation(placement) === variation;
    }) : basePlacements;
    var allowedPlacements = placements$1.filter(function (placement) {
      return allowedAutoPlacements.indexOf(placement) >= 0;
    });

    if (allowedPlacements.length === 0) {
      allowedPlacements = placements$1;
    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...


    var overflows = allowedPlacements.reduce(function (acc, placement) {
      acc[placement] = detectOverflow(state, {
        placement: placement,
        boundary: boundary,
        rootBoundary: rootBoundary,
        padding: padding
      })[getBasePlacement(placement)];
      return acc;
    }, {});
    return Object.keys(overflows).sort(function (a, b) {
      return overflows[a] - overflows[b];
    });
  }

  function getExpandedFallbackPlacements(placement) {
    if (getBasePlacement(placement) === auto) {
      return [];
    }

    var oppositePlacement = getOppositePlacement(placement);
    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
  }

  function flip(_ref) {
    var state = _ref.state,
        options = _ref.options,
        name = _ref.name;

    if (state.modifiersData[name]._skip) {
      return;
    }

    var _options$mainAxis = options.mainAxis,
        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
        _options$altAxis = options.altAxis,
        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
        specifiedFallbackPlacements = options.fallbackPlacements,
        padding = options.padding,
        boundary = options.boundary,
        rootBoundary = options.rootBoundary,
        altBoundary = options.altBoundary,
        _options$flipVariatio = options.flipVariations,
        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
        allowedAutoPlacements = options.allowedAutoPlacements;
    var preferredPlacement = state.options.placement;
    var basePlacement = getBasePlacement(preferredPlacement);
    var isBasePlacement = basePlacement === preferredPlacement;
    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
        placement: placement,
        boundary: boundary,
        rootBoundary: rootBoundary,
        padding: padding,
        flipVariations: flipVariations,
        allowedAutoPlacements: allowedAutoPlacements
      }) : placement);
    }, []);
    var referenceRect = state.rects.reference;
    var popperRect = state.rects.popper;
    var checksMap = new Map();
    var makeFallbackChecks = true;
    var firstFittingPlacement = placements[0];

    for (var i = 0; i < placements.length; i++) {
      var placement = placements[i];

      var _basePlacement = getBasePlacement(placement);

      var isStartVariation = getVariation(placement) === start;
      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
      var len = isVertical ? 'width' : 'height';
      var overflow = detectOverflow(state, {
        placement: placement,
        boundary: boundary,
        rootBoundary: rootBoundary,
        altBoundary: altBoundary,
        padding: padding
      });
      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;

      if (referenceRect[len] > popperRect[len]) {
        mainVariationSide = getOppositePlacement(mainVariationSide);
      }

      var altVariationSide = getOppositePlacement(mainVariationSide);
      var checks = [];

      if (checkMainAxis) {
        checks.push(overflow[_basePlacement] <= 0);
      }

      if (checkAltAxis) {
        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
      }

      if (checks.every(function (check) {
        return check;
      })) {
        firstFittingPlacement = placement;
        makeFallbackChecks = false;
        break;
      }

      checksMap.set(placement, checks);
    }

    if (makeFallbackChecks) {
      // `2` may be desired in some cases – research later
      var numberOfChecks = flipVariations ? 3 : 1;

      var _loop = function _loop(_i) {
        var fittingPlacement = placements.find(function (placement) {
          var checks = checksMap.get(placement);

          if (checks) {
            return checks.slice(0, _i).every(function (check) {
              return check;
            });
          }
        });

        if (fittingPlacement) {
          firstFittingPlacement = fittingPlacement;
          return "break";
        }
      };

      for (var _i = numberOfChecks; _i > 0; _i--) {
        var _ret = _loop(_i);

        if (_ret === "break") break;
      }
    }

    if (state.placement !== firstFittingPlacement) {
      state.modifiersData[name]._skip = true;
      state.placement = firstFittingPlacement;
      state.reset = true;
    }
  } // eslint-disable-next-line import/no-unused-modules


  var flip$1 = {
    name: 'flip',
    enabled: true,
    phase: 'main',
    fn: flip,
    requiresIfExists: ['offset'],
    data: {
      _skip: false
    }
  };

  function getSideOffsets(overflow, rect, preventedOffsets) {
    if (preventedOffsets === void 0) {
      preventedOffsets = {
        x: 0,
        y: 0
      };
    }

    return {
      top: overflow.top - rect.height - preventedOffsets.y,
      right: overflow.right - rect.width + preventedOffsets.x,
      bottom: overflow.bottom - rect.height + preventedOffsets.y,
      left: overflow.left - rect.width - preventedOffsets.x
    };
  }

  function isAnySideFullyClipped(overflow) {
    return [top, right, bottom, left].some(function (side) {
      return overflow[side] >= 0;
    });
  }

  function hide(_ref) {
    var state = _ref.state,
        name = _ref.name;
    var referenceRect = state.rects.reference;
    var popperRect = state.rects.popper;
    var preventedOffsets = state.modifiersData.preventOverflow;
    var referenceOverflow = detectOverflow(state, {
      elementContext: 'reference'
    });
    var popperAltOverflow = detectOverflow(state, {
      altBoundary: true
    });
    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
    state.modifiersData[name] = {
      referenceClippingOffsets: referenceClippingOffsets,
      popperEscapeOffsets: popperEscapeOffsets,
      isReferenceHidden: isReferenceHidden,
      hasPopperEscaped: hasPopperEscaped
    };
    state.attributes.popper = Object.assign({}, state.attributes.popper, {
      'data-popper-reference-hidden': isReferenceHidden,
      'data-popper-escaped': hasPopperEscaped
    });
  } // eslint-disable-next-line import/no-unused-modules


  var hide$1 = {
    name: 'hide',
    enabled: true,
    phase: 'main',
    requiresIfExists: ['preventOverflow'],
    fn: hide
  };

  function distanceAndSkiddingToXY(placement, rects, offset) {
    var basePlacement = getBasePlacement(placement);
    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;

    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
      placement: placement
    })) : offset,
        skidding = _ref[0],
        distance = _ref[1];

    skidding = skidding || 0;
    distance = (distance || 0) * invertDistance;
    return [left, right].indexOf(basePlacement) >= 0 ? {
      x: distance,
      y: skidding
    } : {
      x: skidding,
      y: distance
    };
  }

  function offset(_ref2) {
    var state = _ref2.state,
        options = _ref2.options,
        name = _ref2.name;
    var _options$offset = options.offset,
        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
    var data = placements.reduce(function (acc, placement) {
      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
      return acc;
    }, {});
    var _data$state$placement = data[state.placement],
        x = _data$state$placement.x,
        y = _data$state$placement.y;

    if (state.modifiersData.popperOffsets != null) {
      state.modifiersData.popperOffsets.x += x;
      state.modifiersData.popperOffsets.y += y;
    }

    state.modifiersData[name] = data;
  } // eslint-disable-next-line import/no-unused-modules


  var offset$1 = {
    name: 'offset',
    enabled: true,
    phase: 'main',
    requires: ['popperOffsets'],
    fn: offset
  };

  function popperOffsets(_ref) {
    var state = _ref.state,
        name = _ref.name;
    // Offsets are the actual position the popper needs to have to be
    // properly positioned near its reference element
    // This is the most basic placement, and will be adjusted by
    // the modifiers in the next step
    state.modifiersData[name] = computeOffsets({
      reference: state.rects.reference,
      element: state.rects.popper,
      strategy: 'absolute',
      placement: state.placement
    });
  } // eslint-disable-next-line import/no-unused-modules


  var popperOffsets$1 = {
    name: 'popperOffsets',
    enabled: true,
    phase: 'read',
    fn: popperOffsets,
    data: {}
  };

  function getAltAxis(axis) {
    return axis === 'x' ? 'y' : 'x';
  }

  function preventOverflow(_ref) {
    var state = _ref.state,
        options = _ref.options,
        name = _ref.name;
    var _options$mainAxis = options.mainAxis,
        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
        _options$altAxis = options.altAxis,
        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
        boundary = options.boundary,
        rootBoundary = options.rootBoundary,
        altBoundary = options.altBoundary,
        padding = options.padding,
        _options$tether = options.tether,
        tether = _options$tether === void 0 ? true : _options$tether,
        _options$tetherOffset = options.tetherOffset,
        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
    var overflow = detectOverflow(state, {
      boundary: boundary,
      rootBoundary: rootBoundary,
      padding: padding,
      altBoundary: altBoundary
    });
    var basePlacement = getBasePlacement(state.placement);
    var variation = getVariation(state.placement);
    var isBasePlacement = !variation;
    var mainAxis = getMainAxisFromPlacement(basePlacement);
    var altAxis = getAltAxis(mainAxis);
    var popperOffsets = state.modifiersData.popperOffsets;
    var referenceRect = state.rects.reference;
    var popperRect = state.rects.popper;
    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
      placement: state.placement
    })) : tetherOffset;
    var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
      mainAxis: tetherOffsetValue,
      altAxis: tetherOffsetValue
    } : Object.assign({
      mainAxis: 0,
      altAxis: 0
    }, tetherOffsetValue);
    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
    var data = {
      x: 0,
      y: 0
    };

    if (!popperOffsets) {
      return;
    }

    if (checkMainAxis) {
      var _offsetModifierState$;

      var mainSide = mainAxis === 'y' ? top : left;
      var altSide = mainAxis === 'y' ? bottom : right;
      var len = mainAxis === 'y' ? 'height' : 'width';
      var offset = popperOffsets[mainAxis];
      var min$1 = offset + overflow[mainSide];
      var max$1 = offset - overflow[altSide];
      var additive = tether ? -popperRect[len] / 2 : 0;
      var minLen = variation === start ? referenceRect[len] : popperRect[len];
      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
      // outside the reference bounds

      var arrowElement = state.elements.arrow;
      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
        width: 0,
        height: 0
      };
      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
      var arrowPaddingMin = arrowPaddingObject[mainSide];
      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
      // to include its full size in the calculation. If the reference is small
      // and near the edge of a boundary, the popper can overflow even if the
      // reference is not overflowing as well (e.g. virtual elements with no
      // width or height)

      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
      var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
      var tetherMax = offset + maxOffset - offsetModifierValue;
      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
      popperOffsets[mainAxis] = preventedOffset;
      data[mainAxis] = preventedOffset - offset;
    }

    if (checkAltAxis) {
      var _offsetModifierState$2;

      var _mainSide = mainAxis === 'x' ? top : left;

      var _altSide = mainAxis === 'x' ? bottom : right;

      var _offset = popperOffsets[altAxis];

      var _len = altAxis === 'y' ? 'height' : 'width';

      var _min = _offset + overflow[_mainSide];

      var _max = _offset - overflow[_altSide];

      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;

      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;

      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;

      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;

      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);

      popperOffsets[altAxis] = _preventedOffset;
      data[altAxis] = _preventedOffset - _offset;
    }

    state.modifiersData[name] = data;
  } // eslint-disable-next-line import/no-unused-modules


  var preventOverflow$1 = {
    name: 'preventOverflow',
    enabled: true,
    phase: 'main',
    fn: preventOverflow,
    requiresIfExists: ['offset']
  };

  function getHTMLElementScroll(element) {
    return {
      scrollLeft: element.scrollLeft,
      scrollTop: element.scrollTop
    };
  }

  function getNodeScroll(node) {
    if (node === getWindow(node) || !isHTMLElement$1(node)) {
      return getWindowScroll(node);
    } else {
      return getHTMLElementScroll(node);
    }
  }

  function isElementScaled(element) {
    var rect = element.getBoundingClientRect();
    var scaleX = round$1(rect.width) / element.offsetWidth || 1;
    var scaleY = round$1(rect.height) / element.offsetHeight || 1;
    return scaleX !== 1 || scaleY !== 1;
  } // Returns the composite rect of an element relative to its offsetParent.
  // Composite means it takes into account transforms as well as layout.


  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
    if (isFixed === void 0) {
      isFixed = false;
    }

    var isOffsetParentAnElement = isHTMLElement$1(offsetParent);
    var offsetParentIsScaled = isHTMLElement$1(offsetParent) && isElementScaled(offsetParent);
    var documentElement = getDocumentElement(offsetParent);
    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
    var scroll = {
      scrollLeft: 0,
      scrollTop: 0
    };
    var offsets = {
      x: 0,
      y: 0
    };

    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
      isScrollParent(documentElement)) {
        scroll = getNodeScroll(offsetParent);
      }

      if (isHTMLElement$1(offsetParent)) {
        offsets = getBoundingClientRect(offsetParent, true);
        offsets.x += offsetParent.clientLeft;
        offsets.y += offsetParent.clientTop;
      } else if (documentElement) {
        offsets.x = getWindowScrollBarX(documentElement);
      }
    }

    return {
      x: rect.left + scroll.scrollLeft - offsets.x,
      y: rect.top + scroll.scrollTop - offsets.y,
      width: rect.width,
      height: rect.height
    };
  }

  function order(modifiers) {
    var map = new Map();
    var visited = new Set();
    var result = [];
    modifiers.forEach(function (modifier) {
      map.set(modifier.name, modifier);
    }); // On visiting object, check for its dependencies and visit them recursively

    function sort(modifier) {
      visited.add(modifier.name);
      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
      requires.forEach(function (dep) {
        if (!visited.has(dep)) {
          var depModifier = map.get(dep);

          if (depModifier) {
            sort(depModifier);
          }
        }
      });
      result.push(modifier);
    }

    modifiers.forEach(function (modifier) {
      if (!visited.has(modifier.name)) {
        // check for visited object
        sort(modifier);
      }
    });
    return result;
  }

  function orderModifiers(modifiers) {
    // order based on dependencies
    var orderedModifiers = order(modifiers); // order based on phase

    return modifierPhases.reduce(function (acc, phase) {
      return acc.concat(orderedModifiers.filter(function (modifier) {
        return modifier.phase === phase;
      }));
    }, []);
  }

  function debounce(fn) {
    var pending;
    return function () {
      if (!pending) {
        pending = new Promise(function (resolve) {
          Promise.resolve().then(function () {
            pending = undefined;
            resolve(fn());
          });
        });
      }

      return pending;
    };
  }

  function mergeByName(modifiers) {
    var merged = modifiers.reduce(function (merged, current) {
      var existing = merged[current.name];
      merged[current.name] = existing ? Object.assign({}, existing, current, {
        options: Object.assign({}, existing.options, current.options),
        data: Object.assign({}, existing.data, current.data)
      }) : current;
      return merged;
    }, {}); // IE11 does not support Object.values

    return Object.keys(merged).map(function (key) {
      return merged[key];
    });
  }

  var DEFAULT_OPTIONS = {
    placement: 'bottom',
    modifiers: [],
    strategy: 'absolute'
  };

  function areValidElements() {
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    return !args.some(function (element) {
      return !(element && typeof element.getBoundingClientRect === 'function');
    });
  }

  function popperGenerator(generatorOptions) {
    if (generatorOptions === void 0) {
      generatorOptions = {};
    }

    var _generatorOptions = generatorOptions,
        _generatorOptions$def = _generatorOptions.defaultModifiers,
        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
        _generatorOptions$def2 = _generatorOptions.defaultOptions,
        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
    return function createPopper(reference, popper, options) {
      if (options === void 0) {
        options = defaultOptions;
      }

      var state = {
        placement: 'bottom',
        orderedModifiers: [],
        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
        modifiersData: {},
        elements: {
          reference: reference,
          popper: popper
        },
        attributes: {},
        styles: {}
      };
      var effectCleanupFns = [];
      var isDestroyed = false;
      var instance = {
        state: state,
        setOptions: function setOptions(setOptionsAction) {
          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
          cleanupModifierEffects();
          state.options = Object.assign({}, defaultOptions, state.options, options);
          state.scrollParents = {
            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
            popper: listScrollParents(popper)
          }; // Orders the modifiers based on their dependencies and `phase`
          // properties

          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers

          state.orderedModifiers = orderedModifiers.filter(function (m) {
            return m.enabled;
          });
          runModifierEffects();
          return instance.update();
        },
        // Sync update – it will always be executed, even if not necessary. This
        // is useful for low frequency updates where sync behavior simplifies the
        // logic.
        // For high frequency updates (e.g. `resize` and `scroll` events), always
        // prefer the async Popper#update method
        forceUpdate: function forceUpdate() {
          if (isDestroyed) {
            return;
          }

          var _state$elements = state.elements,
              reference = _state$elements.reference,
              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
          // anymore

          if (!areValidElements(reference, popper)) {
            return;
          } // Store the reference and popper rects to be read by modifiers


          state.rects = {
            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
            popper: getLayoutRect(popper)
          }; // Modifiers have the ability to reset the current update cycle. The
          // most common use case for this is the `flip` modifier changing the
          // placement, which then needs to re-run all the modifiers, because the
          // logic was previously ran for the previous placement and is therefore
          // stale/incorrect

          state.reset = false;
          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
          // is filled with the initial data specified by the modifier. This means
          // it doesn't persist and is fresh on each update.
          // To ensure persistent data, use `${name}#persistent`

          state.orderedModifiers.forEach(function (modifier) {
            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
          });

          for (var index = 0; index < state.orderedModifiers.length; index++) {
            if (state.reset === true) {
              state.reset = false;
              index = -1;
              continue;
            }

            var _state$orderedModifie = state.orderedModifiers[index],
                fn = _state$orderedModifie.fn,
                _state$orderedModifie2 = _state$orderedModifie.options,
                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
                name = _state$orderedModifie.name;

            if (typeof fn === 'function') {
              state = fn({
                state: state,
                options: _options,
                name: name,
                instance: instance
              }) || state;
            }
          }
        },
        // Async and optimistically optimized update – it will not be executed if
        // not necessary (debounced to run at most once-per-tick)
        update: debounce(function () {
          return new Promise(function (resolve) {
            instance.forceUpdate();
            resolve(state);
          });
        }),
        destroy: function destroy() {
          cleanupModifierEffects();
          isDestroyed = true;
        }
      };

      if (!areValidElements(reference, popper)) {
        return instance;
      }

      instance.setOptions(options).then(function (state) {
        if (!isDestroyed && options.onFirstUpdate) {
          options.onFirstUpdate(state);
        }
      }); // Modifiers have the ability to execute arbitrary code before the first
      // update cycle runs. They will be executed in the same order as the update
      // cycle. This is useful when a modifier adds some persistent data that
      // other modifiers need to use, but the modifier is run after the dependent
      // one.

      function runModifierEffects() {
        state.orderedModifiers.forEach(function (_ref) {
          var name = _ref.name,
              _ref$options = _ref.options,
              options = _ref$options === void 0 ? {} : _ref$options,
              effect = _ref.effect;

          if (typeof effect === 'function') {
            var cleanupFn = effect({
              state: state,
              name: name,
              instance: instance,
              options: options
            });

            var noopFn = function noopFn() {};

            effectCleanupFns.push(cleanupFn || noopFn);
          }
        });
      }

      function cleanupModifierEffects() {
        effectCleanupFns.forEach(function (fn) {
          return fn();
        });
        effectCleanupFns = [];
      }

      return instance;
    };
  }

  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
  var createPopper = /*#__PURE__*/popperGenerator({
    defaultModifiers: defaultModifiers
  }); // eslint-disable-next-line import/no-unused-modules

  function getContainer$1(container) {
    return typeof container === 'function' ? container() : container;
  }

  /**
   * Portals provide a first-class way to render children into a DOM node
   * that exists outside the DOM hierarchy of the parent component.
   *
   * Demos:
   *
   * - [Portal](https://mui.com/base-ui/react-portal/)
   *
   * API:
   *
   * - [Portal API](https://mui.com/base-ui/react-portal/components-api/#portal)
   */
  const Portal = /*#__PURE__*/React__namespace.forwardRef(function Portal(props, forwardedRef) {
    const {
      children,
      container,
      disablePortal = false
    } = props;
    const [mountNode, setMountNode] = React__namespace.useState(null);
    // @ts-expect-error TODO upstream fix
    const handleRef = useForkRef( /*#__PURE__*/React__namespace.isValidElement(children) ? children.ref : null, forwardedRef);
    useEnhancedEffect$1(() => {
      if (!disablePortal) {
        setMountNode(getContainer$1(container) || document.body);
      }
    }, [container, disablePortal]);
    useEnhancedEffect$1(() => {
      if (mountNode && !disablePortal) {
        setRef(forwardedRef, mountNode);
        return () => {
          setRef(forwardedRef, null);
        };
      }
      return undefined;
    }, [forwardedRef, mountNode, disablePortal]);
    if (disablePortal) {
      if ( /*#__PURE__*/React__namespace.isValidElement(children)) {
        const newProps = {
          ref: handleRef
        };
        return /*#__PURE__*/React__namespace.cloneElement(children, newProps);
      }
      return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
        children: children
      });
    }
    return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
      children: mountNode ? /*#__PURE__*/ReactDOM__namespace.createPortal(children, mountNode) : mountNode
    });
  });
  Portal.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * The children to render into the `container`.
     */
    children: PropTypes.node,
    /**
     * An HTML element or function that returns one.
     * The `container` will have the portal children appended to it.
     *
     * You can also provide a callback, which is called in a React layout effect.
     * This lets you set the container from a ref, and also makes server-side rendering possible.
     *
     * By default, it uses the body of the top-level document object,
     * so it's simply `document.body` most of the time.
     */
    container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),
    /**
     * The `children` will be under the DOM hierarchy of the parent component.
     * @default false
     */
    disablePortal: PropTypes.bool
  } ;
  {
    // eslint-disable-next-line
    Portal['propTypes' + ''] = exactProp(Portal.propTypes);
  }

  function getPopperUtilityClass(slot) {
    return generateUtilityClass('MuiPopper', slot);
  }
  generateUtilityClasses('MuiPopper', ['root']);

  const _excluded$1T = ["anchorEl", "children", "direction", "disablePortal", "modifiers", "open", "placement", "popperOptions", "popperRef", "slotProps", "slots", "TransitionProps", "ownerState"],
    _excluded2$b = ["anchorEl", "children", "container", "direction", "disablePortal", "keepMounted", "modifiers", "open", "placement", "popperOptions", "popperRef", "style", "transition", "slotProps", "slots"];
  function flipPlacement(placement, direction) {
    if (direction === 'ltr') {
      return placement;
    }
    switch (placement) {
      case 'bottom-end':
        return 'bottom-start';
      case 'bottom-start':
        return 'bottom-end';
      case 'top-end':
        return 'top-start';
      case 'top-start':
        return 'top-end';
      default:
        return placement;
    }
  }
  function resolveAnchorEl$1(anchorEl) {
    return typeof anchorEl === 'function' ? anchorEl() : anchorEl;
  }
  function isHTMLElement(element) {
    return element.nodeType !== undefined;
  }
  function isVirtualElement(element) {
    return !isHTMLElement(element);
  }
  const useUtilityClasses$1B = () => {
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, useClassNamesOverride(getPopperUtilityClass));
  };
  const defaultPopperOptions = {};
  const PopperTooltip = /*#__PURE__*/React__namespace.forwardRef(function PopperTooltip(props, forwardedRef) {
    var _slots$root;
    const {
        anchorEl,
        children,
        direction,
        disablePortal,
        modifiers,
        open,
        placement: initialPlacement,
        popperOptions,
        popperRef: popperRefProp,
        slotProps = {},
        slots = {},
        TransitionProps
        // @ts-ignore internal logic
        // prevent from spreading to DOM, it can come from the parent component e.g. Select.
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1T);
    const tooltipRef = React__namespace.useRef(null);
    const ownRef = useForkRef(tooltipRef, forwardedRef);
    const popperRef = React__namespace.useRef(null);
    const handlePopperRef = useForkRef(popperRef, popperRefProp);
    const handlePopperRefRef = React__namespace.useRef(handlePopperRef);
    useEnhancedEffect$1(() => {
      handlePopperRefRef.current = handlePopperRef;
    }, [handlePopperRef]);
    React__namespace.useImperativeHandle(popperRefProp, () => popperRef.current, []);
    const rtlPlacement = flipPlacement(initialPlacement, direction);
    /**
     * placement initialized from prop but can change during lifetime if modifiers.flip.
     * modifiers.flip is essentially a flip for controlled/uncontrolled behavior
     */
    const [placement, setPlacement] = React__namespace.useState(rtlPlacement);
    const [resolvedAnchorElement, setResolvedAnchorElement] = React__namespace.useState(resolveAnchorEl$1(anchorEl));
    React__namespace.useEffect(() => {
      if (popperRef.current) {
        popperRef.current.forceUpdate();
      }
    });
    React__namespace.useEffect(() => {
      if (anchorEl) {
        setResolvedAnchorElement(resolveAnchorEl$1(anchorEl));
      }
    }, [anchorEl]);
    useEnhancedEffect$1(() => {
      if (!resolvedAnchorElement || !open) {
        return undefined;
      }
      const handlePopperUpdate = data => {
        setPlacement(data.placement);
      };
      {
        if (resolvedAnchorElement && isHTMLElement(resolvedAnchorElement) && resolvedAnchorElement.nodeType === 1) {
          const box = resolvedAnchorElement.getBoundingClientRect();
          if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
            console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
          }
        }
      }
      let popperModifiers = [{
        name: 'preventOverflow',
        options: {
          altBoundary: disablePortal
        }
      }, {
        name: 'flip',
        options: {
          altBoundary: disablePortal
        }
      }, {
        name: 'onUpdate',
        enabled: true,
        phase: 'afterWrite',
        fn: ({
          state
        }) => {
          handlePopperUpdate(state);
        }
      }];
      if (modifiers != null) {
        popperModifiers = popperModifiers.concat(modifiers);
      }
      if (popperOptions && popperOptions.modifiers != null) {
        popperModifiers = popperModifiers.concat(popperOptions.modifiers);
      }
      const popper = createPopper(resolvedAnchorElement, tooltipRef.current, _extends({
        placement: rtlPlacement
      }, popperOptions, {
        modifiers: popperModifiers
      }));
      handlePopperRefRef.current(popper);
      return () => {
        popper.destroy();
        handlePopperRefRef.current(null);
      };
    }, [resolvedAnchorElement, disablePortal, modifiers, open, popperOptions, rtlPlacement]);
    const childProps = {
      placement: placement
    };
    if (TransitionProps !== null) {
      childProps.TransitionProps = TransitionProps;
    }
    const classes = useUtilityClasses$1B();
    const Root = (_slots$root = slots.root) != null ? _slots$root : 'div';
    const rootProps = useSlotProps({
      elementType: Root,
      externalSlotProps: slotProps.root,
      externalForwardedProps: other,
      additionalProps: {
        role: 'tooltip',
        ref: ownRef
      },
      ownerState: props,
      className: classes.root
    });
    return /*#__PURE__*/jsxRuntime_1(Root, _extends({}, rootProps, {
      children: typeof children === 'function' ? children(childProps) : children
    }));
  });

  /**
   * Poppers rely on the 3rd party library [Popper.js](https://popper.js.org/docs/v2/) for positioning.
   *
   * Demos:
   *
   * - [Popper](https://mui.com/base-ui/react-popper/)
   *
   * API:
   *
   * - [Popper API](https://mui.com/base-ui/react-popper/components-api/#popper)
   */
  const Popper$2 = /*#__PURE__*/React__namespace.forwardRef(function Popper(props, forwardedRef) {
    const {
        anchorEl,
        children,
        container: containerProp,
        direction = 'ltr',
        disablePortal = false,
        keepMounted = false,
        modifiers,
        open,
        placement = 'bottom',
        popperOptions = defaultPopperOptions,
        popperRef,
        style,
        transition = false,
        slotProps = {},
        slots = {}
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded2$b);
    const [exited, setExited] = React__namespace.useState(true);
    const handleEnter = () => {
      setExited(false);
    };
    const handleExited = () => {
      setExited(true);
    };
    if (!keepMounted && !open && (!transition || exited)) {
      return null;
    }

    // If the container prop is provided, use that
    // If the anchorEl prop is provided, use its parent body element as the container
    // If neither are provided let the Modal take care of choosing the container
    let container;
    if (containerProp) {
      container = containerProp;
    } else if (anchorEl) {
      const resolvedAnchorEl = resolveAnchorEl$1(anchorEl);
      container = resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) ? ownerDocument(resolvedAnchorEl).body : ownerDocument(null).body;
    }
    const display = !open && keepMounted && (!transition || exited) ? 'none' : undefined;
    const transitionProps = transition ? {
      in: open,
      onEnter: handleEnter,
      onExited: handleExited
    } : undefined;
    return /*#__PURE__*/jsxRuntime_1(Portal, {
      disablePortal: disablePortal,
      container: container,
      children: /*#__PURE__*/jsxRuntime_1(PopperTooltip, _extends({
        anchorEl: anchorEl,
        direction: direction,
        disablePortal: disablePortal,
        modifiers: modifiers,
        ref: forwardedRef,
        open: transition ? !exited : open,
        placement: placement,
        popperOptions: popperOptions,
        popperRef: popperRef,
        slotProps: slotProps,
        slots: slots
      }, other, {
        style: _extends({
          // Prevents scroll issue, waiting for Popper.js to add this style once initiated.
          position: 'fixed',
          // Fix Popper.js display issue
          top: 0,
          left: 0,
          display
        }, style),
        TransitionProps: transitionProps,
        children: children
      }))
    });
  });
  Popper$2.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),
     * or a function that returns either.
     * It's used to set the position of the popper.
     * The return value will passed as the reference object of the Popper instance.
     */
    anchorEl: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.object, PropTypes.func]), props => {
      if (props.open) {
        const resolvedAnchorEl = resolveAnchorEl$1(props.anchorEl);
        if (resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) && resolvedAnchorEl.nodeType === 1) {
          const box = resolvedAnchorEl.getBoundingClientRect();
          if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
            return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
          }
        } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.getBoundingClientRect !== 'function' || isVirtualElement(resolvedAnchorEl) && resolvedAnchorEl.contextElement != null && resolvedAnchorEl.contextElement.nodeType !== 1) {
          return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'It should be an HTML element instance or a virtualElement ', '(https://popper.js.org/docs/v2/virtual-elements/).'].join('\n'));
        }
      }
      return null;
    }),
    /**
     * Popper render function or node.
     */
    children: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.node, PropTypes.func]),
    /**
     * An HTML element or function that returns one.
     * The `container` will have the portal children appended to it.
     *
     * You can also provide a callback, which is called in a React layout effect.
     * This lets you set the container from a ref, and also makes server-side rendering possible.
     *
     * By default, it uses the body of the top-level document object,
     * so it's simply `document.body` most of the time.
     */
    container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),
    /**
     * Direction of the text.
     * @default 'ltr'
     */
    direction: PropTypes.oneOf(['ltr', 'rtl']),
    /**
     * The `children` will be under the DOM hierarchy of the parent component.
     * @default false
     */
    disablePortal: PropTypes.bool,
    /**
     * Always keep the children in the DOM.
     * This prop can be useful in SEO situation or
     * when you want to maximize the responsiveness of the Popper.
     * @default false
     */
    keepMounted: PropTypes.bool,
    /**
     * Popper.js is based on a "plugin-like" architecture,
     * most of its features are fully encapsulated "modifiers".
     *
     * A modifier is a function that is called each time Popper.js needs to
     * compute the position of the popper.
     * For this reason, modifiers should be very performant to avoid bottlenecks.
     * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).
     */
    modifiers: PropTypes.arrayOf(PropTypes.shape({
      data: PropTypes.object,
      effect: PropTypes.func,
      enabled: PropTypes.bool,
      fn: PropTypes.func,
      name: PropTypes.any,
      options: PropTypes.object,
      phase: PropTypes.oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),
      requires: PropTypes.arrayOf(PropTypes.string),
      requiresIfExists: PropTypes.arrayOf(PropTypes.string)
    })),
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * Popper placement.
     * @default 'bottom'
     */
    placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
    /**
     * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.
     * @default {}
     */
    popperOptions: PropTypes.shape({
      modifiers: PropTypes.array,
      onFirstUpdate: PropTypes.func,
      placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
      strategy: PropTypes.oneOf(['absolute', 'fixed'])
    }),
    /**
     * A ref that points to the used popper instance.
     */
    popperRef: refType$1,
    /**
     * The props used for each slot inside the Popper.
     * @default {}
     */
    slotProps: PropTypes.shape({
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside the Popper.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      root: PropTypes.elementType
    }),
    /**
     * Help supporting a react-transition-group/Transition component.
     * @default false
     */
    transition: PropTypes.bool
  } ;

  // Is a vertical scrollbar displayed?
  function isOverflowing(container) {
    const doc = ownerDocument(container);
    if (doc.body === container) {
      return ownerWindow(container).innerWidth > doc.documentElement.clientWidth;
    }
    return container.scrollHeight > container.clientHeight;
  }
  function ariaHidden(element, show) {
    if (show) {
      element.setAttribute('aria-hidden', 'true');
    } else {
      element.removeAttribute('aria-hidden');
    }
  }
  function getPaddingRight(element) {
    return parseInt(ownerWindow(element).getComputedStyle(element).paddingRight, 10) || 0;
  }
  function isAriaHiddenForbiddenOnElement(element) {
    // The forbidden HTML tags are the ones from ARIA specification that
    // can be children of body and can't have aria-hidden attribute.
    // cf. https://www.w3.org/TR/html-aria/#docconformance
    const forbiddenTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE', 'LINK', 'MAP', 'META', 'NOSCRIPT', 'PICTURE', 'COL', 'COLGROUP', 'PARAM', 'SLOT', 'SOURCE', 'TRACK'];
    const isForbiddenTagName = forbiddenTagNames.indexOf(element.tagName) !== -1;
    const isInputHidden = element.tagName === 'INPUT' && element.getAttribute('type') === 'hidden';
    return isForbiddenTagName || isInputHidden;
  }
  function ariaHiddenSiblings(container, mountElement, currentElement, elementsToExclude, show) {
    const blacklist = [mountElement, currentElement, ...elementsToExclude];
    [].forEach.call(container.children, element => {
      const isNotExcludedElement = blacklist.indexOf(element) === -1;
      const isNotForbiddenElement = !isAriaHiddenForbiddenOnElement(element);
      if (isNotExcludedElement && isNotForbiddenElement) {
        ariaHidden(element, show);
      }
    });
  }
  function findIndexOf(items, callback) {
    let idx = -1;
    items.some((item, index) => {
      if (callback(item)) {
        idx = index;
        return true;
      }
      return false;
    });
    return idx;
  }
  function handleContainer(containerInfo, props) {
    const restoreStyle = [];
    const container = containerInfo.container;
    if (!props.disableScrollLock) {
      if (isOverflowing(container)) {
        // Compute the size before applying overflow hidden to avoid any scroll jumps.
        const scrollbarSize = getScrollbarSize(ownerDocument(container));
        restoreStyle.push({
          value: container.style.paddingRight,
          property: 'padding-right',
          el: container
        });
        // Use computed style, here to get the real padding to add our scrollbar width.
        container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`;

        // .mui-fixed is a global helper.
        const fixedElements = ownerDocument(container).querySelectorAll('.mui-fixed');
        [].forEach.call(fixedElements, element => {
          restoreStyle.push({
            value: element.style.paddingRight,
            property: 'padding-right',
            el: element
          });
          element.style.paddingRight = `${getPaddingRight(element) + scrollbarSize}px`;
        });
      }
      let scrollContainer;
      if (container.parentNode instanceof DocumentFragment) {
        scrollContainer = ownerDocument(container).body;
      } else {
        // Support html overflow-y: auto for scroll stability between pages
        // https://css-tricks.com/snippets/css/force-vertical-scrollbar/
        const parent = container.parentElement;
        const containerWindow = ownerWindow(container);
        scrollContainer = (parent == null ? void 0 : parent.nodeName) === 'HTML' && containerWindow.getComputedStyle(parent).overflowY === 'scroll' ? parent : container;
      }

      // Block the scroll even if no scrollbar is visible to account for mobile keyboard
      // screensize shrink.
      restoreStyle.push({
        value: scrollContainer.style.overflow,
        property: 'overflow',
        el: scrollContainer
      }, {
        value: scrollContainer.style.overflowX,
        property: 'overflow-x',
        el: scrollContainer
      }, {
        value: scrollContainer.style.overflowY,
        property: 'overflow-y',
        el: scrollContainer
      });
      scrollContainer.style.overflow = 'hidden';
    }
    const restore = () => {
      restoreStyle.forEach(({
        value,
        el,
        property
      }) => {
        if (value) {
          el.style.setProperty(property, value);
        } else {
          el.style.removeProperty(property);
        }
      });
    };
    return restore;
  }
  function getHiddenSiblings(container) {
    const hiddenSiblings = [];
    [].forEach.call(container.children, element => {
      if (element.getAttribute('aria-hidden') === 'true') {
        hiddenSiblings.push(element);
      }
    });
    return hiddenSiblings;
  }
  /**
   * @ignore - do not document.
   *
   * Proper state management for containers and the modals in those containers.
   * Simplified, but inspired by react-overlay's ModalManager class.
   * Used by the Modal to ensure proper styling of containers.
   */
  class ModalManager {
    constructor() {
      this.containers = void 0;
      this.modals = void 0;
      this.modals = [];
      this.containers = [];
    }
    add(modal, container) {
      let modalIndex = this.modals.indexOf(modal);
      if (modalIndex !== -1) {
        return modalIndex;
      }
      modalIndex = this.modals.length;
      this.modals.push(modal);

      // If the modal we are adding is already in the DOM.
      if (modal.modalRef) {
        ariaHidden(modal.modalRef, false);
      }
      const hiddenSiblings = getHiddenSiblings(container);
      ariaHiddenSiblings(container, modal.mount, modal.modalRef, hiddenSiblings, true);
      const containerIndex = findIndexOf(this.containers, item => item.container === container);
      if (containerIndex !== -1) {
        this.containers[containerIndex].modals.push(modal);
        return modalIndex;
      }
      this.containers.push({
        modals: [modal],
        container,
        restore: null,
        hiddenSiblings
      });
      return modalIndex;
    }
    mount(modal, props) {
      const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);
      const containerInfo = this.containers[containerIndex];
      if (!containerInfo.restore) {
        containerInfo.restore = handleContainer(containerInfo, props);
      }
    }
    remove(modal, ariaHiddenState = true) {
      const modalIndex = this.modals.indexOf(modal);
      if (modalIndex === -1) {
        return modalIndex;
      }
      const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);
      const containerInfo = this.containers[containerIndex];
      containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);
      this.modals.splice(modalIndex, 1);

      // If that was the last modal in a container, clean up the container.
      if (containerInfo.modals.length === 0) {
        // The modal might be closed before it had the chance to be mounted in the DOM.
        if (containerInfo.restore) {
          containerInfo.restore();
        }
        if (modal.modalRef) {
          // In case the modal wasn't in the DOM yet.
          ariaHidden(modal.modalRef, ariaHiddenState);
        }
        ariaHiddenSiblings(containerInfo.container, modal.mount, modal.modalRef, containerInfo.hiddenSiblings, false);
        this.containers.splice(containerIndex, 1);
      } else {
        // Otherwise make sure the next top modal is visible to a screen reader.
        const nextTop = containerInfo.modals[containerInfo.modals.length - 1];
        // as soon as a modal is adding its modalRef is undefined. it can't set
        // aria-hidden because the dom element doesn't exist either
        // when modal was unmounted before modalRef gets null
        if (nextTop.modalRef) {
          ariaHidden(nextTop.modalRef, false);
        }
      }
      return modalIndex;
    }
    isTopModal(modal) {
      return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;
    }
  }

  function getContainer(container) {
    return typeof container === 'function' ? container() : container;
  }
  function getHasTransition(children) {
    return children ? children.props.hasOwnProperty('in') : false;
  }

  // A modal manager used to track and manage the state of open Modals.
  // Modals don't open on the server so this won't conflict with concurrent requests.
  const defaultManager = new ModalManager();
  /**
   *
   * Demos:
   *
   * - [Modal](https://mui.com/base-ui/react-modal/#hook)
   *
   * API:
   *
   * - [useModal API](https://mui.com/base-ui/react-modal/hooks-api/#use-modal)
   */
  function useModal(parameters) {
    const {
      container,
      disableEscapeKeyDown = false,
      disableScrollLock = false,
      // @ts-ignore internal logic - Base UI supports the manager as a prop too
      manager = defaultManager,
      closeAfterTransition = false,
      onTransitionEnter,
      onTransitionExited,
      children,
      onClose,
      open,
      rootRef
    } = parameters;

    // @ts-ignore internal logic
    const modal = React__namespace.useRef({});
    const mountNodeRef = React__namespace.useRef(null);
    const modalRef = React__namespace.useRef(null);
    const handleRef = useForkRef(modalRef, rootRef);
    const [exited, setExited] = React__namespace.useState(!open);
    const hasTransition = getHasTransition(children);
    let ariaHiddenProp = true;
    if (parameters['aria-hidden'] === 'false' || parameters['aria-hidden'] === false) {
      ariaHiddenProp = false;
    }
    const getDoc = () => ownerDocument(mountNodeRef.current);
    const getModal = () => {
      modal.current.modalRef = modalRef.current;
      modal.current.mount = mountNodeRef.current;
      return modal.current;
    };
    const handleMounted = () => {
      manager.mount(getModal(), {
        disableScrollLock
      });

      // Fix a bug on Chrome where the scroll isn't initially 0.
      if (modalRef.current) {
        modalRef.current.scrollTop = 0;
      }
    };
    const handleOpen = useEventCallback(() => {
      const resolvedContainer = getContainer(container) || getDoc().body;
      manager.add(getModal(), resolvedContainer);

      // The element was already mounted.
      if (modalRef.current) {
        handleMounted();
      }
    });
    const isTopModal = React__namespace.useCallback(() => manager.isTopModal(getModal()), [manager]);
    const handlePortalRef = useEventCallback(node => {
      mountNodeRef.current = node;
      if (!node) {
        return;
      }
      if (open && isTopModal()) {
        handleMounted();
      } else if (modalRef.current) {
        ariaHidden(modalRef.current, ariaHiddenProp);
      }
    });
    const handleClose = React__namespace.useCallback(() => {
      manager.remove(getModal(), ariaHiddenProp);
    }, [ariaHiddenProp, manager]);
    React__namespace.useEffect(() => {
      return () => {
        handleClose();
      };
    }, [handleClose]);
    React__namespace.useEffect(() => {
      if (open) {
        handleOpen();
      } else if (!hasTransition || !closeAfterTransition) {
        handleClose();
      }
    }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);
    const createHandleKeyDown = otherHandlers => event => {
      var _otherHandlers$onKeyD;
      (_otherHandlers$onKeyD = otherHandlers.onKeyDown) == null || _otherHandlers$onKeyD.call(otherHandlers, event);

      // The handler doesn't take event.defaultPrevented into account:
      //
      // event.preventDefault() is meant to stop default behaviors like
      // clicking a checkbox to check it, hitting a button to submit a form,
      // and hitting left arrow to move the cursor in a text input etc.
      // Only special HTML elements have these default behaviors.
      if (event.key !== 'Escape' || event.which === 229 ||
      // Wait until IME is settled.
      !isTopModal()) {
        return;
      }
      if (!disableEscapeKeyDown) {
        // Swallow the event, in case someone is listening for the escape key on the body.
        event.stopPropagation();
        if (onClose) {
          onClose(event, 'escapeKeyDown');
        }
      }
    };
    const createHandleBackdropClick = otherHandlers => event => {
      var _otherHandlers$onClic;
      (_otherHandlers$onClic = otherHandlers.onClick) == null || _otherHandlers$onClic.call(otherHandlers, event);
      if (event.target !== event.currentTarget) {
        return;
      }
      if (onClose) {
        onClose(event, 'backdropClick');
      }
    };
    const getRootProps = (otherHandlers = {}) => {
      const propsEventHandlers = extractEventHandlers(parameters);

      // The custom event handlers shouldn't be spread on the root element
      delete propsEventHandlers.onTransitionEnter;
      delete propsEventHandlers.onTransitionExited;
      const externalEventHandlers = _extends({}, propsEventHandlers, otherHandlers);
      return _extends({
        role: 'presentation'
      }, externalEventHandlers, {
        onKeyDown: createHandleKeyDown(externalEventHandlers),
        ref: handleRef
      });
    };
    const getBackdropProps = (otherHandlers = {}) => {
      const externalEventHandlers = otherHandlers;
      return _extends({
        'aria-hidden': true
      }, externalEventHandlers, {
        onClick: createHandleBackdropClick(externalEventHandlers),
        open
      });
    };
    const getTransitionProps = () => {
      const handleEnter = () => {
        setExited(false);
        if (onTransitionEnter) {
          onTransitionEnter();
        }
      };
      const handleExited = () => {
        setExited(true);
        if (onTransitionExited) {
          onTransitionExited();
        }
        if (closeAfterTransition) {
          handleClose();
        }
      };
      return {
        onEnter: createChainedFunction(handleEnter, children == null ? void 0 : children.props.onEnter),
        onExited: createChainedFunction(handleExited, children == null ? void 0 : children.props.onExited)
      };
    };
    return {
      getRootProps,
      getBackdropProps,
      getTransitionProps,
      rootRef: handleRef,
      portalRef: handlePortalRef,
      isTopModal,
      exited,
      hasTransition
    };
  }

  /**
   * NoSsr purposely removes components from the subject of Server Side Rendering (SSR).
   *
   * This component can be useful in a variety of situations:
   *
   * *   Escape hatch for broken dependencies not supporting SSR.
   * *   Improve the time-to-first paint on the client by only rendering above the fold.
   * *   Reduce the rendering time on the server.
   * *   Under too heavy server load, you can turn on service degradation.
   *
   * Demos:
   *
   * - [No SSR](https://mui.com/base-ui/react-no-ssr/)
   *
   * API:
   *
   * - [NoSsr API](https://mui.com/base-ui/react-no-ssr/components-api/#no-ssr)
   */
  function NoSsr(props) {
    const {
      children,
      defer = false,
      fallback = null
    } = props;
    const [mountedState, setMountedState] = React__namespace.useState(false);
    useEnhancedEffect$1(() => {
      if (!defer) {
        setMountedState(true);
      }
    }, [defer]);
    React__namespace.useEffect(() => {
      if (defer) {
        setMountedState(true);
      }
    }, [defer]);

    // We need the Fragment here to force react-docgen to recognise NoSsr as a component.
    return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
      children: mountedState ? children : fallback
    });
  }
  NoSsr.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * You can wrap a node.
     */
    children: PropTypes.node,
    /**
     * If `true`, the component will not only prevent server-side rendering.
     * It will also defer the rendering of the children into a different screen frame.
     * @default false
     */
    defer: PropTypes.bool,
    /**
     * The fallback content to display.
     * @default null
     */
    fallback: PropTypes.node
  } ;
  {
    // eslint-disable-next-line
    NoSsr['propTypes' + ''] = exactProp(NoSsr.propTypes);
  }

  const INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;
  function asc(a, b) {
    return a - b;
  }
  function clamp$2(value, min, max) {
    if (value == null) {
      return min;
    }
    return Math.min(Math.max(min, value), max);
  }
  function findClosest(values, currentValue) {
    var _values$reduce;
    const {
      index: closestIndex
    } = (_values$reduce = values.reduce((acc, value, index) => {
      const distance = Math.abs(currentValue - value);
      if (acc === null || distance < acc.distance || distance === acc.distance) {
        return {
          distance,
          index
        };
      }
      return acc;
    }, null)) != null ? _values$reduce : {};
    return closestIndex;
  }
  function trackFinger(event, touchId) {
    // The event is TouchEvent
    if (touchId.current !== undefined && event.changedTouches) {
      const touchEvent = event;
      for (let i = 0; i < touchEvent.changedTouches.length; i += 1) {
        const touch = touchEvent.changedTouches[i];
        if (touch.identifier === touchId.current) {
          return {
            x: touch.clientX,
            y: touch.clientY
          };
        }
      }
      return false;
    }

    // The event is MouseEvent
    return {
      x: event.clientX,
      y: event.clientY
    };
  }
  function valueToPercent(value, min, max) {
    return (value - min) * 100 / (max - min);
  }
  function percentToValue(percent, min, max) {
    return (max - min) * percent + min;
  }
  function getDecimalPrecision$1(num) {
    // This handles the case when num is very small (0.00000001), js will turn this into 1e-8.
    // When num is bigger than 1 or less than -1 it won't get converted to this notation so it's fine.
    if (Math.abs(num) < 1) {
      const parts = num.toExponential().split('e-');
      const matissaDecimalPart = parts[0].split('.')[1];
      return (matissaDecimalPart ? matissaDecimalPart.length : 0) + parseInt(parts[1], 10);
    }
    const decimalPart = num.toString().split('.')[1];
    return decimalPart ? decimalPart.length : 0;
  }
  function roundValueToStep(value, step, min) {
    const nearest = Math.round((value - min) / step) * step + min;
    return Number(nearest.toFixed(getDecimalPrecision$1(step)));
  }
  function setValueIndex({
    values,
    newValue,
    index
  }) {
    const output = values.slice();
    output[index] = newValue;
    return output.sort(asc);
  }
  function focusThumb({
    sliderRef,
    activeIndex,
    setActive
  }) {
    var _sliderRef$current, _doc$activeElement;
    const doc = ownerDocument(sliderRef.current);
    if (!((_sliderRef$current = sliderRef.current) != null && _sliderRef$current.contains(doc.activeElement)) || Number(doc == null || (_doc$activeElement = doc.activeElement) == null ? void 0 : _doc$activeElement.getAttribute('data-index')) !== activeIndex) {
      var _sliderRef$current2;
      (_sliderRef$current2 = sliderRef.current) == null || _sliderRef$current2.querySelector(`[type="range"][data-index="${activeIndex}"]`).focus();
    }
    if (setActive) {
      setActive(activeIndex);
    }
  }
  function areValuesEqual(newValue, oldValue) {
    if (typeof newValue === 'number' && typeof oldValue === 'number') {
      return newValue === oldValue;
    }
    if (typeof newValue === 'object' && typeof oldValue === 'object') {
      return areArraysEqual(newValue, oldValue);
    }
    return false;
  }
  const axisProps = {
    horizontal: {
      offset: percent => ({
        left: `${percent}%`
      }),
      leap: percent => ({
        width: `${percent}%`
      })
    },
    'horizontal-reverse': {
      offset: percent => ({
        right: `${percent}%`
      }),
      leap: percent => ({
        width: `${percent}%`
      })
    },
    vertical: {
      offset: percent => ({
        bottom: `${percent}%`
      }),
      leap: percent => ({
        height: `${percent}%`
      })
    }
  };
  const Identity$1 = x => x;

  // TODO: remove support for Safari < 13.
  // https://caniuse.com/#search=touch-action
  //
  // Safari, on iOS, supports touch action since v13.
  // Over 80% of the iOS phones are compatible
  // in August 2020.
  // Utilizing the CSS.supports method to check if touch-action is supported.
  // Since CSS.supports is supported on all but Edge@12 and IE and touch-action
  // is supported on both Edge@12 and IE if CSS.supports is not available that means that
  // touch-action will be supported
  let cachedSupportsTouchActionNone;
  function doesSupportTouchActionNone() {
    if (cachedSupportsTouchActionNone === undefined) {
      if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {
        cachedSupportsTouchActionNone = CSS.supports('touch-action', 'none');
      } else {
        cachedSupportsTouchActionNone = true;
      }
    }
    return cachedSupportsTouchActionNone;
  }
  /**
   *
   * Demos:
   *
   * - [Slider](https://mui.com/base-ui/react-slider/#hook)
   *
   * API:
   *
   * - [useSlider API](https://mui.com/base-ui/react-slider/hooks-api/#use-slider)
   */
  function useSlider(parameters) {
    const {
      'aria-labelledby': ariaLabelledby,
      defaultValue,
      disabled = false,
      disableSwap = false,
      isRtl = false,
      marks: marksProp = false,
      max = 100,
      min = 0,
      name,
      onChange,
      onChangeCommitted,
      orientation = 'horizontal',
      rootRef: ref,
      scale = Identity$1,
      step = 1,
      tabIndex,
      value: valueProp
    } = parameters;
    const touchId = React__namespace.useRef();
    // We can't use the :active browser pseudo-classes.
    // - The active state isn't triggered when clicking on the rail.
    // - The active state isn't transferred when inversing a range slider.
    const [active, setActive] = React__namespace.useState(-1);
    const [open, setOpen] = React__namespace.useState(-1);
    const [dragging, setDragging] = React__namespace.useState(false);
    const moveCount = React__namespace.useRef(0);
    const [valueDerived, setValueState] = useControlled({
      controlled: valueProp,
      default: defaultValue != null ? defaultValue : min,
      name: 'Slider'
    });
    const handleChange = onChange && ((event, value, thumbIndex) => {
      // Redefine target to allow name and value to be read.
      // This allows seamless integration with the most popular form libraries.
      // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492
      // Clone the event to not override `target` of the original event.
      const nativeEvent = event.nativeEvent || event;
      // @ts-ignore The nativeEvent is function, not object
      const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);
      Object.defineProperty(clonedEvent, 'target', {
        writable: true,
        value: {
          value,
          name
        }
      });
      onChange(clonedEvent, value, thumbIndex);
    });
    const range = Array.isArray(valueDerived);
    let values = range ? valueDerived.slice().sort(asc) : [valueDerived];
    values = values.map(value => clamp$2(value, min, max));
    const marks = marksProp === true && step !== null ? [...Array(Math.floor((max - min) / step) + 1)].map((_, index) => ({
      value: min + step * index
    })) : marksProp || [];
    const marksValues = marks.map(mark => mark.value);
    const {
      isFocusVisibleRef,
      onBlur: handleBlurVisible,
      onFocus: handleFocusVisible,
      ref: focusVisibleRef
    } = useIsFocusVisible();
    const [focusedThumbIndex, setFocusedThumbIndex] = React__namespace.useState(-1);
    const sliderRef = React__namespace.useRef();
    const handleFocusRef = useForkRef(focusVisibleRef, sliderRef);
    const handleRef = useForkRef(ref, handleFocusRef);
    const createHandleHiddenInputFocus = otherHandlers => event => {
      var _otherHandlers$onFocu;
      const index = Number(event.currentTarget.getAttribute('data-index'));
      handleFocusVisible(event);
      if (isFocusVisibleRef.current === true) {
        setFocusedThumbIndex(index);
      }
      setOpen(index);
      otherHandlers == null || (_otherHandlers$onFocu = otherHandlers.onFocus) == null || _otherHandlers$onFocu.call(otherHandlers, event);
    };
    const createHandleHiddenInputBlur = otherHandlers => event => {
      var _otherHandlers$onBlur;
      handleBlurVisible(event);
      if (isFocusVisibleRef.current === false) {
        setFocusedThumbIndex(-1);
      }
      setOpen(-1);
      otherHandlers == null || (_otherHandlers$onBlur = otherHandlers.onBlur) == null || _otherHandlers$onBlur.call(otherHandlers, event);
    };
    useEnhancedEffect$1(() => {
      if (disabled && sliderRef.current.contains(document.activeElement)) {
        var _document$activeEleme;
        // This is necessary because Firefox and Safari will keep focus
        // on a disabled element:
        // https://codesandbox.io/p/sandbox/mui-pr-22247-forked-h151h?file=/src/App.js
        // @ts-ignore
        (_document$activeEleme = document.activeElement) == null || _document$activeEleme.blur();
      }
    }, [disabled]);
    if (disabled && active !== -1) {
      setActive(-1);
    }
    if (disabled && focusedThumbIndex !== -1) {
      setFocusedThumbIndex(-1);
    }
    const createHandleHiddenInputChange = otherHandlers => event => {
      var _otherHandlers$onChan;
      (_otherHandlers$onChan = otherHandlers.onChange) == null || _otherHandlers$onChan.call(otherHandlers, event);
      const index = Number(event.currentTarget.getAttribute('data-index'));
      const value = values[index];
      const marksIndex = marksValues.indexOf(value);

      // @ts-ignore
      let newValue = event.target.valueAsNumber;
      if (marks && step == null) {
        const maxMarksValue = marksValues[marksValues.length - 1];
        if (newValue > maxMarksValue) {
          newValue = maxMarksValue;
        } else if (newValue < marksValues[0]) {
          newValue = marksValues[0];
        } else {
          newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];
        }
      }
      newValue = clamp$2(newValue, min, max);
      if (range) {
        // Bound the new value to the thumb's neighbours.
        if (disableSwap) {
          newValue = clamp$2(newValue, values[index - 1] || -Infinity, values[index + 1] || Infinity);
        }
        const previousValue = newValue;
        newValue = setValueIndex({
          values,
          newValue,
          index
        });
        let activeIndex = index;

        // Potentially swap the index if needed.
        if (!disableSwap) {
          activeIndex = newValue.indexOf(previousValue);
        }
        focusThumb({
          sliderRef,
          activeIndex
        });
      }
      setValueState(newValue);
      setFocusedThumbIndex(index);
      if (handleChange && !areValuesEqual(newValue, valueDerived)) {
        handleChange(event, newValue, index);
      }
      if (onChangeCommitted) {
        onChangeCommitted(event, newValue);
      }
    };
    const previousIndex = React__namespace.useRef();
    let axis = orientation;
    if (isRtl && orientation === 'horizontal') {
      axis += '-reverse';
    }
    const getFingerNewValue = ({
      finger,
      move = false
    }) => {
      const {
        current: slider
      } = sliderRef;
      const {
        width,
        height,
        bottom,
        left
      } = slider.getBoundingClientRect();
      let percent;
      if (axis.indexOf('vertical') === 0) {
        percent = (bottom - finger.y) / height;
      } else {
        percent = (finger.x - left) / width;
      }
      if (axis.indexOf('-reverse') !== -1) {
        percent = 1 - percent;
      }
      let newValue;
      newValue = percentToValue(percent, min, max);
      if (step) {
        newValue = roundValueToStep(newValue, step, min);
      } else {
        const closestIndex = findClosest(marksValues, newValue);
        newValue = marksValues[closestIndex];
      }
      newValue = clamp$2(newValue, min, max);
      let activeIndex = 0;
      if (range) {
        if (!move) {
          activeIndex = findClosest(values, newValue);
        } else {
          activeIndex = previousIndex.current;
        }

        // Bound the new value to the thumb's neighbours.
        if (disableSwap) {
          newValue = clamp$2(newValue, values[activeIndex - 1] || -Infinity, values[activeIndex + 1] || Infinity);
        }
        const previousValue = newValue;
        newValue = setValueIndex({
          values,
          newValue,
          index: activeIndex
        });

        // Potentially swap the index if needed.
        if (!(disableSwap && move)) {
          activeIndex = newValue.indexOf(previousValue);
          previousIndex.current = activeIndex;
        }
      }
      return {
        newValue,
        activeIndex
      };
    };
    const handleTouchMove = useEventCallback(nativeEvent => {
      const finger = trackFinger(nativeEvent, touchId);
      if (!finger) {
        return;
      }
      moveCount.current += 1;

      // Cancel move in case some other element consumed a mouseup event and it was not fired.
      // @ts-ignore buttons doesn't not exists on touch event
      if (nativeEvent.type === 'mousemove' && nativeEvent.buttons === 0) {
        // eslint-disable-next-line @typescript-eslint/no-use-before-define
        handleTouchEnd(nativeEvent);
        return;
      }
      const {
        newValue,
        activeIndex
      } = getFingerNewValue({
        finger,
        move: true
      });
      focusThumb({
        sliderRef,
        activeIndex,
        setActive
      });
      setValueState(newValue);
      if (!dragging && moveCount.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {
        setDragging(true);
      }
      if (handleChange && !areValuesEqual(newValue, valueDerived)) {
        handleChange(nativeEvent, newValue, activeIndex);
      }
    });
    const handleTouchEnd = useEventCallback(nativeEvent => {
      const finger = trackFinger(nativeEvent, touchId);
      setDragging(false);
      if (!finger) {
        return;
      }
      const {
        newValue
      } = getFingerNewValue({
        finger,
        move: true
      });
      setActive(-1);
      if (nativeEvent.type === 'touchend') {
        setOpen(-1);
      }
      if (onChangeCommitted) {
        onChangeCommitted(nativeEvent, newValue);
      }
      touchId.current = undefined;

      // eslint-disable-next-line @typescript-eslint/no-use-before-define
      stopListening();
    });
    const handleTouchStart = useEventCallback(nativeEvent => {
      if (disabled) {
        return;
      }
      // If touch-action: none; is not supported we need to prevent the scroll manually.
      if (!doesSupportTouchActionNone()) {
        nativeEvent.preventDefault();
      }
      const touch = nativeEvent.changedTouches[0];
      if (touch != null) {
        // A number that uniquely identifies the current finger in the touch session.
        touchId.current = touch.identifier;
      }
      const finger = trackFinger(nativeEvent, touchId);
      if (finger !== false) {
        const {
          newValue,
          activeIndex
        } = getFingerNewValue({
          finger
        });
        focusThumb({
          sliderRef,
          activeIndex,
          setActive
        });
        setValueState(newValue);
        if (handleChange && !areValuesEqual(newValue, valueDerived)) {
          handleChange(nativeEvent, newValue, activeIndex);
        }
      }
      moveCount.current = 0;
      const doc = ownerDocument(sliderRef.current);
      doc.addEventListener('touchmove', handleTouchMove);
      doc.addEventListener('touchend', handleTouchEnd);
    });
    const stopListening = React__namespace.useCallback(() => {
      const doc = ownerDocument(sliderRef.current);
      doc.removeEventListener('mousemove', handleTouchMove);
      doc.removeEventListener('mouseup', handleTouchEnd);
      doc.removeEventListener('touchmove', handleTouchMove);
      doc.removeEventListener('touchend', handleTouchEnd);
    }, [handleTouchEnd, handleTouchMove]);
    React__namespace.useEffect(() => {
      const {
        current: slider
      } = sliderRef;
      slider.addEventListener('touchstart', handleTouchStart, {
        passive: doesSupportTouchActionNone()
      });
      return () => {
        // @ts-ignore
        slider.removeEventListener('touchstart', handleTouchStart, {
          passive: doesSupportTouchActionNone()
        });
        stopListening();
      };
    }, [stopListening, handleTouchStart]);
    React__namespace.useEffect(() => {
      if (disabled) {
        stopListening();
      }
    }, [disabled, stopListening]);
    const createHandleMouseDown = otherHandlers => event => {
      var _otherHandlers$onMous;
      (_otherHandlers$onMous = otherHandlers.onMouseDown) == null || _otherHandlers$onMous.call(otherHandlers, event);
      if (disabled) {
        return;
      }
      if (event.defaultPrevented) {
        return;
      }

      // Only handle left clicks
      if (event.button !== 0) {
        return;
      }

      // Avoid text selection
      event.preventDefault();
      const finger = trackFinger(event, touchId);
      if (finger !== false) {
        const {
          newValue,
          activeIndex
        } = getFingerNewValue({
          finger
        });
        focusThumb({
          sliderRef,
          activeIndex,
          setActive
        });
        setValueState(newValue);
        if (handleChange && !areValuesEqual(newValue, valueDerived)) {
          handleChange(event, newValue, activeIndex);
        }
      }
      moveCount.current = 0;
      const doc = ownerDocument(sliderRef.current);
      doc.addEventListener('mousemove', handleTouchMove);
      doc.addEventListener('mouseup', handleTouchEnd);
    };
    const trackOffset = valueToPercent(range ? values[0] : min, min, max);
    const trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;
    const getRootProps = (externalProps = {}) => {
      const externalHandlers = extractEventHandlers(externalProps);
      const ownEventHandlers = {
        onMouseDown: createHandleMouseDown(externalHandlers || {})
      };
      const mergedEventHandlers = _extends({}, externalHandlers, ownEventHandlers);
      return _extends({}, externalProps, {
        ref: handleRef
      }, mergedEventHandlers);
    };
    const createHandleMouseOver = otherHandlers => event => {
      var _otherHandlers$onMous2;
      (_otherHandlers$onMous2 = otherHandlers.onMouseOver) == null || _otherHandlers$onMous2.call(otherHandlers, event);
      const index = Number(event.currentTarget.getAttribute('data-index'));
      setOpen(index);
    };
    const createHandleMouseLeave = otherHandlers => event => {
      var _otherHandlers$onMous3;
      (_otherHandlers$onMous3 = otherHandlers.onMouseLeave) == null || _otherHandlers$onMous3.call(otherHandlers, event);
      setOpen(-1);
    };
    const getThumbProps = (externalProps = {}) => {
      const externalHandlers = extractEventHandlers(externalProps);
      const ownEventHandlers = {
        onMouseOver: createHandleMouseOver(externalHandlers || {}),
        onMouseLeave: createHandleMouseLeave(externalHandlers || {})
      };
      return _extends({}, externalProps, externalHandlers, ownEventHandlers);
    };
    const getThumbStyle = index => {
      return {
        // So the non active thumb doesn't show its label on hover.
        pointerEvents: active !== -1 && active !== index ? 'none' : undefined
      };
    };
    const getHiddenInputProps = (externalProps = {}) => {
      var _parameters$step;
      const externalHandlers = extractEventHandlers(externalProps);
      const ownEventHandlers = {
        onChange: createHandleHiddenInputChange(externalHandlers || {}),
        onFocus: createHandleHiddenInputFocus(externalHandlers || {}),
        onBlur: createHandleHiddenInputBlur(externalHandlers || {})
      };
      const mergedEventHandlers = _extends({}, externalHandlers, ownEventHandlers);
      return _extends({
        tabIndex,
        'aria-labelledby': ariaLabelledby,
        'aria-orientation': orientation,
        'aria-valuemax': scale(max),
        'aria-valuemin': scale(min),
        name,
        type: 'range',
        min: parameters.min,
        max: parameters.max,
        step: parameters.step === null && parameters.marks ? 'any' : (_parameters$step = parameters.step) != null ? _parameters$step : undefined,
        disabled
      }, externalProps, mergedEventHandlers, {
        style: _extends({}, visuallyHidden$1, {
          direction: isRtl ? 'rtl' : 'ltr',
          // So that VoiceOver's focus indicator matches the thumb's dimensions
          width: '100%',
          height: '100%'
        })
      });
    };
    return {
      active,
      axis: axis,
      axisProps,
      dragging,
      focusedThumbIndex,
      getHiddenInputProps,
      getRootProps,
      getThumbProps,
      marks: marks,
      open,
      range,
      rootRef: handleRef,
      trackLeap,
      trackOffset,
      values,
      getThumbStyle
    };
  }

  /**
   * The basic building block for creating custom snackbar.
   *
   * Demos:
   *
   * - [Snackbar](https://mui.com/base-ui/react-snackbar/#hook)
   *
   * API:
   *
   * - [useSnackbar API](https://mui.com/base-ui/react-snackbar/hooks-api/#use-snackbar)
   */
  function useSnackbar(parameters = {}) {
    const {
      autoHideDuration = null,
      disableWindowBlurListener = false,
      onClose,
      open,
      resumeHideDuration
    } = parameters;
    const timerAutoHide = React__namespace.useRef();
    React__namespace.useEffect(() => {
      if (!open) {
        return undefined;
      }

      /**
       * @param {KeyboardEvent} nativeEvent
       */
      function handleKeyDown(nativeEvent) {
        if (!nativeEvent.defaultPrevented) {
          // IE11, Edge (prior to using Blink?) use 'Esc'
          if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {
            // not calling `preventDefault` since we don't know if people may ignore this event e.g. a permanently open snackbar
            onClose == null || onClose(nativeEvent, 'escapeKeyDown');
          }
        }
      }
      document.addEventListener('keydown', handleKeyDown);
      return () => {
        document.removeEventListener('keydown', handleKeyDown);
      };
    }, [open, onClose]);
    const handleClose = useEventCallback((event, reason) => {
      onClose == null || onClose(event, reason);
    });
    const setAutoHideTimer = useEventCallback(autoHideDurationParam => {
      if (!onClose || autoHideDurationParam == null) {
        return;
      }
      clearTimeout(timerAutoHide.current);
      timerAutoHide.current = setTimeout(() => {
        handleClose(null, 'timeout');
      }, autoHideDurationParam);
    });
    React__namespace.useEffect(() => {
      if (open) {
        setAutoHideTimer(autoHideDuration);
      }
      return () => {
        clearTimeout(timerAutoHide.current);
      };
    }, [open, autoHideDuration, setAutoHideTimer]);
    const handleClickAway = event => {
      onClose == null || onClose(event, 'clickaway');
    };

    // Pause the timer when the user is interacting with the Snackbar
    // or when the user hide the window.
    const handlePause = () => {
      clearTimeout(timerAutoHide.current);
    };

    // Restart the timer when the user is no longer interacting with the Snackbar
    // or when the window is shown back.
    const handleResume = React__namespace.useCallback(() => {
      if (autoHideDuration != null) {
        setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);
      }
    }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);
    const createHandleBlur = otherHandlers => event => {
      const onBlurCallback = otherHandlers.onBlur;
      onBlurCallback == null || onBlurCallback(event);
      handleResume();
    };
    const createHandleFocus = otherHandlers => event => {
      const onFocusCallback = otherHandlers.onFocus;
      onFocusCallback == null || onFocusCallback(event);
      handlePause();
    };
    const createMouseEnter = otherHandlers => event => {
      const onMouseEnterCallback = otherHandlers.onMouseEnter;
      onMouseEnterCallback == null || onMouseEnterCallback(event);
      handlePause();
    };
    const createMouseLeave = otherHandlers => event => {
      const onMouseLeaveCallback = otherHandlers.onMouseLeave;
      onMouseLeaveCallback == null || onMouseLeaveCallback(event);
      handleResume();
    };
    React__namespace.useEffect(() => {
      // TODO: window global should be refactored here
      if (!disableWindowBlurListener && open) {
        window.addEventListener('focus', handleResume);
        window.addEventListener('blur', handlePause);
        return () => {
          window.removeEventListener('focus', handleResume);
          window.removeEventListener('blur', handlePause);
        };
      }
      return undefined;
    }, [disableWindowBlurListener, handleResume, open]);
    const getRootProps = (externalProps = {}) => {
      const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
      return _extends({
        // ClickAwayListener adds an `onClick` prop which results in the alert not being announced.
        // See https://github.com/mui/material-ui/issues/29080
        role: 'presentation'
      }, externalProps, externalEventHandlers, {
        onBlur: createHandleBlur(externalEventHandlers),
        onFocus: createHandleFocus(externalEventHandlers),
        onMouseEnter: createMouseEnter(externalEventHandlers),
        onMouseLeave: createMouseLeave(externalEventHandlers)
      });
    };
    return {
      getRootProps,
      onClickAway: handleClickAway
    };
  }

  const _excluded$1S = ["onChange", "maxRows", "minRows", "style", "value"];
  function getStyleValue(value) {
    return parseInt(value, 10) || 0;
  }
  const styles$5 = {
    shadow: {
      // Visibility needed to hide the extra text area on iPads
      visibility: 'hidden',
      // Remove from the content flow
      position: 'absolute',
      // Ignore the scrollbar width
      overflow: 'hidden',
      height: 0,
      top: 0,
      left: 0,
      // Create a new layer, increase the isolation of the computed values
      transform: 'translateZ(0)'
    }
  };
  function isEmpty$1(obj) {
    return obj === undefined || obj === null || Object.keys(obj).length === 0 || obj.outerHeightStyle === 0 && !obj.overflow;
  }

  /**
   *
   * Demos:
   *
   * - [Textarea Autosize](https://mui.com/base-ui/react-textarea-autosize/)
   * - [Textarea Autosize](https://mui.com/material-ui/react-textarea-autosize/)
   *
   * API:
   *
   * - [TextareaAutosize API](https://mui.com/base-ui/react-textarea-autosize/components-api/#textarea-autosize)
   */
  const TextareaAutosize = /*#__PURE__*/React__namespace.forwardRef(function TextareaAutosize(props, forwardedRef) {
    const {
        onChange,
        maxRows,
        minRows = 1,
        style,
        value
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1S);
    const {
      current: isControlled
    } = React__namespace.useRef(value != null);
    const inputRef = React__namespace.useRef(null);
    const handleRef = useForkRef(forwardedRef, inputRef);
    const shadowRef = React__namespace.useRef(null);
    const renders = React__namespace.useRef(0);
    const [state, setState] = React__namespace.useState({
      outerHeightStyle: 0
    });
    const getUpdatedState = React__namespace.useCallback(() => {
      const input = inputRef.current;
      const containerWindow = ownerWindow(input);
      const computedStyle = containerWindow.getComputedStyle(input);

      // If input's width is shrunk and it's not visible, don't sync height.
      if (computedStyle.width === '0px') {
        return {
          outerHeightStyle: 0
        };
      }
      const inputShallow = shadowRef.current;
      inputShallow.style.width = computedStyle.width;
      inputShallow.value = input.value || props.placeholder || 'x';
      if (inputShallow.value.slice(-1) === '\n') {
        // Certain fonts which overflow the line height will cause the textarea
        // to report a different scrollHeight depending on whether the last line
        // is empty. Make it non-empty to avoid this issue.
        inputShallow.value += ' ';
      }
      const boxSizing = computedStyle.boxSizing;
      const padding = getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);
      const border = getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);

      // The height of the inner content
      const innerHeight = inputShallow.scrollHeight;

      // Measure height of a textarea with a single row
      inputShallow.value = 'x';
      const singleRowHeight = inputShallow.scrollHeight;

      // The height of the outer content
      let outerHeight = innerHeight;
      if (minRows) {
        outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);
      }
      if (maxRows) {
        outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);
      }
      outerHeight = Math.max(outerHeight, singleRowHeight);

      // Take the box sizing into account for applying this value as a style.
      const outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);
      const overflow = Math.abs(outerHeight - innerHeight) <= 1;
      return {
        outerHeightStyle,
        overflow
      };
    }, [maxRows, minRows, props.placeholder]);
    const updateState = (prevState, newState) => {
      const {
        outerHeightStyle,
        overflow
      } = newState;
      // Need a large enough difference to update the height.
      // This prevents infinite rendering loop.
      if (renders.current < 20 && (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow)) {
        renders.current += 1;
        return {
          overflow,
          outerHeightStyle
        };
      }
      {
        if (renders.current === 20) {
          console.error(['MUI: Too many re-renders. The layout is unstable.', 'TextareaAutosize limits the number of renders to prevent an infinite loop.'].join('\n'));
        }
      }
      return prevState;
    };
    const syncHeight = React__namespace.useCallback(() => {
      const newState = getUpdatedState();
      if (isEmpty$1(newState)) {
        return;
      }
      setState(prevState => updateState(prevState, newState));
    }, [getUpdatedState]);
    useEnhancedEffect$1(() => {
      const syncHeightWithFlushSync = () => {
        const newState = getUpdatedState();
        if (isEmpty$1(newState)) {
          return;
        }

        // In React 18, state updates in a ResizeObserver's callback are happening after
        // the paint, this leads to an infinite rendering.
        //
        // Using flushSync ensures that the states is updated before the next pain.
        // Related issue - https://github.com/facebook/react/issues/24331
        ReactDOM__namespace.flushSync(() => {
          setState(prevState => updateState(prevState, newState));
        });
      };
      const handleResize = () => {
        renders.current = 0;
        syncHeightWithFlushSync();
      };
      // Workaround a "ResizeObserver loop completed with undelivered notifications" error
      // in test.
      // Note that we might need to use this logic in production per https://github.com/WICG/resize-observer/issues/38
      // Also see https://github.com/mui/mui-x/issues/8733
      let rAF;
      const debounceHandleResize = debounce$1(handleResize);
      const input = inputRef.current;
      const containerWindow = ownerWindow(input);
      containerWindow.addEventListener('resize', debounceHandleResize);
      let resizeObserver;
      if (typeof ResizeObserver !== 'undefined') {
        resizeObserver = new ResizeObserver(handleResize);
        resizeObserver.observe(input);
      }
      return () => {
        debounceHandleResize.clear();
        cancelAnimationFrame(rAF);
        containerWindow.removeEventListener('resize', debounceHandleResize);
        if (resizeObserver) {
          resizeObserver.disconnect();
        }
      };
    }, [getUpdatedState]);
    useEnhancedEffect$1(() => {
      syncHeight();
    });
    React__namespace.useEffect(() => {
      renders.current = 0;
    }, [value]);
    const handleChange = event => {
      renders.current = 0;
      if (!isControlled) {
        syncHeight();
      }
      if (onChange) {
        onChange(event);
      }
    };
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1("textarea", _extends({
        value: value,
        onChange: handleChange,
        ref: handleRef
        // Apply the rows prop to get a "correct" first SSR paint
        ,
        rows: minRows,
        style: _extends({
          height: state.outerHeightStyle,
          // Need a large enough difference to allow scrolling.
          // This prevents infinite rendering loop.
          overflow: state.overflow ? 'hidden' : undefined
        }, style)
      }, other)), /*#__PURE__*/jsxRuntime_1("textarea", {
        "aria-hidden": true,
        className: props.className,
        readOnly: true,
        ref: shadowRef,
        tabIndex: -1,
        style: _extends({}, styles$5.shadow, style, {
          paddingTop: 0,
          paddingBottom: 0
        })
      })]
    });
  });
  TextareaAutosize.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Maximum number of rows to display.
     */
    maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Minimum number of rows to display.
     * @default 1
     */
    minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * @ignore
     */
    onChange: PropTypes.func,
    /**
     * @ignore
     */
    placeholder: PropTypes.string,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * @ignore
     */
    value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.number, PropTypes.string])
  } ;

  // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
  // Give up on IE11 support for this feature
  function stripDiacritics(string) {
    return typeof string.normalize !== 'undefined' ? string.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : string;
  }
  function createFilterOptions(config = {}) {
    const {
      ignoreAccents = true,
      ignoreCase = true,
      limit,
      matchFrom = 'any',
      stringify,
      trim = false
    } = config;
    return (options, {
      inputValue,
      getOptionLabel
    }) => {
      let input = trim ? inputValue.trim() : inputValue;
      if (ignoreCase) {
        input = input.toLowerCase();
      }
      if (ignoreAccents) {
        input = stripDiacritics(input);
      }
      const filteredOptions = !input ? options : options.filter(option => {
        let candidate = (stringify || getOptionLabel)(option);
        if (ignoreCase) {
          candidate = candidate.toLowerCase();
        }
        if (ignoreAccents) {
          candidate = stripDiacritics(candidate);
        }
        return matchFrom === 'start' ? candidate.indexOf(input) === 0 : candidate.indexOf(input) > -1;
      });
      return typeof limit === 'number' ? filteredOptions.slice(0, limit) : filteredOptions;
    };
  }

  // To replace with .findIndex() once we stop IE11 support.
  function findIndex(array, comp) {
    for (let i = 0; i < array.length; i += 1) {
      if (comp(array[i])) {
        return i;
      }
    }
    return -1;
  }
  const defaultFilterOptions = createFilterOptions();

  // Number of options to jump in list box when `Page Up` and `Page Down` keys are used.
  const pageSize = 5;
  const defaultIsActiveElementInListbox = listboxRef => {
    var _listboxRef$current$p;
    return listboxRef.current !== null && ((_listboxRef$current$p = listboxRef.current.parentElement) == null ? void 0 : _listboxRef$current$p.contains(document.activeElement));
  };
  function useAutocomplete(props) {
    const {
      // eslint-disable-next-line @typescript-eslint/naming-convention
      unstable_isActiveElementInListbox = defaultIsActiveElementInListbox,
      // eslint-disable-next-line @typescript-eslint/naming-convention
      unstable_classNamePrefix = 'Mui',
      autoComplete = false,
      autoHighlight = false,
      autoSelect = false,
      blurOnSelect = false,
      clearOnBlur = !props.freeSolo,
      clearOnEscape = false,
      componentName = 'useAutocomplete',
      defaultValue = props.multiple ? [] : null,
      disableClearable = false,
      disableCloseOnSelect = false,
      disabled: disabledProp,
      disabledItemsFocusable = false,
      disableListWrap = false,
      filterOptions = defaultFilterOptions,
      filterSelectedOptions = false,
      freeSolo = false,
      getOptionDisabled,
      getOptionKey,
      getOptionLabel: getOptionLabelProp = option => {
        var _option$label;
        return (_option$label = option.label) != null ? _option$label : option;
      },
      groupBy,
      handleHomeEndKeys = !props.freeSolo,
      id: idProp,
      includeInputInList = false,
      inputValue: inputValueProp,
      isOptionEqualToValue = (option, value) => option === value,
      multiple = false,
      onChange,
      onClose,
      onHighlightChange,
      onInputChange,
      onOpen,
      open: openProp,
      openOnFocus = false,
      options,
      readOnly = false,
      selectOnFocus = !props.freeSolo,
      value: valueProp
    } = props;
    const id = useId(idProp);
    let getOptionLabel = getOptionLabelProp;
    getOptionLabel = option => {
      const optionLabel = getOptionLabelProp(option);
      if (typeof optionLabel !== 'string') {
        {
          const erroneousReturn = optionLabel === undefined ? 'undefined' : `${typeof optionLabel} (${optionLabel})`;
          console.error(`MUI: The \`getOptionLabel\` method of ${componentName} returned ${erroneousReturn} instead of a string for ${JSON.stringify(option)}.`);
        }
        return String(optionLabel);
      }
      return optionLabel;
    };
    const ignoreFocus = React__namespace.useRef(false);
    const firstFocus = React__namespace.useRef(true);
    const inputRef = React__namespace.useRef(null);
    const listboxRef = React__namespace.useRef(null);
    const [anchorEl, setAnchorEl] = React__namespace.useState(null);
    const [focusedTag, setFocusedTag] = React__namespace.useState(-1);
    const defaultHighlighted = autoHighlight ? 0 : -1;
    const highlightedIndexRef = React__namespace.useRef(defaultHighlighted);
    const [value, setValueState] = useControlled({
      controlled: valueProp,
      default: defaultValue,
      name: componentName
    });
    const [inputValue, setInputValueState] = useControlled({
      controlled: inputValueProp,
      default: '',
      name: componentName,
      state: 'inputValue'
    });
    const [focused, setFocused] = React__namespace.useState(false);
    const resetInputValue = React__namespace.useCallback((event, newValue) => {
      // retain current `inputValue` if new option isn't selected and `clearOnBlur` is false
      // When `multiple` is enabled, `newValue` is an array of all selected items including the newly selected item
      const isOptionSelected = multiple ? value.length < newValue.length : newValue !== null;
      if (!isOptionSelected && !clearOnBlur) {
        return;
      }
      let newInputValue;
      if (multiple) {
        newInputValue = '';
      } else if (newValue == null) {
        newInputValue = '';
      } else {
        const optionLabel = getOptionLabel(newValue);
        newInputValue = typeof optionLabel === 'string' ? optionLabel : '';
      }
      if (inputValue === newInputValue) {
        return;
      }
      setInputValueState(newInputValue);
      if (onInputChange) {
        onInputChange(event, newInputValue, 'reset');
      }
    }, [getOptionLabel, inputValue, multiple, onInputChange, setInputValueState, clearOnBlur, value]);
    const [open, setOpenState] = useControlled({
      controlled: openProp,
      default: false,
      name: componentName,
      state: 'open'
    });
    const [inputPristine, setInputPristine] = React__namespace.useState(true);
    const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);
    const popupOpen = open && !readOnly;
    const filteredOptions = popupOpen ? filterOptions(options.filter(option => {
      if (filterSelectedOptions && (multiple ? value : [value]).some(value2 => value2 !== null && isOptionEqualToValue(option, value2))) {
        return false;
      }
      return true;
    }),
    // we use the empty string to manipulate `filterOptions` to not filter any options
    // i.e. the filter predicate always returns true
    {
      inputValue: inputValueIsSelectedValue && inputPristine ? '' : inputValue,
      getOptionLabel
    }) : [];
    const previousProps = usePreviousProps$1({
      filteredOptions,
      value,
      inputValue
    });
    React__namespace.useEffect(() => {
      const valueChange = value !== previousProps.value;
      if (focused && !valueChange) {
        return;
      }

      // Only reset the input's value when freeSolo if the component's value changes.
      if (freeSolo && !valueChange) {
        return;
      }
      resetInputValue(null, value);
    }, [value, resetInputValue, focused, previousProps.value, freeSolo]);
    const listboxAvailable = open && filteredOptions.length > 0 && !readOnly;
    {
      if (value !== null && !freeSolo && options.length > 0) {
        const missingValue = (multiple ? value : [value]).filter(value2 => !options.some(option => isOptionEqualToValue(option, value2)));
        if (missingValue.length > 0) {
          console.warn([`MUI: The value provided to ${componentName} is invalid.`, `None of the options match with \`${missingValue.length > 1 ? JSON.stringify(missingValue) : JSON.stringify(missingValue[0])}\`.`, 'You can use the `isOptionEqualToValue` prop to customize the equality test.'].join('\n'));
        }
      }
    }
    const focusTag = useEventCallback(tagToFocus => {
      if (tagToFocus === -1) {
        inputRef.current.focus();
      } else {
        anchorEl.querySelector(`[data-tag-index="${tagToFocus}"]`).focus();
      }
    });

    // Ensure the focusedTag is never inconsistent
    React__namespace.useEffect(() => {
      if (multiple && focusedTag > value.length - 1) {
        setFocusedTag(-1);
        focusTag(-1);
      }
    }, [value, multiple, focusedTag, focusTag]);
    function validOptionIndex(index, direction) {
      if (!listboxRef.current || index < 0 || index >= filteredOptions.length) {
        return -1;
      }
      let nextFocus = index;
      while (true) {
        const option = listboxRef.current.querySelector(`[data-option-index="${nextFocus}"]`);

        // Same logic as MenuList.js
        const nextFocusDisabled = disabledItemsFocusable ? false : !option || option.disabled || option.getAttribute('aria-disabled') === 'true';
        if (option && option.hasAttribute('tabindex') && !nextFocusDisabled) {
          // The next option is available
          return nextFocus;
        }

        // The next option is disabled, move to the next element.
        // with looped index
        if (direction === 'next') {
          nextFocus = (nextFocus + 1) % filteredOptions.length;
        } else {
          nextFocus = (nextFocus - 1 + filteredOptions.length) % filteredOptions.length;
        }

        // We end up with initial index, that means we don't have available options.
        // All of them are disabled
        if (nextFocus === index) {
          return -1;
        }
      }
    }
    const setHighlightedIndex = useEventCallback(({
      event,
      index,
      reason = 'auto'
    }) => {
      highlightedIndexRef.current = index;

      // does the index exist?
      if (index === -1) {
        inputRef.current.removeAttribute('aria-activedescendant');
      } else {
        inputRef.current.setAttribute('aria-activedescendant', `${id}-option-${index}`);
      }
      if (onHighlightChange) {
        onHighlightChange(event, index === -1 ? null : filteredOptions[index], reason);
      }
      if (!listboxRef.current) {
        return;
      }
      const prev = listboxRef.current.querySelector(`[role="option"].${unstable_classNamePrefix}-focused`);
      if (prev) {
        prev.classList.remove(`${unstable_classNamePrefix}-focused`);
        prev.classList.remove(`${unstable_classNamePrefix}-focusVisible`);
      }
      let listboxNode = listboxRef.current;
      if (listboxRef.current.getAttribute('role') !== 'listbox') {
        listboxNode = listboxRef.current.parentElement.querySelector('[role="listbox"]');
      }

      // "No results"
      if (!listboxNode) {
        return;
      }
      if (index === -1) {
        listboxNode.scrollTop = 0;
        return;
      }
      const option = listboxRef.current.querySelector(`[data-option-index="${index}"]`);
      if (!option) {
        return;
      }
      option.classList.add(`${unstable_classNamePrefix}-focused`);
      if (reason === 'keyboard') {
        option.classList.add(`${unstable_classNamePrefix}-focusVisible`);
      }

      // Scroll active descendant into view.
      // Logic copied from https://www.w3.org/WAI/content-assets/wai-aria-practices/patterns/combobox/examples/js/select-only.js
      // In case of mouse clicks and touch (in mobile devices) we avoid scrolling the element and keep both behaviors same.
      // Consider this API instead once it has a better browser support:
      // .scrollIntoView({ scrollMode: 'if-needed', block: 'nearest' });
      if (listboxNode.scrollHeight > listboxNode.clientHeight && reason !== 'mouse' && reason !== 'touch') {
        const element = option;
        const scrollBottom = listboxNode.clientHeight + listboxNode.scrollTop;
        const elementBottom = element.offsetTop + element.offsetHeight;
        if (elementBottom > scrollBottom) {
          listboxNode.scrollTop = elementBottom - listboxNode.clientHeight;
        } else if (element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0) < listboxNode.scrollTop) {
          listboxNode.scrollTop = element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0);
        }
      }
    });
    const changeHighlightedIndex = useEventCallback(({
      event,
      diff,
      direction = 'next',
      reason = 'auto'
    }) => {
      if (!popupOpen) {
        return;
      }
      const getNextIndex = () => {
        const maxIndex = filteredOptions.length - 1;
        if (diff === 'reset') {
          return defaultHighlighted;
        }
        if (diff === 'start') {
          return 0;
        }
        if (diff === 'end') {
          return maxIndex;
        }
        const newIndex = highlightedIndexRef.current + diff;
        if (newIndex < 0) {
          if (newIndex === -1 && includeInputInList) {
            return -1;
          }
          if (disableListWrap && highlightedIndexRef.current !== -1 || Math.abs(diff) > 1) {
            return 0;
          }
          return maxIndex;
        }
        if (newIndex > maxIndex) {
          if (newIndex === maxIndex + 1 && includeInputInList) {
            return -1;
          }
          if (disableListWrap || Math.abs(diff) > 1) {
            return maxIndex;
          }
          return 0;
        }
        return newIndex;
      };
      const nextIndex = validOptionIndex(getNextIndex(), direction);
      setHighlightedIndex({
        index: nextIndex,
        reason,
        event
      });

      // Sync the content of the input with the highlighted option.
      if (autoComplete && diff !== 'reset') {
        if (nextIndex === -1) {
          inputRef.current.value = inputValue;
        } else {
          const option = getOptionLabel(filteredOptions[nextIndex]);
          inputRef.current.value = option;

          // The portion of the selected suggestion that has not been typed by the user,
          // a completion string, appears inline after the input cursor in the textbox.
          const index = option.toLowerCase().indexOf(inputValue.toLowerCase());
          if (index === 0 && inputValue.length > 0) {
            inputRef.current.setSelectionRange(inputValue.length, option.length);
          }
        }
      }
    });
    const checkHighlightedOptionExists = () => {
      const isSameValue = (value1, value2) => {
        const label1 = value1 ? getOptionLabel(value1) : '';
        const label2 = value2 ? getOptionLabel(value2) : '';
        return label1 === label2;
      };
      if (highlightedIndexRef.current !== -1 && previousProps.filteredOptions && previousProps.filteredOptions.length !== filteredOptions.length && previousProps.inputValue === inputValue && (multiple ? value.length === previousProps.value.length && previousProps.value.every((val, i) => getOptionLabel(value[i]) === getOptionLabel(val)) : isSameValue(previousProps.value, value))) {
        const previousHighlightedOption = previousProps.filteredOptions[highlightedIndexRef.current];
        if (previousHighlightedOption) {
          const previousHighlightedOptionExists = filteredOptions.some(option => {
            return getOptionLabel(option) === getOptionLabel(previousHighlightedOption);
          });
          if (previousHighlightedOptionExists) {
            return true;
          }
        }
      }
      return false;
    };
    const syncHighlightedIndex = React__namespace.useCallback(() => {
      if (!popupOpen) {
        return;
      }

      // Check if the previously highlighted option still exists in the updated filtered options list and if the value and inputValue haven't changed
      // If it exists and the value and the inputValue haven't changed, return, otherwise continue execution
      if (checkHighlightedOptionExists()) {
        return;
      }
      const valueItem = multiple ? value[0] : value;

      // The popup is empty, reset
      if (filteredOptions.length === 0 || valueItem == null) {
        changeHighlightedIndex({
          diff: 'reset'
        });
        return;
      }
      if (!listboxRef.current) {
        return;
      }

      // Synchronize the value with the highlighted index
      if (valueItem != null) {
        const currentOption = filteredOptions[highlightedIndexRef.current];

        // Keep the current highlighted index if possible
        if (multiple && currentOption && findIndex(value, val => isOptionEqualToValue(currentOption, val)) !== -1) {
          return;
        }
        const itemIndex = findIndex(filteredOptions, optionItem => isOptionEqualToValue(optionItem, valueItem));
        if (itemIndex === -1) {
          changeHighlightedIndex({
            diff: 'reset'
          });
        } else {
          setHighlightedIndex({
            index: itemIndex
          });
        }
        return;
      }

      // Prevent the highlighted index to leak outside the boundaries.
      if (highlightedIndexRef.current >= filteredOptions.length - 1) {
        setHighlightedIndex({
          index: filteredOptions.length - 1
        });
        return;
      }

      // Restore the focus to the previous index.
      setHighlightedIndex({
        index: highlightedIndexRef.current
      });
      // Ignore filteredOptions (and options, isOptionEqualToValue, getOptionLabel) not to break the scroll position
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [
    // Only sync the highlighted index when the option switch between empty and not
    filteredOptions.length,
    // Don't sync the highlighted index with the value when multiple
    // eslint-disable-next-line react-hooks/exhaustive-deps
    multiple ? false : value, filterSelectedOptions, changeHighlightedIndex, setHighlightedIndex, popupOpen, inputValue, multiple]);
    const handleListboxRef = useEventCallback(node => {
      setRef(listboxRef, node);
      if (!node) {
        return;
      }
      syncHighlightedIndex();
    });
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useEffect(() => {
        if (!inputRef.current || inputRef.current.nodeName !== 'INPUT') {
          if (inputRef.current && inputRef.current.nodeName === 'TEXTAREA') {
            console.warn([`A textarea element was provided to ${componentName} where input was expected.`, `This is not a supported scenario but it may work under certain conditions.`, `A textarea keyboard navigation may conflict with Autocomplete controls (e.g. enter and arrow keys).`, `Make sure to test keyboard navigation and add custom event handlers if necessary.`].join('\n'));
          } else {
            console.error([`MUI: Unable to find the input element. It was resolved to ${inputRef.current} while an HTMLInputElement was expected.`, `Instead, ${componentName} expects an input element.`, '', componentName === 'useAutocomplete' ? 'Make sure you have bound getInputProps correctly and that the normal ref/effect resolutions order is guaranteed.' : 'Make sure you have customized the input component correctly.'].join('\n'));
          }
        }
      }, [componentName]);
    }
    React__namespace.useEffect(() => {
      syncHighlightedIndex();
    }, [syncHighlightedIndex]);
    const handleOpen = event => {
      if (open) {
        return;
      }
      setOpenState(true);
      setInputPristine(true);
      if (onOpen) {
        onOpen(event);
      }
    };
    const handleClose = (event, reason) => {
      if (!open) {
        return;
      }
      setOpenState(false);
      if (onClose) {
        onClose(event, reason);
      }
    };
    const handleValue = (event, newValue, reason, details) => {
      if (multiple) {
        if (value.length === newValue.length && value.every((val, i) => val === newValue[i])) {
          return;
        }
      } else if (value === newValue) {
        return;
      }
      if (onChange) {
        onChange(event, newValue, reason, details);
      }
      setValueState(newValue);
    };
    const isTouch = React__namespace.useRef(false);
    const selectNewValue = (event, option, reasonProp = 'selectOption', origin = 'options') => {
      let reason = reasonProp;
      let newValue = option;
      if (multiple) {
        newValue = Array.isArray(value) ? value.slice() : [];
        {
          const matches = newValue.filter(val => isOptionEqualToValue(option, val));
          if (matches.length > 1) {
            console.error([`MUI: The \`isOptionEqualToValue\` method of ${componentName} does not handle the arguments correctly.`, `The component expects a single value to match a given option but found ${matches.length} matches.`].join('\n'));
          }
        }
        const itemIndex = findIndex(newValue, valueItem => isOptionEqualToValue(option, valueItem));
        if (itemIndex === -1) {
          newValue.push(option);
        } else if (origin !== 'freeSolo') {
          newValue.splice(itemIndex, 1);
          reason = 'removeOption';
        }
      }
      resetInputValue(event, newValue);
      handleValue(event, newValue, reason, {
        option
      });
      if (!disableCloseOnSelect && (!event || !event.ctrlKey && !event.metaKey)) {
        handleClose(event, reason);
      }
      if (blurOnSelect === true || blurOnSelect === 'touch' && isTouch.current || blurOnSelect === 'mouse' && !isTouch.current) {
        inputRef.current.blur();
      }
    };
    function validTagIndex(index, direction) {
      if (index === -1) {
        return -1;
      }
      let nextFocus = index;
      while (true) {
        // Out of range
        if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {
          return -1;
        }
        const option = anchorEl.querySelector(`[data-tag-index="${nextFocus}"]`);

        // Same logic as MenuList.js
        if (!option || !option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true') {
          nextFocus += direction === 'next' ? 1 : -1;
        } else {
          return nextFocus;
        }
      }
    }
    const handleFocusTag = (event, direction) => {
      if (!multiple) {
        return;
      }
      if (inputValue === '') {
        handleClose(event, 'toggleInput');
      }
      let nextTag = focusedTag;
      if (focusedTag === -1) {
        if (inputValue === '' && direction === 'previous') {
          nextTag = value.length - 1;
        }
      } else {
        nextTag += direction === 'next' ? 1 : -1;
        if (nextTag < 0) {
          nextTag = 0;
        }
        if (nextTag === value.length) {
          nextTag = -1;
        }
      }
      nextTag = validTagIndex(nextTag, direction);
      setFocusedTag(nextTag);
      focusTag(nextTag);
    };
    const handleClear = event => {
      ignoreFocus.current = true;
      setInputValueState('');
      if (onInputChange) {
        onInputChange(event, '', 'clear');
      }
      handleValue(event, multiple ? [] : null, 'clear');
    };
    const handleKeyDown = other => event => {
      if (other.onKeyDown) {
        other.onKeyDown(event);
      }
      if (event.defaultMuiPrevented) {
        return;
      }
      if (focusedTag !== -1 && ['ArrowLeft', 'ArrowRight'].indexOf(event.key) === -1) {
        setFocusedTag(-1);
        focusTag(-1);
      }

      // Wait until IME is settled.
      if (event.which !== 229) {
        switch (event.key) {
          case 'Home':
            if (popupOpen && handleHomeEndKeys) {
              // Prevent scroll of the page
              event.preventDefault();
              changeHighlightedIndex({
                diff: 'start',
                direction: 'next',
                reason: 'keyboard',
                event
              });
            }
            break;
          case 'End':
            if (popupOpen && handleHomeEndKeys) {
              // Prevent scroll of the page
              event.preventDefault();
              changeHighlightedIndex({
                diff: 'end',
                direction: 'previous',
                reason: 'keyboard',
                event
              });
            }
            break;
          case 'PageUp':
            // Prevent scroll of the page
            event.preventDefault();
            changeHighlightedIndex({
              diff: -pageSize,
              direction: 'previous',
              reason: 'keyboard',
              event
            });
            handleOpen(event);
            break;
          case 'PageDown':
            // Prevent scroll of the page
            event.preventDefault();
            changeHighlightedIndex({
              diff: pageSize,
              direction: 'next',
              reason: 'keyboard',
              event
            });
            handleOpen(event);
            break;
          case 'ArrowDown':
            // Prevent cursor move
            event.preventDefault();
            changeHighlightedIndex({
              diff: 1,
              direction: 'next',
              reason: 'keyboard',
              event
            });
            handleOpen(event);
            break;
          case 'ArrowUp':
            // Prevent cursor move
            event.preventDefault();
            changeHighlightedIndex({
              diff: -1,
              direction: 'previous',
              reason: 'keyboard',
              event
            });
            handleOpen(event);
            break;
          case 'ArrowLeft':
            handleFocusTag(event, 'previous');
            break;
          case 'ArrowRight':
            handleFocusTag(event, 'next');
            break;
          case 'Enter':
            if (highlightedIndexRef.current !== -1 && popupOpen) {
              const option = filteredOptions[highlightedIndexRef.current];
              const disabled = getOptionDisabled ? getOptionDisabled(option) : false;

              // Avoid early form validation, let the end-users continue filling the form.
              event.preventDefault();
              if (disabled) {
                return;
              }
              selectNewValue(event, option, 'selectOption');

              // Move the selection to the end.
              if (autoComplete) {
                inputRef.current.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length);
              }
            } else if (freeSolo && inputValue !== '' && inputValueIsSelectedValue === false) {
              if (multiple) {
                // Allow people to add new values before they submit the form.
                event.preventDefault();
              }
              selectNewValue(event, inputValue, 'createOption', 'freeSolo');
            }
            break;
          case 'Escape':
            if (popupOpen) {
              // Avoid Opera to exit fullscreen mode.
              event.preventDefault();
              // Avoid the Modal to handle the event.
              event.stopPropagation();
              handleClose(event, 'escape');
            } else if (clearOnEscape && (inputValue !== '' || multiple && value.length > 0)) {
              // Avoid Opera to exit fullscreen mode.
              event.preventDefault();
              // Avoid the Modal to handle the event.
              event.stopPropagation();
              handleClear(event);
            }
            break;
          case 'Backspace':
            if (multiple && !readOnly && inputValue === '' && value.length > 0) {
              const index = focusedTag === -1 ? value.length - 1 : focusedTag;
              const newValue = value.slice();
              newValue.splice(index, 1);
              handleValue(event, newValue, 'removeOption', {
                option: value[index]
              });
            }
            break;
          case 'Delete':
            if (multiple && !readOnly && inputValue === '' && value.length > 0 && focusedTag !== -1) {
              const index = focusedTag;
              const newValue = value.slice();
              newValue.splice(index, 1);
              handleValue(event, newValue, 'removeOption', {
                option: value[index]
              });
            }
            break;
        }
      }
    };
    const handleFocus = event => {
      setFocused(true);
      if (openOnFocus && !ignoreFocus.current) {
        handleOpen(event);
      }
    };
    const handleBlur = event => {
      // Ignore the event when using the scrollbar with IE11
      if (unstable_isActiveElementInListbox(listboxRef)) {
        inputRef.current.focus();
        return;
      }
      setFocused(false);
      firstFocus.current = true;
      ignoreFocus.current = false;
      if (autoSelect && highlightedIndexRef.current !== -1 && popupOpen) {
        selectNewValue(event, filteredOptions[highlightedIndexRef.current], 'blur');
      } else if (autoSelect && freeSolo && inputValue !== '') {
        selectNewValue(event, inputValue, 'blur', 'freeSolo');
      } else if (clearOnBlur) {
        resetInputValue(event, value);
      }
      handleClose(event, 'blur');
    };
    const handleInputChange = event => {
      const newValue = event.target.value;
      if (inputValue !== newValue) {
        setInputValueState(newValue);
        setInputPristine(false);
        if (onInputChange) {
          onInputChange(event, newValue, 'input');
        }
      }
      if (newValue === '') {
        if (!disableClearable && !multiple) {
          handleValue(event, null, 'clear');
        }
      } else {
        handleOpen(event);
      }
    };
    const handleOptionMouseMove = event => {
      const index = Number(event.currentTarget.getAttribute('data-option-index'));
      if (highlightedIndexRef.current !== index) {
        setHighlightedIndex({
          event,
          index,
          reason: 'mouse'
        });
      }
    };
    const handleOptionTouchStart = event => {
      setHighlightedIndex({
        event,
        index: Number(event.currentTarget.getAttribute('data-option-index')),
        reason: 'touch'
      });
      isTouch.current = true;
    };
    const handleOptionClick = event => {
      const index = Number(event.currentTarget.getAttribute('data-option-index'));
      selectNewValue(event, filteredOptions[index], 'selectOption');
      isTouch.current = false;
    };
    const handleTagDelete = index => event => {
      const newValue = value.slice();
      newValue.splice(index, 1);
      handleValue(event, newValue, 'removeOption', {
        option: value[index]
      });
    };
    const handlePopupIndicator = event => {
      if (open) {
        handleClose(event, 'toggleInput');
      } else {
        handleOpen(event);
      }
    };

    // Prevent input blur when interacting with the combobox
    const handleMouseDown = event => {
      // Prevent focusing the input if click is anywhere outside the Autocomplete
      if (!event.currentTarget.contains(event.target)) {
        return;
      }
      if (event.target.getAttribute('id') !== id) {
        event.preventDefault();
      }
    };

    // Focus the input when interacting with the combobox
    const handleClick = event => {
      // Prevent focusing the input if click is anywhere outside the Autocomplete
      if (!event.currentTarget.contains(event.target)) {
        return;
      }
      inputRef.current.focus();
      if (selectOnFocus && firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {
        inputRef.current.select();
      }
      firstFocus.current = false;
    };
    const handleInputMouseDown = event => {
      if (!disabledProp && (inputValue === '' || !open)) {
        handlePopupIndicator(event);
      }
    };
    let dirty = freeSolo && inputValue.length > 0;
    dirty = dirty || (multiple ? value.length > 0 : value !== null);
    let groupedOptions = filteredOptions;
    if (groupBy) {
      // used to keep track of key and indexes in the result array
      const indexBy = new Map();
      let warn = false;
      groupedOptions = filteredOptions.reduce((acc, option, index) => {
        const group = groupBy(option);
        if (acc.length > 0 && acc[acc.length - 1].group === group) {
          acc[acc.length - 1].options.push(option);
        } else {
          {
            if (indexBy.get(group) && !warn) {
              console.warn(`MUI: The options provided combined with the \`groupBy\` method of ${componentName} returns duplicated headers.`, 'You can solve the issue by sorting the options with the output of `groupBy`.');
              warn = true;
            }
            indexBy.set(group, true);
          }
          acc.push({
            key: index,
            index,
            group,
            options: [option]
          });
        }
        return acc;
      }, []);
    }
    if (disabledProp && focused) {
      handleBlur();
    }
    return {
      getRootProps: (other = {}) => _extends({
        'aria-owns': listboxAvailable ? `${id}-listbox` : null
      }, other, {
        onKeyDown: handleKeyDown(other),
        onMouseDown: handleMouseDown,
        onClick: handleClick
      }),
      getInputLabelProps: () => ({
        id: `${id}-label`,
        htmlFor: id
      }),
      getInputProps: () => ({
        id,
        value: inputValue,
        onBlur: handleBlur,
        onFocus: handleFocus,
        onChange: handleInputChange,
        onMouseDown: handleInputMouseDown,
        // if open then this is handled imperatively so don't let react override
        // only have an opinion about this when closed
        'aria-activedescendant': popupOpen ? '' : null,
        'aria-autocomplete': autoComplete ? 'both' : 'list',
        'aria-controls': listboxAvailable ? `${id}-listbox` : undefined,
        'aria-expanded': listboxAvailable,
        // Disable browser's suggestion that might overlap with the popup.
        // Handle autocomplete but not autofill.
        autoComplete: 'off',
        ref: inputRef,
        autoCapitalize: 'none',
        spellCheck: 'false',
        role: 'combobox',
        disabled: disabledProp
      }),
      getClearProps: () => ({
        tabIndex: -1,
        type: 'button',
        onClick: handleClear
      }),
      getPopupIndicatorProps: () => ({
        tabIndex: -1,
        type: 'button',
        onClick: handlePopupIndicator
      }),
      getTagProps: ({
        index
      }) => _extends({
        key: index,
        'data-tag-index': index,
        tabIndex: -1
      }, !readOnly && {
        onDelete: handleTagDelete(index)
      }),
      getListboxProps: () => ({
        role: 'listbox',
        id: `${id}-listbox`,
        'aria-labelledby': `${id}-label`,
        ref: handleListboxRef,
        onMouseDown: event => {
          // Prevent blur
          event.preventDefault();
        }
      }),
      getOptionProps: ({
        index,
        option
      }) => {
        var _getOptionKey;
        const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));
        const disabled = getOptionDisabled ? getOptionDisabled(option) : false;
        return {
          key: (_getOptionKey = getOptionKey == null ? void 0 : getOptionKey(option)) != null ? _getOptionKey : getOptionLabel(option),
          tabIndex: -1,
          role: 'option',
          id: `${id}-option-${index}`,
          onMouseMove: handleOptionMouseMove,
          onClick: handleOptionClick,
          onTouchStart: handleOptionTouchStart,
          'data-option-index': index,
          'aria-disabled': disabled,
          'aria-selected': selected
        };
      },
      id,
      inputValue,
      value,
      dirty,
      expanded: popupOpen && anchorEl,
      popupOpen,
      focused: focused || focusedTag !== -1,
      anchorEl,
      setAnchorEl,
      focusedTag,
      groupedOptions
    };
  }

  const _excluded$1R = ["anchorEl", "component", "components", "componentsProps", "container", "disablePortal", "keepMounted", "modifiers", "open", "placement", "popperOptions", "popperRef", "transition", "slots", "slotProps"];
  const PopperRoot = styled$1(Popper$2, {
    name: 'MuiPopper',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({});

  /**
   *
   * Demos:
   *
   * - [Autocomplete](https://mui.com/material-ui/react-autocomplete/)
   * - [Menu](https://mui.com/material-ui/react-menu/)
   * - [Popper](https://mui.com/material-ui/react-popper/)
   *
   * API:
   *
   * - [Popper API](https://mui.com/material-ui/api/popper/)
   */
  const Popper = /*#__PURE__*/React__namespace.forwardRef(function Popper(inProps, ref) {
    var _slots$root;
    const theme = useTheme$3();
    const props = useThemeProps({
      props: inProps,
      name: 'MuiPopper'
    });
    const {
        anchorEl,
        component,
        components,
        componentsProps,
        container,
        disablePortal,
        keepMounted,
        modifiers,
        open,
        placement,
        popperOptions,
        popperRef,
        transition,
        slots,
        slotProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1R);
    const RootComponent = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components == null ? void 0 : components.Root;
    const otherProps = _extends({
      anchorEl,
      container,
      disablePortal,
      keepMounted,
      modifiers,
      open,
      placement,
      popperOptions,
      popperRef,
      transition
    }, other);
    return /*#__PURE__*/jsxRuntime_1(PopperRoot, _extends({
      as: component,
      direction: theme == null ? void 0 : theme.direction,
      slots: {
        root: RootComponent
      },
      slotProps: slotProps != null ? slotProps : componentsProps
    }, otherProps, {
      ref: ref
    }));
  });
  Popper.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),
     * or a function that returns either.
     * It's used to set the position of the popper.
     * The return value will passed as the reference object of the Popper instance.
     */
    anchorEl: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.object, PropTypes.func]),
    /**
     * Popper render function or node.
     */
    children: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.node, PropTypes.func]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The components used for each slot inside the Popper.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    components: PropTypes.shape({
      Root: PropTypes.elementType
    }),
    /**
     * The props used for each slot inside the Popper.
     * @default {}
     */
    componentsProps: PropTypes.shape({
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * An HTML element or function that returns one.
     * The `container` will have the portal children appended to it.
     *
     * You can also provide a callback, which is called in a React layout effect.
     * This lets you set the container from a ref, and also makes server-side rendering possible.
     *
     * By default, it uses the body of the top-level document object,
     * so it's simply `document.body` most of the time.
     */
    container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),
    /**
     * The `children` will be under the DOM hierarchy of the parent component.
     * @default false
     */
    disablePortal: PropTypes.bool,
    /**
     * Always keep the children in the DOM.
     * This prop can be useful in SEO situation or
     * when you want to maximize the responsiveness of the Popper.
     * @default false
     */
    keepMounted: PropTypes.bool,
    /**
     * Popper.js is based on a "plugin-like" architecture,
     * most of its features are fully encapsulated "modifiers".
     *
     * A modifier is a function that is called each time Popper.js needs to
     * compute the position of the popper.
     * For this reason, modifiers should be very performant to avoid bottlenecks.
     * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).
     */
    modifiers: PropTypes.arrayOf(PropTypes.shape({
      data: PropTypes.object,
      effect: PropTypes.func,
      enabled: PropTypes.bool,
      fn: PropTypes.func,
      name: PropTypes.any,
      options: PropTypes.object,
      phase: PropTypes.oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),
      requires: PropTypes.arrayOf(PropTypes.string),
      requiresIfExists: PropTypes.arrayOf(PropTypes.string)
    })),
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * Popper placement.
     * @default 'bottom'
     */
    placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
    /**
     * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.
     * @default {}
     */
    popperOptions: PropTypes.shape({
      modifiers: PropTypes.array,
      onFirstUpdate: PropTypes.func,
      placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
      strategy: PropTypes.oneOf(['absolute', 'fixed'])
    }),
    /**
     * A ref that points to the used popper instance.
     */
    popperRef: refType$1,
    /**
     * The props used for each slot inside the Popper.
     * @default {}
     */
    slotProps: PropTypes.shape({
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside the Popper.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Help supporting a react-transition-group/Transition component.
     * @default false
     */
    transition: PropTypes.bool
  } ;
  var Popper$1 = Popper;

  function getListSubheaderUtilityClass(slot) {
    return generateUtilityClass('MuiListSubheader', slot);
  }
  const listSubheaderClasses = generateUtilityClasses('MuiListSubheader', ['root', 'colorPrimary', 'colorInherit', 'gutters', 'inset', 'sticky']);
  var listSubheaderClasses$1 = listSubheaderClasses;

  const _excluded$1Q = ["className", "color", "component", "disableGutters", "disableSticky", "inset"];
  const useUtilityClasses$1A = ownerState => {
    const {
      classes,
      color,
      disableGutters,
      inset,
      disableSticky
    } = ownerState;
    const slots = {
      root: ['root', color !== 'default' && `color${capitalize(color)}`, !disableGutters && 'gutters', inset && 'inset', !disableSticky && 'sticky']
    };
    return composeClasses(slots, getListSubheaderUtilityClass, classes);
  };
  const ListSubheaderRoot = styled$1('li', {
    name: 'MuiListSubheader',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], !ownerState.disableGutters && styles.gutters, ownerState.inset && styles.inset, !ownerState.disableSticky && styles.sticky];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    boxSizing: 'border-box',
    lineHeight: '48px',
    listStyle: 'none',
    color: (theme.vars || theme).palette.text.secondary,
    fontFamily: theme.typography.fontFamily,
    fontWeight: theme.typography.fontWeightMedium,
    fontSize: theme.typography.pxToRem(14)
  }, ownerState.color === 'primary' && {
    color: (theme.vars || theme).palette.primary.main
  }, ownerState.color === 'inherit' && {
    color: 'inherit'
  }, !ownerState.disableGutters && {
    paddingLeft: 16,
    paddingRight: 16
  }, ownerState.inset && {
    paddingLeft: 72
  }, !ownerState.disableSticky && {
    position: 'sticky',
    top: 0,
    zIndex: 1,
    backgroundColor: (theme.vars || theme).palette.background.paper
  }));
  const ListSubheader = /*#__PURE__*/React__namespace.forwardRef(function ListSubheader(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListSubheader'
    });
    const {
        className,
        color = 'default',
        component = 'li',
        disableGutters = false,
        disableSticky = false,
        inset = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1Q);
    const ownerState = _extends({}, props, {
      color,
      component,
      disableGutters,
      disableSticky,
      inset
    });
    const classes = useUtilityClasses$1A(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ListSubheaderRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other));
  });
  ListSubheader.muiSkipListHighlight = true;
  ListSubheader.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component. It supports those theme colors that make sense for this component.
     * @default 'default'
     */
    color: PropTypes.oneOf(['default', 'inherit', 'primary']),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the List Subheader will not have gutters.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * If `true`, the List Subheader will not stick to the top during scroll.
     * @default false
     */
    disableSticky: PropTypes.bool,
    /**
     * If `true`, the List Subheader is indented.
     * @default false
     */
    inset: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ListSubheader$1 = ListSubheader;

  var CancelIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"
  }), 'Cancel');

  function getChipUtilityClass(slot) {
    return generateUtilityClass('MuiChip', slot);
  }
  const chipClasses = generateUtilityClasses('MuiChip', ['root', 'sizeSmall', 'sizeMedium', 'colorError', 'colorInfo', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorWarning', 'disabled', 'clickable', 'clickableColorPrimary', 'clickableColorSecondary', 'deletable', 'deletableColorPrimary', 'deletableColorSecondary', 'outlined', 'filled', 'outlinedPrimary', 'outlinedSecondary', 'filledPrimary', 'filledSecondary', 'avatar', 'avatarSmall', 'avatarMedium', 'avatarColorPrimary', 'avatarColorSecondary', 'icon', 'iconSmall', 'iconMedium', 'iconColorPrimary', 'iconColorSecondary', 'label', 'labelSmall', 'labelMedium', 'deleteIcon', 'deleteIconSmall', 'deleteIconMedium', 'deleteIconColorPrimary', 'deleteIconColorSecondary', 'deleteIconOutlinedColorPrimary', 'deleteIconOutlinedColorSecondary', 'deleteIconFilledColorPrimary', 'deleteIconFilledColorSecondary', 'focusVisible']);
  var chipClasses$1 = chipClasses;

  const _excluded$1P = ["avatar", "className", "clickable", "color", "component", "deleteIcon", "disabled", "icon", "label", "onClick", "onDelete", "onKeyDown", "onKeyUp", "size", "variant", "tabIndex", "skipFocusWhenDisabled"];
  const useUtilityClasses$1z = ownerState => {
    const {
      classes,
      disabled,
      size,
      color,
      iconColor,
      onDelete,
      clickable,
      variant
    } = ownerState;
    const slots = {
      root: ['root', variant, disabled && 'disabled', `size${capitalize(size)}`, `color${capitalize(color)}`, clickable && 'clickable', clickable && `clickableColor${capitalize(color)}`, onDelete && 'deletable', onDelete && `deletableColor${capitalize(color)}`, `${variant}${capitalize(color)}`],
      label: ['label', `label${capitalize(size)}`],
      avatar: ['avatar', `avatar${capitalize(size)}`, `avatarColor${capitalize(color)}`],
      icon: ['icon', `icon${capitalize(size)}`, `iconColor${capitalize(iconColor)}`],
      deleteIcon: ['deleteIcon', `deleteIcon${capitalize(size)}`, `deleteIconColor${capitalize(color)}`, `deleteIcon${capitalize(variant)}Color${capitalize(color)}`]
    };
    return composeClasses(slots, getChipUtilityClass, classes);
  };
  const ChipRoot = styled$1('div', {
    name: 'MuiChip',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      const {
        color,
        iconColor,
        clickable,
        onDelete,
        size,
        variant
      } = ownerState;
      return [{
        [`& .${chipClasses$1.avatar}`]: styles.avatar
      }, {
        [`& .${chipClasses$1.avatar}`]: styles[`avatar${capitalize(size)}`]
      }, {
        [`& .${chipClasses$1.avatar}`]: styles[`avatarColor${capitalize(color)}`]
      }, {
        [`& .${chipClasses$1.icon}`]: styles.icon
      }, {
        [`& .${chipClasses$1.icon}`]: styles[`icon${capitalize(size)}`]
      }, {
        [`& .${chipClasses$1.icon}`]: styles[`iconColor${capitalize(iconColor)}`]
      }, {
        [`& .${chipClasses$1.deleteIcon}`]: styles.deleteIcon
      }, {
        [`& .${chipClasses$1.deleteIcon}`]: styles[`deleteIcon${capitalize(size)}`]
      }, {
        [`& .${chipClasses$1.deleteIcon}`]: styles[`deleteIconColor${capitalize(color)}`]
      }, {
        [`& .${chipClasses$1.deleteIcon}`]: styles[`deleteIcon${capitalize(variant)}Color${capitalize(color)}`]
      }, styles.root, styles[`size${capitalize(size)}`], styles[`color${capitalize(color)}`], clickable && styles.clickable, clickable && color !== 'default' && styles[`clickableColor${capitalize(color)})`], onDelete && styles.deletable, onDelete && color !== 'default' && styles[`deletableColor${capitalize(color)}`], styles[variant], styles[`${variant}${capitalize(color)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    const textColor = theme.palette.mode === 'light' ? theme.palette.grey[700] : theme.palette.grey[300];
    return _extends({
      maxWidth: '100%',
      fontFamily: theme.typography.fontFamily,
      fontSize: theme.typography.pxToRem(13),
      display: 'inline-flex',
      alignItems: 'center',
      justifyContent: 'center',
      height: 32,
      color: (theme.vars || theme).palette.text.primary,
      backgroundColor: (theme.vars || theme).palette.action.selected,
      borderRadius: 32 / 2,
      whiteSpace: 'nowrap',
      transition: theme.transitions.create(['background-color', 'box-shadow']),
      // reset cursor explicitly in case ButtonBase is used
      cursor: 'unset',
      // We disable the focus ring for mouse, touch and keyboard users.
      outline: 0,
      textDecoration: 'none',
      border: 0,
      // Remove `button` border
      padding: 0,
      // Remove `button` padding
      verticalAlign: 'middle',
      boxSizing: 'border-box',
      [`&.${chipClasses$1.disabled}`]: {
        opacity: (theme.vars || theme).palette.action.disabledOpacity,
        pointerEvents: 'none'
      },
      [`& .${chipClasses$1.avatar}`]: {
        marginLeft: 5,
        marginRight: -6,
        width: 24,
        height: 24,
        color: theme.vars ? theme.vars.palette.Chip.defaultAvatarColor : textColor,
        fontSize: theme.typography.pxToRem(12)
      },
      [`& .${chipClasses$1.avatarColorPrimary}`]: {
        color: (theme.vars || theme).palette.primary.contrastText,
        backgroundColor: (theme.vars || theme).palette.primary.dark
      },
      [`& .${chipClasses$1.avatarColorSecondary}`]: {
        color: (theme.vars || theme).palette.secondary.contrastText,
        backgroundColor: (theme.vars || theme).palette.secondary.dark
      },
      [`& .${chipClasses$1.avatarSmall}`]: {
        marginLeft: 4,
        marginRight: -4,
        width: 18,
        height: 18,
        fontSize: theme.typography.pxToRem(10)
      },
      [`& .${chipClasses$1.icon}`]: _extends({
        marginLeft: 5,
        marginRight: -6
      }, ownerState.size === 'small' && {
        fontSize: 18,
        marginLeft: 4,
        marginRight: -4
      }, ownerState.iconColor === ownerState.color && _extends({
        color: theme.vars ? theme.vars.palette.Chip.defaultIconColor : textColor
      }, ownerState.color !== 'default' && {
        color: 'inherit'
      })),
      [`& .${chipClasses$1.deleteIcon}`]: _extends({
        WebkitTapHighlightColor: 'transparent',
        color: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / 0.26)` : alpha(theme.palette.text.primary, 0.26),
        fontSize: 22,
        cursor: 'pointer',
        margin: '0 5px 0 -6px',
        '&:hover': {
          color: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / 0.4)` : alpha(theme.palette.text.primary, 0.4)
        }
      }, ownerState.size === 'small' && {
        fontSize: 16,
        marginRight: 4,
        marginLeft: -4
      }, ownerState.color !== 'default' && {
        color: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].contrastTextChannel} / 0.7)` : alpha(theme.palette[ownerState.color].contrastText, 0.7),
        '&:hover, &:active': {
          color: (theme.vars || theme).palette[ownerState.color].contrastText
        }
      })
    }, ownerState.size === 'small' && {
      height: 24
    }, ownerState.color !== 'default' && {
      backgroundColor: (theme.vars || theme).palette[ownerState.color].main,
      color: (theme.vars || theme).palette[ownerState.color].contrastText
    }, ownerState.onDelete && {
      [`&.${chipClasses$1.focusVisible}`]: {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
      }
    }, ownerState.onDelete && ownerState.color !== 'default' && {
      [`&.${chipClasses$1.focusVisible}`]: {
        backgroundColor: (theme.vars || theme).palette[ownerState.color].dark
      }
    });
  }, ({
    theme,
    ownerState
  }) => _extends({}, ownerState.clickable && {
    userSelect: 'none',
    WebkitTapHighlightColor: 'transparent',
    cursor: 'pointer',
    '&:hover': {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity)
    },
    [`&.${chipClasses$1.focusVisible}`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
    },
    '&:active': {
      boxShadow: (theme.vars || theme).shadows[1]
    }
  }, ownerState.clickable && ownerState.color !== 'default' && {
    [`&:hover, &.${chipClasses$1.focusVisible}`]: {
      backgroundColor: (theme.vars || theme).palette[ownerState.color].dark
    }
  }), ({
    theme,
    ownerState
  }) => _extends({}, ownerState.variant === 'outlined' && {
    backgroundColor: 'transparent',
    border: theme.vars ? `1px solid ${theme.vars.palette.Chip.defaultBorder}` : `1px solid ${theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[700]}`,
    [`&.${chipClasses$1.clickable}:hover`]: {
      backgroundColor: (theme.vars || theme).palette.action.hover
    },
    [`&.${chipClasses$1.focusVisible}`]: {
      backgroundColor: (theme.vars || theme).palette.action.focus
    },
    [`& .${chipClasses$1.avatar}`]: {
      marginLeft: 4
    },
    [`& .${chipClasses$1.avatarSmall}`]: {
      marginLeft: 2
    },
    [`& .${chipClasses$1.icon}`]: {
      marginLeft: 4
    },
    [`& .${chipClasses$1.iconSmall}`]: {
      marginLeft: 2
    },
    [`& .${chipClasses$1.deleteIcon}`]: {
      marginRight: 5
    },
    [`& .${chipClasses$1.deleteIconSmall}`]: {
      marginRight: 3
    }
  }, ownerState.variant === 'outlined' && ownerState.color !== 'default' && {
    color: (theme.vars || theme).palette[ownerState.color].main,
    border: `1px solid ${theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.7)` : alpha(theme.palette[ownerState.color].main, 0.7)}`,
    [`&.${chipClasses$1.clickable}:hover`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity)
    },
    [`&.${chipClasses$1.focusVisible}`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.focusOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.focusOpacity)
    },
    [`& .${chipClasses$1.deleteIcon}`]: {
      color: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.7)` : alpha(theme.palette[ownerState.color].main, 0.7),
      '&:hover, &:active': {
        color: (theme.vars || theme).palette[ownerState.color].main
      }
    }
  }));
  const ChipLabel = styled$1('span', {
    name: 'MuiChip',
    slot: 'Label',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      const {
        size
      } = ownerState;
      return [styles.label, styles[`label${capitalize(size)}`]];
    }
  })(({
    ownerState
  }) => _extends({
    overflow: 'hidden',
    textOverflow: 'ellipsis',
    paddingLeft: 12,
    paddingRight: 12,
    whiteSpace: 'nowrap'
  }, ownerState.variant === 'outlined' && {
    paddingLeft: 11,
    paddingRight: 11
  }, ownerState.size === 'small' && {
    paddingLeft: 8,
    paddingRight: 8
  }, ownerState.size === 'small' && ownerState.variant === 'outlined' && {
    paddingLeft: 7,
    paddingRight: 7
  }));
  function isDeleteKeyboardEvent(keyboardEvent) {
    return keyboardEvent.key === 'Backspace' || keyboardEvent.key === 'Delete';
  }

  /**
   * Chips represent complex entities in small blocks, such as a contact.
   */
  const Chip = /*#__PURE__*/React__namespace.forwardRef(function Chip(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiChip'
    });
    const {
        avatar: avatarProp,
        className,
        clickable: clickableProp,
        color = 'default',
        component: ComponentProp,
        deleteIcon: deleteIconProp,
        disabled = false,
        icon: iconProp,
        label,
        onClick,
        onDelete,
        onKeyDown,
        onKeyUp,
        size = 'medium',
        variant = 'filled',
        tabIndex,
        skipFocusWhenDisabled = false // TODO v6: Rename to `focusableWhenDisabled`.
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1P);
    const chipRef = React__namespace.useRef(null);
    const handleRef = useForkRef(chipRef, ref);
    const handleDeleteIconClick = event => {
      // Stop the event from bubbling up to the `Chip`
      event.stopPropagation();
      if (onDelete) {
        onDelete(event);
      }
    };
    const handleKeyDown = event => {
      // Ignore events from children of `Chip`.
      if (event.currentTarget === event.target && isDeleteKeyboardEvent(event)) {
        // Will be handled in keyUp, otherwise some browsers
        // might init navigation
        event.preventDefault();
      }
      if (onKeyDown) {
        onKeyDown(event);
      }
    };
    const handleKeyUp = event => {
      // Ignore events from children of `Chip`.
      if (event.currentTarget === event.target) {
        if (onDelete && isDeleteKeyboardEvent(event)) {
          onDelete(event);
        } else if (event.key === 'Escape' && chipRef.current) {
          chipRef.current.blur();
        }
      }
      if (onKeyUp) {
        onKeyUp(event);
      }
    };
    const clickable = clickableProp !== false && onClick ? true : clickableProp;
    const component = clickable || onDelete ? ButtonBase$1 : ComponentProp || 'div';
    const ownerState = _extends({}, props, {
      component,
      disabled,
      size,
      color,
      iconColor: /*#__PURE__*/React__namespace.isValidElement(iconProp) ? iconProp.props.color || color : color,
      onDelete: !!onDelete,
      clickable,
      variant
    });
    const classes = useUtilityClasses$1z(ownerState);
    const moreProps = component === ButtonBase$1 ? _extends({
      component: ComponentProp || 'div',
      focusVisibleClassName: classes.focusVisible
    }, onDelete && {
      disableRipple: true
    }) : {};
    let deleteIcon = null;
    if (onDelete) {
      deleteIcon = deleteIconProp && /*#__PURE__*/React__namespace.isValidElement(deleteIconProp) ? ( /*#__PURE__*/React__namespace.cloneElement(deleteIconProp, {
        className: clsx(deleteIconProp.props.className, classes.deleteIcon),
        onClick: handleDeleteIconClick
      })) : /*#__PURE__*/jsxRuntime_1(CancelIcon, {
        className: clsx(classes.deleteIcon),
        onClick: handleDeleteIconClick
      });
    }
    let avatar = null;
    if (avatarProp && /*#__PURE__*/React__namespace.isValidElement(avatarProp)) {
      avatar = /*#__PURE__*/React__namespace.cloneElement(avatarProp, {
        className: clsx(classes.avatar, avatarProp.props.className)
      });
    }
    let icon = null;
    if (iconProp && /*#__PURE__*/React__namespace.isValidElement(iconProp)) {
      icon = /*#__PURE__*/React__namespace.cloneElement(iconProp, {
        className: clsx(classes.icon, iconProp.props.className)
      });
    }
    {
      if (avatar && icon) {
        console.error('MUI: The Chip component can not handle the avatar ' + 'and the icon prop at the same time. Pick one.');
      }
    }
    return /*#__PURE__*/jsxRuntime_2(ChipRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      disabled: clickable && disabled ? true : undefined,
      onClick: onClick,
      onKeyDown: handleKeyDown,
      onKeyUp: handleKeyUp,
      ref: handleRef,
      tabIndex: skipFocusWhenDisabled && disabled ? -1 : tabIndex,
      ownerState: ownerState
    }, moreProps, other, {
      children: [avatar || icon, /*#__PURE__*/jsxRuntime_1(ChipLabel, {
        className: clsx(classes.label),
        ownerState: ownerState,
        children: label
      }), deleteIcon]
    }));
  });
  Chip.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The Avatar element to display.
     */
    avatar: PropTypes.element,
    /**
     * This prop isn't supported.
     * Use the `component` prop if you need to change the children structure.
     */
    children: unsupportedProp,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the chip will appear clickable, and will raise when pressed,
     * even if the onClick prop is not defined.
     * If `false`, the chip will not appear clickable, even if onClick prop is defined.
     * This can be used, for example,
     * along with the component prop to indicate an anchor Chip is clickable.
     * Note: this controls the UI and does not affect the onClick event.
     */
    clickable: PropTypes.bool,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'default'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Override the default delete icon element. Shown only if `onDelete` is set.
     */
    deleteIcon: PropTypes.element,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * Icon element.
     */
    icon: PropTypes.element,
    /**
     * The content of the component.
     */
    label: PropTypes.node,
    /**
     * @ignore
     */
    onClick: PropTypes.func,
    /**
     * Callback fired when the delete icon is clicked.
     * If set, the delete icon will be shown.
     */
    onDelete: PropTypes.func,
    /**
     * @ignore
     */
    onKeyDown: PropTypes.func,
    /**
     * @ignore
     */
    onKeyUp: PropTypes.func,
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * If `true`, allows the disabled chip to escape focus.
     * If `false`, allows the disabled chip to receive focus.
     * @default false
     */
    skipFocusWhenDisabled: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * @ignore
     */
    tabIndex: PropTypes.number,
    /**
     * The variant to use.
     * @default 'filled'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined']), PropTypes.string])
  } ;
  var Chip$1 = Chip;

  function formControlState({
    props,
    states,
    muiFormControl
  }) {
    return states.reduce((acc, state) => {
      acc[state] = props[state];
      if (muiFormControl) {
        if (typeof props[state] === 'undefined') {
          acc[state] = muiFormControl[state];
        }
      }
      return acc;
    }, {});
  }

  /**
   * @ignore - internal component.
   */
  const FormControlContext = /*#__PURE__*/React__namespace.createContext(undefined);
  {
    FormControlContext.displayName = 'FormControlContext';
  }
  var FormControlContext$1 = FormControlContext;

  function useFormControl() {
    return React__namespace.useContext(FormControlContext$1);
  }

  function GlobalStyles(props) {
    return /*#__PURE__*/jsxRuntime_1(GlobalStyles$1, _extends({}, props, {
      defaultTheme: defaultTheme$3,
      themeId: THEME_ID
    }));
  }
  GlobalStyles.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The styles you want to apply globally.
     */
    styles: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.array, PropTypes.func, PropTypes.number, PropTypes.object, PropTypes.string, PropTypes.bool])
  } ;

  // Supports determination of isControlled().
  // Controlled input accepts its current value as a prop.
  //
  // @see https://facebook.github.io/react/docs/forms.html#controlled-components
  // @param value
  // @returns {boolean} true if string (including '') or number (including zero)
  function hasValue(value) {
    return value != null && !(Array.isArray(value) && value.length === 0);
  }

  // Determine if field is empty or filled.
  // Response determines if label is presented above field or as placeholder.
  //
  // @param obj
  // @param SSR
  // @returns {boolean} False when not present or empty string.
  //                    True when any number or string with length.
  function isFilled(obj, SSR = false) {
    return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');
  }

  // Determine if an Input is adorned on start.
  // It's corresponding to the left with LTR.
  //
  // @param obj
  // @returns {boolean} False when no adornments.
  //                    True when adorned at the start.
  function isAdornedStart(obj) {
    return obj.startAdornment;
  }

  function getInputBaseUtilityClass(slot) {
    return generateUtilityClass('MuiInputBase', slot);
  }
  const inputBaseClasses = generateUtilityClasses('MuiInputBase', ['root', 'formControl', 'focused', 'disabled', 'adornedStart', 'adornedEnd', 'error', 'sizeSmall', 'multiline', 'colorSecondary', 'fullWidth', 'hiddenLabel', 'readOnly', 'input', 'inputSizeSmall', 'inputMultiline', 'inputTypeSearch', 'inputAdornedStart', 'inputAdornedEnd', 'inputHiddenLabel']);
  var inputBaseClasses$1 = inputBaseClasses;

  const _excluded$1O = ["aria-describedby", "autoComplete", "autoFocus", "className", "color", "components", "componentsProps", "defaultValue", "disabled", "disableInjectingGlobalStyles", "endAdornment", "error", "fullWidth", "id", "inputComponent", "inputProps", "inputRef", "margin", "maxRows", "minRows", "multiline", "name", "onBlur", "onChange", "onClick", "onFocus", "onKeyDown", "onKeyUp", "placeholder", "readOnly", "renderSuffix", "rows", "size", "slotProps", "slots", "startAdornment", "type", "value"];
  const rootOverridesResolver = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, ownerState.formControl && styles.formControl, ownerState.startAdornment && styles.adornedStart, ownerState.endAdornment && styles.adornedEnd, ownerState.error && styles.error, ownerState.size === 'small' && styles.sizeSmall, ownerState.multiline && styles.multiline, ownerState.color && styles[`color${capitalize(ownerState.color)}`], ownerState.fullWidth && styles.fullWidth, ownerState.hiddenLabel && styles.hiddenLabel];
  };
  const inputOverridesResolver = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.input, ownerState.size === 'small' && styles.inputSizeSmall, ownerState.multiline && styles.inputMultiline, ownerState.type === 'search' && styles.inputTypeSearch, ownerState.startAdornment && styles.inputAdornedStart, ownerState.endAdornment && styles.inputAdornedEnd, ownerState.hiddenLabel && styles.inputHiddenLabel];
  };
  const useUtilityClasses$1y = ownerState => {
    const {
      classes,
      color,
      disabled,
      error,
      endAdornment,
      focused,
      formControl,
      fullWidth,
      hiddenLabel,
      multiline,
      readOnly,
      size,
      startAdornment,
      type
    } = ownerState;
    const slots = {
      root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', fullWidth && 'fullWidth', focused && 'focused', formControl && 'formControl', size && size !== 'medium' && `size${capitalize(size)}`, multiline && 'multiline', startAdornment && 'adornedStart', endAdornment && 'adornedEnd', hiddenLabel && 'hiddenLabel', readOnly && 'readOnly'],
      input: ['input', disabled && 'disabled', type === 'search' && 'inputTypeSearch', multiline && 'inputMultiline', size === 'small' && 'inputSizeSmall', hiddenLabel && 'inputHiddenLabel', startAdornment && 'inputAdornedStart', endAdornment && 'inputAdornedEnd', readOnly && 'readOnly']
    };
    return composeClasses(slots, getInputBaseUtilityClass, classes);
  };
  const InputBaseRoot = styled$1('div', {
    name: 'MuiInputBase',
    slot: 'Root',
    overridesResolver: rootOverridesResolver
  })(({
    theme,
    ownerState
  }) => _extends({}, theme.typography.body1, {
    color: (theme.vars || theme).palette.text.primary,
    lineHeight: '1.4375em',
    // 23px
    boxSizing: 'border-box',
    // Prevent padding issue with fullWidth.
    position: 'relative',
    cursor: 'text',
    display: 'inline-flex',
    alignItems: 'center',
    [`&.${inputBaseClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.text.disabled,
      cursor: 'default'
    }
  }, ownerState.multiline && _extends({
    padding: '4px 0 5px'
  }, ownerState.size === 'small' && {
    paddingTop: 1
  }), ownerState.fullWidth && {
    width: '100%'
  }));
  const InputBaseComponent = styled$1('input', {
    name: 'MuiInputBase',
    slot: 'Input',
    overridesResolver: inputOverridesResolver
  })(({
    theme,
    ownerState
  }) => {
    const light = theme.palette.mode === 'light';
    const placeholder = _extends({
      color: 'currentColor'
    }, theme.vars ? {
      opacity: theme.vars.opacity.inputPlaceholder
    } : {
      opacity: light ? 0.42 : 0.5
    }, {
      transition: theme.transitions.create('opacity', {
        duration: theme.transitions.duration.shorter
      })
    });
    const placeholderHidden = {
      opacity: '0 !important'
    };
    const placeholderVisible = theme.vars ? {
      opacity: theme.vars.opacity.inputPlaceholder
    } : {
      opacity: light ? 0.42 : 0.5
    };
    return _extends({
      font: 'inherit',
      letterSpacing: 'inherit',
      color: 'currentColor',
      padding: '4px 0 5px',
      border: 0,
      boxSizing: 'content-box',
      background: 'none',
      height: '1.4375em',
      // Reset 23pxthe native input line-height
      margin: 0,
      // Reset for Safari
      WebkitTapHighlightColor: 'transparent',
      display: 'block',
      // Make the flex item shrink with Firefox
      minWidth: 0,
      width: '100%',
      // Fix IE11 width issue
      animationName: 'mui-auto-fill-cancel',
      animationDuration: '10ms',
      '&::-webkit-input-placeholder': placeholder,
      '&::-moz-placeholder': placeholder,
      // Firefox 19+
      '&:-ms-input-placeholder': placeholder,
      // IE11
      '&::-ms-input-placeholder': placeholder,
      // Edge
      '&:focus': {
        outline: 0
      },
      // Reset Firefox invalid required input style
      '&:invalid': {
        boxShadow: 'none'
      },
      '&::-webkit-search-decoration': {
        // Remove the padding when type=search.
        WebkitAppearance: 'none'
      },
      // Show and hide the placeholder logic
      [`label[data-shrink=false] + .${inputBaseClasses$1.formControl} &`]: {
        '&::-webkit-input-placeholder': placeholderHidden,
        '&::-moz-placeholder': placeholderHidden,
        // Firefox 19+
        '&:-ms-input-placeholder': placeholderHidden,
        // IE11
        '&::-ms-input-placeholder': placeholderHidden,
        // Edge
        '&:focus::-webkit-input-placeholder': placeholderVisible,
        '&:focus::-moz-placeholder': placeholderVisible,
        // Firefox 19+
        '&:focus:-ms-input-placeholder': placeholderVisible,
        // IE11
        '&:focus::-ms-input-placeholder': placeholderVisible // Edge
      },
      [`&.${inputBaseClasses$1.disabled}`]: {
        opacity: 1,
        // Reset iOS opacity
        WebkitTextFillColor: (theme.vars || theme).palette.text.disabled // Fix opacity Safari bug
      },
      '&:-webkit-autofill': {
        animationDuration: '5000s',
        animationName: 'mui-auto-fill'
      }
    }, ownerState.size === 'small' && {
      paddingTop: 1
    }, ownerState.multiline && {
      height: 'auto',
      resize: 'none',
      padding: 0,
      paddingTop: 0
    }, ownerState.type === 'search' && {
      // Improve type search style.
      MozAppearance: 'textfield'
    });
  });
  const inputGlobalStyles = /*#__PURE__*/jsxRuntime_1(GlobalStyles, {
    styles: {
      '@keyframes mui-auto-fill': {
        from: {
          display: 'block'
        }
      },
      '@keyframes mui-auto-fill-cancel': {
        from: {
          display: 'block'
        }
      }
    }
  });

  /**
   * `InputBase` contains as few styles as possible.
   * It aims to be a simple building block for creating an input.
   * It contains a load of style reset and some state logic.
   */
  const InputBase = /*#__PURE__*/React__namespace.forwardRef(function InputBase(inProps, ref) {
    var _slotProps$input;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiInputBase'
    });
    const {
        'aria-describedby': ariaDescribedby,
        autoComplete,
        autoFocus,
        className,
        components = {},
        componentsProps = {},
        defaultValue,
        disabled,
        disableInjectingGlobalStyles,
        endAdornment,
        fullWidth = false,
        id,
        inputComponent = 'input',
        inputProps: inputPropsProp = {},
        inputRef: inputRefProp,
        maxRows,
        minRows,
        multiline = false,
        name,
        onBlur,
        onChange,
        onClick,
        onFocus,
        onKeyDown,
        onKeyUp,
        placeholder,
        readOnly,
        renderSuffix,
        rows,
        slotProps = {},
        slots = {},
        startAdornment,
        type = 'text',
        value: valueProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1O);
    const value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;
    const {
      current: isControlled
    } = React__namespace.useRef(value != null);
    const inputRef = React__namespace.useRef();
    const handleInputRefWarning = React__namespace.useCallback(instance => {
      {
        if (instance && instance.nodeName !== 'INPUT' && !instance.focus) {
          console.error(['MUI: You have provided a `inputComponent` to the input component', 'that does not correctly handle the `ref` prop.', 'Make sure the `ref` prop is called with a HTMLInputElement.'].join('\n'));
        }
      }
    }, []);
    const handleInputRef = useForkRef(inputRef, inputRefProp, inputPropsProp.ref, handleInputRefWarning);
    const [focused, setFocused] = React__namespace.useState(false);
    const muiFormControl = useFormControl();
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useEffect(() => {
        if (muiFormControl) {
          return muiFormControl.registerEffect();
        }
        return undefined;
      }, [muiFormControl]);
    }
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['color', 'disabled', 'error', 'hiddenLabel', 'size', 'required', 'filled']
    });
    fcs.focused = muiFormControl ? muiFormControl.focused : focused;

    // The blur won't fire when the disabled state is set on a focused input.
    // We need to book keep the focused state manually.
    React__namespace.useEffect(() => {
      if (!muiFormControl && disabled && focused) {
        setFocused(false);
        if (onBlur) {
          onBlur();
        }
      }
    }, [muiFormControl, disabled, focused, onBlur]);
    const onFilled = muiFormControl && muiFormControl.onFilled;
    const onEmpty = muiFormControl && muiFormControl.onEmpty;
    const checkDirty = React__namespace.useCallback(obj => {
      if (isFilled(obj)) {
        if (onFilled) {
          onFilled();
        }
      } else if (onEmpty) {
        onEmpty();
      }
    }, [onFilled, onEmpty]);
    useEnhancedEffect$1(() => {
      if (isControlled) {
        checkDirty({
          value
        });
      }
    }, [value, checkDirty, isControlled]);
    const handleFocus = event => {
      // Fix a bug with IE11 where the focus/blur events are triggered
      // while the component is disabled.
      if (fcs.disabled) {
        event.stopPropagation();
        return;
      }
      if (onFocus) {
        onFocus(event);
      }
      if (inputPropsProp.onFocus) {
        inputPropsProp.onFocus(event);
      }
      if (muiFormControl && muiFormControl.onFocus) {
        muiFormControl.onFocus(event);
      } else {
        setFocused(true);
      }
    };
    const handleBlur = event => {
      if (onBlur) {
        onBlur(event);
      }
      if (inputPropsProp.onBlur) {
        inputPropsProp.onBlur(event);
      }
      if (muiFormControl && muiFormControl.onBlur) {
        muiFormControl.onBlur(event);
      } else {
        setFocused(false);
      }
    };
    const handleChange = (event, ...args) => {
      if (!isControlled) {
        const element = event.target || inputRef.current;
        if (element == null) {
          throw new Error(`MUI: Expected valid input target. Did you use a custom \`inputComponent\` and forget to forward refs? See https://mui.com/r/input-component-ref-interface for more info.` );
        }
        checkDirty({
          value: element.value
        });
      }
      if (inputPropsProp.onChange) {
        inputPropsProp.onChange(event, ...args);
      }

      // Perform in the willUpdate
      if (onChange) {
        onChange(event, ...args);
      }
    };

    // Check the input state on mount, in case it was filled by the user
    // or auto filled by the browser before the hydration (for SSR).
    React__namespace.useEffect(() => {
      checkDirty(inputRef.current);
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, []);
    const handleClick = event => {
      if (inputRef.current && event.currentTarget === event.target) {
        inputRef.current.focus();
      }
      if (onClick) {
        onClick(event);
      }
    };
    let InputComponent = inputComponent;
    let inputProps = inputPropsProp;
    if (multiline && InputComponent === 'input') {
      if (rows) {
        {
          if (minRows || maxRows) {
            console.warn('MUI: You can not use the `minRows` or `maxRows` props when the input `rows` prop is set.');
          }
        }
        inputProps = _extends({
          type: undefined,
          minRows: rows,
          maxRows: rows
        }, inputProps);
      } else {
        inputProps = _extends({
          type: undefined,
          maxRows,
          minRows
        }, inputProps);
      }
      InputComponent = TextareaAutosize;
    }
    const handleAutoFill = event => {
      // Provide a fake value as Chrome might not let you access it for security reasons.
      checkDirty(event.animationName === 'mui-auto-fill-cancel' ? inputRef.current : {
        value: 'x'
      });
    };
    React__namespace.useEffect(() => {
      if (muiFormControl) {
        muiFormControl.setAdornedStart(Boolean(startAdornment));
      }
    }, [muiFormControl, startAdornment]);
    const ownerState = _extends({}, props, {
      color: fcs.color || 'primary',
      disabled: fcs.disabled,
      endAdornment,
      error: fcs.error,
      focused: fcs.focused,
      formControl: muiFormControl,
      fullWidth,
      hiddenLabel: fcs.hiddenLabel,
      multiline,
      size: fcs.size,
      startAdornment,
      type
    });
    const classes = useUtilityClasses$1y(ownerState);
    const Root = slots.root || components.Root || InputBaseRoot;
    const rootProps = slotProps.root || componentsProps.root || {};
    const Input = slots.input || components.Input || InputBaseComponent;
    inputProps = _extends({}, inputProps, (_slotProps$input = slotProps.input) != null ? _slotProps$input : componentsProps.input);
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [!disableInjectingGlobalStyles && inputGlobalStyles, /*#__PURE__*/jsxRuntime_2(Root, _extends({}, rootProps, !isHostComponent(Root) && {
        ownerState: _extends({}, ownerState, rootProps.ownerState)
      }, {
        ref: ref,
        onClick: handleClick
      }, other, {
        className: clsx(classes.root, rootProps.className, className, readOnly && 'MuiInputBase-readOnly'),
        children: [startAdornment, /*#__PURE__*/jsxRuntime_1(FormControlContext$1.Provider, {
          value: null,
          children: /*#__PURE__*/jsxRuntime_1(Input, _extends({
            ownerState: ownerState,
            "aria-invalid": fcs.error,
            "aria-describedby": ariaDescribedby,
            autoComplete: autoComplete,
            autoFocus: autoFocus,
            defaultValue: defaultValue,
            disabled: fcs.disabled,
            id: id,
            onAnimationStart: handleAutoFill,
            name: name,
            placeholder: placeholder,
            readOnly: readOnly,
            required: fcs.required,
            rows: rows,
            value: value,
            onKeyDown: onKeyDown,
            onKeyUp: onKeyUp,
            type: type
          }, inputProps, !isHostComponent(Input) && {
            as: InputComponent,
            ownerState: _extends({}, ownerState, inputProps.ownerState)
          }, {
            ref: handleInputRef,
            className: clsx(classes.input, inputProps.className, readOnly && 'MuiInputBase-readOnly'),
            onBlur: handleBlur,
            onChange: handleChange,
            onFocus: handleFocus
          }))
        }), endAdornment, renderSuffix ? renderSuffix(_extends({}, fcs, {
          startAdornment
        })) : null]
      }))]
    });
  });
  InputBase.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * @ignore
     */
    'aria-describedby': PropTypes.string,
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
     */
    autoComplete: PropTypes.string,
    /**
     * If `true`, the `input` element is focused during the first mount.
     */
    autoFocus: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Input: PropTypes.elementType,
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      input: PropTypes.object,
      root: PropTypes.object
    }),
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, the component is disabled.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, GlobalStyles for the auto-fill keyframes will not be injected/removed on mount/unmount. Make sure to inject them at the top of your application.
     * This option is intended to help with boosting the initial rendering performance if you are loading a big amount of Input components at once.
     * @default false
     */
    disableInjectingGlobalStyles: PropTypes.bool,
    /**
     * End `InputAdornment` for this component.
     */
    endAdornment: PropTypes.node,
    /**
     * If `true`, the `input` will indicate an error.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the `input` will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * The component used for the `input` element.
     * Either a string to use a HTML element or a component.
     * @default 'input'
     */
    inputComponent: elementTypeAcceptingRef$1,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     * @default {}
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * If `dense`, will adjust vertical spacing. This is normally obtained via context from
     * FormControl.
     * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.
     */
    margin: PropTypes.oneOf(['dense', 'none']),
    /**
     * Maximum number of rows to display when multiline option is set to true.
     */
    maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Minimum number of rows to display when multiline option is set to true.
     */
    minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * If `true`, a [TextareaAutosize](/material-ui/react-textarea-autosize/) element is rendered.
     * @default false
     */
    multiline: PropTypes.bool,
    /**
     * Name attribute of the `input` element.
     */
    name: PropTypes.string,
    /**
     * Callback fired when the `input` is blurred.
     *
     * Notice that the first argument (event) might be undefined.
     */
    onBlur: PropTypes.func,
    /**
     * Callback fired when the value is changed.
     *
     * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * @ignore
     */
    onClick: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * Callback fired when the `input` doesn't satisfy its constraints.
     */
    onInvalid: PropTypes.func,
    /**
     * @ignore
     */
    onKeyDown: PropTypes.func,
    /**
     * @ignore
     */
    onKeyUp: PropTypes.func,
    /**
     * The short hint displayed in the `input` before the user enters a value.
     */
    placeholder: PropTypes.string,
    /**
     * It prevents the user from changing the value of the field
     * (not from interacting with the field).
     */
    readOnly: PropTypes.bool,
    /**
     * @ignore
     */
    renderSuffix: PropTypes.func,
    /**
     * If `true`, the `input` element is required.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    required: PropTypes.bool,
    /**
     * Number of rows to display when multiline option is set to true.
     */
    rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * The size of the component.
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      input: PropTypes.object,
      root: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      input: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * Start `InputAdornment` for this component.
     */
    startAdornment: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
     * @default 'text'
     */
    type: PropTypes.string,
    /**
     * The value of the `input` element, required for a controlled component.
     */
    value: PropTypes.any
  } ;
  var InputBase$1 = InputBase;

  function getInputUtilityClass(slot) {
    return generateUtilityClass('MuiInput', slot);
  }
  const inputClasses = _extends({}, inputBaseClasses$1, generateUtilityClasses('MuiInput', ['root', 'underline', 'input']));
  var inputClasses$1 = inputClasses;

  function getOutlinedInputUtilityClass(slot) {
    return generateUtilityClass('MuiOutlinedInput', slot);
  }
  const outlinedInputClasses = _extends({}, inputBaseClasses$1, generateUtilityClasses('MuiOutlinedInput', ['root', 'notchedOutline', 'input']));
  var outlinedInputClasses$1 = outlinedInputClasses;

  function getFilledInputUtilityClass(slot) {
    return generateUtilityClass('MuiFilledInput', slot);
  }
  const filledInputClasses = _extends({}, inputBaseClasses$1, generateUtilityClasses('MuiFilledInput', ['root', 'underline', 'input']));
  var filledInputClasses$1 = filledInputClasses;

  var ArrowDropDownIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M7 10l5 5 5-5z"
  }), 'ArrowDropDown');

  function getAutocompleteUtilityClass(slot) {
    return generateUtilityClass('MuiAutocomplete', slot);
  }
  const autocompleteClasses = generateUtilityClasses('MuiAutocomplete', ['root', 'expanded', 'fullWidth', 'focused', 'focusVisible', 'tag', 'tagSizeSmall', 'tagSizeMedium', 'hasPopupIcon', 'hasClearIcon', 'inputRoot', 'input', 'inputFocused', 'endAdornment', 'clearIndicator', 'popupIndicator', 'popupIndicatorOpen', 'popper', 'popperDisablePortal', 'paper', 'listbox', 'loading', 'noOptions', 'option', 'groupLabel', 'groupUl']);
  var autocompleteClasses$1 = autocompleteClasses;

  var _ClearIcon, _ArrowDropDownIcon;
  const _excluded$1N = ["autoComplete", "autoHighlight", "autoSelect", "blurOnSelect", "ChipProps", "className", "clearIcon", "clearOnBlur", "clearOnEscape", "clearText", "closeText", "componentsProps", "defaultValue", "disableClearable", "disableCloseOnSelect", "disabled", "disabledItemsFocusable", "disableListWrap", "disablePortal", "filterOptions", "filterSelectedOptions", "forcePopupIcon", "freeSolo", "fullWidth", "getLimitTagsText", "getOptionDisabled", "getOptionKey", "getOptionLabel", "isOptionEqualToValue", "groupBy", "handleHomeEndKeys", "id", "includeInputInList", "inputValue", "limitTags", "ListboxComponent", "ListboxProps", "loading", "loadingText", "multiple", "noOptionsText", "onChange", "onClose", "onHighlightChange", "onInputChange", "onOpen", "open", "openOnFocus", "openText", "options", "PaperComponent", "PopperComponent", "popupIcon", "readOnly", "renderGroup", "renderInput", "renderOption", "renderTags", "selectOnFocus", "size", "slotProps", "value"],
    _excluded2$a = ["ref"],
    _excluded3$2 = ["key"];
  const useUtilityClasses$1x = ownerState => {
    const {
      classes,
      disablePortal,
      expanded,
      focused,
      fullWidth,
      hasClearIcon,
      hasPopupIcon,
      inputFocused,
      popupOpen,
      size
    } = ownerState;
    const slots = {
      root: ['root', expanded && 'expanded', focused && 'focused', fullWidth && 'fullWidth', hasClearIcon && 'hasClearIcon', hasPopupIcon && 'hasPopupIcon'],
      inputRoot: ['inputRoot'],
      input: ['input', inputFocused && 'inputFocused'],
      tag: ['tag', `tagSize${capitalize(size)}`],
      endAdornment: ['endAdornment'],
      clearIndicator: ['clearIndicator'],
      popupIndicator: ['popupIndicator', popupOpen && 'popupIndicatorOpen'],
      popper: ['popper', disablePortal && 'popperDisablePortal'],
      paper: ['paper'],
      listbox: ['listbox'],
      loading: ['loading'],
      noOptions: ['noOptions'],
      option: ['option'],
      groupLabel: ['groupLabel'],
      groupUl: ['groupUl']
    };
    return composeClasses(slots, getAutocompleteUtilityClass, classes);
  };
  const AutocompleteRoot = styled$1('div', {
    name: 'MuiAutocomplete',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      const {
        fullWidth,
        hasClearIcon,
        hasPopupIcon,
        inputFocused,
        size
      } = ownerState;
      return [{
        [`& .${autocompleteClasses$1.tag}`]: styles.tag
      }, {
        [`& .${autocompleteClasses$1.tag}`]: styles[`tagSize${capitalize(size)}`]
      }, {
        [`& .${autocompleteClasses$1.inputRoot}`]: styles.inputRoot
      }, {
        [`& .${autocompleteClasses$1.input}`]: styles.input
      }, {
        [`& .${autocompleteClasses$1.input}`]: inputFocused && styles.inputFocused
      }, styles.root, fullWidth && styles.fullWidth, hasPopupIcon && styles.hasPopupIcon, hasClearIcon && styles.hasClearIcon];
    }
  })(({
    ownerState
  }) => _extends({
    [`&.${autocompleteClasses$1.focused} .${autocompleteClasses$1.clearIndicator}`]: {
      visibility: 'visible'
    },
    /* Avoid double tap issue on iOS */
    '@media (pointer: fine)': {
      [`&:hover .${autocompleteClasses$1.clearIndicator}`]: {
        visibility: 'visible'
      }
    }
  }, ownerState.fullWidth && {
    width: '100%'
  }, {
    [`& .${autocompleteClasses$1.tag}`]: _extends({
      margin: 3,
      maxWidth: 'calc(100% - 6px)'
    }, ownerState.size === 'small' && {
      margin: 2,
      maxWidth: 'calc(100% - 4px)'
    }),
    [`& .${autocompleteClasses$1.inputRoot}`]: {
      flexWrap: 'wrap',
      [`.${autocompleteClasses$1.hasPopupIcon}&, .${autocompleteClasses$1.hasClearIcon}&`]: {
        paddingRight: 26 + 4
      },
      [`.${autocompleteClasses$1.hasPopupIcon}.${autocompleteClasses$1.hasClearIcon}&`]: {
        paddingRight: 52 + 4
      },
      [`& .${autocompleteClasses$1.input}`]: {
        width: 0,
        minWidth: 30
      }
    },
    [`& .${inputClasses$1.root}`]: {
      paddingBottom: 1,
      '& .MuiInput-input': {
        padding: '4px 4px 4px 0px'
      }
    },
    [`& .${inputClasses$1.root}.${inputBaseClasses$1.sizeSmall}`]: {
      [`& .${inputClasses$1.input}`]: {
        padding: '2px 4px 3px 0'
      }
    },
    [`& .${outlinedInputClasses$1.root}`]: {
      padding: 9,
      [`.${autocompleteClasses$1.hasPopupIcon}&, .${autocompleteClasses$1.hasClearIcon}&`]: {
        paddingRight: 26 + 4 + 9
      },
      [`.${autocompleteClasses$1.hasPopupIcon}.${autocompleteClasses$1.hasClearIcon}&`]: {
        paddingRight: 52 + 4 + 9
      },
      [`& .${autocompleteClasses$1.input}`]: {
        padding: '7.5px 4px 7.5px 5px'
      },
      [`& .${autocompleteClasses$1.endAdornment}`]: {
        right: 9
      }
    },
    [`& .${outlinedInputClasses$1.root}.${inputBaseClasses$1.sizeSmall}`]: {
      // Don't specify paddingRight, as it overrides the default value set when there is only
      // one of the popup or clear icon as the specificity is equal so the latter one wins
      paddingTop: 6,
      paddingBottom: 6,
      paddingLeft: 6,
      [`& .${autocompleteClasses$1.input}`]: {
        padding: '2.5px 4px 2.5px 8px'
      }
    },
    [`& .${filledInputClasses$1.root}`]: {
      paddingTop: 19,
      paddingLeft: 8,
      [`.${autocompleteClasses$1.hasPopupIcon}&, .${autocompleteClasses$1.hasClearIcon}&`]: {
        paddingRight: 26 + 4 + 9
      },
      [`.${autocompleteClasses$1.hasPopupIcon}.${autocompleteClasses$1.hasClearIcon}&`]: {
        paddingRight: 52 + 4 + 9
      },
      [`& .${filledInputClasses$1.input}`]: {
        padding: '7px 4px'
      },
      [`& .${autocompleteClasses$1.endAdornment}`]: {
        right: 9
      }
    },
    [`& .${filledInputClasses$1.root}.${inputBaseClasses$1.sizeSmall}`]: {
      paddingBottom: 1,
      [`& .${filledInputClasses$1.input}`]: {
        padding: '2.5px 4px'
      }
    },
    [`& .${inputBaseClasses$1.hiddenLabel}`]: {
      paddingTop: 8
    },
    [`& .${filledInputClasses$1.root}.${inputBaseClasses$1.hiddenLabel}`]: {
      paddingTop: 0,
      paddingBottom: 0,
      [`& .${autocompleteClasses$1.input}`]: {
        paddingTop: 16,
        paddingBottom: 17
      }
    },
    [`& .${filledInputClasses$1.root}.${inputBaseClasses$1.hiddenLabel}.${inputBaseClasses$1.sizeSmall}`]: {
      [`& .${autocompleteClasses$1.input}`]: {
        paddingTop: 8,
        paddingBottom: 9
      }
    },
    [`& .${autocompleteClasses$1.input}`]: _extends({
      flexGrow: 1,
      textOverflow: 'ellipsis',
      opacity: 0
    }, ownerState.inputFocused && {
      opacity: 1
    })
  }));
  const AutocompleteEndAdornment = styled$1('div', {
    name: 'MuiAutocomplete',
    slot: 'EndAdornment',
    overridesResolver: (props, styles) => styles.endAdornment
  })({
    // We use a position absolute to support wrapping tags.
    position: 'absolute',
    right: 0,
    top: 'calc(50% - 14px)' // Center vertically
  });
  const AutocompleteClearIndicator = styled$1(IconButton$1, {
    name: 'MuiAutocomplete',
    slot: 'ClearIndicator',
    overridesResolver: (props, styles) => styles.clearIndicator
  })({
    marginRight: -2,
    padding: 4,
    visibility: 'hidden'
  });
  const AutocompletePopupIndicator = styled$1(IconButton$1, {
    name: 'MuiAutocomplete',
    slot: 'PopupIndicator',
    overridesResolver: ({
      ownerState
    }, styles) => _extends({}, styles.popupIndicator, ownerState.popupOpen && styles.popupIndicatorOpen)
  })(({
    ownerState
  }) => _extends({
    padding: 2,
    marginRight: -2
  }, ownerState.popupOpen && {
    transform: 'rotate(180deg)'
  }));
  const AutocompletePopper = styled$1(Popper$1, {
    name: 'MuiAutocomplete',
    slot: 'Popper',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${autocompleteClasses$1.option}`]: styles.option
      }, styles.popper, ownerState.disablePortal && styles.popperDisablePortal];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    zIndex: (theme.vars || theme).zIndex.modal
  }, ownerState.disablePortal && {
    position: 'absolute'
  }));
  const AutocompletePaper = styled$1(Paper$1, {
    name: 'MuiAutocomplete',
    slot: 'Paper',
    overridesResolver: (props, styles) => styles.paper
  })(({
    theme
  }) => _extends({}, theme.typography.body1, {
    overflow: 'auto'
  }));
  const AutocompleteLoading = styled$1('div', {
    name: 'MuiAutocomplete',
    slot: 'Loading',
    overridesResolver: (props, styles) => styles.loading
  })(({
    theme
  }) => ({
    color: (theme.vars || theme).palette.text.secondary,
    padding: '14px 16px'
  }));
  const AutocompleteNoOptions = styled$1('div', {
    name: 'MuiAutocomplete',
    slot: 'NoOptions',
    overridesResolver: (props, styles) => styles.noOptions
  })(({
    theme
  }) => ({
    color: (theme.vars || theme).palette.text.secondary,
    padding: '14px 16px'
  }));
  const AutocompleteListbox = styled$1('div', {
    name: 'MuiAutocomplete',
    slot: 'Listbox',
    overridesResolver: (props, styles) => styles.listbox
  })(({
    theme
  }) => ({
    listStyle: 'none',
    margin: 0,
    padding: '8px 0',
    maxHeight: '40vh',
    overflow: 'auto',
    position: 'relative',
    [`& .${autocompleteClasses$1.option}`]: {
      minHeight: 48,
      display: 'flex',
      overflow: 'hidden',
      justifyContent: 'flex-start',
      alignItems: 'center',
      cursor: 'pointer',
      paddingTop: 6,
      boxSizing: 'border-box',
      outline: '0',
      WebkitTapHighlightColor: 'transparent',
      paddingBottom: 6,
      paddingLeft: 16,
      paddingRight: 16,
      [theme.breakpoints.up('sm')]: {
        minHeight: 'auto'
      },
      [`&.${autocompleteClasses$1.focused}`]: {
        backgroundColor: (theme.vars || theme).palette.action.hover,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      },
      '&[aria-disabled="true"]': {
        opacity: (theme.vars || theme).palette.action.disabledOpacity,
        pointerEvents: 'none'
      },
      [`&.${autocompleteClasses$1.focusVisible}`]: {
        backgroundColor: (theme.vars || theme).palette.action.focus
      },
      '&[aria-selected="true"]': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
        [`&.${autocompleteClasses$1.focused}`]: {
          backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
          // Reset on touch devices, it doesn't add specificity
          '@media (hover: none)': {
            backgroundColor: (theme.vars || theme).palette.action.selected
          }
        },
        [`&.${autocompleteClasses$1.focusVisible}`]: {
          backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
        }
      }
    }
  }));
  const AutocompleteGroupLabel = styled$1(ListSubheader$1, {
    name: 'MuiAutocomplete',
    slot: 'GroupLabel',
    overridesResolver: (props, styles) => styles.groupLabel
  })(({
    theme
  }) => ({
    backgroundColor: (theme.vars || theme).palette.background.paper,
    top: -8
  }));
  const AutocompleteGroupUl = styled$1('ul', {
    name: 'MuiAutocomplete',
    slot: 'GroupUl',
    overridesResolver: (props, styles) => styles.groupUl
  })({
    padding: 0,
    [`& .${autocompleteClasses$1.option}`]: {
      paddingLeft: 24
    }
  });
  const Autocomplete = /*#__PURE__*/React__namespace.forwardRef(function Autocomplete(inProps, ref) {
    var _slotProps$clearIndic, _slotProps$paper, _slotProps$popper, _slotProps$popupIndic;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAutocomplete'
    });

    /* eslint-disable @typescript-eslint/no-unused-vars */
    const {
        autoComplete = false,
        autoHighlight = false,
        autoSelect = false,
        blurOnSelect = false,
        ChipProps,
        className,
        clearIcon = _ClearIcon || (_ClearIcon = /*#__PURE__*/jsxRuntime_1(ClearIcon, {
          fontSize: "small"
        })),
        clearOnBlur = !props.freeSolo,
        clearOnEscape = false,
        clearText = 'Clear',
        closeText = 'Close',
        componentsProps = {},
        defaultValue = props.multiple ? [] : null,
        disableClearable = false,
        disableCloseOnSelect = false,
        disabled = false,
        disabledItemsFocusable = false,
        disableListWrap = false,
        disablePortal = false,
        filterSelectedOptions = false,
        forcePopupIcon = 'auto',
        freeSolo = false,
        fullWidth = false,
        getLimitTagsText = more => `+${more}`,
        getOptionLabel: getOptionLabelProp,
        groupBy,
        handleHomeEndKeys = !props.freeSolo,
        includeInputInList = false,
        limitTags = -1,
        ListboxComponent = 'ul',
        ListboxProps,
        loading = false,
        loadingText = 'Loading…',
        multiple = false,
        noOptionsText = 'No options',
        openOnFocus = false,
        openText = 'Open',
        PaperComponent = Paper$1,
        PopperComponent = Popper$1,
        popupIcon = _ArrowDropDownIcon || (_ArrowDropDownIcon = /*#__PURE__*/jsxRuntime_1(ArrowDropDownIcon, {})),
        readOnly = false,
        renderGroup: renderGroupProp,
        renderInput,
        renderOption: renderOptionProp,
        renderTags,
        selectOnFocus = !props.freeSolo,
        size = 'medium',
        slotProps = {}
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1N);
    /* eslint-enable @typescript-eslint/no-unused-vars */

    const {
      getRootProps,
      getInputProps,
      getInputLabelProps,
      getPopupIndicatorProps,
      getClearProps,
      getTagProps,
      getListboxProps,
      getOptionProps,
      value,
      dirty,
      expanded,
      id,
      popupOpen,
      focused,
      focusedTag,
      anchorEl,
      setAnchorEl,
      inputValue,
      groupedOptions
    } = useAutocomplete(_extends({}, props, {
      componentName: 'Autocomplete'
    }));
    const hasClearIcon = !disableClearable && !disabled && dirty && !readOnly;
    const hasPopupIcon = (!freeSolo || forcePopupIcon === true) && forcePopupIcon !== false;
    const {
      onMouseDown: handleInputMouseDown
    } = getInputProps();
    const {
      ref: externalListboxRef
    } = ListboxProps != null ? ListboxProps : {};
    const _getListboxProps = getListboxProps(),
      {
        ref: listboxRef
      } = _getListboxProps,
      otherListboxProps = _objectWithoutPropertiesLoose(_getListboxProps, _excluded2$a);
    const combinedListboxRef = useForkRef(listboxRef, externalListboxRef);
    const defaultGetOptionLabel = option => {
      var _option$label;
      return (_option$label = option.label) != null ? _option$label : option;
    };
    const getOptionLabel = getOptionLabelProp || defaultGetOptionLabel;

    // If you modify this, make sure to keep the `AutocompleteOwnerState` type in sync.
    const ownerState = _extends({}, props, {
      disablePortal,
      expanded,
      focused,
      fullWidth,
      getOptionLabel,
      hasClearIcon,
      hasPopupIcon,
      inputFocused: focusedTag === -1,
      popupOpen,
      size
    });
    const classes = useUtilityClasses$1x(ownerState);
    let startAdornment;
    if (multiple && value.length > 0) {
      const getCustomizedTagProps = params => _extends({
        className: classes.tag,
        disabled
      }, getTagProps(params));
      if (renderTags) {
        startAdornment = renderTags(value, getCustomizedTagProps, ownerState);
      } else {
        startAdornment = value.map((option, index) => /*#__PURE__*/jsxRuntime_1(Chip$1, _extends({
          label: getOptionLabel(option),
          size: size
        }, getCustomizedTagProps({
          index
        }), ChipProps)));
      }
    }
    if (limitTags > -1 && Array.isArray(startAdornment)) {
      const more = startAdornment.length - limitTags;
      if (!focused && more > 0) {
        startAdornment = startAdornment.splice(0, limitTags);
        startAdornment.push( /*#__PURE__*/jsxRuntime_1("span", {
          className: classes.tag,
          children: getLimitTagsText(more)
        }, startAdornment.length));
      }
    }
    const defaultRenderGroup = params => /*#__PURE__*/jsxRuntime_2("li", {
      children: [/*#__PURE__*/jsxRuntime_1(AutocompleteGroupLabel, {
        className: classes.groupLabel,
        ownerState: ownerState,
        component: "div",
        children: params.group
      }), /*#__PURE__*/jsxRuntime_1(AutocompleteGroupUl, {
        className: classes.groupUl,
        ownerState: ownerState,
        children: params.children
      })]
    }, params.key);
    const renderGroup = renderGroupProp || defaultRenderGroup;
    const defaultRenderOption = (props2, option) => {
      const {
          key
        } = props2,
        otherProps = _objectWithoutPropertiesLoose(props2, _excluded3$2);
      return /*#__PURE__*/jsxRuntime_1("li", _extends({}, otherProps, {
        children: getOptionLabel(option)
      }), key);
    };
    const renderOption = renderOptionProp || defaultRenderOption;
    const renderListOption = (option, index) => {
      const optionProps = getOptionProps({
        option,
        index
      });
      return renderOption(_extends({}, optionProps, {
        className: classes.option
      }), option, {
        selected: optionProps['aria-selected'],
        index,
        inputValue
      }, ownerState);
    };
    const clearIndicatorSlotProps = (_slotProps$clearIndic = slotProps.clearIndicator) != null ? _slotProps$clearIndic : componentsProps.clearIndicator;
    const paperSlotProps = (_slotProps$paper = slotProps.paper) != null ? _slotProps$paper : componentsProps.paper;
    const popperSlotProps = (_slotProps$popper = slotProps.popper) != null ? _slotProps$popper : componentsProps.popper;
    const popupIndicatorSlotProps = (_slotProps$popupIndic = slotProps.popupIndicator) != null ? _slotProps$popupIndic : componentsProps.popupIndicator;
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1(AutocompleteRoot, _extends({
        ref: ref,
        className: clsx(classes.root, className),
        ownerState: ownerState
      }, getRootProps(other), {
        children: renderInput({
          id,
          disabled,
          fullWidth: true,
          size: size === 'small' ? 'small' : undefined,
          InputLabelProps: getInputLabelProps(),
          InputProps: _extends({
            ref: setAnchorEl,
            className: classes.inputRoot,
            startAdornment,
            onClick: event => {
              if (event.target === event.currentTarget) {
                handleInputMouseDown(event);
              }
            }
          }, (hasClearIcon || hasPopupIcon) && {
            endAdornment: /*#__PURE__*/jsxRuntime_2(AutocompleteEndAdornment, {
              className: classes.endAdornment,
              ownerState: ownerState,
              children: [hasClearIcon ? /*#__PURE__*/jsxRuntime_1(AutocompleteClearIndicator, _extends({}, getClearProps(), {
                "aria-label": clearText,
                title: clearText,
                ownerState: ownerState
              }, clearIndicatorSlotProps, {
                className: clsx(classes.clearIndicator, clearIndicatorSlotProps == null ? void 0 : clearIndicatorSlotProps.className),
                children: clearIcon
              })) : null, hasPopupIcon ? /*#__PURE__*/jsxRuntime_1(AutocompletePopupIndicator, _extends({}, getPopupIndicatorProps(), {
                disabled: disabled,
                "aria-label": popupOpen ? closeText : openText,
                title: popupOpen ? closeText : openText,
                ownerState: ownerState
              }, popupIndicatorSlotProps, {
                className: clsx(classes.popupIndicator, popupIndicatorSlotProps == null ? void 0 : popupIndicatorSlotProps.className),
                children: popupIcon
              })) : null]
            })
          }),
          inputProps: _extends({
            className: classes.input,
            disabled,
            readOnly
          }, getInputProps())
        })
      })), anchorEl ? /*#__PURE__*/jsxRuntime_1(AutocompletePopper, _extends({
        as: PopperComponent,
        disablePortal: disablePortal,
        style: {
          width: anchorEl ? anchorEl.clientWidth : null
        },
        ownerState: ownerState,
        role: "presentation",
        anchorEl: anchorEl,
        open: popupOpen
      }, popperSlotProps, {
        className: clsx(classes.popper, popperSlotProps == null ? void 0 : popperSlotProps.className),
        children: /*#__PURE__*/jsxRuntime_2(AutocompletePaper, _extends({
          ownerState: ownerState,
          as: PaperComponent
        }, paperSlotProps, {
          className: clsx(classes.paper, paperSlotProps == null ? void 0 : paperSlotProps.className),
          children: [loading && groupedOptions.length === 0 ? /*#__PURE__*/jsxRuntime_1(AutocompleteLoading, {
            className: classes.loading,
            ownerState: ownerState,
            children: loadingText
          }) : null, groupedOptions.length === 0 && !freeSolo && !loading ? /*#__PURE__*/jsxRuntime_1(AutocompleteNoOptions, {
            className: classes.noOptions,
            ownerState: ownerState,
            role: "presentation",
            onMouseDown: event => {
              // Prevent input blur when interacting with the "no options" content
              event.preventDefault();
            },
            children: noOptionsText
          }) : null, groupedOptions.length > 0 ? /*#__PURE__*/jsxRuntime_1(AutocompleteListbox, _extends({
            as: ListboxComponent,
            className: classes.listbox,
            ownerState: ownerState
          }, otherListboxProps, ListboxProps, {
            ref: combinedListboxRef,
            children: groupedOptions.map((option, index) => {
              if (groupBy) {
                return renderGroup({
                  key: option.key,
                  group: option.group,
                  children: option.options.map((option2, index2) => renderListOption(option2, option.index + index2))
                });
              }
              return renderListOption(option, index);
            })
          })) : null]
        }))
      })) : null]
    });
  });
  Autocomplete.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the portion of the selected suggestion that has not been typed by the user,
     * known as the completion string, appears inline after the input cursor in the textbox.
     * The inline completion string is visually highlighted and has a selected state.
     * @default false
     */
    autoComplete: PropTypes.bool,
    /**
     * If `true`, the first option is automatically highlighted.
     * @default false
     */
    autoHighlight: PropTypes.bool,
    /**
     * If `true`, the selected option becomes the value of the input
     * when the Autocomplete loses focus unless the user chooses
     * a different option or changes the character string in the input.
     *
     * When using `freeSolo` mode, the typed value will be the input value
     * if the Autocomplete loses focus without highlighting an option.
     * @default false
     */
    autoSelect: PropTypes.bool,
    /**
     * Control if the input should be blurred when an option is selected:
     *
     * - `false` the input is not blurred.
     * - `true` the input is always blurred.
     * - `touch` the input is blurred after a touch event.
     * - `mouse` the input is blurred after a mouse event.
     * @default false
     */
    blurOnSelect: PropTypes.oneOfType([PropTypes.oneOf(['mouse', 'touch']), PropTypes.bool]),
    /**
     * Props applied to the [`Chip`](/material-ui/api/chip/) element.
     */
    ChipProps: PropTypes.object,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The icon to display in place of the default clear icon.
     * @default <ClearIcon fontSize="small" />
     */
    clearIcon: PropTypes.node,
    /**
     * If `true`, the input's text is cleared on blur if no value is selected.
     *
     * Set to `true` if you want to help the user enter a new value.
     * Set to `false` if you want to help the user resume their search.
     * @default !props.freeSolo
     */
    clearOnBlur: PropTypes.bool,
    /**
     * If `true`, clear all values when the user presses escape and the popup is closed.
     * @default false
     */
    clearOnEscape: PropTypes.bool,
    /**
     * Override the default text for the *clear* icon button.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Clear'
     */
    clearText: PropTypes.string,
    /**
     * Override the default text for the *close popup* icon button.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Close'
     */
    closeText: PropTypes.string,
    /**
     * The props used for each slot inside.
     * @default {}
     */
    componentsProps: PropTypes.shape({
      clearIndicator: PropTypes.object,
      paper: PropTypes.object,
      popper: PropTypes.object,
      popupIndicator: PropTypes.object
    }),
    /**
     * The default value. Use when the component is not controlled.
     * @default props.multiple ? [] : null
     */
    defaultValue: chainPropTypes(PropTypes.any, props => {
      if (props.multiple && props.defaultValue !== undefined && !Array.isArray(props.defaultValue)) {
        return new Error(['MUI: The Autocomplete expects the `defaultValue` prop to be an array when `multiple={true}` or undefined.', `However, ${props.defaultValue} was provided.`].join('\n'));
      }
      return null;
    }),
    /**
     * If `true`, the input can't be cleared.
     * @default false
     */
    disableClearable: PropTypes.bool,
    /**
     * If `true`, the popup won't close when a value is selected.
     * @default false
     */
    disableCloseOnSelect: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, will allow focus on disabled items.
     * @default false
     */
    disabledItemsFocusable: PropTypes.bool,
    /**
     * If `true`, the list box in the popup will not wrap focus.
     * @default false
     */
    disableListWrap: PropTypes.bool,
    /**
     * If `true`, the `Popper` content will be under the DOM hierarchy of the parent component.
     * @default false
     */
    disablePortal: PropTypes.bool,
    /**
     * A function that determines the filtered options to be rendered on search.
     *
     * @default createFilterOptions()
     * @param {Value[]} options The options to render.
     * @param {object} state The state of the component.
     * @returns {Value[]}
     */
    filterOptions: PropTypes.func,
    /**
     * If `true`, hide the selected options from the list box.
     * @default false
     */
    filterSelectedOptions: PropTypes.bool,
    /**
     * Force the visibility display of the popup icon.
     * @default 'auto'
     */
    forcePopupIcon: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.bool]),
    /**
     * If `true`, the Autocomplete is free solo, meaning that the user input is not bound to provided options.
     * @default false
     */
    freeSolo: PropTypes.bool,
    /**
     * If `true`, the input will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The label to display when the tags are truncated (`limitTags`).
     *
     * @param {number} more The number of truncated tags.
     * @returns {ReactNode}
     * @default (more) => `+${more}`
     */
    getLimitTagsText: PropTypes.func,
    /**
     * Used to determine the disabled state for a given option.
     *
     * @param {Value} option The option to test.
     * @returns {boolean}
     */
    getOptionDisabled: PropTypes.func,
    /**
     * Used to determine the key for a given option.
     * This can be useful when the labels of options are not unique (since labels are used as keys by default).
     *
     * @param {Value} option The option to get the key for.
     * @returns {string | number}
     */
    getOptionKey: PropTypes.func,
    /**
     * Used to determine the string value for a given option.
     * It's used to fill the input (and the list box options if `renderOption` is not provided).
     *
     * If used in free solo mode, it must accept both the type of the options and a string.
     *
     * @param {Value} option
     * @returns {string}
     * @default (option) => option.label ?? option
     */
    getOptionLabel: PropTypes.func,
    /**
     * If provided, the options will be grouped under the returned string.
     * The groupBy value is also used as the text for group headings when `renderGroup` is not provided.
     *
     * @param {Value} options The options to group.
     * @returns {string}
     */
    groupBy: PropTypes.func,
    /**
     * If `true`, the component handles the "Home" and "End" keys when the popup is open.
     * It should move focus to the first option and last option, respectively.
     * @default !props.freeSolo
     */
    handleHomeEndKeys: PropTypes.bool,
    /**
     * This prop is used to help implement the accessibility logic.
     * If you don't provide an id it will fall back to a randomly generated one.
     */
    id: PropTypes.string,
    /**
     * If `true`, the highlight can move to the input.
     * @default false
     */
    includeInputInList: PropTypes.bool,
    /**
     * The input value.
     */
    inputValue: PropTypes.string,
    /**
     * Used to determine if the option represents the given value.
     * Uses strict equality by default.
     * ⚠️ Both arguments need to be handled, an option can only match with one value.
     *
     * @param {Value} option The option to test.
     * @param {Value} value The value to test against.
     * @returns {boolean}
     */
    isOptionEqualToValue: PropTypes.func,
    /**
     * The maximum number of tags that will be visible when not focused.
     * Set `-1` to disable the limit.
     * @default -1
     */
    limitTags: integerPropType,
    /**
     * The component used to render the listbox.
     * @default 'ul'
     */
    ListboxComponent: PropTypes.elementType,
    /**
     * Props applied to the Listbox element.
     */
    ListboxProps: PropTypes.object,
    /**
     * If `true`, the component is in a loading state.
     * This shows the `loadingText` in place of suggestions (only if there are no suggestions to show, e.g. `options` are empty).
     * @default false
     */
    loading: PropTypes.bool,
    /**
     * Text to display when in a loading state.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Loading…'
     */
    loadingText: PropTypes.node,
    /**
     * If `true`, `value` must be an array and the menu will support multiple selections.
     * @default false
     */
    multiple: PropTypes.bool,
    /**
     * Text to display when there are no options.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'No options'
     */
    noOptionsText: PropTypes.node,
    /**
     * Callback fired when the value changes.
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     * @param {Value|Value[]} value The new value of the component.
     * @param {string} reason One of "createOption", "selectOption", "removeOption", "blur" or "clear".
     * @param {string} [details]
     */
    onChange: PropTypes.func,
    /**
     * Callback fired when the popup requests to be closed.
     * Use in controlled mode (see open).
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     * @param {string} reason Can be: `"toggleInput"`, `"escape"`, `"selectOption"`, `"removeOption"`, `"blur"`.
     */
    onClose: PropTypes.func,
    /**
     * Callback fired when the highlight option changes.
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     * @param {Value} option The highlighted option.
     * @param {string} reason Can be: `"keyboard"`, `"auto"`, `"mouse"`, `"touch"`.
     */
    onHighlightChange: PropTypes.func,
    /**
     * Callback fired when the input value changes.
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     * @param {string} value The new value of the text input.
     * @param {string} reason Can be: `"input"` (user input), `"reset"` (programmatic change), `"clear"`.
     */
    onInputChange: PropTypes.func,
    /**
     * @ignore
     */
    onKeyDown: PropTypes.func,
    /**
     * Callback fired when the popup requests to be opened.
     * Use in controlled mode (see open).
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     */
    onOpen: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * If `true`, the popup will open on input focus.
     * @default false
     */
    openOnFocus: PropTypes.bool,
    /**
     * Override the default text for the *open popup* icon button.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Open'
     */
    openText: PropTypes.string,
    /**
     * Array of options.
     */
    options: PropTypes.array.isRequired,
    /**
     * The component used to render the body of the popup.
     * @default Paper
     */
    PaperComponent: PropTypes.elementType,
    /**
     * The component used to position the popup.
     * @default Popper
     */
    PopperComponent: PropTypes.elementType,
    /**
     * The icon to display in place of the default popup icon.
     * @default <ArrowDropDownIcon />
     */
    popupIcon: PropTypes.node,
    /**
     * If `true`, the component becomes readonly. It is also supported for multiple tags where the tag cannot be deleted.
     * @default false
     */
    readOnly: PropTypes.bool,
    /**
     * Render the group.
     *
     * @param {AutocompleteRenderGroupParams} params The group to render.
     * @returns {ReactNode}
     */
    renderGroup: PropTypes.func,
    /**
     * Render the input.
     *
     * @param {object} params
     * @returns {ReactNode}
     */
    renderInput: PropTypes.func.isRequired,
    /**
     * Render the option, use `getOptionLabel` by default.
     *
     * @param {object} props The props to apply on the li element.
     * @param {Value} option The option to render.
     * @param {object} state The state of each option.
     * @param {object} ownerState The state of the Autocomplete component.
     * @returns {ReactNode}
     */
    renderOption: PropTypes.func,
    /**
     * Render the selected value.
     *
     * @param {Value[]} value The `value` provided to the component.
     * @param {function} getTagProps A tag props getter.
     * @param {object} ownerState The state of the Autocomplete component.
     * @returns {ReactNode}
     */
    renderTags: PropTypes.func,
    /**
     * If `true`, the input's text is selected on focus.
     * It helps the user clear the selected value.
     * @default !props.freeSolo
     */
    selectOnFocus: PropTypes.bool,
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium']), PropTypes.string]),
    /**
     * The props used for each slot inside.
     * @default {}
     */
    slotProps: PropTypes.shape({
      clearIndicator: PropTypes.object,
      paper: PropTypes.object,
      popper: PropTypes.object,
      popupIndicator: PropTypes.object
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the autocomplete.
     *
     * The value must have reference equality with the option in order to be selected.
     * You can customize the equality behavior with the `isOptionEqualToValue` prop.
     */
    value: chainPropTypes(PropTypes.any, props => {
      if (props.multiple && props.value !== undefined && !Array.isArray(props.value)) {
        return new Error(['MUI: The Autocomplete expects the `value` prop to be an array when `multiple={true}` or undefined.', `However, ${props.value} was provided.`].join('\n'));
      }
      return null;
    })
  } ;
  var Autocomplete$1 = Autocomplete;

  var Person = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"
  }), 'Person');

  function getAvatarUtilityClass(slot) {
    return generateUtilityClass('MuiAvatar', slot);
  }
  const avatarClasses = generateUtilityClasses('MuiAvatar', ['root', 'colorDefault', 'circular', 'rounded', 'square', 'img', 'fallback']);
  var avatarClasses$1 = avatarClasses;

  const _excluded$1M = ["alt", "children", "className", "component", "imgProps", "sizes", "src", "srcSet", "variant"];
  const useUtilityClasses$1w = ownerState => {
    const {
      classes,
      variant,
      colorDefault
    } = ownerState;
    const slots = {
      root: ['root', variant, colorDefault && 'colorDefault'],
      img: ['img'],
      fallback: ['fallback']
    };
    return composeClasses(slots, getAvatarUtilityClass, classes);
  };
  const AvatarRoot = styled$1('div', {
    name: 'MuiAvatar',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], ownerState.colorDefault && styles.colorDefault];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    position: 'relative',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    flexShrink: 0,
    width: 40,
    height: 40,
    fontFamily: theme.typography.fontFamily,
    fontSize: theme.typography.pxToRem(20),
    lineHeight: 1,
    borderRadius: '50%',
    overflow: 'hidden',
    userSelect: 'none'
  }, ownerState.variant === 'rounded' && {
    borderRadius: (theme.vars || theme).shape.borderRadius
  }, ownerState.variant === 'square' && {
    borderRadius: 0
  }, ownerState.colorDefault && _extends({
    color: (theme.vars || theme).palette.background.default
  }, theme.vars ? {
    backgroundColor: theme.vars.palette.Avatar.defaultBg
  } : {
    backgroundColor: theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]
  })));
  const AvatarImg = styled$1('img', {
    name: 'MuiAvatar',
    slot: 'Img',
    overridesResolver: (props, styles) => styles.img
  })({
    width: '100%',
    height: '100%',
    textAlign: 'center',
    // Handle non-square image. The property isn't supported by IE11.
    objectFit: 'cover',
    // Hide alt text.
    color: 'transparent',
    // Hide the image broken icon, only works on Chrome.
    textIndent: 10000
  });
  const AvatarFallback = styled$1(Person, {
    name: 'MuiAvatar',
    slot: 'Fallback',
    overridesResolver: (props, styles) => styles.fallback
  })({
    width: '75%',
    height: '75%'
  });
  function useLoaded({
    crossOrigin,
    referrerPolicy,
    src,
    srcSet
  }) {
    const [loaded, setLoaded] = React__namespace.useState(false);
    React__namespace.useEffect(() => {
      if (!src && !srcSet) {
        return undefined;
      }
      setLoaded(false);
      let active = true;
      const image = new Image();
      image.onload = () => {
        if (!active) {
          return;
        }
        setLoaded('loaded');
      };
      image.onerror = () => {
        if (!active) {
          return;
        }
        setLoaded('error');
      };
      image.crossOrigin = crossOrigin;
      image.referrerPolicy = referrerPolicy;
      image.src = src;
      if (srcSet) {
        image.srcset = srcSet;
      }
      return () => {
        active = false;
      };
    }, [crossOrigin, referrerPolicy, src, srcSet]);
    return loaded;
  }
  const Avatar = /*#__PURE__*/React__namespace.forwardRef(function Avatar(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAvatar'
    });
    const {
        alt,
        children: childrenProp,
        className,
        component = 'div',
        imgProps,
        sizes,
        src,
        srcSet,
        variant = 'circular'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1M);
    let children = null;

    // Use a hook instead of onError on the img element to support server-side rendering.
    const loaded = useLoaded(_extends({}, imgProps, {
      src,
      srcSet
    }));
    const hasImg = src || srcSet;
    const hasImgNotFailing = hasImg && loaded !== 'error';
    const ownerState = _extends({}, props, {
      colorDefault: !hasImgNotFailing,
      component,
      variant
    });
    const classes = useUtilityClasses$1w(ownerState);
    if (hasImgNotFailing) {
      children = /*#__PURE__*/jsxRuntime_1(AvatarImg, _extends({
        alt: alt,
        srcSet: srcSet,
        src: src,
        sizes: sizes,
        ownerState: ownerState,
        className: classes.img
      }, imgProps));
    } else if (childrenProp != null) {
      children = childrenProp;
    } else if (hasImg && alt) {
      children = alt[0];
    } else {
      children = /*#__PURE__*/jsxRuntime_1(AvatarFallback, {
        ownerState: ownerState,
        className: classes.fallback
      });
    }
    return /*#__PURE__*/jsxRuntime_1(AvatarRoot, _extends({
      as: component,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other, {
      children: children
    }));
  });
  Avatar.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Used in combination with `src` or `srcSet` to
     * provide an alt attribute for the rendered `img` element.
     */
    alt: PropTypes.string,
    /**
     * Used to render icon or text elements inside the Avatar if `src` is not set.
     * This can be an element, or just a string.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attributes) applied to the `img` element if the component is used to display an image.
     * It can be used to listen for the loading error event.
     */
    imgProps: PropTypes.object,
    /**
     * The `sizes` attribute for the `img` element.
     */
    sizes: PropTypes.string,
    /**
     * The `src` attribute for the `img` element.
     */
    src: PropTypes.string,
    /**
     * The `srcSet` attribute for the `img` element.
     * Use this attribute for responsive image display.
     */
    srcSet: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The shape of the avatar.
     * @default 'circular'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rounded', 'square']), PropTypes.string])
  } ;
  var Avatar$1 = Avatar;

  function getAvatarGroupUtilityClass(slot) {
    return generateUtilityClass('MuiAvatarGroup', slot);
  }
  const avatarGroupClasses = generateUtilityClasses('MuiAvatarGroup', ['root', 'avatar']);
  var avatarGroupClasses$1 = avatarGroupClasses;

  const _excluded$1L = ["children", "className", "component", "componentsProps", "max", "renderSurplus", "slotProps", "spacing", "total", "variant"];
  const SPACINGS$2 = {
    small: -16,
    medium: null
  };
  const useUtilityClasses$1v = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      avatar: ['avatar']
    };
    return composeClasses(slots, getAvatarGroupUtilityClass, classes);
  };
  const AvatarGroupRoot = styled$1('div', {
    name: 'MuiAvatarGroup',
    slot: 'Root',
    overridesResolver: (props, styles) => _extends({
      [`& .${avatarGroupClasses$1.avatar}`]: styles.avatar
    }, styles.root)
  })(({
    theme
  }) => ({
    [`& .${avatarClasses$1.root}`]: {
      border: `2px solid ${(theme.vars || theme).palette.background.default}`,
      boxSizing: 'content-box',
      marginLeft: -8,
      '&:last-child': {
        marginLeft: 0
      }
    },
    display: 'flex',
    flexDirection: 'row-reverse'
  }));
  const AvatarGroupAvatar = styled$1(Avatar$1, {
    name: 'MuiAvatarGroup',
    slot: 'Avatar',
    overridesResolver: (props, styles) => styles.avatar
  })(({
    theme
  }) => ({
    border: `2px solid ${(theme.vars || theme).palette.background.default}`,
    boxSizing: 'content-box',
    marginLeft: -8,
    '&:last-child': {
      marginLeft: 0
    }
  }));
  const AvatarGroup = /*#__PURE__*/React__namespace.forwardRef(function AvatarGroup(inProps, ref) {
    var _slotProps$additional;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiAvatarGroup'
    });
    const {
        children: childrenProp,
        className,
        component = 'div',
        componentsProps = {},
        max = 5,
        renderSurplus,
        slotProps = {},
        spacing = 'medium',
        total,
        variant = 'circular'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1L);
    let clampedMax = max < 2 ? 2 : max;
    const ownerState = _extends({}, props, {
      max,
      spacing,
      component,
      variant
    });
    const classes = useUtilityClasses$1v(ownerState);
    const children = React__namespace.Children.toArray(childrenProp).filter(child => {
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The AvatarGroup component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      return /*#__PURE__*/React__namespace.isValidElement(child);
    });
    const totalAvatars = total || children.length;
    if (totalAvatars === clampedMax) {
      clampedMax += 1;
    }
    clampedMax = Math.min(totalAvatars + 1, clampedMax);
    const maxAvatars = Math.min(children.length, clampedMax - 1);
    const extraAvatars = Math.max(totalAvatars - clampedMax, totalAvatars - maxAvatars, 0);
    const extraAvatarsElement = renderSurplus ? renderSurplus(extraAvatars) : `+${extraAvatars}`;
    const marginLeft = spacing && SPACINGS$2[spacing] !== undefined ? SPACINGS$2[spacing] : -spacing;
    const additionalAvatarSlotProps = (_slotProps$additional = slotProps.additionalAvatar) != null ? _slotProps$additional : componentsProps.additionalAvatar;
    return /*#__PURE__*/jsxRuntime_2(AvatarGroupRoot, _extends({
      as: component,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other, {
      children: [extraAvatars ? /*#__PURE__*/jsxRuntime_1(AvatarGroupAvatar, _extends({
        ownerState: ownerState,
        variant: variant
      }, additionalAvatarSlotProps, {
        className: clsx(classes.avatar, additionalAvatarSlotProps == null ? void 0 : additionalAvatarSlotProps.className),
        style: _extends({
          marginLeft
        }, additionalAvatarSlotProps == null ? void 0 : additionalAvatarSlotProps.style),
        children: extraAvatarsElement
      })) : null, children.slice(0, maxAvatars).reverse().map((child, index) => {
        return /*#__PURE__*/React__namespace.cloneElement(child, {
          className: clsx(child.props.className, classes.avatar),
          style: _extends({
            // Consistent with "&:last-child" styling for the default spacing,
            // we do not apply custom marginLeft spacing on the last child
            marginLeft: index === maxAvatars - 1 ? undefined : marginLeft
          }, child.props.style),
          variant: child.props.variant || variant
        });
      })]
    }));
  });
  AvatarGroup.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The avatars to stack.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      additionalAvatar: PropTypes.object
    }),
    /**
     * Max avatars to show before +x.
     * @default 5
     */
    max: chainPropTypes(PropTypes.number, props => {
      if (props.max < 2) {
        return new Error(['MUI: The prop `max` should be equal to 2 or above.', 'A value below is clamped to 2.'].join('\n'));
      }
      return null;
    }),
    /**
     * custom renderer of extraAvatars
     * @param {number} surplus number of extra avatars
     * @returns {React.ReactNode} custom element to display
     */
    renderSurplus: PropTypes.func,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      additionalAvatar: PropTypes.object
    }),
    /**
     * Spacing between avatars.
     * @default 'medium'
     */
    spacing: PropTypes.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.number]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The total number of avatars. Used for calculating the number of extra avatars.
     * @default children.length
     */
    total: PropTypes.number,
    /**
     * The variant to use.
     * @default 'circular'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rounded', 'square']), PropTypes.string])
  } ;
  var AvatarGroup$1 = AvatarGroup;

  const _excluded$1K = ["addEndListener", "appear", "children", "easing", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "style", "timeout", "TransitionComponent"];
  const styles$4 = {
    entering: {
      opacity: 1
    },
    entered: {
      opacity: 1
    }
  };

  /**
   * The Fade transition is used by the [Modal](/material-ui/react-modal/) component.
   * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
   */
  const Fade = /*#__PURE__*/React__namespace.forwardRef(function Fade(props, ref) {
    const theme = useTheme();
    const defaultTimeout = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        addEndListener,
        appear = true,
        children,
        easing,
        in: inProp,
        onEnter,
        onEntered,
        onEntering,
        onExit,
        onExited,
        onExiting,
        style,
        timeout = defaultTimeout,
        // eslint-disable-next-line react/prop-types
        TransitionComponent = Transition$1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1K);
    const nodeRef = React__namespace.useRef(null);
    const handleRef = useForkRef(nodeRef, children.ref, ref);
    const normalizedTransitionCallback = callback => maybeIsAppearing => {
      if (callback) {
        const node = nodeRef.current;

        // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
        if (maybeIsAppearing === undefined) {
          callback(node);
        } else {
          callback(node, maybeIsAppearing);
        }
      }
    };
    const handleEntering = normalizedTransitionCallback(onEntering);
    const handleEnter = normalizedTransitionCallback((node, isAppearing) => {
      reflow(node); // So the animation always start from the start.

      const transitionProps = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'enter'
      });
      node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);
      node.style.transition = theme.transitions.create('opacity', transitionProps);
      if (onEnter) {
        onEnter(node, isAppearing);
      }
    });
    const handleEntered = normalizedTransitionCallback(onEntered);
    const handleExiting = normalizedTransitionCallback(onExiting);
    const handleExit = normalizedTransitionCallback(node => {
      const transitionProps = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'exit'
      });
      node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);
      node.style.transition = theme.transitions.create('opacity', transitionProps);
      if (onExit) {
        onExit(node);
      }
    });
    const handleExited = normalizedTransitionCallback(onExited);
    const handleAddEndListener = next => {
      if (addEndListener) {
        // Old call signature before `react-transition-group` implemented `nodeRef`
        addEndListener(nodeRef.current, next);
      }
    };
    return /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      appear: appear,
      in: inProp,
      nodeRef: nodeRef ,
      onEnter: handleEnter,
      onEntered: handleEntered,
      onEntering: handleEntering,
      onExit: handleExit,
      onExited: handleExited,
      onExiting: handleExiting,
      addEndListener: handleAddEndListener,
      timeout: timeout
    }, other, {
      children: (state, childProps) => {
        return /*#__PURE__*/React__namespace.cloneElement(children, _extends({
          style: _extends({
            opacity: 0,
            visibility: state === 'exited' && !inProp ? 'hidden' : undefined
          }, styles$4[state], style, children.props.style),
          ref: handleRef
        }, childProps));
      }
    }));
  });
  Fade.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Add a custom transition end trigger. Called with the transitioning DOM
     * node and a done callback. Allows for more fine grained transition end
     * logic. Note: Timeouts are still used as a fallback if provided.
     */
    addEndListener: PropTypes.func,
    /**
     * Perform the enter transition when it first mounts if `in` is also `true`.
     * Set this to `false` to disable this behavior.
     * @default true
     */
    appear: PropTypes.bool,
    /**
     * A single child content element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * The transition timing function.
     * You may specify a single easing or a object containing enter and exit values.
     */
    easing: PropTypes.oneOfType([PropTypes.shape({
      enter: PropTypes.string,
      exit: PropTypes.string
    }), PropTypes.string]),
    /**
     * If `true`, the component will transition in.
     */
    in: PropTypes.bool,
    /**
     * @ignore
     */
    onEnter: PropTypes.func,
    /**
     * @ignore
     */
    onEntered: PropTypes.func,
    /**
     * @ignore
     */
    onEntering: PropTypes.func,
    /**
     * @ignore
     */
    onExit: PropTypes.func,
    /**
     * @ignore
     */
    onExited: PropTypes.func,
    /**
     * @ignore
     */
    onExiting: PropTypes.func,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })])
  } ;
  var Fade$1 = Fade;

  function getBackdropUtilityClass(slot) {
    return generateUtilityClass('MuiBackdrop', slot);
  }
  const backdropClasses = generateUtilityClasses('MuiBackdrop', ['root', 'invisible']);
  var backdropClasses$1 = backdropClasses;

  const _excluded$1J = ["children", "className", "component", "components", "componentsProps", "invisible", "open", "slotProps", "slots", "TransitionComponent", "transitionDuration"];
  const useUtilityClasses$1u = ownerState => {
    const {
      classes,
      invisible
    } = ownerState;
    const slots = {
      root: ['root', invisible && 'invisible']
    };
    return composeClasses(slots, getBackdropUtilityClass, classes);
  };
  const BackdropRoot = styled$1('div', {
    name: 'MuiBackdrop',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.invisible && styles.invisible];
    }
  })(({
    ownerState
  }) => _extends({
    position: 'fixed',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    right: 0,
    bottom: 0,
    top: 0,
    left: 0,
    backgroundColor: 'rgba(0, 0, 0, 0.5)',
    WebkitTapHighlightColor: 'transparent'
  }, ownerState.invisible && {
    backgroundColor: 'transparent'
  }));
  const Backdrop = /*#__PURE__*/React__namespace.forwardRef(function Backdrop(inProps, ref) {
    var _slotProps$root, _ref, _slots$root;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiBackdrop'
    });
    const {
        children,
        className,
        component = 'div',
        components = {},
        componentsProps = {},
        invisible = false,
        open,
        slotProps = {},
        slots = {},
        TransitionComponent = Fade$1,
        transitionDuration
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1J);
    const ownerState = _extends({}, props, {
      component,
      invisible
    });
    const classes = useUtilityClasses$1u(ownerState);
    const rootSlotProps = (_slotProps$root = slotProps.root) != null ? _slotProps$root : componentsProps.root;
    return /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      in: open,
      timeout: transitionDuration
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(BackdropRoot, _extends({
        "aria-hidden": true
      }, rootSlotProps, {
        as: (_ref = (_slots$root = slots.root) != null ? _slots$root : components.Root) != null ? _ref : component,
        className: clsx(classes.root, className, rootSlotProps == null ? void 0 : rootSlotProps.className),
        ownerState: _extends({}, ownerState, rootSlotProps == null ? void 0 : rootSlotProps.ownerState),
        classes: classes,
        ref: ref,
        children: children
      }))
    }));
  });
  Backdrop.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      root: PropTypes.object
    }),
    /**
     * If `true`, the backdrop is invisible.
     * It can be used when rendering a popover or a custom select component.
     * @default false
     */
    invisible: PropTypes.bool,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      root: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Fade
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })])
  } ;
  var Backdrop$1 = Backdrop;

  function getBadgeUtilityClass(slot) {
    return generateUtilityClass('MuiBadge', slot);
  }
  const badgeClasses = generateUtilityClasses('MuiBadge', ['root', 'badge', 'dot', 'standard', 'anchorOriginTopRight', 'anchorOriginBottomRight', 'anchorOriginTopLeft', 'anchorOriginBottomLeft', 'invisible', 'colorError', 'colorInfo', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorWarning', 'overlapRectangular', 'overlapCircular',
  // TODO: v6 remove the overlap value from these class keys
  'anchorOriginTopLeftCircular', 'anchorOriginTopLeftRectangular', 'anchorOriginTopRightCircular', 'anchorOriginTopRightRectangular', 'anchorOriginBottomLeftCircular', 'anchorOriginBottomLeftRectangular', 'anchorOriginBottomRightCircular', 'anchorOriginBottomRightRectangular']);
  var badgeClasses$1 = badgeClasses;

  const _excluded$1I = ["anchorOrigin", "className", "classes", "component", "components", "componentsProps", "children", "overlap", "color", "invisible", "max", "badgeContent", "slots", "slotProps", "showZero", "variant"];
  const RADIUS_STANDARD = 10;
  const RADIUS_DOT = 4;
  const useUtilityClasses$1t = ownerState => {
    const {
      color,
      anchorOrigin,
      invisible,
      overlap,
      variant,
      classes = {}
    } = ownerState;
    const slots = {
      root: ['root'],
      badge: ['badge', variant, invisible && 'invisible', `anchorOrigin${capitalize(anchorOrigin.vertical)}${capitalize(anchorOrigin.horizontal)}`, `anchorOrigin${capitalize(anchorOrigin.vertical)}${capitalize(anchorOrigin.horizontal)}${capitalize(overlap)}`, `overlap${capitalize(overlap)}`, color !== 'default' && `color${capitalize(color)}`]
    };
    return composeClasses(slots, getBadgeUtilityClass, classes);
  };
  const BadgeRoot = styled$1('span', {
    name: 'MuiBadge',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    position: 'relative',
    display: 'inline-flex',
    // For correct alignment with the text.
    verticalAlign: 'middle',
    flexShrink: 0
  });
  const BadgeBadge = styled$1('span', {
    name: 'MuiBadge',
    slot: 'Badge',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.badge, styles[ownerState.variant], styles[`anchorOrigin${capitalize(ownerState.anchorOrigin.vertical)}${capitalize(ownerState.anchorOrigin.horizontal)}${capitalize(ownerState.overlap)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], ownerState.invisible && styles.invisible];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'flex',
    flexDirection: 'row',
    flexWrap: 'wrap',
    justifyContent: 'center',
    alignContent: 'center',
    alignItems: 'center',
    position: 'absolute',
    boxSizing: 'border-box',
    fontFamily: theme.typography.fontFamily,
    fontWeight: theme.typography.fontWeightMedium,
    fontSize: theme.typography.pxToRem(12),
    minWidth: RADIUS_STANDARD * 2,
    lineHeight: 1,
    padding: '0 6px',
    height: RADIUS_STANDARD * 2,
    borderRadius: RADIUS_STANDARD,
    zIndex: 1,
    // Render the badge on top of potential ripples.
    transition: theme.transitions.create('transform', {
      easing: theme.transitions.easing.easeInOut,
      duration: theme.transitions.duration.enteringScreen
    })
  }, ownerState.color !== 'default' && {
    backgroundColor: (theme.vars || theme).palette[ownerState.color].main,
    color: (theme.vars || theme).palette[ownerState.color].contrastText
  }, ownerState.variant === 'dot' && {
    borderRadius: RADIUS_DOT,
    height: RADIUS_DOT * 2,
    minWidth: RADIUS_DOT * 2,
    padding: 0
  }, ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular' && {
    top: 0,
    right: 0,
    transform: 'scale(1) translate(50%, -50%)',
    transformOrigin: '100% 0%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(50%, -50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular' && {
    bottom: 0,
    right: 0,
    transform: 'scale(1) translate(50%, 50%)',
    transformOrigin: '100% 100%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(50%, 50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular' && {
    top: 0,
    left: 0,
    transform: 'scale(1) translate(-50%, -50%)',
    transformOrigin: '0% 0%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(-50%, -50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular' && {
    bottom: 0,
    left: 0,
    transform: 'scale(1) translate(-50%, 50%)',
    transformOrigin: '0% 100%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(-50%, 50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular' && {
    top: '14%',
    right: '14%',
    transform: 'scale(1) translate(50%, -50%)',
    transformOrigin: '100% 0%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(50%, -50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular' && {
    bottom: '14%',
    right: '14%',
    transform: 'scale(1) translate(50%, 50%)',
    transformOrigin: '100% 100%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(50%, 50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular' && {
    top: '14%',
    left: '14%',
    transform: 'scale(1) translate(-50%, -50%)',
    transformOrigin: '0% 0%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(-50%, -50%)'
    }
  }, ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular' && {
    bottom: '14%',
    left: '14%',
    transform: 'scale(1) translate(-50%, 50%)',
    transformOrigin: '0% 100%',
    [`&.${badgeClasses$1.invisible}`]: {
      transform: 'scale(0) translate(-50%, 50%)'
    }
  }, ownerState.invisible && {
    transition: theme.transitions.create('transform', {
      easing: theme.transitions.easing.easeInOut,
      duration: theme.transitions.duration.leavingScreen
    })
  }));
  const Badge = /*#__PURE__*/React__namespace.forwardRef(function Badge(inProps, ref) {
    var _ref, _slots$root, _ref2, _slots$badge, _slotProps$root, _slotProps$badge;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiBadge'
    });
    const {
        anchorOrigin: anchorOriginProp = {
          vertical: 'top',
          horizontal: 'right'
        },
        className,
        component,
        components = {},
        componentsProps = {},
        children,
        overlap: overlapProp = 'rectangular',
        color: colorProp = 'default',
        invisible: invisibleProp = false,
        max: maxProp = 99,
        badgeContent: badgeContentProp,
        slots,
        slotProps,
        showZero = false,
        variant: variantProp = 'standard'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1I);
    const {
      badgeContent,
      invisible: invisibleFromHook,
      max,
      displayValue: displayValueFromHook
    } = useBadge({
      max: maxProp,
      invisible: invisibleProp,
      badgeContent: badgeContentProp,
      showZero
    });
    const prevProps = usePreviousProps$1({
      anchorOrigin: anchorOriginProp,
      color: colorProp,
      overlap: overlapProp,
      variant: variantProp,
      badgeContent: badgeContentProp
    });
    const invisible = invisibleFromHook || badgeContent == null && variantProp !== 'dot';
    const {
      color = colorProp,
      overlap = overlapProp,
      anchorOrigin = anchorOriginProp,
      variant = variantProp
    } = invisible ? prevProps : props;
    const displayValue = variant !== 'dot' ? displayValueFromHook : undefined;
    const ownerState = _extends({}, props, {
      badgeContent,
      invisible,
      max,
      displayValue,
      showZero,
      anchorOrigin,
      color,
      overlap,
      variant
    });
    const classes = useUtilityClasses$1t(ownerState);

    // support both `slots` and `components` for backward compatibility
    const RootSlot = (_ref = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components.Root) != null ? _ref : BadgeRoot;
    const BadgeSlot = (_ref2 = (_slots$badge = slots == null ? void 0 : slots.badge) != null ? _slots$badge : components.Badge) != null ? _ref2 : BadgeBadge;
    const rootSlotProps = (_slotProps$root = slotProps == null ? void 0 : slotProps.root) != null ? _slotProps$root : componentsProps.root;
    const badgeSlotProps = (_slotProps$badge = slotProps == null ? void 0 : slotProps.badge) != null ? _slotProps$badge : componentsProps.badge;
    const rootProps = useSlotProps({
      elementType: RootSlot,
      externalSlotProps: rootSlotProps,
      externalForwardedProps: other,
      additionalProps: {
        ref,
        as: component
      },
      ownerState,
      className: clsx(rootSlotProps == null ? void 0 : rootSlotProps.className, classes.root, className)
    });
    const badgeProps = useSlotProps({
      elementType: BadgeSlot,
      externalSlotProps: badgeSlotProps,
      ownerState,
      className: clsx(classes.badge, badgeSlotProps == null ? void 0 : badgeSlotProps.className)
    });
    return /*#__PURE__*/jsxRuntime_2(RootSlot, _extends({}, rootProps, {
      children: [children, /*#__PURE__*/jsxRuntime_1(BadgeSlot, _extends({}, badgeProps, {
        children: displayValue
      }))]
    }));
  });
  Badge.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The anchor of the badge.
     * @default {
     *   vertical: 'top',
     *   horizontal: 'right',
     * }
     */
    anchorOrigin: PropTypes.shape({
      horizontal: PropTypes.oneOf(['left', 'right']).isRequired,
      vertical: PropTypes.oneOf(['bottom', 'top']).isRequired
    }),
    /**
     * The content rendered within the badge.
     */
    badgeContent: PropTypes.node,
    /**
     * The badge will be added relative to this node.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'default'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Badge: PropTypes.elementType,
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      badge: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * If `true`, the badge is invisible.
     * @default false
     */
    invisible: PropTypes.bool,
    /**
     * Max count to show.
     * @default 99
     */
    max: PropTypes.number,
    /**
     * Wrapped shape the badge should overlap.
     * @default 'rectangular'
     */
    overlap: PropTypes.oneOf(['circular', 'rectangular']),
    /**
     * Controls whether the badge is hidden when `badgeContent` is zero.
     * @default false
     */
    showZero: PropTypes.bool,
    /**
     * The props used for each slot inside the Badge.
     * @default {}
     */
    slotProps: PropTypes.shape({
      badge: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside the Badge.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      badge: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'standard'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['dot', 'standard']), PropTypes.string])
  } ;
  var Badge$1 = Badge;

  function getBottomNavigationUtilityClass(slot) {
    return generateUtilityClass('MuiBottomNavigation', slot);
  }
  const bottomNavigationClasses = generateUtilityClasses('MuiBottomNavigation', ['root']);
  var bottomNavigationClasses$1 = bottomNavigationClasses;

  const _excluded$1H = ["children", "className", "component", "onChange", "showLabels", "value"];
  const useUtilityClasses$1s = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getBottomNavigationUtilityClass, classes);
  };
  const BottomNavigationRoot = styled$1('div', {
    name: 'MuiBottomNavigation',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => ({
    display: 'flex',
    justifyContent: 'center',
    height: 56,
    backgroundColor: (theme.vars || theme).palette.background.paper
  }));
  const BottomNavigation = /*#__PURE__*/React__namespace.forwardRef(function BottomNavigation(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiBottomNavigation'
    });
    const {
        children,
        className,
        component = 'div',
        onChange,
        showLabels = false,
        value
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1H);
    const ownerState = _extends({}, props, {
      component,
      showLabels
    });
    const classes = useUtilityClasses$1s(ownerState);
    return /*#__PURE__*/jsxRuntime_1(BottomNavigationRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: React__namespace.Children.map(children, (child, childIndex) => {
        if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
          return null;
        }
        {
          if (reactIs_2(child)) {
            console.error(["MUI: The BottomNavigation component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
          }
        }
        const childValue = child.props.value === undefined ? childIndex : child.props.value;
        return /*#__PURE__*/React__namespace.cloneElement(child, {
          selected: childValue === value,
          showLabel: child.props.showLabel !== undefined ? child.props.showLabel : showLabels,
          value: childValue,
          onChange
        });
      })
    }));
  });
  BottomNavigation.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Callback fired when the value changes.
     *
     * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.
     * @param {any} value We default to the index of the child.
     */
    onChange: PropTypes.func,
    /**
     * If `true`, all `BottomNavigationAction`s will show their labels.
     * By default, only the selected `BottomNavigationAction` will show its label.
     * @default false
     */
    showLabels: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the currently selected `BottomNavigationAction`.
     */
    value: PropTypes.any
  } ;
  var BottomNavigation$1 = BottomNavigation;

  function getBottomNavigationActionUtilityClass(slot) {
    return generateUtilityClass('MuiBottomNavigationAction', slot);
  }
  const bottomNavigationActionClasses = generateUtilityClasses('MuiBottomNavigationAction', ['root', 'iconOnly', 'selected', 'label']);
  var bottomNavigationActionClasses$1 = bottomNavigationActionClasses;

  const _excluded$1G = ["className", "icon", "label", "onChange", "onClick", "selected", "showLabel", "value"];
  const useUtilityClasses$1r = ownerState => {
    const {
      classes,
      showLabel,
      selected
    } = ownerState;
    const slots = {
      root: ['root', !showLabel && !selected && 'iconOnly', selected && 'selected'],
      label: ['label', !showLabel && !selected && 'iconOnly', selected && 'selected']
    };
    return composeClasses(slots, getBottomNavigationActionUtilityClass, classes);
  };
  const BottomNavigationActionRoot = styled$1(ButtonBase$1, {
    name: 'MuiBottomNavigationAction',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.showLabel && !ownerState.selected && styles.iconOnly];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    transition: theme.transitions.create(['color', 'padding-top'], {
      duration: theme.transitions.duration.short
    }),
    padding: '0px 12px',
    minWidth: 80,
    maxWidth: 168,
    color: (theme.vars || theme).palette.text.secondary,
    flexDirection: 'column',
    flex: '1'
  }, !ownerState.showLabel && !ownerState.selected && {
    paddingTop: 14
  }, !ownerState.showLabel && !ownerState.selected && !ownerState.label && {
    paddingTop: 0
  }, {
    [`&.${bottomNavigationActionClasses$1.selected}`]: {
      color: (theme.vars || theme).palette.primary.main
    }
  }));
  const BottomNavigationActionLabel = styled$1('span', {
    name: 'MuiBottomNavigationAction',
    slot: 'Label',
    overridesResolver: (props, styles) => styles.label
  })(({
    theme,
    ownerState
  }) => _extends({
    fontFamily: theme.typography.fontFamily,
    fontSize: theme.typography.pxToRem(12),
    opacity: 1,
    transition: 'font-size 0.2s, opacity 0.2s',
    transitionDelay: '0.1s'
  }, !ownerState.showLabel && !ownerState.selected && {
    opacity: 0,
    transitionDelay: '0s'
  }, {
    [`&.${bottomNavigationActionClasses$1.selected}`]: {
      fontSize: theme.typography.pxToRem(14)
    }
  }));
  const BottomNavigationAction = /*#__PURE__*/React__namespace.forwardRef(function BottomNavigationAction(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiBottomNavigationAction'
    });
    const {
        className,
        icon,
        label,
        onChange,
        onClick
        // eslint-disable-next-line react/prop-types -- private, always overridden by BottomNavigation
        ,

        value
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1G);
    const ownerState = props;
    const classes = useUtilityClasses$1r(ownerState);
    const handleChange = event => {
      if (onChange) {
        onChange(event, value);
      }
      if (onClick) {
        onClick(event);
      }
    };
    return /*#__PURE__*/jsxRuntime_2(BottomNavigationActionRoot, _extends({
      ref: ref,
      className: clsx(classes.root, className),
      focusRipple: true,
      onClick: handleChange,
      ownerState: ownerState
    }, other, {
      children: [icon, /*#__PURE__*/jsxRuntime_1(BottomNavigationActionLabel, {
        className: classes.label,
        ownerState: ownerState,
        children: label
      })]
    }));
  });
  BottomNavigationAction.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * This prop isn't supported.
     * Use the `component` prop if you need to change the children structure.
     */
    children: unsupportedProp,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The icon to display.
     */
    icon: PropTypes.node,
    /**
     * The label element.
     */
    label: PropTypes.node,
    /**
     * @ignore
     */
    onChange: PropTypes.func,
    /**
     * @ignore
     */
    onClick: PropTypes.func,
    /**
     * If `true`, the `BottomNavigationAction` will show its label.
     * By default, only the selected `BottomNavigationAction`
     * inside `BottomNavigation` will show its label.
     *
     * The prop defaults to the value (`false`) inherited from the parent BottomNavigation component.
     */
    showLabel: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * You can provide your own value. Otherwise, we fallback to the child position index.
     */
    value: PropTypes.any
  } ;
  var BottomNavigationAction$1 = BottomNavigationAction;

  const boxClasses = generateUtilityClasses('MuiBox', ['root']);
  var boxClasses$1 = boxClasses;

  const defaultTheme = createTheme();
  const Box = createBox({
    themeId: THEME_ID,
    defaultTheme,
    defaultClassName: boxClasses$1.root,
    generateClassName: ClassNameGenerator$1.generate
  });
  Box.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Box$1 = Box;

  var MoreHorizIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"
  }), 'MoreHoriz');

  const _excluded$1F = ["slots", "slotProps"];
  const BreadcrumbCollapsedButton = styled$1(ButtonBase$1)(({
    theme
  }) => _extends({
    display: 'flex',
    marginLeft: `calc(${theme.spacing(1)} * 0.5)`,
    marginRight: `calc(${theme.spacing(1)} * 0.5)`
  }, theme.palette.mode === 'light' ? {
    backgroundColor: theme.palette.grey[100],
    color: theme.palette.grey[700]
  } : {
    backgroundColor: theme.palette.grey[700],
    color: theme.palette.grey[100]
  }, {
    borderRadius: 2,
    '&:hover, &:focus': _extends({}, theme.palette.mode === 'light' ? {
      backgroundColor: theme.palette.grey[200]
    } : {
      backgroundColor: theme.palette.grey[600]
    }),
    '&:active': _extends({
      boxShadow: theme.shadows[0]
    }, theme.palette.mode === 'light' ? {
      backgroundColor: emphasize(theme.palette.grey[200], 0.12)
    } : {
      backgroundColor: emphasize(theme.palette.grey[600], 0.12)
    })
  }));
  const BreadcrumbCollapsedIcon = styled$1(MoreHorizIcon)({
    width: 24,
    height: 16
  });

  /**
   * @ignore - internal component.
   */
  function BreadcrumbCollapsed(props) {
    const {
        slots = {},
        slotProps = {}
      } = props,
      otherProps = _objectWithoutPropertiesLoose(props, _excluded$1F);
    const ownerState = props;
    return /*#__PURE__*/jsxRuntime_1("li", {
      children: /*#__PURE__*/jsxRuntime_1(BreadcrumbCollapsedButton, _extends({
        focusRipple: true
      }, otherProps, {
        ownerState: ownerState,
        children: /*#__PURE__*/jsxRuntime_1(BreadcrumbCollapsedIcon, _extends({
          as: slots.CollapsedIcon,
          ownerState: ownerState
        }, slotProps.collapsedIcon))
      }))
    });
  }
  BreadcrumbCollapsed.propTypes = {
    /**
     * The props used for the CollapsedIcon slot.
     * @default {}
     */
    slotProps: PropTypes.shape({
      collapsedIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside the BreadcumbCollapsed.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      CollapsedIcon: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.object
  } ;

  function getBreadcrumbsUtilityClass(slot) {
    return generateUtilityClass('MuiBreadcrumbs', slot);
  }
  const breadcrumbsClasses = generateUtilityClasses('MuiBreadcrumbs', ['root', 'ol', 'li', 'separator']);
  var breadcrumbsClasses$1 = breadcrumbsClasses;

  const _excluded$1E = ["children", "className", "component", "slots", "slotProps", "expandText", "itemsAfterCollapse", "itemsBeforeCollapse", "maxItems", "separator"];
  const useUtilityClasses$1q = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      li: ['li'],
      ol: ['ol'],
      separator: ['separator']
    };
    return composeClasses(slots, getBreadcrumbsUtilityClass, classes);
  };
  const BreadcrumbsRoot = styled$1(Typography$1, {
    name: 'MuiBreadcrumbs',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      return [{
        [`& .${breadcrumbsClasses$1.li}`]: styles.li
      }, styles.root];
    }
  })({});
  const BreadcrumbsOl = styled$1('ol', {
    name: 'MuiBreadcrumbs',
    slot: 'Ol',
    overridesResolver: (props, styles) => styles.ol
  })({
    display: 'flex',
    flexWrap: 'wrap',
    alignItems: 'center',
    padding: 0,
    margin: 0,
    listStyle: 'none'
  });
  const BreadcrumbsSeparator = styled$1('li', {
    name: 'MuiBreadcrumbs',
    slot: 'Separator',
    overridesResolver: (props, styles) => styles.separator
  })({
    display: 'flex',
    userSelect: 'none',
    marginLeft: 8,
    marginRight: 8
  });
  function insertSeparators(items, className, separator, ownerState) {
    return items.reduce((acc, current, index) => {
      if (index < items.length - 1) {
        acc = acc.concat(current, /*#__PURE__*/jsxRuntime_1(BreadcrumbsSeparator, {
          "aria-hidden": true,
          className: className,
          ownerState: ownerState,
          children: separator
        }, `separator-${index}`));
      } else {
        acc.push(current);
      }
      return acc;
    }, []);
  }
  const Breadcrumbs = /*#__PURE__*/React__namespace.forwardRef(function Breadcrumbs(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiBreadcrumbs'
    });
    const {
        children,
        className,
        component = 'nav',
        slots = {},
        slotProps = {},
        expandText = 'Show path',
        itemsAfterCollapse = 1,
        itemsBeforeCollapse = 1,
        maxItems = 8,
        separator = '/'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1E);
    const [expanded, setExpanded] = React__namespace.useState(false);
    const ownerState = _extends({}, props, {
      component,
      expanded,
      expandText,
      itemsAfterCollapse,
      itemsBeforeCollapse,
      maxItems,
      separator
    });
    const classes = useUtilityClasses$1q(ownerState);
    const collapsedIconSlotProps = useSlotProps({
      elementType: slots.CollapsedIcon,
      externalSlotProps: slotProps.collapsedIcon,
      ownerState
    });
    const listRef = React__namespace.useRef(null);
    const renderItemsBeforeAndAfter = allItems => {
      const handleClickExpand = () => {
        setExpanded(true);

        // The clicked element received the focus but gets removed from the DOM.
        // Let's keep the focus in the component after expanding.
        // Moving it to the <ol> or <nav> does not cause any announcement in NVDA.
        // By moving it to some link/button at least we have some announcement.
        const focusable = listRef.current.querySelector('a[href],button,[tabindex]');
        if (focusable) {
          focusable.focus();
        }
      };

      // This defends against someone passing weird input, to ensure that if all
      // items would be shown anyway, we just show all items without the EllipsisItem
      if (itemsBeforeCollapse + itemsAfterCollapse >= allItems.length) {
        {
          console.error(['MUI: You have provided an invalid combination of props to the Breadcrumbs.', `itemsAfterCollapse={${itemsAfterCollapse}} + itemsBeforeCollapse={${itemsBeforeCollapse}} >= maxItems={${maxItems}}`].join('\n'));
        }
        return allItems;
      }
      return [...allItems.slice(0, itemsBeforeCollapse), /*#__PURE__*/jsxRuntime_1(BreadcrumbCollapsed, {
        "aria-label": expandText,
        slots: {
          CollapsedIcon: slots.CollapsedIcon
        },
        slotProps: {
          collapsedIcon: collapsedIconSlotProps
        },
        onClick: handleClickExpand
      }, "ellipsis"), ...allItems.slice(allItems.length - itemsAfterCollapse, allItems.length)];
    };
    const allItems = React__namespace.Children.toArray(children).filter(child => {
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The Breadcrumbs component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      return /*#__PURE__*/React__namespace.isValidElement(child);
    }).map((child, index) => /*#__PURE__*/jsxRuntime_1("li", {
      className: classes.li,
      children: child
    }, `child-${index}`));
    return /*#__PURE__*/jsxRuntime_1(BreadcrumbsRoot, _extends({
      ref: ref,
      component: component,
      color: "text.secondary",
      className: clsx(classes.root, className),
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(BreadcrumbsOl, {
        className: classes.ol,
        ref: listRef,
        ownerState: ownerState,
        children: insertSeparators(expanded || maxItems && allItems.length <= maxItems ? allItems : renderItemsBeforeAndAfter(allItems), classes.separator, separator, ownerState)
      })
    }));
  });
  Breadcrumbs.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Override the default label for the expand button.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Show path'
     */
    expandText: PropTypes.string,
    /**
     * If max items is exceeded, the number of items to show after the ellipsis.
     * @default 1
     */
    itemsAfterCollapse: integerPropType,
    /**
     * If max items is exceeded, the number of items to show before the ellipsis.
     * @default 1
     */
    itemsBeforeCollapse: integerPropType,
    /**
     * Specifies the maximum number of breadcrumbs to display. When there are more
     * than the maximum number, only the first `itemsBeforeCollapse` and last `itemsAfterCollapse`
     * will be shown, with an ellipsis in between.
     * @default 8
     */
    maxItems: integerPropType,
    /**
     * Custom separator node.
     * @default '/'
     */
    separator: PropTypes.node,
    /**
     * The props used for each slot inside the Breadcumb.
     * @default {}
     */
    slotProps: PropTypes.shape({
      collapsedIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside the Breadcumb.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      CollapsedIcon: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Breadcrumbs$1 = Breadcrumbs;

  function getButtonUtilityClass(slot) {
    return generateUtilityClass('MuiButton', slot);
  }
  const buttonClasses = generateUtilityClasses('MuiButton', ['root', 'text', 'textInherit', 'textPrimary', 'textSecondary', 'textSuccess', 'textError', 'textInfo', 'textWarning', 'outlined', 'outlinedInherit', 'outlinedPrimary', 'outlinedSecondary', 'outlinedSuccess', 'outlinedError', 'outlinedInfo', 'outlinedWarning', 'contained', 'containedInherit', 'containedPrimary', 'containedSecondary', 'containedSuccess', 'containedError', 'containedInfo', 'containedWarning', 'disableElevation', 'focusVisible', 'disabled', 'colorInherit', 'textSizeSmall', 'textSizeMedium', 'textSizeLarge', 'outlinedSizeSmall', 'outlinedSizeMedium', 'outlinedSizeLarge', 'containedSizeSmall', 'containedSizeMedium', 'containedSizeLarge', 'sizeMedium', 'sizeSmall', 'sizeLarge', 'fullWidth', 'startIcon', 'endIcon', 'iconSizeSmall', 'iconSizeMedium', 'iconSizeLarge']);
  var buttonClasses$1 = buttonClasses;

  /**
   * @ignore - internal component.
   */
  const ButtonGroupContext = /*#__PURE__*/React__namespace.createContext({});
  {
    ButtonGroupContext.displayName = 'ButtonGroupContext';
  }
  var ButtonGroupContext$1 = ButtonGroupContext;

  /**
   * @ignore - internal component.
   */
  const ButtonGroupButtonContext = /*#__PURE__*/React__namespace.createContext(undefined);
  {
    ButtonGroupButtonContext.displayName = 'ButtonGroupButtonContext';
  }
  var ButtonGroupButtonContext$1 = ButtonGroupButtonContext;

  const _excluded$1D = ["children", "color", "component", "className", "disabled", "disableElevation", "disableFocusRipple", "endIcon", "focusVisibleClassName", "fullWidth", "size", "startIcon", "type", "variant"];
  const useUtilityClasses$1p = ownerState => {
    const {
      color,
      disableElevation,
      fullWidth,
      size,
      variant,
      classes
    } = ownerState;
    const slots = {
      root: ['root', variant, `${variant}${capitalize(color)}`, `size${capitalize(size)}`, `${variant}Size${capitalize(size)}`, color === 'inherit' && 'colorInherit', disableElevation && 'disableElevation', fullWidth && 'fullWidth'],
      label: ['label'],
      startIcon: ['startIcon', `iconSize${capitalize(size)}`],
      endIcon: ['endIcon', `iconSize${capitalize(size)}`]
    };
    const composedClasses = composeClasses(slots, getButtonUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const commonIconStyles = ownerState => _extends({}, ownerState.size === 'small' && {
    '& > *:nth-of-type(1)': {
      fontSize: 18
    }
  }, ownerState.size === 'medium' && {
    '& > *:nth-of-type(1)': {
      fontSize: 20
    }
  }, ownerState.size === 'large' && {
    '& > *:nth-of-type(1)': {
      fontSize: 22
    }
  });
  const ButtonRoot = styled$1(ButtonBase$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiButton',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color)}`], styles[`size${capitalize(ownerState.size)}`], styles[`${ownerState.variant}Size${capitalize(ownerState.size)}`], ownerState.color === 'inherit' && styles.colorInherit, ownerState.disableElevation && styles.disableElevation, ownerState.fullWidth && styles.fullWidth];
    }
  })(({
    theme,
    ownerState
  }) => {
    var _theme$palette$getCon, _theme$palette;
    const inheritContainedBackgroundColor = theme.palette.mode === 'light' ? theme.palette.grey[300] : theme.palette.grey[800];
    const inheritContainedHoverBackgroundColor = theme.palette.mode === 'light' ? theme.palette.grey.A100 : theme.palette.grey[700];
    return _extends({}, theme.typography.button, {
      minWidth: 64,
      padding: '6px 16px',
      borderRadius: (theme.vars || theme).shape.borderRadius,
      transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {
        duration: theme.transitions.duration.short
      }),
      '&:hover': _extends({
        textDecoration: 'none',
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.text.primary, theme.palette.action.hoverOpacity),
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      }, ownerState.variant === 'text' && ownerState.color !== 'inherit' && {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      }, ownerState.variant === 'outlined' && ownerState.color !== 'inherit' && {
        border: `1px solid ${(theme.vars || theme).palette[ownerState.color].main}`,
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      }, ownerState.variant === 'contained' && {
        backgroundColor: theme.vars ? theme.vars.palette.Button.inheritContainedHoverBg : inheritContainedHoverBackgroundColor,
        boxShadow: (theme.vars || theme).shadows[4],
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          boxShadow: (theme.vars || theme).shadows[2],
          backgroundColor: (theme.vars || theme).palette.grey[300]
        }
      }, ownerState.variant === 'contained' && ownerState.color !== 'inherit' && {
        backgroundColor: (theme.vars || theme).palette[ownerState.color].dark,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: (theme.vars || theme).palette[ownerState.color].main
        }
      }),
      '&:active': _extends({}, ownerState.variant === 'contained' && {
        boxShadow: (theme.vars || theme).shadows[8]
      }),
      [`&.${buttonClasses$1.focusVisible}`]: _extends({}, ownerState.variant === 'contained' && {
        boxShadow: (theme.vars || theme).shadows[6]
      }),
      [`&.${buttonClasses$1.disabled}`]: _extends({
        color: (theme.vars || theme).palette.action.disabled
      }, ownerState.variant === 'outlined' && {
        border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`
      }, ownerState.variant === 'contained' && {
        color: (theme.vars || theme).palette.action.disabled,
        boxShadow: (theme.vars || theme).shadows[0],
        backgroundColor: (theme.vars || theme).palette.action.disabledBackground
      })
    }, ownerState.variant === 'text' && {
      padding: '6px 8px'
    }, ownerState.variant === 'text' && ownerState.color !== 'inherit' && {
      color: (theme.vars || theme).palette[ownerState.color].main
    }, ownerState.variant === 'outlined' && {
      padding: '5px 15px',
      border: '1px solid currentColor'
    }, ownerState.variant === 'outlined' && ownerState.color !== 'inherit' && {
      color: (theme.vars || theme).palette[ownerState.color].main,
      border: theme.vars ? `1px solid rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.5)` : `1px solid ${alpha(theme.palette[ownerState.color].main, 0.5)}`
    }, ownerState.variant === 'contained' && {
      color: theme.vars ?
      // this is safe because grey does not change between default light/dark mode
      theme.vars.palette.text.primary : (_theme$palette$getCon = (_theme$palette = theme.palette).getContrastText) == null ? void 0 : _theme$palette$getCon.call(_theme$palette, theme.palette.grey[300]),
      backgroundColor: theme.vars ? theme.vars.palette.Button.inheritContainedBg : inheritContainedBackgroundColor,
      boxShadow: (theme.vars || theme).shadows[2]
    }, ownerState.variant === 'contained' && ownerState.color !== 'inherit' && {
      color: (theme.vars || theme).palette[ownerState.color].contrastText,
      backgroundColor: (theme.vars || theme).palette[ownerState.color].main
    }, ownerState.color === 'inherit' && {
      color: 'inherit',
      borderColor: 'currentColor'
    }, ownerState.size === 'small' && ownerState.variant === 'text' && {
      padding: '4px 5px',
      fontSize: theme.typography.pxToRem(13)
    }, ownerState.size === 'large' && ownerState.variant === 'text' && {
      padding: '8px 11px',
      fontSize: theme.typography.pxToRem(15)
    }, ownerState.size === 'small' && ownerState.variant === 'outlined' && {
      padding: '3px 9px',
      fontSize: theme.typography.pxToRem(13)
    }, ownerState.size === 'large' && ownerState.variant === 'outlined' && {
      padding: '7px 21px',
      fontSize: theme.typography.pxToRem(15)
    }, ownerState.size === 'small' && ownerState.variant === 'contained' && {
      padding: '4px 10px',
      fontSize: theme.typography.pxToRem(13)
    }, ownerState.size === 'large' && ownerState.variant === 'contained' && {
      padding: '8px 22px',
      fontSize: theme.typography.pxToRem(15)
    }, ownerState.fullWidth && {
      width: '100%'
    });
  }, ({
    ownerState
  }) => ownerState.disableElevation && {
    boxShadow: 'none',
    '&:hover': {
      boxShadow: 'none'
    },
    [`&.${buttonClasses$1.focusVisible}`]: {
      boxShadow: 'none'
    },
    '&:active': {
      boxShadow: 'none'
    },
    [`&.${buttonClasses$1.disabled}`]: {
      boxShadow: 'none'
    }
  });
  const ButtonStartIcon = styled$1('span', {
    name: 'MuiButton',
    slot: 'StartIcon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.startIcon, styles[`iconSize${capitalize(ownerState.size)}`]];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'inherit',
    marginRight: 8,
    marginLeft: -4
  }, ownerState.size === 'small' && {
    marginLeft: -2
  }, commonIconStyles(ownerState)));
  const ButtonEndIcon = styled$1('span', {
    name: 'MuiButton',
    slot: 'EndIcon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.endIcon, styles[`iconSize${capitalize(ownerState.size)}`]];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'inherit',
    marginRight: -4,
    marginLeft: 8
  }, ownerState.size === 'small' && {
    marginRight: -2
  }, commonIconStyles(ownerState)));
  const Button = /*#__PURE__*/React__namespace.forwardRef(function Button(inProps, ref) {
    // props priority: `inProps` > `contextProps` > `themeDefaultProps`
    const contextProps = React__namespace.useContext(ButtonGroupContext$1);
    const buttonGroupButtonContextPositionClassName = React__namespace.useContext(ButtonGroupButtonContext$1);
    const resolvedProps = resolveProps(contextProps, inProps);
    const props = useThemeProps({
      props: resolvedProps,
      name: 'MuiButton'
    });
    const {
        children,
        color = 'primary',
        component = 'button',
        className,
        disabled = false,
        disableElevation = false,
        disableFocusRipple = false,
        endIcon: endIconProp,
        focusVisibleClassName,
        fullWidth = false,
        size = 'medium',
        startIcon: startIconProp,
        type,
        variant = 'text'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1D);
    const ownerState = _extends({}, props, {
      color,
      component,
      disabled,
      disableElevation,
      disableFocusRipple,
      fullWidth,
      size,
      type,
      variant
    });
    const classes = useUtilityClasses$1p(ownerState);
    const startIcon = startIconProp && /*#__PURE__*/jsxRuntime_1(ButtonStartIcon, {
      className: classes.startIcon,
      ownerState: ownerState,
      children: startIconProp
    });
    const endIcon = endIconProp && /*#__PURE__*/jsxRuntime_1(ButtonEndIcon, {
      className: classes.endIcon,
      ownerState: ownerState,
      children: endIconProp
    });
    const positionClassName = buttonGroupButtonContextPositionClassName || '';
    return /*#__PURE__*/jsxRuntime_2(ButtonRoot, _extends({
      ownerState: ownerState,
      className: clsx(contextProps.className, classes.root, className, positionClassName),
      component: component,
      disabled: disabled,
      focusRipple: !disableFocusRipple,
      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
      ref: ref,
      type: type
    }, other, {
      classes: classes,
      children: [startIcon, children, endIcon]
    }));
  });
  Button.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'success', 'error', 'info', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, no elevation is used.
     * @default false
     */
    disableElevation: PropTypes.bool,
    /**
     * If `true`, the  keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     *
     * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
     * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * Element placed after the children.
     */
    endIcon: PropTypes.node,
    /**
     * @ignore
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * If `true`, the button will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The URL to link to when the button is clicked.
     * If defined, an `a` element will be used as the root node.
     */
    href: PropTypes.string,
    /**
     * The size of the component.
     * `small` is equivalent to the dense button styling.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * Element placed before the children.
     */
    startIcon: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * @ignore
     */
    type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string]),
    /**
     * The variant to use.
     * @default 'text'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string])
  } ;
  var Button$1 = Button;

  function getButtonGroupUtilityClass(slot) {
    return generateUtilityClass('MuiButtonGroup', slot);
  }
  const buttonGroupClasses = generateUtilityClasses('MuiButtonGroup', ['root', 'contained', 'outlined', 'text', 'disableElevation', 'disabled', 'firstButton', 'fullWidth', 'vertical', 'grouped', 'groupedHorizontal', 'groupedVertical', 'groupedText', 'groupedTextHorizontal', 'groupedTextVertical', 'groupedTextPrimary', 'groupedTextSecondary', 'groupedOutlined', 'groupedOutlinedHorizontal', 'groupedOutlinedVertical', 'groupedOutlinedPrimary', 'groupedOutlinedSecondary', 'groupedContained', 'groupedContainedHorizontal', 'groupedContainedVertical', 'groupedContainedPrimary', 'groupedContainedSecondary', 'lastButton', 'middleButton']);
  var buttonGroupClasses$1 = buttonGroupClasses;

  const _excluded$1C = ["children", "className", "color", "component", "disabled", "disableElevation", "disableFocusRipple", "disableRipple", "fullWidth", "orientation", "size", "variant"];
  const overridesResolver$6 = (props, styles) => {
    const {
      ownerState
    } = props;
    return [{
      [`& .${buttonGroupClasses$1.grouped}`]: styles.grouped
    }, {
      [`& .${buttonGroupClasses$1.grouped}`]: styles[`grouped${capitalize(ownerState.orientation)}`]
    }, {
      [`& .${buttonGroupClasses$1.grouped}`]: styles[`grouped${capitalize(ownerState.variant)}`]
    }, {
      [`& .${buttonGroupClasses$1.grouped}`]: styles[`grouped${capitalize(ownerState.variant)}${capitalize(ownerState.orientation)}`]
    }, {
      [`& .${buttonGroupClasses$1.grouped}`]: styles[`grouped${capitalize(ownerState.variant)}${capitalize(ownerState.color)}`]
    }, {
      [`& .${buttonGroupClasses$1.firstButton}`]: styles.firstButton
    }, {
      [`& .${buttonGroupClasses$1.lastButton}`]: styles.lastButton
    }, {
      [`& .${buttonGroupClasses$1.middleButton}`]: styles.middleButton
    }, styles.root, styles[ownerState.variant], ownerState.disableElevation === true && styles.disableElevation, ownerState.fullWidth && styles.fullWidth, ownerState.orientation === 'vertical' && styles.vertical];
  };
  const useUtilityClasses$1o = ownerState => {
    const {
      classes,
      color,
      disabled,
      disableElevation,
      fullWidth,
      orientation,
      variant
    } = ownerState;
    const slots = {
      root: ['root', variant, orientation === 'vertical' && 'vertical', fullWidth && 'fullWidth', disableElevation && 'disableElevation'],
      grouped: ['grouped', `grouped${capitalize(orientation)}`, `grouped${capitalize(variant)}`, `grouped${capitalize(variant)}${capitalize(orientation)}`, `grouped${capitalize(variant)}${capitalize(color)}`, disabled && 'disabled'],
      firstButton: ['firstButton'],
      lastButton: ['lastButton'],
      middleButton: ['middleButton']
    };
    return composeClasses(slots, getButtonGroupUtilityClass, classes);
  };
  const ButtonGroupRoot = styled$1('div', {
    name: 'MuiButtonGroup',
    slot: 'Root',
    overridesResolver: overridesResolver$6
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'inline-flex',
    borderRadius: (theme.vars || theme).shape.borderRadius
  }, ownerState.variant === 'contained' && {
    boxShadow: (theme.vars || theme).shadows[2]
  }, ownerState.disableElevation && {
    boxShadow: 'none'
  }, ownerState.fullWidth && {
    width: '100%'
  }, ownerState.orientation === 'vertical' && {
    flexDirection: 'column'
  }, {
    [`& .${buttonGroupClasses$1.grouped}`]: _extends({
      minWidth: 40,
      '&:hover': _extends({}, ownerState.variant === 'contained' && {
        boxShadow: 'none'
      })
    }, ownerState.variant === 'contained' && {
      boxShadow: 'none'
    }),
    [`& .${buttonGroupClasses$1.firstButton},& .${buttonGroupClasses$1.middleButton}`]: _extends({}, ownerState.orientation === 'horizontal' && {
      borderTopRightRadius: 0,
      borderBottomRightRadius: 0
    }, ownerState.orientation === 'vertical' && {
      borderBottomRightRadius: 0,
      borderBottomLeftRadius: 0
    }, ownerState.variant === 'text' && ownerState.orientation === 'horizontal' && {
      borderRight: theme.vars ? `1px solid rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.23)` : `1px solid ${theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'}`,
      [`&.${buttonGroupClasses$1.disabled}`]: {
        borderRight: `1px solid ${(theme.vars || theme).palette.action.disabled}`
      }
    }, ownerState.variant === 'text' && ownerState.orientation === 'vertical' && {
      borderBottom: theme.vars ? `1px solid rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.23)` : `1px solid ${theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'}`,
      [`&.${buttonGroupClasses$1.disabled}`]: {
        borderBottom: `1px solid ${(theme.vars || theme).palette.action.disabled}`
      }
    }, ownerState.variant === 'text' && ownerState.color !== 'inherit' && {
      borderColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.5)` : alpha(theme.palette[ownerState.color].main, 0.5)
    }, ownerState.variant === 'outlined' && ownerState.orientation === 'horizontal' && {
      borderRightColor: 'transparent'
    }, ownerState.variant === 'outlined' && ownerState.orientation === 'vertical' && {
      borderBottomColor: 'transparent'
    }, ownerState.variant === 'contained' && ownerState.orientation === 'horizontal' && {
      borderRight: `1px solid ${(theme.vars || theme).palette.grey[400]}`,
      [`&.${buttonGroupClasses$1.disabled}`]: {
        borderRight: `1px solid ${(theme.vars || theme).palette.action.disabled}`
      }
    }, ownerState.variant === 'contained' && ownerState.orientation === 'vertical' && {
      borderBottom: `1px solid ${(theme.vars || theme).palette.grey[400]}`,
      [`&.${buttonGroupClasses$1.disabled}`]: {
        borderBottom: `1px solid ${(theme.vars || theme).palette.action.disabled}`
      }
    }, ownerState.variant === 'contained' && ownerState.color !== 'inherit' && {
      borderColor: (theme.vars || theme).palette[ownerState.color].dark
    }, {
      '&:hover': _extends({}, ownerState.variant === 'outlined' && ownerState.orientation === 'horizontal' && {
        borderRightColor: 'currentColor'
      }, ownerState.variant === 'outlined' && ownerState.orientation === 'vertical' && {
        borderBottomColor: 'currentColor'
      })
    }),
    [`& .${buttonGroupClasses$1.lastButton},& .${buttonGroupClasses$1.middleButton}`]: _extends({}, ownerState.orientation === 'horizontal' && {
      borderTopLeftRadius: 0,
      borderBottomLeftRadius: 0
    }, ownerState.orientation === 'vertical' && {
      borderTopRightRadius: 0,
      borderTopLeftRadius: 0
    }, ownerState.variant === 'outlined' && ownerState.orientation === 'horizontal' && {
      marginLeft: -1
    }, ownerState.variant === 'outlined' && ownerState.orientation === 'vertical' && {
      marginTop: -1
    })
  }));
  const ButtonGroup = /*#__PURE__*/React__namespace.forwardRef(function ButtonGroup(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiButtonGroup'
    });
    const {
        children,
        className,
        color = 'primary',
        component = 'div',
        disabled = false,
        disableElevation = false,
        disableFocusRipple = false,
        disableRipple = false,
        fullWidth = false,
        orientation = 'horizontal',
        size = 'medium',
        variant = 'outlined'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1C);
    const ownerState = _extends({}, props, {
      color,
      component,
      disabled,
      disableElevation,
      disableFocusRipple,
      disableRipple,
      fullWidth,
      orientation,
      size,
      variant
    });
    const classes = useUtilityClasses$1o(ownerState);
    const context = React__namespace.useMemo(() => ({
      className: classes.grouped,
      color,
      disabled,
      disableElevation,
      disableFocusRipple,
      disableRipple,
      fullWidth,
      size,
      variant
    }), [color, disabled, disableElevation, disableFocusRipple, disableRipple, fullWidth, size, variant, classes.grouped]);
    const validChildren = getValidReactChildren(children);
    const childrenCount = validChildren.length;
    const getButtonPositionClassName = index => {
      const isFirstButton = index === 0;
      const isLastButton = index === childrenCount - 1;
      if (isFirstButton && isLastButton) {
        return '';
      }
      if (isFirstButton) {
        return classes.firstButton;
      }
      if (isLastButton) {
        return classes.lastButton;
      }
      return classes.middleButton;
    };
    return /*#__PURE__*/jsxRuntime_1(ButtonGroupRoot, _extends({
      as: component,
      role: "group",
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(ButtonGroupContext$1.Provider, {
        value: context,
        children: validChildren.map((child, index) => {
          return /*#__PURE__*/jsxRuntime_1(ButtonGroupButtonContext$1.Provider, {
            value: getButtonPositionClassName(index),
            children: child
          }, index);
        })
      })
    }));
  });
  ButtonGroup.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, no elevation is used.
     * @default false
     */
    disableElevation: PropTypes.bool,
    /**
     * If `true`, the button keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If `true`, the button ripple effect is disabled.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * If `true`, the buttons will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The component orientation (layout flow direction).
     * @default 'horizontal'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * The size of the component.
     * `small` is equivalent to the dense button styling.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'outlined'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string])
  } ;
  var ButtonGroup$1 = ButtonGroup;

  function getCardUtilityClass(slot) {
    return generateUtilityClass('MuiCard', slot);
  }
  const cardClasses = generateUtilityClasses('MuiCard', ['root']);
  var cardClasses$1 = cardClasses;

  const _excluded$1B = ["className", "raised"];
  const useUtilityClasses$1n = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getCardUtilityClass, classes);
  };
  const CardRoot = styled$1(Paper$1, {
    name: 'MuiCard',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(() => {
    return {
      overflow: 'hidden'
    };
  });
  const Card = /*#__PURE__*/React__namespace.forwardRef(function Card(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCard'
    });
    const {
        className,
        raised = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1B);
    const ownerState = _extends({}, props, {
      raised
    });
    const classes = useUtilityClasses$1n(ownerState);
    return /*#__PURE__*/jsxRuntime_1(CardRoot, _extends({
      className: clsx(classes.root, className),
      elevation: raised ? 8 : undefined,
      ref: ref,
      ownerState: ownerState
    }, other));
  });
  Card.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the card will use raised styling.
     * @default false
     */
    raised: chainPropTypes(PropTypes.bool, props => {
      if (props.raised && props.variant === 'outlined') {
        return new Error('MUI: Combining `raised={true}` with `variant="outlined"` has no effect.');
      }
      return null;
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Card$1 = Card;

  function getCardActionAreaUtilityClass(slot) {
    return generateUtilityClass('MuiCardActionArea', slot);
  }
  const cardActionAreaClasses = generateUtilityClasses('MuiCardActionArea', ['root', 'focusVisible', 'focusHighlight']);
  var cardActionAreaClasses$1 = cardActionAreaClasses;

  const _excluded$1A = ["children", "className", "focusVisibleClassName"];
  const useUtilityClasses$1m = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      focusHighlight: ['focusHighlight']
    };
    return composeClasses(slots, getCardActionAreaUtilityClass, classes);
  };
  const CardActionAreaRoot = styled$1(ButtonBase$1, {
    name: 'MuiCardActionArea',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => ({
    display: 'block',
    textAlign: 'inherit',
    borderRadius: 'inherit',
    // for Safari to work https://github.com/mui/material-ui/issues/36285.
    width: '100%',
    [`&:hover .${cardActionAreaClasses$1.focusHighlight}`]: {
      opacity: (theme.vars || theme).palette.action.hoverOpacity,
      '@media (hover: none)': {
        opacity: 0
      }
    },
    [`&.${cardActionAreaClasses$1.focusVisible} .${cardActionAreaClasses$1.focusHighlight}`]: {
      opacity: (theme.vars || theme).palette.action.focusOpacity
    }
  }));
  const CardActionAreaFocusHighlight = styled$1('span', {
    name: 'MuiCardActionArea',
    slot: 'FocusHighlight',
    overridesResolver: (props, styles) => styles.focusHighlight
  })(({
    theme
  }) => ({
    overflow: 'hidden',
    pointerEvents: 'none',
    position: 'absolute',
    top: 0,
    right: 0,
    bottom: 0,
    left: 0,
    borderRadius: 'inherit',
    opacity: 0,
    backgroundColor: 'currentcolor',
    transition: theme.transitions.create('opacity', {
      duration: theme.transitions.duration.short
    })
  }));
  const CardActionArea = /*#__PURE__*/React__namespace.forwardRef(function CardActionArea(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCardActionArea'
    });
    const {
        children,
        className,
        focusVisibleClassName
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1A);
    const ownerState = props;
    const classes = useUtilityClasses$1m(ownerState);
    return /*#__PURE__*/jsxRuntime_2(CardActionAreaRoot, _extends({
      className: clsx(classes.root, className),
      focusVisibleClassName: clsx(focusVisibleClassName, classes.focusVisible),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [children, /*#__PURE__*/jsxRuntime_1(CardActionAreaFocusHighlight, {
        className: classes.focusHighlight,
        ownerState: ownerState
      })]
    }));
  });
  CardActionArea.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * @ignore
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var CardActionArea$1 = CardActionArea;

  function getCardActionsUtilityClass(slot) {
    return generateUtilityClass('MuiCardActions', slot);
  }
  const cardActionsClasses = generateUtilityClasses('MuiCardActions', ['root', 'spacing']);
  var cardActionsClasses$1 = cardActionsClasses;

  const _excluded$1z = ["disableSpacing", "className"];
  const useUtilityClasses$1l = ownerState => {
    const {
      classes,
      disableSpacing
    } = ownerState;
    const slots = {
      root: ['root', !disableSpacing && 'spacing']
    };
    return composeClasses(slots, getCardActionsUtilityClass, classes);
  };
  const CardActionsRoot = styled$1('div', {
    name: 'MuiCardActions',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.disableSpacing && styles.spacing];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex',
    alignItems: 'center',
    padding: 8
  }, !ownerState.disableSpacing && {
    '& > :not(:first-of-type)': {
      marginLeft: 8
    }
  }));
  const CardActions = /*#__PURE__*/React__namespace.forwardRef(function CardActions(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCardActions'
    });
    const {
        disableSpacing = false,
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1z);
    const ownerState = _extends({}, props, {
      disableSpacing
    });
    const classes = useUtilityClasses$1l(ownerState);
    return /*#__PURE__*/jsxRuntime_1(CardActionsRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  CardActions.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the actions do not have additional margin.
     * @default false
     */
    disableSpacing: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var CardActions$1 = CardActions;

  function getCardContentUtilityClass(slot) {
    return generateUtilityClass('MuiCardContent', slot);
  }
  const cardContentClasses = generateUtilityClasses('MuiCardContent', ['root']);
  var cardContentClasses$1 = cardContentClasses;

  const _excluded$1y = ["className", "component"];
  const useUtilityClasses$1k = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getCardContentUtilityClass, classes);
  };
  const CardContentRoot = styled$1('div', {
    name: 'MuiCardContent',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(() => {
    return {
      padding: 16,
      '&:last-child': {
        paddingBottom: 24
      }
    };
  });
  const CardContent = /*#__PURE__*/React__namespace.forwardRef(function CardContent(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCardContent'
    });
    const {
        className,
        component = 'div'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1y);
    const ownerState = _extends({}, props, {
      component
    });
    const classes = useUtilityClasses$1k(ownerState);
    return /*#__PURE__*/jsxRuntime_1(CardContentRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  CardContent.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var CardContent$1 = CardContent;

  function getCardHeaderUtilityClass(slot) {
    return generateUtilityClass('MuiCardHeader', slot);
  }
  const cardHeaderClasses = generateUtilityClasses('MuiCardHeader', ['root', 'avatar', 'action', 'content', 'title', 'subheader']);
  var cardHeaderClasses$1 = cardHeaderClasses;

  const _excluded$1x = ["action", "avatar", "className", "component", "disableTypography", "subheader", "subheaderTypographyProps", "title", "titleTypographyProps"];
  const useUtilityClasses$1j = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      avatar: ['avatar'],
      action: ['action'],
      content: ['content'],
      title: ['title'],
      subheader: ['subheader']
    };
    return composeClasses(slots, getCardHeaderUtilityClass, classes);
  };
  const CardHeaderRoot = styled$1('div', {
    name: 'MuiCardHeader',
    slot: 'Root',
    overridesResolver: (props, styles) => _extends({
      [`& .${cardHeaderClasses$1.title}`]: styles.title,
      [`& .${cardHeaderClasses$1.subheader}`]: styles.subheader
    }, styles.root)
  })({
    display: 'flex',
    alignItems: 'center',
    padding: 16
  });
  const CardHeaderAvatar = styled$1('div', {
    name: 'MuiCardHeader',
    slot: 'Avatar',
    overridesResolver: (props, styles) => styles.avatar
  })({
    display: 'flex',
    flex: '0 0 auto',
    marginRight: 16
  });
  const CardHeaderAction = styled$1('div', {
    name: 'MuiCardHeader',
    slot: 'Action',
    overridesResolver: (props, styles) => styles.action
  })({
    flex: '0 0 auto',
    alignSelf: 'flex-start',
    marginTop: -4,
    marginRight: -8,
    marginBottom: -4
  });
  const CardHeaderContent = styled$1('div', {
    name: 'MuiCardHeader',
    slot: 'Content',
    overridesResolver: (props, styles) => styles.content
  })({
    flex: '1 1 auto'
  });
  const CardHeader = /*#__PURE__*/React__namespace.forwardRef(function CardHeader(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCardHeader'
    });
    const {
        action,
        avatar,
        className,
        component = 'div',
        disableTypography = false,
        subheader: subheaderProp,
        subheaderTypographyProps,
        title: titleProp,
        titleTypographyProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1x);
    const ownerState = _extends({}, props, {
      component,
      disableTypography
    });
    const classes = useUtilityClasses$1j(ownerState);
    let title = titleProp;
    if (title != null && title.type !== Typography$1 && !disableTypography) {
      title = /*#__PURE__*/jsxRuntime_1(Typography$1, _extends({
        variant: avatar ? 'body2' : 'h5',
        className: classes.title,
        component: "span",
        display: "block"
      }, titleTypographyProps, {
        children: title
      }));
    }
    let subheader = subheaderProp;
    if (subheader != null && subheader.type !== Typography$1 && !disableTypography) {
      subheader = /*#__PURE__*/jsxRuntime_1(Typography$1, _extends({
        variant: avatar ? 'body2' : 'body1',
        className: classes.subheader,
        color: "text.secondary",
        component: "span",
        display: "block"
      }, subheaderTypographyProps, {
        children: subheader
      }));
    }
    return /*#__PURE__*/jsxRuntime_2(CardHeaderRoot, _extends({
      className: clsx(classes.root, className),
      as: component,
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [avatar && /*#__PURE__*/jsxRuntime_1(CardHeaderAvatar, {
        className: classes.avatar,
        ownerState: ownerState,
        children: avatar
      }), /*#__PURE__*/jsxRuntime_2(CardHeaderContent, {
        className: classes.content,
        ownerState: ownerState,
        children: [title, subheader]
      }), action && /*#__PURE__*/jsxRuntime_1(CardHeaderAction, {
        className: classes.action,
        ownerState: ownerState,
        children: action
      })]
    }));
  });
  CardHeader.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The action to display in the card header.
     */
    action: PropTypes.node,
    /**
     * The Avatar element to display.
     */
    avatar: PropTypes.node,
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, `subheader` and `title` won't be wrapped by a Typography component.
     * This can be useful to render an alternative Typography variant by wrapping
     * the `title` text, and optional `subheader` text
     * with the Typography component.
     * @default false
     */
    disableTypography: PropTypes.bool,
    /**
     * The content of the component.
     */
    subheader: PropTypes.node,
    /**
     * These props will be forwarded to the subheader
     * (as long as disableTypography is not `true`).
     */
    subheaderTypographyProps: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The content of the component.
     */
    title: PropTypes.node,
    /**
     * These props will be forwarded to the title
     * (as long as disableTypography is not `true`).
     */
    titleTypographyProps: PropTypes.object
  } ;
  var CardHeader$1 = CardHeader;

  function getCardMediaUtilityClass(slot) {
    return generateUtilityClass('MuiCardMedia', slot);
  }
  const cardMediaClasses = generateUtilityClasses('MuiCardMedia', ['root', 'media', 'img']);
  var cardMediaClasses$1 = cardMediaClasses;

  const _excluded$1w = ["children", "className", "component", "image", "src", "style"];
  const useUtilityClasses$1i = ownerState => {
    const {
      classes,
      isMediaComponent,
      isImageComponent
    } = ownerState;
    const slots = {
      root: ['root', isMediaComponent && 'media', isImageComponent && 'img']
    };
    return composeClasses(slots, getCardMediaUtilityClass, classes);
  };
  const CardMediaRoot = styled$1('div', {
    name: 'MuiCardMedia',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      const {
        isMediaComponent,
        isImageComponent
      } = ownerState;
      return [styles.root, isMediaComponent && styles.media, isImageComponent && styles.img];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'block',
    backgroundSize: 'cover',
    backgroundRepeat: 'no-repeat',
    backgroundPosition: 'center'
  }, ownerState.isMediaComponent && {
    width: '100%'
  }, ownerState.isImageComponent && {
    // ⚠️ object-fit is not supported by IE11.
    objectFit: 'cover'
  }));
  const MEDIA_COMPONENTS = ['video', 'audio', 'picture', 'iframe', 'img'];
  const IMAGE_COMPONENTS = ['picture', 'img'];
  const CardMedia = /*#__PURE__*/React__namespace.forwardRef(function CardMedia(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCardMedia'
    });
    const {
        children,
        className,
        component = 'div',
        image,
        src,
        style
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1w);
    const isMediaComponent = MEDIA_COMPONENTS.indexOf(component) !== -1;
    const composedStyle = !isMediaComponent && image ? _extends({
      backgroundImage: `url("${image}")`
    }, style) : style;
    const ownerState = _extends({}, props, {
      component,
      isMediaComponent,
      isImageComponent: IMAGE_COMPONENTS.indexOf(component) !== -1
    });
    const classes = useUtilityClasses$1i(ownerState);
    return /*#__PURE__*/jsxRuntime_1(CardMediaRoot, _extends({
      className: clsx(classes.root, className),
      as: component,
      role: !isMediaComponent && image ? 'img' : undefined,
      ref: ref,
      style: composedStyle,
      ownerState: ownerState,
      src: isMediaComponent ? image || src : undefined
    }, other, {
      children: children
    }));
  });
  CardMedia.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: chainPropTypes(PropTypes.node, props => {
      if (!props.children && !props.image && !props.src && !props.component) {
        return new Error('MUI: Either `children`, `image`, `src` or `component` prop must be specified.');
      }
      return null;
    }),
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Image to be displayed as a background image.
     * Either `image` or `src` prop must be specified.
     * Note that caller must specify height otherwise the image will not be visible.
     */
    image: PropTypes.string,
    /**
     * An alias for `image` property.
     * Available only with media components.
     * Media components: `video`, `audio`, `picture`, `iframe`, `img`.
     */
    src: PropTypes.string,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var CardMedia$1 = CardMedia;

  function getSwitchBaseUtilityClass(slot) {
    return generateUtilityClass('PrivateSwitchBase', slot);
  }
  generateUtilityClasses('PrivateSwitchBase', ['root', 'checked', 'disabled', 'input', 'edgeStart', 'edgeEnd']);

  const _excluded$1v = ["autoFocus", "checked", "checkedIcon", "className", "defaultChecked", "disabled", "disableFocusRipple", "edge", "icon", "id", "inputProps", "inputRef", "name", "onBlur", "onChange", "onFocus", "readOnly", "required", "tabIndex", "type", "value"];
  const useUtilityClasses$1h = ownerState => {
    const {
      classes,
      checked,
      disabled,
      edge
    } = ownerState;
    const slots = {
      root: ['root', checked && 'checked', disabled && 'disabled', edge && `edge${capitalize(edge)}`],
      input: ['input']
    };
    return composeClasses(slots, getSwitchBaseUtilityClass, classes);
  };
  const SwitchBaseRoot = styled$1(ButtonBase$1)(({
    ownerState
  }) => _extends({
    padding: 9,
    borderRadius: '50%'
  }, ownerState.edge === 'start' && {
    marginLeft: ownerState.size === 'small' ? -3 : -12
  }, ownerState.edge === 'end' && {
    marginRight: ownerState.size === 'small' ? -3 : -12
  }));
  const SwitchBaseInput = styled$1('input', {
    shouldForwardProp: rootShouldForwardProp
  })({
    cursor: 'inherit',
    position: 'absolute',
    opacity: 0,
    width: '100%',
    height: '100%',
    top: 0,
    left: 0,
    margin: 0,
    padding: 0,
    zIndex: 1
  });

  /**
   * @ignore - internal component.
   */
  const SwitchBase = /*#__PURE__*/React__namespace.forwardRef(function SwitchBase(props, ref) {
    const {
        autoFocus,
        checked: checkedProp,
        checkedIcon,
        className,
        defaultChecked,
        disabled: disabledProp,
        disableFocusRipple = false,
        edge = false,
        icon,
        id,
        inputProps,
        inputRef,
        name,
        onBlur,
        onChange,
        onFocus,
        readOnly,
        required = false,
        tabIndex,
        type,
        value
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1v);
    const [checked, setCheckedState] = useControlled({
      controlled: checkedProp,
      default: Boolean(defaultChecked),
      name: 'SwitchBase',
      state: 'checked'
    });
    const muiFormControl = useFormControl();
    const handleFocus = event => {
      if (onFocus) {
        onFocus(event);
      }
      if (muiFormControl && muiFormControl.onFocus) {
        muiFormControl.onFocus(event);
      }
    };
    const handleBlur = event => {
      if (onBlur) {
        onBlur(event);
      }
      if (muiFormControl && muiFormControl.onBlur) {
        muiFormControl.onBlur(event);
      }
    };
    const handleInputChange = event => {
      // Workaround for https://github.com/facebook/react/issues/9023
      if (event.nativeEvent.defaultPrevented) {
        return;
      }
      const newChecked = event.target.checked;
      setCheckedState(newChecked);
      if (onChange) {
        // TODO v6: remove the second argument.
        onChange(event, newChecked);
      }
    };
    let disabled = disabledProp;
    if (muiFormControl) {
      if (typeof disabled === 'undefined') {
        disabled = muiFormControl.disabled;
      }
    }
    const hasLabelFor = type === 'checkbox' || type === 'radio';
    const ownerState = _extends({}, props, {
      checked,
      disabled,
      disableFocusRipple,
      edge
    });
    const classes = useUtilityClasses$1h(ownerState);
    return /*#__PURE__*/jsxRuntime_2(SwitchBaseRoot, _extends({
      component: "span",
      className: clsx(classes.root, className),
      centerRipple: true,
      focusRipple: !disableFocusRipple,
      disabled: disabled,
      tabIndex: null,
      role: undefined,
      onFocus: handleFocus,
      onBlur: handleBlur,
      ownerState: ownerState,
      ref: ref
    }, other, {
      children: [/*#__PURE__*/jsxRuntime_1(SwitchBaseInput, _extends({
        autoFocus: autoFocus,
        checked: checkedProp,
        defaultChecked: defaultChecked,
        className: classes.input,
        disabled: disabled,
        id: hasLabelFor ? id : undefined,
        name: name,
        onChange: handleInputChange,
        readOnly: readOnly,
        ref: inputRef,
        required: required,
        ownerState: ownerState,
        tabIndex: tabIndex,
        type: type
      }, type === 'checkbox' && value === undefined ? {} : {
        value
      }, inputProps)), checked ? checkedIcon : icon]
    }));
  });

  // NB: If changed, please update Checkbox, Switch and Radio
  // so that the API documentation is updated.
  SwitchBase.propTypes = {
    /**
     * If `true`, the `input` element is focused during the first mount.
     */
    autoFocus: PropTypes.bool,
    /**
     * If `true`, the component is checked.
     */
    checked: PropTypes.bool,
    /**
     * The icon to display when the component is checked.
     */
    checkedIcon: PropTypes.node.isRequired,
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * @ignore
     */
    defaultChecked: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the  keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If given, uses a negative margin to counteract the padding on one
     * side (this is often helpful for aligning the left or right
     * side of the icon with content above or below, without ruining the border
     * size and shape).
     * @default false
     */
    edge: PropTypes.oneOf(['end', 'start', false]),
    /**
     * The icon to display when the component is unchecked.
     */
    icon: PropTypes.node.isRequired,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /*
     * @ignore
     */
    name: PropTypes.string,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * Callback fired when the state is changed.
     *
     * @param {object} event The event source of the callback.
     * You can pull out the new checked state by accessing `event.target.checked` (boolean).
     */
    onChange: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * It prevents the user from changing the value of the field
     * (not from interacting with the field).
     */
    readOnly: PropTypes.bool,
    /**
     * If `true`, the `input` element is required.
     */
    required: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.object,
    /**
     * @ignore
     */
    tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * The input component prop `type`.
     */
    type: PropTypes.string.isRequired,
    /**
     * The value of the component.
     */
    value: PropTypes.any
  } ;
  var SwitchBase$1 = SwitchBase;

  var CheckBoxOutlineBlankIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"
  }), 'CheckBoxOutlineBlank');

  var CheckBoxIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
  }), 'CheckBox');

  var IndeterminateCheckBoxIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"
  }), 'IndeterminateCheckBox');

  function getCheckboxUtilityClass(slot) {
    return generateUtilityClass('MuiCheckbox', slot);
  }
  const checkboxClasses = generateUtilityClasses('MuiCheckbox', ['root', 'checked', 'disabled', 'indeterminate', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium']);
  var checkboxClasses$1 = checkboxClasses;

  const _excluded$1u = ["checkedIcon", "color", "icon", "indeterminate", "indeterminateIcon", "inputProps", "size", "className"];
  const useUtilityClasses$1g = ownerState => {
    const {
      classes,
      indeterminate,
      color,
      size
    } = ownerState;
    const slots = {
      root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`, `size${capitalize(size)}`]
    };
    const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const CheckboxRoot = styled$1(SwitchBase$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiCheckbox',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.indeterminate && styles.indeterminate, styles[`size${capitalize(ownerState.size)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    color: (theme.vars || theme).palette.text.secondary
  }, !ownerState.disableRipple && {
    '&:hover': {
      backgroundColor: theme.vars ? `rgba(${ownerState.color === 'default' ? theme.vars.palette.action.activeChannel : theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(ownerState.color === 'default' ? theme.palette.action.active : theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    }
  }, ownerState.color !== 'default' && {
    [`&.${checkboxClasses$1.checked}, &.${checkboxClasses$1.indeterminate}`]: {
      color: (theme.vars || theme).palette[ownerState.color].main
    },
    [`&.${checkboxClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.action.disabled
    }
  }));
  const defaultCheckedIcon$1 = /*#__PURE__*/jsxRuntime_1(CheckBoxIcon, {});
  const defaultIcon$2 = /*#__PURE__*/jsxRuntime_1(CheckBoxOutlineBlankIcon, {});
  const defaultIndeterminateIcon = /*#__PURE__*/jsxRuntime_1(IndeterminateCheckBoxIcon, {});
  const Checkbox = /*#__PURE__*/React__namespace.forwardRef(function Checkbox(inProps, ref) {
    var _icon$props$fontSize, _indeterminateIcon$pr;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCheckbox'
    });
    const {
        checkedIcon = defaultCheckedIcon$1,
        color = 'primary',
        icon: iconProp = defaultIcon$2,
        indeterminate = false,
        indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,
        inputProps,
        size = 'medium',
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1u);
    const icon = indeterminate ? indeterminateIconProp : iconProp;
    const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;
    const ownerState = _extends({}, props, {
      color,
      indeterminate,
      size
    });
    const classes = useUtilityClasses$1g(ownerState);
    return /*#__PURE__*/jsxRuntime_1(CheckboxRoot, _extends({
      type: "checkbox",
      inputProps: _extends({
        'data-indeterminate': indeterminate
      }, inputProps),
      icon: /*#__PURE__*/React__namespace.cloneElement(icon, {
        fontSize: (_icon$props$fontSize = icon.props.fontSize) != null ? _icon$props$fontSize : size
      }),
      checkedIcon: /*#__PURE__*/React__namespace.cloneElement(indeterminateIcon, {
        fontSize: (_indeterminateIcon$pr = indeterminateIcon.props.fontSize) != null ? _indeterminateIcon$pr : size
      }),
      ownerState: ownerState,
      ref: ref,
      className: clsx(classes.root, className)
    }, other, {
      classes: classes
    }));
  });
  Checkbox.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the component is checked.
     */
    checked: PropTypes.bool,
    /**
     * The icon to display when the component is checked.
     * @default <CheckBoxIcon />
     */
    checkedIcon: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The default checked state. Use when the component is not controlled.
     */
    defaultChecked: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * The icon to display when the component is unchecked.
     * @default <CheckBoxOutlineBlankIcon />
     */
    icon: PropTypes.node,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * If `true`, the component appears indeterminate.
     * This does not set the native input element to indeterminate due
     * to inconsistent behavior across browsers.
     * However, we set a `data-indeterminate` attribute on the `input`.
     * @default false
     */
    indeterminate: PropTypes.bool,
    /**
     * The icon to display when the component is indeterminate.
     * @default <IndeterminateCheckBoxIcon />
     */
    indeterminateIcon: PropTypes.node,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * Callback fired when the state is changed.
     *
     * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.
     * You can pull out the new checked state by accessing `event.target.checked` (boolean).
     */
    onChange: PropTypes.func,
    /**
     * If `true`, the `input` element is required.
     * @default false
     */
    required: PropTypes.bool,
    /**
     * The size of the component.
     * `small` is equivalent to the dense checkbox styling.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the component. The DOM API casts this to a string.
     * The browser uses "on" as the default value.
     */
    value: PropTypes.any
  } ;
  var Checkbox$1 = Checkbox;

  function getCircularProgressUtilityClass(slot) {
    return generateUtilityClass('MuiCircularProgress', slot);
  }
  const circularProgressClasses = generateUtilityClasses('MuiCircularProgress', ['root', 'determinate', 'indeterminate', 'colorPrimary', 'colorSecondary', 'svg', 'circle', 'circleDeterminate', 'circleIndeterminate', 'circleDisableShrink']);
  var circularProgressClasses$1 = circularProgressClasses;

  const _excluded$1t = ["className", "color", "disableShrink", "size", "style", "thickness", "value", "variant"];
  let _$2 = t => t,
    _t$2,
    _t2$2,
    _t3$2,
    _t4$2;
  const SIZE = 44;
  const circularRotateKeyframe = keyframes(_t$2 || (_t$2 = _$2`
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
`));
  const circularDashKeyframe = keyframes(_t2$2 || (_t2$2 = _$2`
  0% {
    stroke-dasharray: 1px, 200px;
    stroke-dashoffset: 0;
  }

  50% {
    stroke-dasharray: 100px, 200px;
    stroke-dashoffset: -15px;
  }

  100% {
    stroke-dasharray: 100px, 200px;
    stroke-dashoffset: -125px;
  }
`));
  const useUtilityClasses$1f = ownerState => {
    const {
      classes,
      variant,
      color,
      disableShrink
    } = ownerState;
    const slots = {
      root: ['root', variant, `color${capitalize(color)}`],
      svg: ['svg'],
      circle: ['circle', `circle${capitalize(variant)}`, disableShrink && 'circleDisableShrink']
    };
    return composeClasses(slots, getCircularProgressUtilityClass, classes);
  };
  const CircularProgressRoot = styled$1('span', {
    name: 'MuiCircularProgress',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], styles[`color${capitalize(ownerState.color)}`]];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    display: 'inline-block'
  }, ownerState.variant === 'determinate' && {
    transition: theme.transitions.create('transform')
  }, ownerState.color !== 'inherit' && {
    color: (theme.vars || theme).palette[ownerState.color].main
  }), ({
    ownerState
  }) => ownerState.variant === 'indeterminate' && css(_t3$2 || (_t3$2 = _$2`
      animation: ${0} 1.4s linear infinite;
    `), circularRotateKeyframe));
  const CircularProgressSVG = styled$1('svg', {
    name: 'MuiCircularProgress',
    slot: 'Svg',
    overridesResolver: (props, styles) => styles.svg
  })({
    display: 'block' // Keeps the progress centered
  });
  const CircularProgressCircle = styled$1('circle', {
    name: 'MuiCircularProgress',
    slot: 'Circle',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.circle, styles[`circle${capitalize(ownerState.variant)}`], ownerState.disableShrink && styles.circleDisableShrink];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    stroke: 'currentColor'
  }, ownerState.variant === 'determinate' && {
    transition: theme.transitions.create('stroke-dashoffset')
  }, ownerState.variant === 'indeterminate' && {
    // Some default value that looks fine waiting for the animation to kicks in.
    strokeDasharray: '80px, 200px',
    strokeDashoffset: 0 // Add the unit to fix a Edge 16 and below bug.
  }), ({
    ownerState
  }) => ownerState.variant === 'indeterminate' && !ownerState.disableShrink && css(_t4$2 || (_t4$2 = _$2`
      animation: ${0} 1.4s ease-in-out infinite;
    `), circularDashKeyframe));

  /**
   * ## ARIA
   *
   * If the progress bar is describing the loading progress of a particular region of a page,
   * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`
   * attribute to `true` on that region until it has finished loading.
   */
  const CircularProgress = /*#__PURE__*/React__namespace.forwardRef(function CircularProgress(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCircularProgress'
    });
    const {
        className,
        color = 'primary',
        disableShrink = false,
        size = 40,
        style,
        thickness = 3.6,
        value = 0,
        variant = 'indeterminate'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1t);
    const ownerState = _extends({}, props, {
      color,
      disableShrink,
      size,
      thickness,
      value,
      variant
    });
    const classes = useUtilityClasses$1f(ownerState);
    const circleStyle = {};
    const rootStyle = {};
    const rootProps = {};
    if (variant === 'determinate') {
      const circumference = 2 * Math.PI * ((SIZE - thickness) / 2);
      circleStyle.strokeDasharray = circumference.toFixed(3);
      rootProps['aria-valuenow'] = Math.round(value);
      circleStyle.strokeDashoffset = `${((100 - value) / 100 * circumference).toFixed(3)}px`;
      rootStyle.transform = 'rotate(-90deg)';
    }
    return /*#__PURE__*/jsxRuntime_1(CircularProgressRoot, _extends({
      className: clsx(classes.root, className),
      style: _extends({
        width: size,
        height: size
      }, rootStyle, style),
      ownerState: ownerState,
      ref: ref,
      role: "progressbar"
    }, rootProps, other, {
      children: /*#__PURE__*/jsxRuntime_1(CircularProgressSVG, {
        className: classes.svg,
        ownerState: ownerState,
        viewBox: `${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`,
        children: /*#__PURE__*/jsxRuntime_1(CircularProgressCircle, {
          className: classes.circle,
          style: circleStyle,
          ownerState: ownerState,
          cx: SIZE,
          cy: SIZE,
          r: (SIZE - thickness) / 2,
          fill: "none",
          strokeWidth: thickness
        })
      })
    }));
  });
  CircularProgress.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * If `true`, the shrink animation is disabled.
     * This only works if variant is `indeterminate`.
     * @default false
     */
    disableShrink: chainPropTypes(PropTypes.bool, props => {
      if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {
        return new Error('MUI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');
      }
      return null;
    }),
    /**
     * The size of the component.
     * If using a number, the pixel unit is assumed.
     * If using a string, you need to provide the CSS unit, e.g. '3rem'.
     * @default 40
     */
    size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The thickness of the circle.
     * @default 3.6
     */
    thickness: PropTypes.number,
    /**
     * The value of the progress indicator for the determinate variant.
     * Value between 0 and 100.
     * @default 0
     */
    value: PropTypes.number,
    /**
     * The variant to use.
     * Use indeterminate when there is no progress value.
     * @default 'indeterminate'
     */
    variant: PropTypes.oneOf(['determinate', 'indeterminate'])
  } ;
  var CircularProgress$1 = CircularProgress;

  const Container = createContainer({
    createStyledComponent: styled$1('div', {
      name: 'MuiContainer',
      slot: 'Root',
      overridesResolver: (props, styles) => {
        const {
          ownerState
        } = props;
        return [styles.root, styles[`maxWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fixed && styles.fixed, ownerState.disableGutters && styles.disableGutters];
      }
    }),
    useThemeProps: inProps => useThemeProps({
      props: inProps,
      name: 'MuiContainer'
    })
  });
  Container.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the left and right padding is removed.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * Set the max-width to match the min-width of the current breakpoint.
     * This is useful if you'd prefer to design for a fixed set of sizes
     * instead of trying to accommodate a fully fluid viewport.
     * It's fluid by default.
     * @default false
     */
    fixed: PropTypes.bool,
    /**
     * Determine the max-width of the container.
     * The container width grows with the size of the screen.
     * Set to `false` to disable `maxWidth`.
     * @default 'lg'
     */
    maxWidth: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Container$1 = Container;

  function getContainerUtilityClass(slot) {
    return generateUtilityClass('MuiContainer', slot);
  }
  const containerClasses = generateUtilityClasses('MuiContainer', ['root', 'disableGutters', 'fixed', 'maxWidthXs', 'maxWidthSm', 'maxWidthMd', 'maxWidthLg', 'maxWidthXl']);
  var containerClasses$1 = containerClasses;

  const html = (theme, enableColorScheme) => _extends({
    WebkitFontSmoothing: 'antialiased',
    // Antialiasing.
    MozOsxFontSmoothing: 'grayscale',
    // Antialiasing.
    // Change from `box-sizing: content-box` so that `width`
    // is not affected by `padding` or `border`.
    boxSizing: 'border-box',
    // Fix font resize problem in iOS
    WebkitTextSizeAdjust: '100%'
  }, enableColorScheme && !theme.vars && {
    colorScheme: theme.palette.mode
  });
  const body = theme => _extends({
    color: (theme.vars || theme).palette.text.primary
  }, theme.typography.body1, {
    backgroundColor: (theme.vars || theme).palette.background.default,
    '@media print': {
      // Save printer ink.
      backgroundColor: (theme.vars || theme).palette.common.white
    }
  });
  const styles$3 = (theme, enableColorScheme = false) => {
    var _theme$components;
    const colorSchemeStyles = {};
    if (enableColorScheme && theme.colorSchemes) {
      Object.entries(theme.colorSchemes).forEach(([key, scheme]) => {
        var _scheme$palette;
        colorSchemeStyles[theme.getColorSchemeSelector(key).replace(/\s*&/, '')] = {
          colorScheme: (_scheme$palette = scheme.palette) == null ? void 0 : _scheme$palette.mode
        };
      });
    }
    let defaultStyles = _extends({
      html: html(theme, enableColorScheme),
      '*, *::before, *::after': {
        boxSizing: 'inherit'
      },
      'strong, b': {
        fontWeight: theme.typography.fontWeightBold
      },
      body: _extends({
        margin: 0
      }, body(theme), {
        // Add support for document.body.requestFullScreen().
        // Other elements, if background transparent, are not supported.
        '&::backdrop': {
          backgroundColor: (theme.vars || theme).palette.background.default
        }
      })
    }, colorSchemeStyles);
    const themeOverrides = (_theme$components = theme.components) == null || (_theme$components = _theme$components.MuiCssBaseline) == null ? void 0 : _theme$components.styleOverrides;
    if (themeOverrides) {
      defaultStyles = [defaultStyles, themeOverrides];
    }
    return defaultStyles;
  };

  /**
   * Kickstart an elegant, consistent, and simple baseline to build upon.
   */
  function CssBaseline(inProps) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiCssBaseline'
    });
    const {
      children,
      enableColorScheme = false
    } = props;
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1(GlobalStyles, {
        styles: theme => styles$3(theme, enableColorScheme)
      }), children]
    });
  }
  CssBaseline.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * You can wrap a node.
     */
    children: PropTypes.node,
    /**
     * Enable `color-scheme` CSS property to use `theme.palette.mode`.
     * For more details, check out https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme
     * For browser support, check out https://caniuse.com/?search=color-scheme
     * @default false
     */
    enableColorScheme: PropTypes.bool
  } ;

  // track, thumb and active are derived from macOS 10.15.7
  const scrollBar = {
    track: '#2b2b2b',
    thumb: '#6b6b6b',
    active: '#959595'
  };
  function darkScrollbar(options = scrollBar) {
    return {
      scrollbarColor: `${options.thumb} ${options.track}`,
      '&::-webkit-scrollbar, & *::-webkit-scrollbar': {
        backgroundColor: options.track
      },
      '&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb': {
        borderRadius: 8,
        backgroundColor: options.thumb,
        minHeight: 24,
        border: `3px solid ${options.track}`
      },
      '&::-webkit-scrollbar-thumb:focus, & *::-webkit-scrollbar-thumb:focus': {
        backgroundColor: options.active
      },
      '&::-webkit-scrollbar-thumb:active, & *::-webkit-scrollbar-thumb:active': {
        backgroundColor: options.active
      },
      '&::-webkit-scrollbar-thumb:hover, & *::-webkit-scrollbar-thumb:hover': {
        backgroundColor: options.active
      },
      '&::-webkit-scrollbar-corner, & *::-webkit-scrollbar-corner': {
        backgroundColor: options.track
      }
    };
  }

  function getModalUtilityClass(slot) {
    return generateUtilityClass('MuiModal', slot);
  }
  const modalClasses = generateUtilityClasses('MuiModal', ['root', 'hidden', 'backdrop']);
  var modalClasses$1 = modalClasses;

  const _excluded$1s = ["BackdropComponent", "BackdropProps", "classes", "className", "closeAfterTransition", "children", "container", "component", "components", "componentsProps", "disableAutoFocus", "disableEnforceFocus", "disableEscapeKeyDown", "disablePortal", "disableRestoreFocus", "disableScrollLock", "hideBackdrop", "keepMounted", "onBackdropClick", "onClose", "onTransitionEnter", "onTransitionExited", "open", "slotProps", "slots", "theme"];
  const useUtilityClasses$1e = ownerState => {
    const {
      open,
      exited,
      classes
    } = ownerState;
    const slots = {
      root: ['root', !open && exited && 'hidden'],
      backdrop: ['backdrop']
    };
    return composeClasses(slots, getModalUtilityClass, classes);
  };
  const ModalRoot = styled$1('div', {
    name: 'MuiModal',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.open && ownerState.exited && styles.hidden];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    position: 'fixed',
    zIndex: (theme.vars || theme).zIndex.modal,
    right: 0,
    bottom: 0,
    top: 0,
    left: 0
  }, !ownerState.open && ownerState.exited && {
    visibility: 'hidden'
  }));
  const ModalBackdrop = styled$1(Backdrop$1, {
    name: 'MuiModal',
    slot: 'Backdrop',
    overridesResolver: (props, styles) => {
      return styles.backdrop;
    }
  })({
    zIndex: -1
  });

  /**
   * Modal is a lower-level construct that is leveraged by the following components:
   *
   * - [Dialog](/material-ui/api/dialog/)
   * - [Drawer](/material-ui/api/drawer/)
   * - [Menu](/material-ui/api/menu/)
   * - [Popover](/material-ui/api/popover/)
   *
   * If you are creating a modal dialog, you probably want to use the [Dialog](/material-ui/api/dialog/) component
   * rather than directly using Modal.
   *
   * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).
   */
  const Modal = /*#__PURE__*/React__namespace.forwardRef(function Modal(inProps, ref) {
    var _ref, _slots$root, _ref2, _slots$backdrop, _slotProps$root, _slotProps$backdrop;
    const props = useThemeProps({
      name: 'MuiModal',
      props: inProps
    });
    const {
        BackdropComponent = ModalBackdrop,
        BackdropProps,
        className,
        closeAfterTransition = false,
        children,
        container,
        component,
        components = {},
        componentsProps = {},
        disableAutoFocus = false,
        disableEnforceFocus = false,
        disableEscapeKeyDown = false,
        disablePortal = false,
        disableRestoreFocus = false,
        disableScrollLock = false,
        hideBackdrop = false,
        keepMounted = false,
        onBackdropClick,
        open,
        slotProps,
        slots
        // eslint-disable-next-line react/prop-types
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1s);
    const propsWithDefaults = _extends({}, props, {
      closeAfterTransition,
      disableAutoFocus,
      disableEnforceFocus,
      disableEscapeKeyDown,
      disablePortal,
      disableRestoreFocus,
      disableScrollLock,
      hideBackdrop,
      keepMounted
    });
    const {
      getRootProps,
      getBackdropProps,
      getTransitionProps,
      portalRef,
      isTopModal,
      exited,
      hasTransition
    } = useModal(_extends({}, propsWithDefaults, {
      rootRef: ref
    }));
    const ownerState = _extends({}, propsWithDefaults, {
      exited
    });
    const classes = useUtilityClasses$1e(ownerState);
    const childProps = {};
    if (children.props.tabIndex === undefined) {
      childProps.tabIndex = '-1';
    }

    // It's a Transition like component
    if (hasTransition) {
      const {
        onEnter,
        onExited
      } = getTransitionProps();
      childProps.onEnter = onEnter;
      childProps.onExited = onExited;
    }
    const RootSlot = (_ref = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components.Root) != null ? _ref : ModalRoot;
    const BackdropSlot = (_ref2 = (_slots$backdrop = slots == null ? void 0 : slots.backdrop) != null ? _slots$backdrop : components.Backdrop) != null ? _ref2 : BackdropComponent;
    const rootSlotProps = (_slotProps$root = slotProps == null ? void 0 : slotProps.root) != null ? _slotProps$root : componentsProps.root;
    const backdropSlotProps = (_slotProps$backdrop = slotProps == null ? void 0 : slotProps.backdrop) != null ? _slotProps$backdrop : componentsProps.backdrop;
    const rootProps = useSlotProps({
      elementType: RootSlot,
      externalSlotProps: rootSlotProps,
      externalForwardedProps: other,
      getSlotProps: getRootProps,
      additionalProps: {
        ref,
        as: component
      },
      ownerState,
      className: clsx(className, rootSlotProps == null ? void 0 : rootSlotProps.className, classes == null ? void 0 : classes.root, !ownerState.open && ownerState.exited && (classes == null ? void 0 : classes.hidden))
    });
    const backdropProps = useSlotProps({
      elementType: BackdropSlot,
      externalSlotProps: backdropSlotProps,
      additionalProps: BackdropProps,
      getSlotProps: otherHandlers => {
        return getBackdropProps(_extends({}, otherHandlers, {
          onClick: e => {
            if (onBackdropClick) {
              onBackdropClick(e);
            }
            if (otherHandlers != null && otherHandlers.onClick) {
              otherHandlers.onClick(e);
            }
          }
        }));
      },
      className: clsx(backdropSlotProps == null ? void 0 : backdropSlotProps.className, BackdropProps == null ? void 0 : BackdropProps.className, classes == null ? void 0 : classes.backdrop),
      ownerState
    });
    if (!keepMounted && !open && (!hasTransition || exited)) {
      return null;
    }
    return /*#__PURE__*/jsxRuntime_1(Portal, {
      ref: portalRef,
      container: container,
      disablePortal: disablePortal,
      children: /*#__PURE__*/jsxRuntime_2(RootSlot, _extends({}, rootProps, {
        children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/jsxRuntime_1(BackdropSlot, _extends({}, backdropProps)) : null, /*#__PURE__*/jsxRuntime_1(FocusTrap, {
          disableEnforceFocus: disableEnforceFocus,
          disableAutoFocus: disableAutoFocus,
          disableRestoreFocus: disableRestoreFocus,
          isEnabled: isTopModal,
          open: open,
          children: /*#__PURE__*/React__namespace.cloneElement(children, childProps)
        })]
      }))
    });
  });
  Modal.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * A backdrop component. This prop enables custom backdrop rendering.
     * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.
     * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.
     * @default styled(Backdrop, {
     *   name: 'MuiModal',
     *   slot: 'Backdrop',
     *   overridesResolver: (props, styles) => {
     *     return styles.backdrop;
     *   },
     * })({
     *   zIndex: -1,
     * })
     */
    BackdropComponent: PropTypes.elementType,
    /**
     * Props applied to the [`Backdrop`](/material-ui/api/backdrop/) element.
     * @deprecated Use `slotProps.backdrop` instead.
     */
    BackdropProps: PropTypes.object,
    /**
     * A single child content element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * When set to true the Modal waits until a nested Transition is completed before closing.
     * @default false
     */
    closeAfterTransition: PropTypes.bool,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Backdrop: PropTypes.elementType,
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * An HTML element or function that returns one.
     * The `container` will have the portal children appended to it.
     *
     * You can also provide a callback, which is called in a React layout effect.
     * This lets you set the container from a ref, and also makes server-side rendering possible.
     *
     * By default, it uses the body of the top-level document object,
     * so it's simply `document.body` most of the time.
     */
    container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),
    /**
     * If `true`, the modal will not automatically shift focus to itself when it opens, and
     * replace it to the last focused element when it closes.
     * This also works correctly with any modal children that have the `disableAutoFocus` prop.
     *
     * Generally this should never be set to `true` as it makes the modal less
     * accessible to assistive technologies, like screen readers.
     * @default false
     */
    disableAutoFocus: PropTypes.bool,
    /**
     * If `true`, the modal will not prevent focus from leaving the modal while open.
     *
     * Generally this should never be set to `true` as it makes the modal less
     * accessible to assistive technologies, like screen readers.
     * @default false
     */
    disableEnforceFocus: PropTypes.bool,
    /**
     * If `true`, hitting escape will not fire the `onClose` callback.
     * @default false
     */
    disableEscapeKeyDown: PropTypes.bool,
    /**
     * The `children` will be under the DOM hierarchy of the parent component.
     * @default false
     */
    disablePortal: PropTypes.bool,
    /**
     * If `true`, the modal will not restore focus to previously focused element once
     * modal is hidden or unmounted.
     * @default false
     */
    disableRestoreFocus: PropTypes.bool,
    /**
     * Disable the scroll lock behavior.
     * @default false
     */
    disableScrollLock: PropTypes.bool,
    /**
     * If `true`, the backdrop is not rendered.
     * @default false
     */
    hideBackdrop: PropTypes.bool,
    /**
     * Always keep the children in the DOM.
     * This prop can be useful in SEO situation or
     * when you want to maximize the responsiveness of the Modal.
     * @default false
     */
    keepMounted: PropTypes.bool,
    /**
     * Callback fired when the backdrop is clicked.
     * @deprecated Use the `onClose` prop with the `reason` argument to handle the `backdropClick` events.
     */
    onBackdropClick: PropTypes.func,
    /**
     * Callback fired when the component requests to be closed.
     * The `reason` parameter can optionally be used to control the response to `onClose`.
     *
     * @param {object} event The event source of the callback.
     * @param {string} reason Can be: `"escapeKeyDown"`, `"backdropClick"`.
     */
    onClose: PropTypes.func,
    /**
     * A function called when a transition enters.
     */
    onTransitionEnter: PropTypes.func,
    /**
     * A function called when a transition has exited.
     */
    onTransitionExited: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * The props used for each slot inside the Modal.
     * @default {}
     */
    slotProps: PropTypes.shape({
      backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside the Modal.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      backdrop: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Modal$1 = Modal;

  function getDialogUtilityClass(slot) {
    return generateUtilityClass('MuiDialog', slot);
  }
  const dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);
  var dialogClasses$1 = dialogClasses;

  const DialogContext = /*#__PURE__*/React__namespace.createContext({});
  {
    DialogContext.displayName = 'DialogContext';
  }
  var DialogContext$1 = DialogContext;

  const _excluded$1r = ["aria-describedby", "aria-labelledby", "BackdropComponent", "BackdropProps", "children", "className", "disableEscapeKeyDown", "fullScreen", "fullWidth", "maxWidth", "onBackdropClick", "onClose", "open", "PaperComponent", "PaperProps", "scroll", "TransitionComponent", "transitionDuration", "TransitionProps"];
  const DialogBackdrop = styled$1(Backdrop$1, {
    name: 'MuiDialog',
    slot: 'Backdrop',
    overrides: (props, styles) => styles.backdrop
  })({
    // Improve scrollable dialog support.
    zIndex: -1
  });
  const useUtilityClasses$1d = ownerState => {
    const {
      classes,
      scroll,
      maxWidth,
      fullWidth,
      fullScreen
    } = ownerState;
    const slots = {
      root: ['root'],
      container: ['container', `scroll${capitalize(scroll)}`],
      paper: ['paper', `paperScroll${capitalize(scroll)}`, `paperWidth${capitalize(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']
    };
    return composeClasses(slots, getDialogUtilityClass, classes);
  };
  const DialogRoot = styled$1(Modal$1, {
    name: 'MuiDialog',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    '@media print': {
      // Use !important to override the Modal inline-style.
      position: 'absolute !important'
    }
  });
  const DialogContainer = styled$1('div', {
    name: 'MuiDialog',
    slot: 'Container',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.container, styles[`scroll${capitalize(ownerState.scroll)}`]];
    }
  })(({
    ownerState
  }) => _extends({
    height: '100%',
    '@media print': {
      height: 'auto'
    },
    // We disable the focus ring for mouse, touch and keyboard users.
    outline: 0
  }, ownerState.scroll === 'paper' && {
    display: 'flex',
    justifyContent: 'center',
    alignItems: 'center'
  }, ownerState.scroll === 'body' && {
    overflowY: 'auto',
    overflowX: 'hidden',
    textAlign: 'center',
    '&:after': {
      content: '""',
      display: 'inline-block',
      verticalAlign: 'middle',
      height: '100%',
      width: '0'
    }
  }));
  const DialogPaper = styled$1(Paper$1, {
    name: 'MuiDialog',
    slot: 'Paper',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.paper, styles[`scrollPaper${capitalize(ownerState.scroll)}`], styles[`paperWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fullWidth && styles.paperFullWidth, ownerState.fullScreen && styles.paperFullScreen];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    margin: 32,
    position: 'relative',
    overflowY: 'auto',
    // Fix IE11 issue, to remove at some point.
    '@media print': {
      overflowY: 'visible',
      boxShadow: 'none'
    }
  }, ownerState.scroll === 'paper' && {
    display: 'flex',
    flexDirection: 'column',
    maxHeight: 'calc(100% - 64px)'
  }, ownerState.scroll === 'body' && {
    display: 'inline-block',
    verticalAlign: 'middle',
    textAlign: 'left' // 'initial' doesn't work on IE11
  }, !ownerState.maxWidth && {
    maxWidth: 'calc(100% - 64px)'
  }, ownerState.maxWidth === 'xs' && {
    maxWidth: theme.breakpoints.unit === 'px' ? Math.max(theme.breakpoints.values.xs, 444) : `max(${theme.breakpoints.values.xs}${theme.breakpoints.unit}, 444px)`,
    [`&.${dialogClasses$1.paperScrollBody}`]: {
      [theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2)]: {
        maxWidth: 'calc(100% - 64px)'
      }
    }
  }, ownerState.maxWidth && ownerState.maxWidth !== 'xs' && {
    maxWidth: `${theme.breakpoints.values[ownerState.maxWidth]}${theme.breakpoints.unit}`,
    [`&.${dialogClasses$1.paperScrollBody}`]: {
      [theme.breakpoints.down(theme.breakpoints.values[ownerState.maxWidth] + 32 * 2)]: {
        maxWidth: 'calc(100% - 64px)'
      }
    }
  }, ownerState.fullWidth && {
    width: 'calc(100% - 64px)'
  }, ownerState.fullScreen && {
    margin: 0,
    width: '100%',
    maxWidth: '100%',
    height: '100%',
    maxHeight: 'none',
    borderRadius: 0,
    [`&.${dialogClasses$1.paperScrollBody}`]: {
      margin: 0,
      maxWidth: '100%'
    }
  }));

  /**
   * Dialogs are overlaid modal paper based components with a backdrop.
   */
  const Dialog = /*#__PURE__*/React__namespace.forwardRef(function Dialog(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDialog'
    });
    const theme = useTheme();
    const defaultTransitionDuration = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        'aria-describedby': ariaDescribedby,
        'aria-labelledby': ariaLabelledbyProp,
        BackdropComponent,
        BackdropProps,
        children,
        className,
        disableEscapeKeyDown = false,
        fullScreen = false,
        fullWidth = false,
        maxWidth = 'sm',
        onBackdropClick,
        onClose,
        open,
        PaperComponent = Paper$1,
        PaperProps = {},
        scroll = 'paper',
        TransitionComponent = Fade$1,
        transitionDuration = defaultTransitionDuration,
        TransitionProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1r);
    const ownerState = _extends({}, props, {
      disableEscapeKeyDown,
      fullScreen,
      fullWidth,
      maxWidth,
      scroll
    });
    const classes = useUtilityClasses$1d(ownerState);
    const backdropClick = React__namespace.useRef();
    const handleMouseDown = event => {
      // We don't want to close the dialog when clicking the dialog content.
      // Make sure the event starts and ends on the same DOM element.
      backdropClick.current = event.target === event.currentTarget;
    };
    const handleBackdropClick = event => {
      // Ignore the events not coming from the "backdrop".
      if (!backdropClick.current) {
        return;
      }
      backdropClick.current = null;
      if (onBackdropClick) {
        onBackdropClick(event);
      }
      if (onClose) {
        onClose(event, 'backdropClick');
      }
    };
    const ariaLabelledby = useId(ariaLabelledbyProp);
    const dialogContextValue = React__namespace.useMemo(() => {
      return {
        titleId: ariaLabelledby
      };
    }, [ariaLabelledby]);
    return /*#__PURE__*/jsxRuntime_1(DialogRoot, _extends({
      className: clsx(classes.root, className),
      closeAfterTransition: true,
      components: {
        Backdrop: DialogBackdrop
      },
      componentsProps: {
        backdrop: _extends({
          transitionDuration,
          as: BackdropComponent
        }, BackdropProps)
      },
      disableEscapeKeyDown: disableEscapeKeyDown,
      onClose: onClose,
      open: open,
      ref: ref,
      onClick: handleBackdropClick,
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
        appear: true,
        in: open,
        timeout: transitionDuration,
        role: "presentation"
      }, TransitionProps, {
        children: /*#__PURE__*/jsxRuntime_1(DialogContainer, {
          className: clsx(classes.container),
          onMouseDown: handleMouseDown,
          ownerState: ownerState,
          children: /*#__PURE__*/jsxRuntime_1(DialogPaper, _extends({
            as: PaperComponent,
            elevation: 24,
            role: "dialog",
            "aria-describedby": ariaDescribedby,
            "aria-labelledby": ariaLabelledby
          }, PaperProps, {
            className: clsx(classes.paper, PaperProps.className),
            ownerState: ownerState,
            children: /*#__PURE__*/jsxRuntime_1(DialogContext$1.Provider, {
              value: dialogContextValue,
              children: children
            })
          }))
        })
      }))
    }));
  });
  Dialog.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The id(s) of the element(s) that describe the dialog.
     */
    'aria-describedby': PropTypes.string,
    /**
     * The id(s) of the element(s) that label the dialog.
     */
    'aria-labelledby': PropTypes.string,
    /**
     * A backdrop component. This prop enables custom backdrop rendering.
     * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.
     * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.
     * @default styled(Backdrop, {
     *   name: 'MuiModal',
     *   slot: 'Backdrop',
     *   overridesResolver: (props, styles) => {
     *     return styles.backdrop;
     *   },
     * })({
     *   zIndex: -1,
     * })
     */
    BackdropComponent: PropTypes.elementType,
    /**
     * @ignore
     */
    BackdropProps: PropTypes.object,
    /**
     * Dialog children, usually the included sub-components.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, hitting escape will not fire the `onClose` callback.
     * @default false
     */
    disableEscapeKeyDown: PropTypes.bool,
    /**
     * If `true`, the dialog is full-screen.
     * @default false
     */
    fullScreen: PropTypes.bool,
    /**
     * If `true`, the dialog stretches to `maxWidth`.
     *
     * Notice that the dialog width grow is limited by the default margin.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * Determine the max-width of the dialog.
     * The dialog width grows with the size of the screen.
     * Set to `false` to disable `maxWidth`.
     * @default 'sm'
     */
    maxWidth: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),
    /**
     * Callback fired when the backdrop is clicked.
     * @deprecated Use the `onClose` prop with the `reason` argument to handle the `backdropClick` events.
     */
    onBackdropClick: PropTypes.func,
    /**
     * Callback fired when the component requests to be closed.
     *
     * @param {object} event The event source of the callback.
     * @param {string} reason Can be: `"escapeKeyDown"`, `"backdropClick"`.
     */
    onClose: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * The component used to render the body of the dialog.
     * @default Paper
     */
    PaperComponent: PropTypes.elementType,
    /**
     * Props applied to the [`Paper`](/material-ui/api/paper/) element.
     * @default {}
     */
    PaperProps: PropTypes.object,
    /**
     * Determine the container for scrolling the dialog.
     * @default 'paper'
     */
    scroll: PropTypes.oneOf(['body', 'paper']),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Fade
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     */
    TransitionProps: PropTypes.object
  } ;
  var Dialog$1 = Dialog;

  function getDialogActionsUtilityClass(slot) {
    return generateUtilityClass('MuiDialogActions', slot);
  }
  const dialogActionsClasses = generateUtilityClasses('MuiDialogActions', ['root', 'spacing']);
  var dialogActionsClasses$1 = dialogActionsClasses;

  const _excluded$1q = ["className", "disableSpacing"];
  const useUtilityClasses$1c = ownerState => {
    const {
      classes,
      disableSpacing
    } = ownerState;
    const slots = {
      root: ['root', !disableSpacing && 'spacing']
    };
    return composeClasses(slots, getDialogActionsUtilityClass, classes);
  };
  const DialogActionsRoot = styled$1('div', {
    name: 'MuiDialogActions',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.disableSpacing && styles.spacing];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex',
    alignItems: 'center',
    padding: 8,
    justifyContent: 'flex-end',
    flex: '0 0 auto'
  }, !ownerState.disableSpacing && {
    '& > :not(style) ~ :not(style)': {
      marginLeft: 8
    }
  }));
  const DialogActions = /*#__PURE__*/React__namespace.forwardRef(function DialogActions(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDialogActions'
    });
    const {
        className,
        disableSpacing = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1q);
    const ownerState = _extends({}, props, {
      disableSpacing
    });
    const classes = useUtilityClasses$1c(ownerState);
    return /*#__PURE__*/jsxRuntime_1(DialogActionsRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  DialogActions.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the actions do not have additional margin.
     * @default false
     */
    disableSpacing: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var DialogActions$1 = DialogActions;

  function getDialogContentUtilityClass(slot) {
    return generateUtilityClass('MuiDialogContent', slot);
  }
  const dialogContentClasses = generateUtilityClasses('MuiDialogContent', ['root', 'dividers']);
  var dialogContentClasses$1 = dialogContentClasses;

  function getDialogTitleUtilityClass(slot) {
    return generateUtilityClass('MuiDialogTitle', slot);
  }
  const dialogTitleClasses = generateUtilityClasses('MuiDialogTitle', ['root']);
  var dialogTitleClasses$1 = dialogTitleClasses;

  const _excluded$1p = ["className", "dividers"];
  const useUtilityClasses$1b = ownerState => {
    const {
      classes,
      dividers
    } = ownerState;
    const slots = {
      root: ['root', dividers && 'dividers']
    };
    return composeClasses(slots, getDialogContentUtilityClass, classes);
  };
  const DialogContentRoot = styled$1('div', {
    name: 'MuiDialogContent',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.dividers && styles.dividers];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    flex: '1 1 auto',
    // Add iOS momentum scrolling for iOS < 13.0
    WebkitOverflowScrolling: 'touch',
    overflowY: 'auto',
    padding: '20px 24px'
  }, ownerState.dividers ? {
    padding: '16px 24px',
    borderTop: `1px solid ${(theme.vars || theme).palette.divider}`,
    borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`
  } : {
    [`.${dialogTitleClasses$1.root} + &`]: {
      paddingTop: 0
    }
  }));
  const DialogContent = /*#__PURE__*/React__namespace.forwardRef(function DialogContent(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDialogContent'
    });
    const {
        className,
        dividers = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1p);
    const ownerState = _extends({}, props, {
      dividers
    });
    const classes = useUtilityClasses$1b(ownerState);
    return /*#__PURE__*/jsxRuntime_1(DialogContentRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  DialogContent.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Display the top and bottom dividers.
     * @default false
     */
    dividers: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var DialogContent$1 = DialogContent;

  function getDialogContentTextUtilityClass(slot) {
    return generateUtilityClass('MuiDialogContentText', slot);
  }
  const dialogContentTextClasses = generateUtilityClasses('MuiDialogContentText', ['root']);
  var dialogContentTextClasses$1 = dialogContentTextClasses;

  const _excluded$1o = ["children", "className"];
  const useUtilityClasses$1a = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    const composedClasses = composeClasses(slots, getDialogContentTextUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const DialogContentTextRoot = styled$1(Typography$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiDialogContentText',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({});
  const DialogContentText = /*#__PURE__*/React__namespace.forwardRef(function DialogContentText(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDialogContentText'
    });
    const {
        className
      } = props,
      ownerState = _objectWithoutPropertiesLoose(props, _excluded$1o);
    const classes = useUtilityClasses$1a(ownerState);
    return /*#__PURE__*/jsxRuntime_1(DialogContentTextRoot, _extends({
      component: "p",
      variant: "body1",
      color: "text.secondary",
      ref: ref,
      ownerState: ownerState,
      className: clsx(classes.root, className)
    }, props, {
      classes: classes
    }));
  });
  DialogContentText.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var DialogContentText$1 = DialogContentText;

  const _excluded$1n = ["className", "id"];
  const useUtilityClasses$19 = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getDialogTitleUtilityClass, classes);
  };
  const DialogTitleRoot = styled$1(Typography$1, {
    name: 'MuiDialogTitle',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    padding: '16px 24px',
    flex: '0 0 auto'
  });
  const DialogTitle = /*#__PURE__*/React__namespace.forwardRef(function DialogTitle(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDialogTitle'
    });
    const {
        className,
        id: idProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1n);
    const ownerState = props;
    const classes = useUtilityClasses$19(ownerState);
    const {
      titleId = idProp
    } = React__namespace.useContext(DialogContext$1);
    return /*#__PURE__*/jsxRuntime_1(DialogTitleRoot, _extends({
      component: "h2",
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref,
      variant: "h6",
      id: idProp != null ? idProp : titleId
    }, other));
  });
  DialogTitle.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * @ignore
     */
    id: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var DialogTitle$1 = DialogTitle;

  function getDividerUtilityClass(slot) {
    return generateUtilityClass('MuiDivider', slot);
  }
  const dividerClasses = generateUtilityClasses('MuiDivider', ['root', 'absolute', 'fullWidth', 'inset', 'middle', 'flexItem', 'light', 'vertical', 'withChildren', 'withChildrenVertical', 'textAlignRight', 'textAlignLeft', 'wrapper', 'wrapperVertical']);
  var dividerClasses$1 = dividerClasses;

  const _excluded$1m = ["absolute", "children", "className", "component", "flexItem", "light", "orientation", "role", "textAlign", "variant"];
  const useUtilityClasses$18 = ownerState => {
    const {
      absolute,
      children,
      classes,
      flexItem,
      light,
      orientation,
      textAlign,
      variant
    } = ownerState;
    const slots = {
      root: ['root', absolute && 'absolute', variant, light && 'light', orientation === 'vertical' && 'vertical', flexItem && 'flexItem', children && 'withChildren', children && orientation === 'vertical' && 'withChildrenVertical', textAlign === 'right' && orientation !== 'vertical' && 'textAlignRight', textAlign === 'left' && orientation !== 'vertical' && 'textAlignLeft'],
      wrapper: ['wrapper', orientation === 'vertical' && 'wrapperVertical']
    };
    return composeClasses(slots, getDividerUtilityClass, classes);
  };
  const DividerRoot = styled$1('div', {
    name: 'MuiDivider',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.absolute && styles.absolute, styles[ownerState.variant], ownerState.light && styles.light, ownerState.orientation === 'vertical' && styles.vertical, ownerState.flexItem && styles.flexItem, ownerState.children && styles.withChildren, ownerState.children && ownerState.orientation === 'vertical' && styles.withChildrenVertical, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && styles.textAlignRight, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && styles.textAlignLeft];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    margin: 0,
    // Reset browser default style.
    flexShrink: 0,
    borderWidth: 0,
    borderStyle: 'solid',
    borderColor: (theme.vars || theme).palette.divider,
    borderBottomWidth: 'thin'
  }, ownerState.absolute && {
    position: 'absolute',
    bottom: 0,
    left: 0,
    width: '100%'
  }, ownerState.light && {
    borderColor: theme.vars ? `rgba(${theme.vars.palette.dividerChannel} / 0.08)` : alpha(theme.palette.divider, 0.08)
  }, ownerState.variant === 'inset' && {
    marginLeft: 72
  }, ownerState.variant === 'middle' && ownerState.orientation === 'horizontal' && {
    marginLeft: theme.spacing(2),
    marginRight: theme.spacing(2)
  }, ownerState.variant === 'middle' && ownerState.orientation === 'vertical' && {
    marginTop: theme.spacing(1),
    marginBottom: theme.spacing(1)
  }, ownerState.orientation === 'vertical' && {
    height: '100%',
    borderBottomWidth: 0,
    borderRightWidth: 'thin'
  }, ownerState.flexItem && {
    alignSelf: 'stretch',
    height: 'auto'
  }), ({
    ownerState
  }) => _extends({}, ownerState.children && {
    display: 'flex',
    whiteSpace: 'nowrap',
    textAlign: 'center',
    border: 0,
    '&::before, &::after': {
      content: '""',
      alignSelf: 'center'
    }
  }), ({
    theme,
    ownerState
  }) => _extends({}, ownerState.children && ownerState.orientation !== 'vertical' && {
    '&::before, &::after': {
      width: '100%',
      borderTop: `thin solid ${(theme.vars || theme).palette.divider}`
    }
  }), ({
    theme,
    ownerState
  }) => _extends({}, ownerState.children && ownerState.orientation === 'vertical' && {
    flexDirection: 'column',
    '&::before, &::after': {
      height: '100%',
      borderLeft: `thin solid ${(theme.vars || theme).palette.divider}`
    }
  }), ({
    ownerState
  }) => _extends({}, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && {
    '&::before': {
      width: '90%'
    },
    '&::after': {
      width: '10%'
    }
  }, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && {
    '&::before': {
      width: '10%'
    },
    '&::after': {
      width: '90%'
    }
  }));
  const DividerWrapper = styled$1('span', {
    name: 'MuiDivider',
    slot: 'Wrapper',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.wrapper, ownerState.orientation === 'vertical' && styles.wrapperVertical];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'inline-block',
    paddingLeft: `calc(${theme.spacing(1)} * 1.2)`,
    paddingRight: `calc(${theme.spacing(1)} * 1.2)`
  }, ownerState.orientation === 'vertical' && {
    paddingTop: `calc(${theme.spacing(1)} * 1.2)`,
    paddingBottom: `calc(${theme.spacing(1)} * 1.2)`
  }));
  const Divider = /*#__PURE__*/React__namespace.forwardRef(function Divider(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDivider'
    });
    const {
        absolute = false,
        children,
        className,
        component = children ? 'div' : 'hr',
        flexItem = false,
        light = false,
        orientation = 'horizontal',
        role = component !== 'hr' ? 'separator' : undefined,
        textAlign = 'center',
        variant = 'fullWidth'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1m);
    const ownerState = _extends({}, props, {
      absolute,
      component,
      flexItem,
      light,
      orientation,
      role,
      textAlign,
      variant
    });
    const classes = useUtilityClasses$18(ownerState);
    return /*#__PURE__*/jsxRuntime_1(DividerRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      role: role,
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: children ? /*#__PURE__*/jsxRuntime_1(DividerWrapper, {
        className: classes.wrapper,
        ownerState: ownerState,
        children: children
      }) : null
    }));
  });

  /**
   * The following flag is used to ensure that this component isn't tabbable i.e.
   * does not get highlight/focus inside of MUI List.
   */
  Divider.muiSkipListHighlight = true;
  Divider.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Absolutely position the element.
     * @default false
     */
    absolute: PropTypes.bool,
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, a vertical divider will have the correct height when used in flex container.
     * (By default, a vertical divider will have a calculated height of `0px` if it is the child of a flex container.)
     * @default false
     */
    flexItem: PropTypes.bool,
    /**
     * If `true`, the divider will have a lighter color.
     * @default false
     */
    light: PropTypes.bool,
    /**
     * The component orientation.
     * @default 'horizontal'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * @ignore
     */
    role: PropTypes /* @typescript-to-proptypes-ignore */.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The text alignment.
     * @default 'center'
     */
    textAlign: PropTypes.oneOf(['center', 'left', 'right']),
    /**
     * The variant to use.
     * @default 'fullWidth'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['fullWidth', 'inset', 'middle']), PropTypes.string])
  } ;
  var Divider$1 = Divider;

  const _excluded$1l = ["addEndListener", "appear", "children", "container", "direction", "easing", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "style", "timeout", "TransitionComponent"];
  function getTranslateValue(direction, node, resolvedContainer) {
    const rect = node.getBoundingClientRect();
    const containerRect = resolvedContainer && resolvedContainer.getBoundingClientRect();
    const containerWindow = ownerWindow(node);
    let transform;
    if (node.fakeTransform) {
      transform = node.fakeTransform;
    } else {
      const computedStyle = containerWindow.getComputedStyle(node);
      transform = computedStyle.getPropertyValue('-webkit-transform') || computedStyle.getPropertyValue('transform');
    }
    let offsetX = 0;
    let offsetY = 0;
    if (transform && transform !== 'none' && typeof transform === 'string') {
      const transformValues = transform.split('(')[1].split(')')[0].split(',');
      offsetX = parseInt(transformValues[4], 10);
      offsetY = parseInt(transformValues[5], 10);
    }
    if (direction === 'left') {
      if (containerRect) {
        return `translateX(${containerRect.right + offsetX - rect.left}px)`;
      }
      return `translateX(${containerWindow.innerWidth + offsetX - rect.left}px)`;
    }
    if (direction === 'right') {
      if (containerRect) {
        return `translateX(-${rect.right - containerRect.left - offsetX}px)`;
      }
      return `translateX(-${rect.left + rect.width - offsetX}px)`;
    }
    if (direction === 'up') {
      if (containerRect) {
        return `translateY(${containerRect.bottom + offsetY - rect.top}px)`;
      }
      return `translateY(${containerWindow.innerHeight + offsetY - rect.top}px)`;
    }

    // direction === 'down'
    if (containerRect) {
      return `translateY(-${rect.top - containerRect.top + rect.height - offsetY}px)`;
    }
    return `translateY(-${rect.top + rect.height - offsetY}px)`;
  }
  function resolveContainer(containerPropProp) {
    return typeof containerPropProp === 'function' ? containerPropProp() : containerPropProp;
  }
  function setTranslateValue(direction, node, containerProp) {
    const resolvedContainer = resolveContainer(containerProp);
    const transform = getTranslateValue(direction, node, resolvedContainer);
    if (transform) {
      node.style.webkitTransform = transform;
      node.style.transform = transform;
    }
  }

  /**
   * The Slide transition is used by the [Drawer](/material-ui/react-drawer/) component.
   * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
   */
  const Slide = /*#__PURE__*/React__namespace.forwardRef(function Slide(props, ref) {
    const theme = useTheme();
    const defaultEasing = {
      enter: theme.transitions.easing.easeOut,
      exit: theme.transitions.easing.sharp
    };
    const defaultTimeout = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        addEndListener,
        appear = true,
        children,
        container: containerProp,
        direction = 'down',
        easing: easingProp = defaultEasing,
        in: inProp,
        onEnter,
        onEntered,
        onEntering,
        onExit,
        onExited,
        onExiting,
        style,
        timeout = defaultTimeout,
        // eslint-disable-next-line react/prop-types
        TransitionComponent = Transition$1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1l);
    const childrenRef = React__namespace.useRef(null);
    const handleRef = useForkRef(children.ref, childrenRef, ref);
    const normalizedTransitionCallback = callback => isAppearing => {
      if (callback) {
        // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
        if (isAppearing === undefined) {
          callback(childrenRef.current);
        } else {
          callback(childrenRef.current, isAppearing);
        }
      }
    };
    const handleEnter = normalizedTransitionCallback((node, isAppearing) => {
      setTranslateValue(direction, node, containerProp);
      reflow(node);
      if (onEnter) {
        onEnter(node, isAppearing);
      }
    });
    const handleEntering = normalizedTransitionCallback((node, isAppearing) => {
      const transitionProps = getTransitionProps({
        timeout,
        style,
        easing: easingProp
      }, {
        mode: 'enter'
      });
      node.style.webkitTransition = theme.transitions.create('-webkit-transform', _extends({}, transitionProps));
      node.style.transition = theme.transitions.create('transform', _extends({}, transitionProps));
      node.style.webkitTransform = 'none';
      node.style.transform = 'none';
      if (onEntering) {
        onEntering(node, isAppearing);
      }
    });
    const handleEntered = normalizedTransitionCallback(onEntered);
    const handleExiting = normalizedTransitionCallback(onExiting);
    const handleExit = normalizedTransitionCallback(node => {
      const transitionProps = getTransitionProps({
        timeout,
        style,
        easing: easingProp
      }, {
        mode: 'exit'
      });
      node.style.webkitTransition = theme.transitions.create('-webkit-transform', transitionProps);
      node.style.transition = theme.transitions.create('transform', transitionProps);
      setTranslateValue(direction, node, containerProp);
      if (onExit) {
        onExit(node);
      }
    });
    const handleExited = normalizedTransitionCallback(node => {
      // No need for transitions when the component is hidden
      node.style.webkitTransition = '';
      node.style.transition = '';
      if (onExited) {
        onExited(node);
      }
    });
    const handleAddEndListener = next => {
      if (addEndListener) {
        // Old call signature before `react-transition-group` implemented `nodeRef`
        addEndListener(childrenRef.current, next);
      }
    };
    const updatePosition = React__namespace.useCallback(() => {
      if (childrenRef.current) {
        setTranslateValue(direction, childrenRef.current, containerProp);
      }
    }, [direction, containerProp]);
    React__namespace.useEffect(() => {
      // Skip configuration where the position is screen size invariant.
      if (inProp || direction === 'down' || direction === 'right') {
        return undefined;
      }
      const handleResize = debounce$1(() => {
        if (childrenRef.current) {
          setTranslateValue(direction, childrenRef.current, containerProp);
        }
      });
      const containerWindow = ownerWindow(childrenRef.current);
      containerWindow.addEventListener('resize', handleResize);
      return () => {
        handleResize.clear();
        containerWindow.removeEventListener('resize', handleResize);
      };
    }, [direction, inProp, containerProp]);
    React__namespace.useEffect(() => {
      if (!inProp) {
        // We need to update the position of the drawer when the direction change and
        // when it's hidden.
        updatePosition();
      }
    }, [inProp, updatePosition]);
    return /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      nodeRef: childrenRef,
      onEnter: handleEnter,
      onEntered: handleEntered,
      onEntering: handleEntering,
      onExit: handleExit,
      onExited: handleExited,
      onExiting: handleExiting,
      addEndListener: handleAddEndListener,
      appear: appear,
      in: inProp,
      timeout: timeout
    }, other, {
      children: (state, childProps) => {
        return /*#__PURE__*/React__namespace.cloneElement(children, _extends({
          ref: handleRef,
          style: _extends({
            visibility: state === 'exited' && !inProp ? 'hidden' : undefined
          }, style, children.props.style)
        }, childProps));
      }
    }));
  });
  Slide.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Add a custom transition end trigger. Called with the transitioning DOM
     * node and a done callback. Allows for more fine grained transition end
     * logic. Note: Timeouts are still used as a fallback if provided.
     */
    addEndListener: PropTypes.func,
    /**
     * Perform the enter transition when it first mounts if `in` is also `true`.
     * Set this to `false` to disable this behavior.
     * @default true
     */
    appear: PropTypes.bool,
    /**
     * A single child content element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * An HTML element, or a function that returns one.
     * It's used to set the container the Slide is transitioning from.
     */
    container: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.func]), props => {
      if (props.open) {
        const resolvedContainer = resolveContainer(props.container);
        if (resolvedContainer && resolvedContainer.nodeType === 1) {
          const box = resolvedContainer.getBoundingClientRect();
          if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
            return new Error(['MUI: The `container` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
          }
        } else if (!resolvedContainer || typeof resolvedContainer.getBoundingClientRect !== 'function' || resolvedContainer.contextElement != null && resolvedContainer.contextElement.nodeType !== 1) {
          return new Error(['MUI: The `container` prop provided to the component is invalid.', 'It should be an HTML element instance.'].join('\n'));
        }
      }
      return null;
    }),
    /**
     * Direction the child node will enter from.
     * @default 'down'
     */
    direction: PropTypes.oneOf(['down', 'left', 'right', 'up']),
    /**
     * The transition timing function.
     * You may specify a single easing or a object containing enter and exit values.
     * @default {
     *   enter: theme.transitions.easing.easeOut,
     *   exit: theme.transitions.easing.sharp,
     * }
     */
    easing: PropTypes.oneOfType([PropTypes.shape({
      enter: PropTypes.string,
      exit: PropTypes.string
    }), PropTypes.string]),
    /**
     * If `true`, the component will transition in.
     */
    in: PropTypes.bool,
    /**
     * @ignore
     */
    onEnter: PropTypes.func,
    /**
     * @ignore
     */
    onEntered: PropTypes.func,
    /**
     * @ignore
     */
    onEntering: PropTypes.func,
    /**
     * @ignore
     */
    onExit: PropTypes.func,
    /**
     * @ignore
     */
    onExited: PropTypes.func,
    /**
     * @ignore
     */
    onExiting: PropTypes.func,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })])
  } ;
  var Slide$1 = Slide;

  function getDrawerUtilityClass(slot) {
    return generateUtilityClass('MuiDrawer', slot);
  }
  const drawerClasses = generateUtilityClasses('MuiDrawer', ['root', 'docked', 'paper', 'paperAnchorLeft', 'paperAnchorRight', 'paperAnchorTop', 'paperAnchorBottom', 'paperAnchorDockedLeft', 'paperAnchorDockedRight', 'paperAnchorDockedTop', 'paperAnchorDockedBottom', 'modal']);
  var drawerClasses$1 = drawerClasses;

  const _excluded$1k = ["BackdropProps"],
    _excluded2$9 = ["anchor", "BackdropProps", "children", "className", "elevation", "hideBackdrop", "ModalProps", "onClose", "open", "PaperProps", "SlideProps", "TransitionComponent", "transitionDuration", "variant"];
  const overridesResolver$5 = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, (ownerState.variant === 'permanent' || ownerState.variant === 'persistent') && styles.docked, styles.modal];
  };
  const useUtilityClasses$17 = ownerState => {
    const {
      classes,
      anchor,
      variant
    } = ownerState;
    const slots = {
      root: ['root'],
      docked: [(variant === 'permanent' || variant === 'persistent') && 'docked'],
      modal: ['modal'],
      paper: ['paper', `paperAnchor${capitalize(anchor)}`, variant !== 'temporary' && `paperAnchorDocked${capitalize(anchor)}`]
    };
    return composeClasses(slots, getDrawerUtilityClass, classes);
  };
  const DrawerRoot = styled$1(Modal$1, {
    name: 'MuiDrawer',
    slot: 'Root',
    overridesResolver: overridesResolver$5
  })(({
    theme
  }) => ({
    zIndex: (theme.vars || theme).zIndex.drawer
  }));
  const DrawerDockedRoot = styled$1('div', {
    shouldForwardProp: rootShouldForwardProp,
    name: 'MuiDrawer',
    slot: 'Docked',
    skipVariantsResolver: false,
    overridesResolver: overridesResolver$5
  })({
    flex: '0 0 auto'
  });
  const DrawerPaper = styled$1(Paper$1, {
    name: 'MuiDrawer',
    slot: 'Paper',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.paper, styles[`paperAnchor${capitalize(ownerState.anchor)}`], ownerState.variant !== 'temporary' && styles[`paperAnchorDocked${capitalize(ownerState.anchor)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    overflowY: 'auto',
    display: 'flex',
    flexDirection: 'column',
    height: '100%',
    flex: '1 0 auto',
    zIndex: (theme.vars || theme).zIndex.drawer,
    // Add iOS momentum scrolling for iOS < 13.0
    WebkitOverflowScrolling: 'touch',
    // temporary style
    position: 'fixed',
    top: 0,
    // We disable the focus ring for mouse, touch and keyboard users.
    // At some point, it would be better to keep it for keyboard users.
    // :focus-ring CSS pseudo-class will help.
    outline: 0
  }, ownerState.anchor === 'left' && {
    left: 0
  }, ownerState.anchor === 'top' && {
    top: 0,
    left: 0,
    right: 0,
    height: 'auto',
    maxHeight: '100%'
  }, ownerState.anchor === 'right' && {
    right: 0
  }, ownerState.anchor === 'bottom' && {
    top: 'auto',
    left: 0,
    bottom: 0,
    right: 0,
    height: 'auto',
    maxHeight: '100%'
  }, ownerState.anchor === 'left' && ownerState.variant !== 'temporary' && {
    borderRight: `1px solid ${(theme.vars || theme).palette.divider}`
  }, ownerState.anchor === 'top' && ownerState.variant !== 'temporary' && {
    borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`
  }, ownerState.anchor === 'right' && ownerState.variant !== 'temporary' && {
    borderLeft: `1px solid ${(theme.vars || theme).palette.divider}`
  }, ownerState.anchor === 'bottom' && ownerState.variant !== 'temporary' && {
    borderTop: `1px solid ${(theme.vars || theme).palette.divider}`
  }));
  const oppositeDirection = {
    left: 'right',
    right: 'left',
    top: 'down',
    bottom: 'up'
  };
  function isHorizontal(anchor) {
    return ['left', 'right'].indexOf(anchor) !== -1;
  }
  function getAnchor(theme, anchor) {
    return theme.direction === 'rtl' && isHorizontal(anchor) ? oppositeDirection[anchor] : anchor;
  }

  /**
   * The props of the [Modal](/material-ui/api/modal/) component are available
   * when `variant="temporary"` is set.
   */
  const Drawer = /*#__PURE__*/React__namespace.forwardRef(function Drawer(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiDrawer'
    });
    const theme = useTheme();
    const defaultTransitionDuration = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        anchor: anchorProp = 'left',
        BackdropProps,
        children,
        className,
        elevation = 16,
        hideBackdrop = false,
        ModalProps: {
          BackdropProps: BackdropPropsProp
        } = {},
        onClose,
        open = false,
        PaperProps = {},
        SlideProps,
        // eslint-disable-next-line react/prop-types
        TransitionComponent = Slide$1,
        transitionDuration = defaultTransitionDuration,
        variant = 'temporary'
      } = props,
      ModalProps = _objectWithoutPropertiesLoose(props.ModalProps, _excluded$1k),
      other = _objectWithoutPropertiesLoose(props, _excluded2$9);

    // Let's assume that the Drawer will always be rendered on user space.
    // We use this state is order to skip the appear transition during the
    // initial mount of the component.
    const mounted = React__namespace.useRef(false);
    React__namespace.useEffect(() => {
      mounted.current = true;
    }, []);
    const anchorInvariant = getAnchor(theme, anchorProp);
    const anchor = anchorProp;
    const ownerState = _extends({}, props, {
      anchor,
      elevation,
      open,
      variant
    }, other);
    const classes = useUtilityClasses$17(ownerState);
    const drawer = /*#__PURE__*/jsxRuntime_1(DrawerPaper, _extends({
      elevation: variant === 'temporary' ? elevation : 0,
      square: true
    }, PaperProps, {
      className: clsx(classes.paper, PaperProps.className),
      ownerState: ownerState,
      children: children
    }));
    if (variant === 'permanent') {
      return /*#__PURE__*/jsxRuntime_1(DrawerDockedRoot, _extends({
        className: clsx(classes.root, classes.docked, className),
        ownerState: ownerState,
        ref: ref
      }, other, {
        children: drawer
      }));
    }
    const slidingDrawer = /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      in: open,
      direction: oppositeDirection[anchorInvariant],
      timeout: transitionDuration,
      appear: mounted.current
    }, SlideProps, {
      children: drawer
    }));
    if (variant === 'persistent') {
      return /*#__PURE__*/jsxRuntime_1(DrawerDockedRoot, _extends({
        className: clsx(classes.root, classes.docked, className),
        ownerState: ownerState,
        ref: ref
      }, other, {
        children: slidingDrawer
      }));
    }

    // variant === temporary
    return /*#__PURE__*/jsxRuntime_1(DrawerRoot, _extends({
      BackdropProps: _extends({}, BackdropProps, BackdropPropsProp, {
        transitionDuration
      }),
      className: clsx(classes.root, classes.modal, className),
      open: open,
      ownerState: ownerState,
      onClose: onClose,
      hideBackdrop: hideBackdrop,
      ref: ref
    }, other, ModalProps, {
      children: slidingDrawer
    }));
  });
  Drawer.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Side from which the drawer will appear.
     * @default 'left'
     */
    anchor: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
    /**
     * @ignore
     */
    BackdropProps: PropTypes.object,
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The elevation of the drawer.
     * @default 16
     */
    elevation: integerPropType,
    /**
     * If `true`, the backdrop is not rendered.
     * @default false
     */
    hideBackdrop: PropTypes.bool,
    /**
     * Props applied to the [`Modal`](/material-ui/api/modal/) element.
     * @default {}
     */
    ModalProps: PropTypes.object,
    /**
     * Callback fired when the component requests to be closed.
     * The `reason` parameter can optionally be used to control the response to `onClose`.
     *
     * @param {object} event The event source of the callback.
     * @param {string} reason Can be: `"escapeKeyDown"`, `"backdropClick"`.
     */
    onClose: PropTypes.func,
    /**
     * If `true`, the component is shown.
     * @default false
     */
    open: PropTypes.bool,
    /**
     * Props applied to the [`Paper`](/material-ui/api/paper/) element.
     * @default {}
     */
    PaperProps: PropTypes.object,
    /**
     * Props applied to the [`Slide`](/material-ui/api/slide/) element.
     */
    SlideProps: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * The variant to use.
     * @default 'temporary'
     */
    variant: PropTypes.oneOf(['permanent', 'persistent', 'temporary'])
  } ;
  var Drawer$1 = Drawer;

  function getFabUtilityClass(slot) {
    return generateUtilityClass('MuiFab', slot);
  }
  const fabClasses = generateUtilityClasses('MuiFab', ['root', 'primary', 'secondary', 'extended', 'circular', 'focusVisible', 'disabled', 'colorInherit', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'info', 'error', 'warning', 'success']);
  var fabClasses$1 = fabClasses;

  const _excluded$1j = ["children", "className", "color", "component", "disabled", "disableFocusRipple", "focusVisibleClassName", "size", "variant"];
  const useUtilityClasses$16 = ownerState => {
    const {
      color,
      variant,
      classes,
      size
    } = ownerState;
    const slots = {
      root: ['root', variant, `size${capitalize(size)}`, color === 'inherit' ? 'colorInherit' : color]
    };
    const composedClasses = composeClasses(slots, getFabUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const FabRoot = styled$1(ButtonBase$1, {
    name: 'MuiFab',
    slot: 'Root',
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], styles[`size${capitalize(ownerState.size)}`], ownerState.color === 'inherit' && styles.colorInherit, styles[capitalize(ownerState.size)], styles[ownerState.color]];
    }
  })(({
    theme,
    ownerState
  }) => {
    var _theme$palette$getCon, _theme$palette;
    return _extends({}, theme.typography.button, {
      minHeight: 36,
      transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color'], {
        duration: theme.transitions.duration.short
      }),
      borderRadius: '50%',
      padding: 0,
      minWidth: 0,
      width: 56,
      height: 56,
      zIndex: (theme.vars || theme).zIndex.fab,
      boxShadow: (theme.vars || theme).shadows[6],
      '&:active': {
        boxShadow: (theme.vars || theme).shadows[12]
      },
      color: theme.vars ? theme.vars.palette.text.primary : (_theme$palette$getCon = (_theme$palette = theme.palette).getContrastText) == null ? void 0 : _theme$palette$getCon.call(_theme$palette, theme.palette.grey[300]),
      backgroundColor: (theme.vars || theme).palette.grey[300],
      '&:hover': {
        backgroundColor: (theme.vars || theme).palette.grey.A100,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: (theme.vars || theme).palette.grey[300]
        },
        textDecoration: 'none'
      },
      [`&.${fabClasses$1.focusVisible}`]: {
        boxShadow: (theme.vars || theme).shadows[6]
      }
    }, ownerState.size === 'small' && {
      width: 40,
      height: 40
    }, ownerState.size === 'medium' && {
      width: 48,
      height: 48
    }, ownerState.variant === 'extended' && {
      borderRadius: 48 / 2,
      padding: '0 16px',
      width: 'auto',
      minHeight: 'auto',
      minWidth: 48,
      height: 48
    }, ownerState.variant === 'extended' && ownerState.size === 'small' && {
      width: 'auto',
      padding: '0 8px',
      borderRadius: 34 / 2,
      minWidth: 34,
      height: 34
    }, ownerState.variant === 'extended' && ownerState.size === 'medium' && {
      width: 'auto',
      padding: '0 16px',
      borderRadius: 40 / 2,
      minWidth: 40,
      height: 40
    }, ownerState.color === 'inherit' && {
      color: 'inherit'
    });
  }, ({
    theme,
    ownerState
  }) => _extends({}, ownerState.color !== 'inherit' && ownerState.color !== 'default' && (theme.vars || theme).palette[ownerState.color] != null && {
    color: (theme.vars || theme).palette[ownerState.color].contrastText,
    backgroundColor: (theme.vars || theme).palette[ownerState.color].main,
    '&:hover': {
      backgroundColor: (theme.vars || theme).palette[ownerState.color].dark,
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: (theme.vars || theme).palette[ownerState.color].main
      }
    }
  }), ({
    theme
  }) => ({
    [`&.${fabClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.action.disabled,
      boxShadow: (theme.vars || theme).shadows[0],
      backgroundColor: (theme.vars || theme).palette.action.disabledBackground
    }
  }));
  const Fab = /*#__PURE__*/React__namespace.forwardRef(function Fab(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFab'
    });
    const {
        children,
        className,
        color = 'default',
        component = 'button',
        disabled = false,
        disableFocusRipple = false,
        focusVisibleClassName,
        size = 'large',
        variant = 'circular'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1j);
    const ownerState = _extends({}, props, {
      color,
      component,
      disabled,
      disableFocusRipple,
      size,
      variant
    });
    const classes = useUtilityClasses$16(ownerState);
    return /*#__PURE__*/jsxRuntime_1(FabRoot, _extends({
      className: clsx(classes.root, className),
      component: component,
      disabled: disabled,
      focusRipple: !disableFocusRipple,
      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
      ownerState: ownerState,
      ref: ref
    }, other, {
      classes: classes,
      children: children
    }));
  });
  Fab.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'default'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'error', 'info', 'inherit', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the  keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     */
    disableRipple: PropTypes.bool,
    /**
     * @ignore
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * The URL to link to when the button is clicked.
     * If defined, an `a` element will be used as the root node.
     */
    href: PropTypes.string,
    /**
     * The size of the component.
     * `small` is equivalent to the dense button styling.
     * @default 'large'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'circular'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'extended']), PropTypes.string])
  } ;
  var Fab$1 = Fab;

  const _excluded$1i = ["disableUnderline", "components", "componentsProps", "fullWidth", "hiddenLabel", "inputComponent", "multiline", "slotProps", "slots", "type"];
  const useUtilityClasses$15 = ownerState => {
    const {
      classes,
      disableUnderline
    } = ownerState;
    const slots = {
      root: ['root', !disableUnderline && 'underline'],
      input: ['input']
    };
    const composedClasses = composeClasses(slots, getFilledInputUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const FilledInputRoot = styled$1(InputBaseRoot, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiFilledInput',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [...rootOverridesResolver(props, styles), !ownerState.disableUnderline && styles.underline];
    }
  })(({
    theme,
    ownerState
  }) => {
    var _palette;
    const light = theme.palette.mode === 'light';
    const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';
    const backgroundColor = light ? 'rgba(0, 0, 0, 0.06)' : 'rgba(255, 255, 255, 0.09)';
    const hoverBackground = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.13)';
    const disabledBackground = light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)';
    return _extends({
      position: 'relative',
      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor,
      borderTopLeftRadius: (theme.vars || theme).shape.borderRadius,
      borderTopRightRadius: (theme.vars || theme).shape.borderRadius,
      transition: theme.transitions.create('background-color', {
        duration: theme.transitions.duration.shorter,
        easing: theme.transitions.easing.easeOut
      }),
      '&:hover': {
        backgroundColor: theme.vars ? theme.vars.palette.FilledInput.hoverBg : hoverBackground,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor
        }
      },
      [`&.${filledInputClasses$1.focused}`]: {
        backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor
      },
      [`&.${filledInputClasses$1.disabled}`]: {
        backgroundColor: theme.vars ? theme.vars.palette.FilledInput.disabledBg : disabledBackground
      }
    }, !ownerState.disableUnderline && {
      '&:after': {
        borderBottom: `2px solid ${(_palette = (theme.vars || theme).palette[ownerState.color || 'primary']) == null ? void 0 : _palette.main}`,
        left: 0,
        bottom: 0,
        // Doing the other way around crash on IE11 "''" https://github.com/cssinjs/jss/issues/242
        content: '""',
        position: 'absolute',
        right: 0,
        transform: 'scaleX(0)',
        transition: theme.transitions.create('transform', {
          duration: theme.transitions.duration.shorter,
          easing: theme.transitions.easing.easeOut
        }),
        pointerEvents: 'none' // Transparent to the hover style.
      },
      [`&.${filledInputClasses$1.focused}:after`]: {
        // translateX(0) is a workaround for Safari transform scale bug
        // See https://github.com/mui/material-ui/issues/31766
        transform: 'scaleX(1) translateX(0)'
      },
      [`&.${filledInputClasses$1.error}`]: {
        '&:before, &:after': {
          borderBottomColor: (theme.vars || theme).palette.error.main
        }
      },
      '&:before': {
        borderBottom: `1px solid ${theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel} / ${theme.vars.opacity.inputUnderline})` : bottomLineColor}`,
        left: 0,
        bottom: 0,
        // Doing the other way around crash on IE11 "''" https://github.com/cssinjs/jss/issues/242
        content: '"\\00a0"',
        position: 'absolute',
        right: 0,
        transition: theme.transitions.create('border-bottom-color', {
          duration: theme.transitions.duration.shorter
        }),
        pointerEvents: 'none' // Transparent to the hover style.
      },
      [`&:hover:not(.${filledInputClasses$1.disabled}, .${filledInputClasses$1.error}):before`]: {
        borderBottom: `1px solid ${(theme.vars || theme).palette.text.primary}`
      },
      [`&.${filledInputClasses$1.disabled}:before`]: {
        borderBottomStyle: 'dotted'
      }
    }, ownerState.startAdornment && {
      paddingLeft: 12
    }, ownerState.endAdornment && {
      paddingRight: 12
    }, ownerState.multiline && _extends({
      padding: '25px 12px 8px'
    }, ownerState.size === 'small' && {
      paddingTop: 21,
      paddingBottom: 4
    }, ownerState.hiddenLabel && {
      paddingTop: 16,
      paddingBottom: 17
    }, ownerState.hiddenLabel && ownerState.size === 'small' && {
      paddingTop: 8,
      paddingBottom: 9
    }));
  });
  const FilledInputInput = styled$1(InputBaseComponent, {
    name: 'MuiFilledInput',
    slot: 'Input',
    overridesResolver: inputOverridesResolver
  })(({
    theme,
    ownerState
  }) => _extends({
    paddingTop: 25,
    paddingRight: 12,
    paddingBottom: 8,
    paddingLeft: 12
  }, !theme.vars && {
    '&:-webkit-autofill': {
      WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset',
      WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff',
      caretColor: theme.palette.mode === 'light' ? null : '#fff',
      borderTopLeftRadius: 'inherit',
      borderTopRightRadius: 'inherit'
    }
  }, theme.vars && {
    '&:-webkit-autofill': {
      borderTopLeftRadius: 'inherit',
      borderTopRightRadius: 'inherit'
    },
    [theme.getColorSchemeSelector('dark')]: {
      '&:-webkit-autofill': {
        WebkitBoxShadow: '0 0 0 100px #266798 inset',
        WebkitTextFillColor: '#fff',
        caretColor: '#fff'
      }
    }
  }, ownerState.size === 'small' && {
    paddingTop: 21,
    paddingBottom: 4
  }, ownerState.hiddenLabel && {
    paddingTop: 16,
    paddingBottom: 17
  }, ownerState.startAdornment && {
    paddingLeft: 0
  }, ownerState.endAdornment && {
    paddingRight: 0
  }, ownerState.hiddenLabel && ownerState.size === 'small' && {
    paddingTop: 8,
    paddingBottom: 9
  }, ownerState.multiline && {
    paddingTop: 0,
    paddingBottom: 0,
    paddingLeft: 0,
    paddingRight: 0
  }));
  const FilledInput = /*#__PURE__*/React__namespace.forwardRef(function FilledInput(inProps, ref) {
    var _ref, _slots$root, _ref2, _slots$input;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFilledInput'
    });
    const {
        components = {},
        componentsProps: componentsPropsProp,
        fullWidth = false,
        // declare here to prevent spreading to DOM
        inputComponent = 'input',
        multiline = false,
        slotProps,
        slots = {},
        type = 'text'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1i);
    const ownerState = _extends({}, props, {
      fullWidth,
      inputComponent,
      multiline,
      type
    });
    const classes = useUtilityClasses$15(props);
    const filledInputComponentsProps = {
      root: {
        ownerState
      },
      input: {
        ownerState
      }
    };
    const componentsProps = (slotProps != null ? slotProps : componentsPropsProp) ? deepmerge(filledInputComponentsProps, slotProps != null ? slotProps : componentsPropsProp) : filledInputComponentsProps;
    const RootSlot = (_ref = (_slots$root = slots.root) != null ? _slots$root : components.Root) != null ? _ref : FilledInputRoot;
    const InputSlot = (_ref2 = (_slots$input = slots.input) != null ? _slots$input : components.Input) != null ? _ref2 : FilledInputInput;
    return /*#__PURE__*/jsxRuntime_1(InputBase$1, _extends({
      slots: {
        root: RootSlot,
        input: InputSlot
      },
      componentsProps: componentsProps,
      fullWidth: fullWidth,
      inputComponent: inputComponent,
      multiline: multiline,
      ref: ref,
      type: type
    }, other, {
      classes: classes
    }));
  });
  FilledInput.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
     */
    autoComplete: PropTypes.string,
    /**
     * If `true`, the `input` element is focused during the first mount.
     */
    autoFocus: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Input: PropTypes.elementType,
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      input: PropTypes.object,
      root: PropTypes.object
    }),
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, the component is disabled.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the input will not have an underline.
     */
    disableUnderline: PropTypes.bool,
    /**
     * End `InputAdornment` for this component.
     */
    endAdornment: PropTypes.node,
    /**
     * If `true`, the `input` will indicate an error.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the `input` will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * If `true`, the label is hidden.
     * This is used to increase density for a `FilledInput`.
     * Be sure to add `aria-label` to the `input` element.
     * @default false
     */
    hiddenLabel: PropTypes.bool,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * The component used for the `input` element.
     * Either a string to use a HTML element or a component.
     * @default 'input'
     */
    inputComponent: PropTypes.elementType,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     * @default {}
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * If `dense`, will adjust vertical spacing. This is normally obtained via context from
     * FormControl.
     * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.
     */
    margin: PropTypes.oneOf(['dense', 'none']),
    /**
     * Maximum number of rows to display when multiline option is set to true.
     */
    maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Minimum number of rows to display when multiline option is set to true.
     */
    minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * If `true`, a [TextareaAutosize](/material-ui/react-textarea-autosize/) element is rendered.
     * @default false
     */
    multiline: PropTypes.bool,
    /**
     * Name attribute of the `input` element.
     */
    name: PropTypes.string,
    /**
     * Callback fired when the value is changed.
     *
     * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * The short hint displayed in the `input` before the user enters a value.
     */
    placeholder: PropTypes.string,
    /**
     * It prevents the user from changing the value of the field
     * (not from interacting with the field).
     */
    readOnly: PropTypes.bool,
    /**
     * If `true`, the `input` element is required.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    required: PropTypes.bool,
    /**
     * Number of rows to display when multiline option is set to true.
     */
    rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      input: PropTypes.object,
      root: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      input: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * Start `InputAdornment` for this component.
     */
    startAdornment: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
     * @default 'text'
     */
    type: PropTypes.string,
    /**
     * The value of the `input` element, required for a controlled component.
     */
    value: PropTypes.any
  } ;
  FilledInput.muiName = 'Input';
  var FilledInput$1 = FilledInput;

  function getFormControlUtilityClasses(slot) {
    return generateUtilityClass('MuiFormControl', slot);
  }
  const formControlClasses = generateUtilityClasses('MuiFormControl', ['root', 'marginNone', 'marginNormal', 'marginDense', 'fullWidth', 'disabled']);
  var formControlClasses$1 = formControlClasses;

  const _excluded$1h = ["children", "className", "color", "component", "disabled", "error", "focused", "fullWidth", "hiddenLabel", "margin", "required", "size", "variant"];
  const useUtilityClasses$14 = ownerState => {
    const {
      classes,
      margin,
      fullWidth
    } = ownerState;
    const slots = {
      root: ['root', margin !== 'none' && `margin${capitalize(margin)}`, fullWidth && 'fullWidth']
    };
    return composeClasses(slots, getFormControlUtilityClasses, classes);
  };
  const FormControlRoot = styled$1('div', {
    name: 'MuiFormControl',
    slot: 'Root',
    overridesResolver: ({
      ownerState
    }, styles) => {
      return _extends({}, styles.root, styles[`margin${capitalize(ownerState.margin)}`], ownerState.fullWidth && styles.fullWidth);
    }
  })(({
    ownerState
  }) => _extends({
    display: 'inline-flex',
    flexDirection: 'column',
    position: 'relative',
    // Reset fieldset default style.
    minWidth: 0,
    padding: 0,
    margin: 0,
    border: 0,
    verticalAlign: 'top'
  }, ownerState.margin === 'normal' && {
    marginTop: 16,
    marginBottom: 8
  }, ownerState.margin === 'dense' && {
    marginTop: 8,
    marginBottom: 4
  }, ownerState.fullWidth && {
    width: '100%'
  }));

  /**
   * Provides context such as filled/focused/error/required for form inputs.
   * Relying on the context provides high flexibility and ensures that the state always stays
   * consistent across the children of the `FormControl`.
   * This context is used by the following components:
   *
   *  - FormLabel
   *  - FormHelperText
   *  - Input
   *  - InputLabel
   *
   * You can find one composition example below and more going to [the demos](/material-ui/react-text-field/#components).
   *
   * ```jsx
   * <FormControl>
   *   <InputLabel htmlFor="my-input">Email address</InputLabel>
   *   <Input id="my-input" aria-describedby="my-helper-text" />
   *   <FormHelperText id="my-helper-text">We'll never share your email.</FormHelperText>
   * </FormControl>
   * ```
   *
   * ⚠️ Only one `InputBase` can be used within a FormControl because it creates visual inconsistencies.
   * For instance, only one input can be focused at the same time, the state shouldn't be shared.
   */
  const FormControl = /*#__PURE__*/React__namespace.forwardRef(function FormControl(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFormControl'
    });
    const {
        children,
        className,
        color = 'primary',
        component = 'div',
        disabled = false,
        error = false,
        focused: visuallyFocused,
        fullWidth = false,
        hiddenLabel = false,
        margin = 'none',
        required = false,
        size = 'medium',
        variant = 'outlined'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1h);
    const ownerState = _extends({}, props, {
      color,
      component,
      disabled,
      error,
      fullWidth,
      hiddenLabel,
      margin,
      required,
      size,
      variant
    });
    const classes = useUtilityClasses$14(ownerState);
    const [adornedStart, setAdornedStart] = React__namespace.useState(() => {
      // We need to iterate through the children and find the Input in order
      // to fully support server-side rendering.
      let initialAdornedStart = false;
      if (children) {
        React__namespace.Children.forEach(children, child => {
          if (!isMuiElement(child, ['Input', 'Select'])) {
            return;
          }
          const input = isMuiElement(child, ['Select']) ? child.props.input : child;
          if (input && isAdornedStart(input.props)) {
            initialAdornedStart = true;
          }
        });
      }
      return initialAdornedStart;
    });
    const [filled, setFilled] = React__namespace.useState(() => {
      // We need to iterate through the children and find the Input in order
      // to fully support server-side rendering.
      let initialFilled = false;
      if (children) {
        React__namespace.Children.forEach(children, child => {
          if (!isMuiElement(child, ['Input', 'Select'])) {
            return;
          }
          if (isFilled(child.props, true) || isFilled(child.props.inputProps, true)) {
            initialFilled = true;
          }
        });
      }
      return initialFilled;
    });
    const [focusedState, setFocused] = React__namespace.useState(false);
    if (disabled && focusedState) {
      setFocused(false);
    }
    const focused = visuallyFocused !== undefined && !disabled ? visuallyFocused : focusedState;
    let registerEffect;
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      const registeredInput = React__namespace.useRef(false);
      registerEffect = () => {
        if (registeredInput.current) {
          console.error(['MUI: There are multiple `InputBase` components inside a FormControl.', 'This creates visual inconsistencies, only use one `InputBase`.'].join('\n'));
        }
        registeredInput.current = true;
        return () => {
          registeredInput.current = false;
        };
      };
    }
    const childContext = React__namespace.useMemo(() => {
      return {
        adornedStart,
        setAdornedStart,
        color,
        disabled,
        error,
        filled,
        focused,
        fullWidth,
        hiddenLabel,
        size,
        onBlur: () => {
          setFocused(false);
        },
        onEmpty: () => {
          setFilled(false);
        },
        onFilled: () => {
          setFilled(true);
        },
        onFocus: () => {
          setFocused(true);
        },
        registerEffect,
        required,
        variant
      };
    }, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, required, size, variant]);
    return /*#__PURE__*/jsxRuntime_1(FormControlContext$1.Provider, {
      value: childContext,
      children: /*#__PURE__*/jsxRuntime_1(FormControlRoot, _extends({
        as: component,
        ownerState: ownerState,
        className: clsx(classes.root, className),
        ref: ref
      }, other, {
        children: children
      }))
    });
  });
  FormControl.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the label, input and helper text should be displayed in a disabled state.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the label is displayed in an error state.
     * @default false
     */
    error: PropTypes.bool,
    /**
     * If `true`, the component is displayed in focused state.
     */
    focused: PropTypes.bool,
    /**
     * If `true`, the component will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * If `true`, the label is hidden.
     * This is used to increase density for a `FilledInput`.
     * Be sure to add `aria-label` to the `input` element.
     * @default false
     */
    hiddenLabel: PropTypes.bool,
    /**
     * If `dense` or `normal`, will adjust vertical spacing of this and contained components.
     * @default 'none'
     */
    margin: PropTypes.oneOf(['dense', 'none', 'normal']),
    /**
     * If `true`, the label will indicate that the `input` is required.
     * @default false
     */
    required: PropTypes.bool,
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'outlined'
     */
    variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
  } ;
  var FormControl$1 = FormControl;

  const Stack = createStack({
    createStyledComponent: styled$1('div', {
      name: 'MuiStack',
      slot: 'Root',
      overridesResolver: (props, styles) => styles.root
    }),
    useThemeProps: inProps => useThemeProps({
      props: inProps,
      name: 'MuiStack'
    })
  });
  Stack.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Defines the `flex-direction` style property.
     * It is applied for all screen sizes.
     * @default 'column'
     */
    direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),
    /**
     * Add an element between each child.
     */
    divider: PropTypes.node,
    /**
     * Defines the space between immediate children.
     * @default 0
     */
    spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
    /**
     * The system prop, which allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * If `true`, the CSS flexbox `gap` is used instead of applying `margin` to children.
     *
     * While CSS `gap` removes the [known limitations](https://mui.com/joy-ui/react-stack/#limitations),
     * it is not fully supported in some browsers. We recommend checking https://caniuse.com/?search=flex%20gap before using this flag.
     *
     * To enable this flag globally, follow the [theme's default props](https://mui.com/material-ui/customization/theme-components/#default-props) configuration.
     * @default false
     */
    useFlexGap: PropTypes.bool
  } ;
  var Stack$1 = Stack;

  const stackClasses = generateUtilityClasses('MuiStack', ['root']);
  var stackClasses$1 = stackClasses;

  function getFormControlLabelUtilityClasses(slot) {
    return generateUtilityClass('MuiFormControlLabel', slot);
  }
  const formControlLabelClasses = generateUtilityClasses('MuiFormControlLabel', ['root', 'labelPlacementStart', 'labelPlacementTop', 'labelPlacementBottom', 'disabled', 'label', 'error', 'required', 'asterisk']);
  var formControlLabelClasses$1 = formControlLabelClasses;

  const _excluded$1g = ["checked", "className", "componentsProps", "control", "disabled", "disableTypography", "inputRef", "label", "labelPlacement", "name", "onChange", "required", "slotProps", "value"];
  const useUtilityClasses$13 = ownerState => {
    const {
      classes,
      disabled,
      labelPlacement,
      error,
      required
    } = ownerState;
    const slots = {
      root: ['root', disabled && 'disabled', `labelPlacement${capitalize(labelPlacement)}`, error && 'error', required && 'required'],
      label: ['label', disabled && 'disabled'],
      asterisk: ['asterisk', error && 'error']
    };
    return composeClasses(slots, getFormControlLabelUtilityClasses, classes);
  };
  const FormControlLabelRoot = styled$1('label', {
    name: 'MuiFormControlLabel',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${formControlLabelClasses$1.label}`]: styles.label
      }, styles.root, styles[`labelPlacement${capitalize(ownerState.labelPlacement)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'inline-flex',
    alignItems: 'center',
    cursor: 'pointer',
    // For correct alignment with the text.
    verticalAlign: 'middle',
    WebkitTapHighlightColor: 'transparent',
    marginLeft: -11,
    marginRight: 16,
    // used for row presentation of radio/checkbox
    [`&.${formControlLabelClasses$1.disabled}`]: {
      cursor: 'default'
    }
  }, ownerState.labelPlacement === 'start' && {
    flexDirection: 'row-reverse',
    marginLeft: 16,
    // used for row presentation of radio/checkbox
    marginRight: -11
  }, ownerState.labelPlacement === 'top' && {
    flexDirection: 'column-reverse',
    marginLeft: 16
  }, ownerState.labelPlacement === 'bottom' && {
    flexDirection: 'column',
    marginLeft: 16
  }, {
    [`& .${formControlLabelClasses$1.label}`]: {
      [`&.${formControlLabelClasses$1.disabled}`]: {
        color: (theme.vars || theme).palette.text.disabled
      }
    }
  }));
  const AsteriskComponent$1 = styled$1('span', {
    name: 'MuiFormControlLabel',
    slot: 'Asterisk',
    overridesResolver: (props, styles) => styles.asterisk
  })(({
    theme
  }) => ({
    [`&.${formControlLabelClasses$1.error}`]: {
      color: (theme.vars || theme).palette.error.main
    }
  }));

  /**
   * Drop-in replacement of the `Radio`, `Switch` and `Checkbox` component.
   * Use this component if you want to display an extra label.
   */
  const FormControlLabel = /*#__PURE__*/React__namespace.forwardRef(function FormControlLabel(inProps, ref) {
    var _ref, _slotProps$typography;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFormControlLabel'
    });
    const {
        className,
        componentsProps = {},
        control,
        disabled: disabledProp,
        disableTypography,
        label: labelProp,
        labelPlacement = 'end',
        required: requiredProp,
        slotProps = {}
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1g);
    const muiFormControl = useFormControl();
    const disabled = (_ref = disabledProp != null ? disabledProp : control.props.disabled) != null ? _ref : muiFormControl == null ? void 0 : muiFormControl.disabled;
    const required = requiredProp != null ? requiredProp : control.props.required;
    const controlProps = {
      disabled,
      required
    };
    ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(key => {
      if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {
        controlProps[key] = props[key];
      }
    });
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['error']
    });
    const ownerState = _extends({}, props, {
      disabled,
      labelPlacement,
      required,
      error: fcs.error
    });
    const classes = useUtilityClasses$13(ownerState);
    const typographySlotProps = (_slotProps$typography = slotProps.typography) != null ? _slotProps$typography : componentsProps.typography;
    let label = labelProp;
    if (label != null && label.type !== Typography$1 && !disableTypography) {
      label = /*#__PURE__*/jsxRuntime_1(Typography$1, _extends({
        component: "span"
      }, typographySlotProps, {
        className: clsx(classes.label, typographySlotProps == null ? void 0 : typographySlotProps.className),
        children: label
      }));
    }
    return /*#__PURE__*/jsxRuntime_2(FormControlLabelRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other, {
      children: [/*#__PURE__*/React__namespace.cloneElement(control, controlProps), required ? /*#__PURE__*/jsxRuntime_2(Stack$1, {
        display: "block",
        children: [label, /*#__PURE__*/jsxRuntime_2(AsteriskComponent$1, {
          ownerState: ownerState,
          "aria-hidden": true,
          className: classes.asterisk,
          children: ["\u2009", '*']
        })]
      }) : label]
    }));
  });
  FormControlLabel.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the component appears selected.
     */
    checked: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The props used for each slot inside.
     * @default {}
     */
    componentsProps: PropTypes.shape({
      typography: PropTypes.object
    }),
    /**
     * A control element. For instance, it can be a `Radio`, a `Switch` or a `Checkbox`.
     */
    control: PropTypes.element.isRequired,
    /**
     * If `true`, the control is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the label is rendered as it is passed without an additional typography node.
     */
    disableTypography: PropTypes.bool,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * A text or an element to be used in an enclosing label element.
     */
    label: PropTypes.node,
    /**
     * The position of the label.
     * @default 'end'
     */
    labelPlacement: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),
    /**
     * @ignore
     */
    name: PropTypes.string,
    /**
     * Callback fired when the state is changed.
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     * You can pull out the new checked state by accessing `event.target.checked` (boolean).
     */
    onChange: PropTypes.func,
    /**
     * If `true`, the label will indicate that the `input` is required.
     */
    required: PropTypes.bool,
    /**
     * The props used for each slot inside.
     * @default {}
     */
    slotProps: PropTypes.shape({
      typography: PropTypes.object
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the component.
     */
    value: PropTypes.any
  } ;
  var FormControlLabel$1 = FormControlLabel;

  function getFormGroupUtilityClass(slot) {
    return generateUtilityClass('MuiFormGroup', slot);
  }
  const formGroupClasses = generateUtilityClasses('MuiFormGroup', ['root', 'row', 'error']);
  var formGroupClasses$1 = formGroupClasses;

  const _excluded$1f = ["className", "row"];
  const useUtilityClasses$12 = ownerState => {
    const {
      classes,
      row,
      error
    } = ownerState;
    const slots = {
      root: ['root', row && 'row', error && 'error']
    };
    return composeClasses(slots, getFormGroupUtilityClass, classes);
  };
  const FormGroupRoot = styled$1('div', {
    name: 'MuiFormGroup',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.row && styles.row];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex',
    flexDirection: 'column',
    flexWrap: 'wrap'
  }, ownerState.row && {
    flexDirection: 'row'
  }));

  /**
   * `FormGroup` wraps controls such as `Checkbox` and `Switch`.
   * It provides compact row layout.
   * For the `Radio`, you should be using the `RadioGroup` component instead of this one.
   */
  const FormGroup = /*#__PURE__*/React__namespace.forwardRef(function FormGroup(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFormGroup'
    });
    const {
        className,
        row = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1f);
    const muiFormControl = useFormControl();
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['error']
    });
    const ownerState = _extends({}, props, {
      row,
      error: fcs.error
    });
    const classes = useUtilityClasses$12(ownerState);
    return /*#__PURE__*/jsxRuntime_1(FormGroupRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  FormGroup.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Display group of elements in a compact row.
     * @default false
     */
    row: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var FormGroup$1 = FormGroup;

  function getFormHelperTextUtilityClasses(slot) {
    return generateUtilityClass('MuiFormHelperText', slot);
  }
  const formHelperTextClasses = generateUtilityClasses('MuiFormHelperText', ['root', 'error', 'disabled', 'sizeSmall', 'sizeMedium', 'contained', 'focused', 'filled', 'required']);
  var formHelperTextClasses$1 = formHelperTextClasses;

  var _span$3;
  const _excluded$1e = ["children", "className", "component", "disabled", "error", "filled", "focused", "margin", "required", "variant"];
  const useUtilityClasses$11 = ownerState => {
    const {
      classes,
      contained,
      size,
      disabled,
      error,
      filled,
      focused,
      required
    } = ownerState;
    const slots = {
      root: ['root', disabled && 'disabled', error && 'error', size && `size${capitalize(size)}`, contained && 'contained', focused && 'focused', filled && 'filled', required && 'required']
    };
    return composeClasses(slots, getFormHelperTextUtilityClasses, classes);
  };
  const FormHelperTextRoot = styled$1('p', {
    name: 'MuiFormHelperText',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.size && styles[`size${capitalize(ownerState.size)}`], ownerState.contained && styles.contained, ownerState.filled && styles.filled];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    color: (theme.vars || theme).palette.text.secondary
  }, theme.typography.caption, {
    textAlign: 'left',
    marginTop: 3,
    marginRight: 0,
    marginBottom: 0,
    marginLeft: 0,
    [`&.${formHelperTextClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.text.disabled
    },
    [`&.${formHelperTextClasses$1.error}`]: {
      color: (theme.vars || theme).palette.error.main
    }
  }, ownerState.size === 'small' && {
    marginTop: 4
  }, ownerState.contained && {
    marginLeft: 14,
    marginRight: 14
  }));
  const FormHelperText = /*#__PURE__*/React__namespace.forwardRef(function FormHelperText(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFormHelperText'
    });
    const {
        children,
        className,
        component = 'p'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1e);
    const muiFormControl = useFormControl();
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['variant', 'size', 'disabled', 'error', 'filled', 'focused', 'required']
    });
    const ownerState = _extends({}, props, {
      component,
      contained: fcs.variant === 'filled' || fcs.variant === 'outlined',
      variant: fcs.variant,
      size: fcs.size,
      disabled: fcs.disabled,
      error: fcs.error,
      filled: fcs.filled,
      focused: fcs.focused,
      required: fcs.required
    });
    const classes = useUtilityClasses$11(ownerState);
    return /*#__PURE__*/jsxRuntime_1(FormHelperTextRoot, _extends({
      as: component,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other, {
      children: children === ' ' ? // notranslate needed while Google Translate will not fix zero-width space issue
      _span$3 || (_span$3 = /*#__PURE__*/jsxRuntime_1("span", {
        className: "notranslate",
        children: "\u200B"
      })) : children
    }));
  });
  FormHelperText.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     *
     * If `' '` is provided, the component reserves one line height for displaying a future message.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the helper text should be displayed in a disabled state.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, helper text should be displayed in an error state.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the helper text should use filled classes key.
     */
    filled: PropTypes.bool,
    /**
     * If `true`, the helper text should use focused classes key.
     */
    focused: PropTypes.bool,
    /**
     * If `dense`, will adjust vertical spacing. This is normally obtained via context from
     * FormControl.
     */
    margin: PropTypes.oneOf(['dense']),
    /**
     * If `true`, the helper text should use required classes key.
     */
    required: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])
  } ;
  var FormHelperText$1 = FormHelperText;

  function getFormLabelUtilityClasses(slot) {
    return generateUtilityClass('MuiFormLabel', slot);
  }
  const formLabelClasses = generateUtilityClasses('MuiFormLabel', ['root', 'colorSecondary', 'focused', 'disabled', 'error', 'filled', 'required', 'asterisk']);
  var formLabelClasses$1 = formLabelClasses;

  const _excluded$1d = ["children", "className", "color", "component", "disabled", "error", "filled", "focused", "required"];
  const useUtilityClasses$10 = ownerState => {
    const {
      classes,
      color,
      focused,
      disabled,
      error,
      filled,
      required
    } = ownerState;
    const slots = {
      root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', filled && 'filled', focused && 'focused', required && 'required'],
      asterisk: ['asterisk', error && 'error']
    };
    return composeClasses(slots, getFormLabelUtilityClasses, classes);
  };
  const FormLabelRoot = styled$1('label', {
    name: 'MuiFormLabel',
    slot: 'Root',
    overridesResolver: ({
      ownerState
    }, styles) => {
      return _extends({}, styles.root, ownerState.color === 'secondary' && styles.colorSecondary, ownerState.filled && styles.filled);
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    color: (theme.vars || theme).palette.text.secondary
  }, theme.typography.body1, {
    lineHeight: '1.4375em',
    padding: 0,
    position: 'relative',
    [`&.${formLabelClasses$1.focused}`]: {
      color: (theme.vars || theme).palette[ownerState.color].main
    },
    [`&.${formLabelClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.text.disabled
    },
    [`&.${formLabelClasses$1.error}`]: {
      color: (theme.vars || theme).palette.error.main
    }
  }));
  const AsteriskComponent = styled$1('span', {
    name: 'MuiFormLabel',
    slot: 'Asterisk',
    overridesResolver: (props, styles) => styles.asterisk
  })(({
    theme
  }) => ({
    [`&.${formLabelClasses$1.error}`]: {
      color: (theme.vars || theme).palette.error.main
    }
  }));
  const FormLabel = /*#__PURE__*/React__namespace.forwardRef(function FormLabel(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiFormLabel'
    });
    const {
        children,
        className,
        component = 'label'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1d);
    const muiFormControl = useFormControl();
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']
    });
    const ownerState = _extends({}, props, {
      color: fcs.color || 'primary',
      component,
      disabled: fcs.disabled,
      error: fcs.error,
      filled: fcs.filled,
      focused: fcs.focused,
      required: fcs.required
    });
    const classes = useUtilityClasses$10(ownerState);
    return /*#__PURE__*/jsxRuntime_2(FormLabelRoot, _extends({
      as: component,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other, {
      children: [children, fcs.required && /*#__PURE__*/jsxRuntime_2(AsteriskComponent, {
        ownerState: ownerState,
        "aria-hidden": true,
        className: classes.asterisk,
        children: ["\u2009", '*']
      })]
    }));
  });
  FormLabel.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the label should be displayed in a disabled state.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the label is displayed in an error state.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the label should use filled classes key.
     */
    filled: PropTypes.bool,
    /**
     * If `true`, the input of this label is focused (used by `FormGroup` components).
     */
    focused: PropTypes.bool,
    /**
     * If `true`, the label will indicate that the `input` is required.
     */
    required: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var FormLabel$1 = FormLabel;

  /**
   * @ignore - internal component.
   */
  const GridContext = /*#__PURE__*/React__namespace.createContext();
  {
    GridContext.displayName = 'GridContext';
  }
  var GridContext$1 = GridContext;

  function getGridUtilityClass(slot) {
    return generateUtilityClass('MuiGrid', slot);
  }
  const SPACINGS$1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  const DIRECTIONS$1 = ['column-reverse', 'column', 'row-reverse', 'row'];
  const WRAPS$1 = ['nowrap', 'wrap-reverse', 'wrap'];
  const GRID_SIZES$1 = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
  const gridClasses = generateUtilityClasses('MuiGrid', ['root', 'container', 'item', 'zeroMinWidth',
  // spacings
  ...SPACINGS$1.map(spacing => `spacing-xs-${spacing}`),
  // direction values
  ...DIRECTIONS$1.map(direction => `direction-xs-${direction}`),
  // wrap values
  ...WRAPS$1.map(wrap => `wrap-xs-${wrap}`),
  // grid sizes for all breakpoints
  ...GRID_SIZES$1.map(size => `grid-xs-${size}`), ...GRID_SIZES$1.map(size => `grid-sm-${size}`), ...GRID_SIZES$1.map(size => `grid-md-${size}`), ...GRID_SIZES$1.map(size => `grid-lg-${size}`), ...GRID_SIZES$1.map(size => `grid-xl-${size}`)]);
  var gridClasses$1 = gridClasses;

  const _excluded$1c = ["className", "columns", "columnSpacing", "component", "container", "direction", "item", "rowSpacing", "spacing", "wrap", "zeroMinWidth"];
  function getOffset(val) {
    const parse = parseFloat(val);
    return `${parse}${String(val).replace(String(parse), '') || 'px'}`;
  }
  function generateGrid({
    theme,
    ownerState
  }) {
    let size;
    return theme.breakpoints.keys.reduce((globalStyles, breakpoint) => {
      // Use side effect over immutability for better performance.
      let styles = {};
      if (ownerState[breakpoint]) {
        size = ownerState[breakpoint];
      }
      if (!size) {
        return globalStyles;
      }
      if (size === true) {
        // For the auto layouting
        styles = {
          flexBasis: 0,
          flexGrow: 1,
          maxWidth: '100%'
        };
      } else if (size === 'auto') {
        styles = {
          flexBasis: 'auto',
          flexGrow: 0,
          flexShrink: 0,
          maxWidth: 'none',
          width: 'auto'
        };
      } else {
        const columnsBreakpointValues = resolveBreakpointValues({
          values: ownerState.columns,
          breakpoints: theme.breakpoints.values
        });
        const columnValue = typeof columnsBreakpointValues === 'object' ? columnsBreakpointValues[breakpoint] : columnsBreakpointValues;
        if (columnValue === undefined || columnValue === null) {
          return globalStyles;
        }
        // Keep 7 significant numbers.
        const width = `${Math.round(size / columnValue * 10e7) / 10e5}%`;
        let more = {};
        if (ownerState.container && ownerState.item && ownerState.columnSpacing !== 0) {
          const themeSpacing = theme.spacing(ownerState.columnSpacing);
          if (themeSpacing !== '0px') {
            const fullWidth = `calc(${width} + ${getOffset(themeSpacing)})`;
            more = {
              flexBasis: fullWidth,
              maxWidth: fullWidth
            };
          }
        }

        // Close to the bootstrap implementation:
        // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41
        styles = _extends({
          flexBasis: width,
          flexGrow: 0,
          maxWidth: width
        }, more);
      }

      // No need for a media query for the first size.
      if (theme.breakpoints.values[breakpoint] === 0) {
        Object.assign(globalStyles, styles);
      } else {
        globalStyles[theme.breakpoints.up(breakpoint)] = styles;
      }
      return globalStyles;
    }, {});
  }
  function generateDirection({
    theme,
    ownerState
  }) {
    const directionValues = resolveBreakpointValues({
      values: ownerState.direction,
      breakpoints: theme.breakpoints.values
    });
    return handleBreakpoints({
      theme
    }, directionValues, propValue => {
      const output = {
        flexDirection: propValue
      };
      if (propValue.indexOf('column') === 0) {
        output[`& > .${gridClasses$1.item}`] = {
          maxWidth: 'none'
        };
      }
      return output;
    });
  }

  /**
   * Extracts zero value breakpoint keys before a non-zero value breakpoint key.
   * @example { xs: 0, sm: 0, md: 2, lg: 0, xl: 0 } or [0, 0, 2, 0, 0]
   * @returns [xs, sm]
   */
  function extractZeroValueBreakpointKeys({
    breakpoints,
    values
  }) {
    let nonZeroKey = '';
    Object.keys(values).forEach(key => {
      if (nonZeroKey !== '') {
        return;
      }
      if (values[key] !== 0) {
        nonZeroKey = key;
      }
    });
    const sortedBreakpointKeysByValue = Object.keys(breakpoints).sort((a, b) => {
      return breakpoints[a] - breakpoints[b];
    });
    return sortedBreakpointKeysByValue.slice(0, sortedBreakpointKeysByValue.indexOf(nonZeroKey));
  }
  function generateRowGap({
    theme,
    ownerState
  }) {
    const {
      container,
      rowSpacing
    } = ownerState;
    let styles = {};
    if (container && rowSpacing !== 0) {
      const rowSpacingValues = resolveBreakpointValues({
        values: rowSpacing,
        breakpoints: theme.breakpoints.values
      });
      let zeroValueBreakpointKeys;
      if (typeof rowSpacingValues === 'object') {
        zeroValueBreakpointKeys = extractZeroValueBreakpointKeys({
          breakpoints: theme.breakpoints.values,
          values: rowSpacingValues
        });
      }
      styles = handleBreakpoints({
        theme
      }, rowSpacingValues, (propValue, breakpoint) => {
        var _zeroValueBreakpointK;
        const themeSpacing = theme.spacing(propValue);
        if (themeSpacing !== '0px') {
          return {
            marginTop: `-${getOffset(themeSpacing)}`,
            [`& > .${gridClasses$1.item}`]: {
              paddingTop: getOffset(themeSpacing)
            }
          };
        }
        if ((_zeroValueBreakpointK = zeroValueBreakpointKeys) != null && _zeroValueBreakpointK.includes(breakpoint)) {
          return {};
        }
        return {
          marginTop: 0,
          [`& > .${gridClasses$1.item}`]: {
            paddingTop: 0
          }
        };
      });
    }
    return styles;
  }
  function generateColumnGap({
    theme,
    ownerState
  }) {
    const {
      container,
      columnSpacing
    } = ownerState;
    let styles = {};
    if (container && columnSpacing !== 0) {
      const columnSpacingValues = resolveBreakpointValues({
        values: columnSpacing,
        breakpoints: theme.breakpoints.values
      });
      let zeroValueBreakpointKeys;
      if (typeof columnSpacingValues === 'object') {
        zeroValueBreakpointKeys = extractZeroValueBreakpointKeys({
          breakpoints: theme.breakpoints.values,
          values: columnSpacingValues
        });
      }
      styles = handleBreakpoints({
        theme
      }, columnSpacingValues, (propValue, breakpoint) => {
        var _zeroValueBreakpointK2;
        const themeSpacing = theme.spacing(propValue);
        if (themeSpacing !== '0px') {
          return {
            width: `calc(100% + ${getOffset(themeSpacing)})`,
            marginLeft: `-${getOffset(themeSpacing)}`,
            [`& > .${gridClasses$1.item}`]: {
              paddingLeft: getOffset(themeSpacing)
            }
          };
        }
        if ((_zeroValueBreakpointK2 = zeroValueBreakpointKeys) != null && _zeroValueBreakpointK2.includes(breakpoint)) {
          return {};
        }
        return {
          width: '100%',
          marginLeft: 0,
          [`& > .${gridClasses$1.item}`]: {
            paddingLeft: 0
          }
        };
      });
    }
    return styles;
  }
  function resolveSpacingStyles(spacing, breakpoints, styles = {}) {
    // undefined/null or `spacing` <= 0
    if (!spacing || spacing <= 0) {
      return [];
    }
    // in case of string/number `spacing`
    if (typeof spacing === 'string' && !Number.isNaN(Number(spacing)) || typeof spacing === 'number') {
      return [styles[`spacing-xs-${String(spacing)}`]];
    }
    // in case of object `spacing`
    const spacingStyles = [];
    breakpoints.forEach(breakpoint => {
      const value = spacing[breakpoint];
      if (Number(value) > 0) {
        spacingStyles.push(styles[`spacing-${breakpoint}-${String(value)}`]);
      }
    });
    return spacingStyles;
  }

  // Default CSS values
  // flex: '0 1 auto',
  // flexDirection: 'row',
  // alignItems: 'flex-start',
  // flexWrap: 'nowrap',
  // justifyContent: 'flex-start',
  const GridRoot = styled$1('div', {
    name: 'MuiGrid',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      const {
        container,
        direction,
        item,
        spacing,
        wrap,
        zeroMinWidth,
        breakpoints
      } = ownerState;
      let spacingStyles = [];

      // in case of grid item
      if (container) {
        spacingStyles = resolveSpacingStyles(spacing, breakpoints, styles);
      }
      const breakpointsStyles = [];
      breakpoints.forEach(breakpoint => {
        const value = ownerState[breakpoint];
        if (value) {
          breakpointsStyles.push(styles[`grid-${breakpoint}-${String(value)}`]);
        }
      });
      return [styles.root, container && styles.container, item && styles.item, zeroMinWidth && styles.zeroMinWidth, ...spacingStyles, direction !== 'row' && styles[`direction-xs-${String(direction)}`], wrap !== 'wrap' && styles[`wrap-xs-${String(wrap)}`], ...breakpointsStyles];
    }
  })(({
    ownerState
  }) => _extends({
    boxSizing: 'border-box'
  }, ownerState.container && {
    display: 'flex',
    flexWrap: 'wrap',
    width: '100%'
  }, ownerState.item && {
    margin: 0 // For instance, it's useful when used with a `figure` element.
  }, ownerState.zeroMinWidth && {
    minWidth: 0
  }, ownerState.wrap !== 'wrap' && {
    flexWrap: ownerState.wrap
  }), generateDirection, generateRowGap, generateColumnGap, generateGrid);
  function resolveSpacingClasses(spacing, breakpoints) {
    // undefined/null or `spacing` <= 0
    if (!spacing || spacing <= 0) {
      return [];
    }
    // in case of string/number `spacing`
    if (typeof spacing === 'string' && !Number.isNaN(Number(spacing)) || typeof spacing === 'number') {
      return [`spacing-xs-${String(spacing)}`];
    }
    // in case of object `spacing`
    const classes = [];
    breakpoints.forEach(breakpoint => {
      const value = spacing[breakpoint];
      if (Number(value) > 0) {
        const className = `spacing-${breakpoint}-${String(value)}`;
        classes.push(className);
      }
    });
    return classes;
  }
  const useUtilityClasses$$ = ownerState => {
    const {
      classes,
      container,
      direction,
      item,
      spacing,
      wrap,
      zeroMinWidth,
      breakpoints
    } = ownerState;
    let spacingClasses = [];

    // in case of grid item
    if (container) {
      spacingClasses = resolveSpacingClasses(spacing, breakpoints);
    }
    const breakpointsClasses = [];
    breakpoints.forEach(breakpoint => {
      const value = ownerState[breakpoint];
      if (value) {
        breakpointsClasses.push(`grid-${breakpoint}-${String(value)}`);
      }
    });
    const slots = {
      root: ['root', container && 'container', item && 'item', zeroMinWidth && 'zeroMinWidth', ...spacingClasses, direction !== 'row' && `direction-xs-${String(direction)}`, wrap !== 'wrap' && `wrap-xs-${String(wrap)}`, ...breakpointsClasses]
    };
    return composeClasses(slots, getGridUtilityClass, classes);
  };
  const Grid = /*#__PURE__*/React__namespace.forwardRef(function Grid(inProps, ref) {
    const themeProps = useThemeProps({
      props: inProps,
      name: 'MuiGrid'
    });
    const {
      breakpoints
    } = useTheme();
    const props = extendSxProp(themeProps);
    const {
        className,
        columns: columnsProp,
        columnSpacing: columnSpacingProp,
        component = 'div',
        container = false,
        direction = 'row',
        item = false,
        rowSpacing: rowSpacingProp,
        spacing = 0,
        wrap = 'wrap',
        zeroMinWidth = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1c);
    const rowSpacing = rowSpacingProp || spacing;
    const columnSpacing = columnSpacingProp || spacing;
    const columnsContext = React__namespace.useContext(GridContext$1);

    // columns set with default breakpoint unit of 12
    const columns = container ? columnsProp || 12 : columnsContext;
    const breakpointsValues = {};
    const otherFiltered = _extends({}, other);
    breakpoints.keys.forEach(breakpoint => {
      if (other[breakpoint] != null) {
        breakpointsValues[breakpoint] = other[breakpoint];
        delete otherFiltered[breakpoint];
      }
    });
    const ownerState = _extends({}, props, {
      columns,
      container,
      direction,
      item,
      rowSpacing,
      columnSpacing,
      wrap,
      zeroMinWidth,
      spacing
    }, breakpointsValues, {
      breakpoints: breakpoints.keys
    });
    const classes = useUtilityClasses$$(ownerState);
    return /*#__PURE__*/jsxRuntime_1(GridContext$1.Provider, {
      value: columns,
      children: /*#__PURE__*/jsxRuntime_1(GridRoot, _extends({
        ownerState: ownerState,
        className: clsx(classes.root, className),
        as: component,
        ref: ref
      }, otherFiltered))
    });
  });
  Grid.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The number of columns.
     * @default 12
     */
    columns: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object]),
    /**
     * Defines the horizontal space between the type `item` components.
     * It overrides the value of the `spacing` prop.
     */
    columnSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the component will have the flex *container* behavior.
     * You should be wrapping *items* with a *container*.
     * @default false
     */
    container: PropTypes.bool,
    /**
     * Defines the `flex-direction` style property.
     * It is applied for all screen sizes.
     * @default 'row'
     */
    direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),
    /**
     * If `true`, the component will have the flex *item* behavior.
     * You should be wrapping *items* with a *container*.
     * @default false
     */
    item: PropTypes.bool,
    /**
     * If a number, it sets the number of columns the grid item uses.
     * It can't be greater than the total number of columns of the container (12 by default).
     * If 'auto', the grid item's width matches its content.
     * If false, the prop is ignored.
     * If true, the grid item's width grows to use the space available in the grid container.
     * The value is applied for the `lg` breakpoint and wider screens if not overridden.
     * @default false
     */
    lg: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
    /**
     * If a number, it sets the number of columns the grid item uses.
     * It can't be greater than the total number of columns of the container (12 by default).
     * If 'auto', the grid item's width matches its content.
     * If false, the prop is ignored.
     * If true, the grid item's width grows to use the space available in the grid container.
     * The value is applied for the `md` breakpoint and wider screens if not overridden.
     * @default false
     */
    md: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
    /**
     * Defines the vertical space between the type `item` components.
     * It overrides the value of the `spacing` prop.
     */
    rowSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
    /**
     * If a number, it sets the number of columns the grid item uses.
     * It can't be greater than the total number of columns of the container (12 by default).
     * If 'auto', the grid item's width matches its content.
     * If false, the prop is ignored.
     * If true, the grid item's width grows to use the space available in the grid container.
     * The value is applied for the `sm` breakpoint and wider screens if not overridden.
     * @default false
     */
    sm: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
    /**
     * Defines the space between the type `item` components.
     * It can only be used on a type `container` component.
     * @default 0
     */
    spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Defines the `flex-wrap` style property.
     * It's applied for all screen sizes.
     * @default 'wrap'
     */
    wrap: PropTypes.oneOf(['nowrap', 'wrap-reverse', 'wrap']),
    /**
     * If a number, it sets the number of columns the grid item uses.
     * It can't be greater than the total number of columns of the container (12 by default).
     * If 'auto', the grid item's width matches its content.
     * If false, the prop is ignored.
     * If true, the grid item's width grows to use the space available in the grid container.
     * The value is applied for the `xl` breakpoint and wider screens if not overridden.
     * @default false
     */
    xl: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
    /**
     * If a number, it sets the number of columns the grid item uses.
     * It can't be greater than the total number of columns of the container (12 by default).
     * If 'auto', the grid item's width matches its content.
     * If false, the prop is ignored.
     * If true, the grid item's width grows to use the space available in the grid container.
     * The value is applied for all the screen sizes with the lowest priority.
     * @default false
     */
    xs: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),
    /**
     * If `true`, it sets `min-width: 0` on the item.
     * Refer to the limitations section of the documentation to better understand the use case.
     * @default false
     */
    zeroMinWidth: PropTypes.bool
  } ;
  {
    const requireProp = requirePropFactory('Grid', Grid);
    // eslint-disable-next-line no-useless-concat
    Grid['propTypes' + ''] = _extends({}, Grid.propTypes, {
      direction: requireProp('container'),
      lg: requireProp('item'),
      md: requireProp('item'),
      sm: requireProp('item'),
      spacing: requireProp('container'),
      wrap: requireProp('container'),
      xs: requireProp('item'),
      zeroMinWidth: requireProp('item')
    });
  }
  var Grid$1 = Grid;

  const Grid2 = createGrid({
    createStyledComponent: styled$1('div', {
      name: 'MuiGrid2',
      slot: 'Root',
      overridesResolver: (props, styles) => styles.root
    }),
    componentName: 'MuiGrid2',
    useThemeProps: inProps => useThemeProps({
      props: inProps,
      name: 'MuiGrid2'
    })
  });
  Grid2.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * @ignore
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Grid2$1 = Grid2;

  function getGrid2UtilityClass(slot) {
    return generateUtilityClass('MuiGrid2', slot);
  }
  const SPACINGS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  const DIRECTIONS = ['column-reverse', 'column', 'row-reverse', 'row'];
  const WRAPS = ['nowrap', 'wrap-reverse', 'wrap'];
  const GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
  const grid2Classes = generateUtilityClasses('MuiGrid2', ['root', 'container', 'item', 'zeroMinWidth',
  // spacings
  ...SPACINGS.map(spacing => `spacing-xs-${spacing}`),
  // direction values
  ...DIRECTIONS.map(direction => `direction-xs-${direction}`),
  // wrap values
  ...WRAPS.map(wrap => `wrap-xs-${wrap}`),
  // grid sizes for all breakpoints
  ...GRID_SIZES.map(size => `grid-xs-${size}`), ...GRID_SIZES.map(size => `grid-sm-${size}`), ...GRID_SIZES.map(size => `grid-md-${size}`), ...GRID_SIZES.map(size => `grid-lg-${size}`), ...GRID_SIZES.map(size => `grid-xl-${size}`)]);
  var grid2Classes$1 = grid2Classes;

  const _excluded$1b = ["addEndListener", "appear", "children", "easing", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "style", "timeout", "TransitionComponent"];
  function getScale(value) {
    return `scale(${value}, ${value ** 2})`;
  }
  const styles$2 = {
    entering: {
      opacity: 1,
      transform: getScale(1)
    },
    entered: {
      opacity: 1,
      transform: 'none'
    }
  };

  /*
   TODO v6: remove
   Conditionally apply a workaround for the CSS transition bug in Safari 15.4 / WebKit browsers.
   */
  const isWebKit154 = typeof navigator !== 'undefined' && /^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent) && /(os |version\/)15(.|_)4/i.test(navigator.userAgent);

  /**
   * The Grow transition is used by the [Tooltip](/material-ui/react-tooltip/) and
   * [Popover](/material-ui/react-popover/) components.
   * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
   */
  const Grow = /*#__PURE__*/React__namespace.forwardRef(function Grow(props, ref) {
    const {
        addEndListener,
        appear = true,
        children,
        easing,
        in: inProp,
        onEnter,
        onEntered,
        onEntering,
        onExit,
        onExited,
        onExiting,
        style,
        timeout = 'auto',
        // eslint-disable-next-line react/prop-types
        TransitionComponent = Transition$1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1b);
    const timer = React__namespace.useRef();
    const autoTimeout = React__namespace.useRef();
    const theme = useTheme();
    const nodeRef = React__namespace.useRef(null);
    const handleRef = useForkRef(nodeRef, children.ref, ref);
    const normalizedTransitionCallback = callback => maybeIsAppearing => {
      if (callback) {
        const node = nodeRef.current;

        // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
        if (maybeIsAppearing === undefined) {
          callback(node);
        } else {
          callback(node, maybeIsAppearing);
        }
      }
    };
    const handleEntering = normalizedTransitionCallback(onEntering);
    const handleEnter = normalizedTransitionCallback((node, isAppearing) => {
      reflow(node); // So the animation always start from the start.

      const {
        duration: transitionDuration,
        delay,
        easing: transitionTimingFunction
      } = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'enter'
      });
      let duration;
      if (timeout === 'auto') {
        duration = theme.transitions.getAutoHeightDuration(node.clientHeight);
        autoTimeout.current = duration;
      } else {
        duration = transitionDuration;
      }
      node.style.transition = [theme.transitions.create('opacity', {
        duration,
        delay
      }), theme.transitions.create('transform', {
        duration: isWebKit154 ? duration : duration * 0.666,
        delay,
        easing: transitionTimingFunction
      })].join(',');
      if (onEnter) {
        onEnter(node, isAppearing);
      }
    });
    const handleEntered = normalizedTransitionCallback(onEntered);
    const handleExiting = normalizedTransitionCallback(onExiting);
    const handleExit = normalizedTransitionCallback(node => {
      const {
        duration: transitionDuration,
        delay,
        easing: transitionTimingFunction
      } = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'exit'
      });
      let duration;
      if (timeout === 'auto') {
        duration = theme.transitions.getAutoHeightDuration(node.clientHeight);
        autoTimeout.current = duration;
      } else {
        duration = transitionDuration;
      }
      node.style.transition = [theme.transitions.create('opacity', {
        duration,
        delay
      }), theme.transitions.create('transform', {
        duration: isWebKit154 ? duration : duration * 0.666,
        delay: isWebKit154 ? delay : delay || duration * 0.333,
        easing: transitionTimingFunction
      })].join(',');
      node.style.opacity = 0;
      node.style.transform = getScale(0.75);
      if (onExit) {
        onExit(node);
      }
    });
    const handleExited = normalizedTransitionCallback(onExited);
    const handleAddEndListener = next => {
      if (timeout === 'auto') {
        timer.current = setTimeout(next, autoTimeout.current || 0);
      }
      if (addEndListener) {
        // Old call signature before `react-transition-group` implemented `nodeRef`
        addEndListener(nodeRef.current, next);
      }
    };
    React__namespace.useEffect(() => {
      return () => {
        clearTimeout(timer.current);
      };
    }, []);
    return /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      appear: appear,
      in: inProp,
      nodeRef: nodeRef,
      onEnter: handleEnter,
      onEntered: handleEntered,
      onEntering: handleEntering,
      onExit: handleExit,
      onExited: handleExited,
      onExiting: handleExiting,
      addEndListener: handleAddEndListener,
      timeout: timeout === 'auto' ? null : timeout
    }, other, {
      children: (state, childProps) => {
        return /*#__PURE__*/React__namespace.cloneElement(children, _extends({
          style: _extends({
            opacity: 0,
            transform: getScale(0.75),
            visibility: state === 'exited' && !inProp ? 'hidden' : undefined
          }, styles$2[state], style, children.props.style),
          ref: handleRef
        }, childProps));
      }
    }));
  });
  Grow.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Add a custom transition end trigger. Called with the transitioning DOM
     * node and a done callback. Allows for more fine grained transition end
     * logic. Note: Timeouts are still used as a fallback if provided.
     */
    addEndListener: PropTypes.func,
    /**
     * Perform the enter transition when it first mounts if `in` is also `true`.
     * Set this to `false` to disable this behavior.
     * @default true
     */
    appear: PropTypes.bool,
    /**
     * A single child content element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * The transition timing function.
     * You may specify a single easing or a object containing enter and exit values.
     */
    easing: PropTypes.oneOfType([PropTypes.shape({
      enter: PropTypes.string,
      exit: PropTypes.string
    }), PropTypes.string]),
    /**
     * If `true`, the component will transition in.
     */
    in: PropTypes.bool,
    /**
     * @ignore
     */
    onEnter: PropTypes.func,
    /**
     * @ignore
     */
    onEntered: PropTypes.func,
    /**
     * @ignore
     */
    onEntering: PropTypes.func,
    /**
     * @ignore
     */
    onExit: PropTypes.func,
    /**
     * @ignore
     */
    onExited: PropTypes.func,
    /**
     * @ignore
     */
    onExiting: PropTypes.func,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     *
     * Set to 'auto' to automatically calculate transition time based on height.
     * @default 'auto'
     */
    timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })])
  } ;
  Grow.muiSupportAuto = true;
  var Grow$1 = Grow;

  /**
   * @deprecated Not used internally. Use `MediaQueryListEvent` from lib.dom.d.ts instead.
   */

  /**
   * @deprecated Not used internally. Use `MediaQueryList` from lib.dom.d.ts instead.
   */

  /**
   * @deprecated Not used internally. Use `(event: MediaQueryListEvent) => void` instead.
   */

  function useMediaQueryOld(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr) {
    const [match, setMatch] = React__namespace.useState(() => {
      if (noSsr && matchMedia) {
        return matchMedia(query).matches;
      }
      if (ssrMatchMedia) {
        return ssrMatchMedia(query).matches;
      }

      // Once the component is mounted, we rely on the
      // event listeners to return the correct matches value.
      return defaultMatches;
    });
    useEnhancedEffect$1(() => {
      let active = true;
      if (!matchMedia) {
        return undefined;
      }
      const queryList = matchMedia(query);
      const updateMatch = () => {
        // Workaround Safari wrong implementation of matchMedia
        // TODO can we remove it?
        // https://github.com/mui/material-ui/pull/17315#issuecomment-528286677
        if (active) {
          setMatch(queryList.matches);
        }
      };
      updateMatch();
      // TODO: Use `addEventListener` once support for Safari < 14 is dropped
      queryList.addListener(updateMatch);
      return () => {
        active = false;
        queryList.removeListener(updateMatch);
      };
    }, [query, matchMedia]);
    return match;
  }

  // eslint-disable-next-line no-useless-concat -- Workaround for https://github.com/webpack/webpack/issues/14814
  const maybeReactUseSyncExternalStore = React__namespace['useSyncExternalStore' + ''];
  function useMediaQueryNew(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr) {
    const getDefaultSnapshot = React__namespace.useCallback(() => defaultMatches, [defaultMatches]);
    const getServerSnapshot = React__namespace.useMemo(() => {
      if (noSsr && matchMedia) {
        return () => matchMedia(query).matches;
      }
      if (ssrMatchMedia !== null) {
        const {
          matches
        } = ssrMatchMedia(query);
        return () => matches;
      }
      return getDefaultSnapshot;
    }, [getDefaultSnapshot, query, ssrMatchMedia, noSsr, matchMedia]);
    const [getSnapshot, subscribe] = React__namespace.useMemo(() => {
      if (matchMedia === null) {
        return [getDefaultSnapshot, () => () => {}];
      }
      const mediaQueryList = matchMedia(query);
      return [() => mediaQueryList.matches, notify => {
        // TODO: Use `addEventListener` once support for Safari < 14 is dropped
        mediaQueryList.addListener(notify);
        return () => {
          mediaQueryList.removeListener(notify);
        };
      }];
    }, [getDefaultSnapshot, matchMedia, query]);
    const match = maybeReactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
    return match;
  }
  function useMediaQuery(queryInput, options = {}) {
    const theme = useTheme$3();
    // Wait for jsdom to support the match media feature.
    // All the browsers MUI support have this built-in.
    // This defensive check is here for simplicity.
    // Most of the time, the match media logic isn't central to people tests.
    const supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';
    const {
      defaultMatches = false,
      matchMedia = supportMatchMedia ? window.matchMedia : null,
      ssrMatchMedia = null,
      noSsr = false
    } = getThemeProps({
      name: 'MuiUseMediaQuery',
      props: options,
      theme
    });
    {
      if (typeof queryInput === 'function' && theme === null) {
        console.error(['MUI: The `query` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\n'));
      }
    }
    let query = typeof queryInput === 'function' ? queryInput(theme) : queryInput;
    query = query.replace(/^@media( ?)/m, '');

    // TODO: Drop `useMediaQueryOld` and use  `use-sync-external-store` shim in `useMediaQueryNew` once the package is stable
    const useMediaQueryImplementation = maybeReactUseSyncExternalStore !== undefined ? useMediaQueryNew : useMediaQueryOld;
    const match = useMediaQueryImplementation(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr);
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useDebugValue({
        query,
        match
      });
    }
    return match;
  }

  const _excluded$1a = ["initialWidth", "width"];
  const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];

  // By default, returns true if screen width is the same or greater than the given breakpoint.
  const isWidthUp = (breakpoint, width, inclusive = true) => {
    if (inclusive) {
      return breakpointKeys.indexOf(breakpoint) <= breakpointKeys.indexOf(width);
    }
    return breakpointKeys.indexOf(breakpoint) < breakpointKeys.indexOf(width);
  };

  // By default, returns true if screen width is less than the given breakpoint.
  const isWidthDown = (breakpoint, width, inclusive = false) => {
    if (inclusive) {
      return breakpointKeys.indexOf(width) <= breakpointKeys.indexOf(breakpoint);
    }
    return breakpointKeys.indexOf(width) < breakpointKeys.indexOf(breakpoint);
  };
  const withWidth = (options = {}) => Component => {
    const {
      withTheme: withThemeOption = false,
      noSSR = false,
      initialWidth: initialWidthOption
    } = options;
    function WithWidth(props) {
      const contextTheme = useTheme();
      const theme = props.theme || contextTheme;
      const _getThemeProps = getThemeProps({
          theme,
          name: 'MuiWithWidth',
          props
        }),
        {
          initialWidth,
          width
        } = _getThemeProps,
        other = _objectWithoutPropertiesLoose(_getThemeProps, _excluded$1a);
      const [mountedState, setMountedState] = React__namespace.useState(false);
      useEnhancedEffect$1(() => {
        setMountedState(true);
      }, []);

      /**
       * innerWidth |xs      sm      md      lg      xl
       *            |-------|-------|-------|-------|------>
       * width      |  xs   |  sm   |  md   |  lg   |  xl
       */
      const keys = theme.breakpoints.keys.slice().reverse();
      const widthComputed = keys.reduce((output, key) => {
        // eslint-disable-next-line react-hooks/rules-of-hooks
        const matches = useMediaQuery(theme.breakpoints.up(key));
        return !output && matches ? key : output;
      }, null);
      const more = _extends({
        width: width || (mountedState || noSSR ? widthComputed : undefined) || initialWidth || initialWidthOption
      }, withThemeOption ? {
        theme
      } : {}, other);

      // When rendering the component on the server,
      // we have no idea about the client browser screen width.
      // In order to prevent blinks and help the reconciliation of the React tree
      // we are not rendering the child component.
      //
      // An alternative is to use the `initialWidth` property.
      if (more.width === undefined) {
        return null;
      }
      return /*#__PURE__*/jsxRuntime_1(Component, _extends({}, more));
    }
    WithWidth.propTypes = {
      /**
       * As `window.innerWidth` is unavailable on the server,
       * we default to rendering an empty component during the first mount.
       * You might want to use a heuristic to approximate
       * the screen width of the client browser screen width.
       *
       * For instance, you could be using the user-agent or the client-hints.
       * https://caniuse.com/#search=client%20hint
       */
      initialWidth: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),
      /**
       * @ignore
       */
      theme: PropTypes.object,
      /**
       * Bypass the width calculation logic.
       */
      width: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl'])
    } ;
    {
      WithWidth.displayName = `WithWidth(${getDisplayName(Component)})`;
    }
    return WithWidth;
  };
  var withWidth$1 = withWidth;

  function HiddenJs(props) {
    const {
      children,
      only,
      width
    } = props;
    const theme = useTheme();
    let visible = true;

    // `only` check is faster to get out sooner if used.
    if (only) {
      if (Array.isArray(only)) {
        for (let i = 0; i < only.length; i += 1) {
          const breakpoint = only[i];
          if (width === breakpoint) {
            visible = false;
            break;
          }
        }
      } else if (only && width === only) {
        visible = false;
      }
    }

    // Allow `only` to be combined with other props. If already hidden, no need to check others.
    if (visible) {
      // determine visibility based on the smallest size up
      for (let i = 0; i < theme.breakpoints.keys.length; i += 1) {
        const breakpoint = theme.breakpoints.keys[i];
        const breakpointUp = props[`${breakpoint}Up`];
        const breakpointDown = props[`${breakpoint}Down`];
        if (breakpointUp && isWidthUp(breakpoint, width) || breakpointDown && isWidthDown(breakpoint, width)) {
          visible = false;
          break;
        }
      }
    }
    if (!visible) {
      return null;
    }
    return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
      children: children
    });
  }
  HiddenJs.propTypes = {
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * If `true`, screens this size and down are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    lgDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    lgUp: PropTypes.bool,
    /**
     * If `true`, screens this size and down are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    mdDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    mdUp: PropTypes.bool,
    /**
     * Hide the given breakpoint(s).
     */
    only: PropTypes.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), PropTypes.arrayOf(PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']))]),
    /**
     * If `true`, screens this size and down are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    smDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    smUp: PropTypes.bool,
    /**
     * @ignore
     * width prop provided by withWidth decorator.
     */
    width: PropTypes.string.isRequired,
    /**
     * If `true`, screens this size and down are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    xlDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    xlUp: PropTypes.bool,
    /**
     * If `true`, screens this size and down are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    xsDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    // eslint-disable-next-line react/no-unused-prop-types
    xsUp: PropTypes.bool
  } ;
  {
    HiddenJs.propTypes = exactProp(HiddenJs.propTypes) ;
  }
  var HiddenJs$1 = withWidth$1()(HiddenJs);

  function getHiddenCssUtilityClass(slot) {
    return generateUtilityClass('PrivateHiddenCss', slot);
  }
  generateUtilityClasses('PrivateHiddenCss', ['root', 'xlDown', 'xlUp', 'onlyXl', 'lgDown', 'lgUp', 'onlyLg', 'mdDown', 'mdUp', 'onlyMd', 'smDown', 'smUp', 'onlySm', 'xsDown', 'xsUp', 'onlyXs']);

  const _excluded$19 = ["children", "className", "only"];
  const useUtilityClasses$_ = ownerState => {
    const {
      classes,
      breakpoints
    } = ownerState;
    const slots = {
      root: ['root', ...breakpoints.map(({
        breakpoint,
        dir
      }) => {
        return dir === 'only' ? `${dir}${capitalize(breakpoint)}` : `${breakpoint}${capitalize(dir)}`;
      })]
    };
    return composeClasses(slots, getHiddenCssUtilityClass, classes);
  };
  const HiddenCssRoot = styled$1('div', {
    name: 'PrivateHiddenCss',
    slot: 'Root'
  })(({
    theme,
    ownerState
  }) => {
    const hidden = {
      display: 'none'
    };
    return _extends({}, ownerState.breakpoints.map(({
      breakpoint,
      dir
    }) => {
      if (dir === 'only') {
        return {
          [theme.breakpoints.only(breakpoint)]: hidden
        };
      }
      return dir === 'up' ? {
        [theme.breakpoints.up(breakpoint)]: hidden
      } : {
        [theme.breakpoints.down(breakpoint)]: hidden
      };
    }).reduce((r, o) => {
      Object.keys(o).forEach(k => {
        r[k] = o[k];
      });
      return r;
    }, {}));
  });

  /**
   * @ignore - internal component.
   */
  function HiddenCss(props) {
    const {
        children,
        className,
        only
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$19);
    const theme = useTheme();
    {
      const unknownProps = Object.keys(other).filter(propName => {
        const isUndeclaredBreakpoint = !theme.breakpoints.keys.some(breakpoint => {
          return `${breakpoint}Up` === propName || `${breakpoint}Down` === propName;
        });
        return !['classes', 'theme', 'isRtl', 'sx'].includes(propName) && isUndeclaredBreakpoint;
      });
      if (unknownProps.length > 0) {
        console.error(`MUI: Unsupported props received by \`<Hidden implementation="css" />\`: ${unknownProps.join(', ')}. Did you forget to wrap this component in a ThemeProvider declaring these breakpoints?`);
      }
    }
    const breakpoints = [];
    for (let i = 0; i < theme.breakpoints.keys.length; i += 1) {
      const breakpoint = theme.breakpoints.keys[i];
      const breakpointUp = other[`${breakpoint}Up`];
      const breakpointDown = other[`${breakpoint}Down`];
      if (breakpointUp) {
        breakpoints.push({
          breakpoint,
          dir: 'up'
        });
      }
      if (breakpointDown) {
        breakpoints.push({
          breakpoint,
          dir: 'down'
        });
      }
    }
    if (only) {
      const onlyBreakpoints = Array.isArray(only) ? only : [only];
      onlyBreakpoints.forEach(breakpoint => {
        breakpoints.push({
          breakpoint,
          dir: 'only'
        });
      });
    }
    const ownerState = _extends({}, props, {
      breakpoints
    });
    const classes = useUtilityClasses$_(ownerState);
    return /*#__PURE__*/jsxRuntime_1(HiddenCssRoot, {
      className: clsx(classes.root, className),
      ownerState: ownerState,
      children: children
    });
  }
  HiddenCss.propTypes = {
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Specify which implementation to use.  'js' is the default, 'css' works better for
     * server-side rendering.
     */
    implementation: PropTypes.oneOf(['js', 'css']),
    /**
     * If `true`, screens this size and down are hidden.
     */
    lgDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    lgUp: PropTypes.bool,
    /**
     * If `true`, screens this size and down are hidden.
     */
    mdDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    mdUp: PropTypes.bool,
    /**
     * Hide the given breakpoint(s).
     */
    only: PropTypes.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), PropTypes.arrayOf(PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']))]),
    /**
     * If `true`, screens this size and down are hidden.
     */
    smDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    smUp: PropTypes.bool,
    /**
     * If `true`, screens this size and down are hidden.
     */
    xlDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    xlUp: PropTypes.bool,
    /**
     * If `true`, screens this size and down are hidden.
     */
    xsDown: PropTypes.bool,
    /**
     * If `true`, screens this size and up are hidden.
     */
    xsUp: PropTypes.bool
  } ;

  const _excluded$18 = ["implementation", "lgDown", "lgUp", "mdDown", "mdUp", "smDown", "smUp", "xlDown", "xlUp", "xsDown", "xsUp"];
  function Hidden(props) {
    const {
        implementation = 'js',
        lgDown = false,
        lgUp = false,
        mdDown = false,
        mdUp = false,
        smDown = false,
        smUp = false,
        xlDown = false,
        xlUp = false,
        xsDown = false,
        xsUp = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$18);
    if (implementation === 'js') {
      return /*#__PURE__*/jsxRuntime_1(HiddenJs$1, _extends({
        lgDown: lgDown,
        lgUp: lgUp,
        mdDown: mdDown,
        mdUp: mdUp,
        smDown: smDown,
        smUp: smUp,
        xlDown: xlDown,
        xlUp: xlUp,
        xsDown: xsDown,
        xsUp: xsUp
      }, other));
    }
    return /*#__PURE__*/jsxRuntime_1(HiddenCss, _extends({
      lgDown: lgDown,
      lgUp: lgUp,
      mdDown: mdDown,
      mdUp: mdUp,
      smDown: smDown,
      smUp: smUp,
      xlDown: xlDown,
      xlUp: xlUp,
      xsDown: xsDown,
      xsUp: xsUp
    }, other));
  }
  Hidden.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Specify which implementation to use.  'js' is the default, 'css' works better for
     * server-side rendering.
     * @default 'js'
     */
    implementation: PropTypes.oneOf(['css', 'js']),
    /**
     * You can use this prop when choosing the `js` implementation with server-side rendering.
     *
     * As `window.innerWidth` is unavailable on the server,
     * we default to rendering an empty component during the first mount.
     * You might want to use a heuristic to approximate
     * the screen width of the client browser screen width.
     *
     * For instance, you could be using the user-agent or the client-hints.
     * https://caniuse.com/#search=client%20hint
     */
    initialWidth: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),
    /**
     * If `true`, component is hidden on screens below (but not including) this size.
     * @default false
     */
    lgDown: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens this size and above.
     * @default false
     */
    lgUp: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens below (but not including) this size.
     * @default false
     */
    mdDown: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens this size and above.
     * @default false
     */
    mdUp: PropTypes.bool,
    /**
     * Hide the given breakpoint(s).
     */
    only: PropTypes.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), PropTypes.arrayOf(PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']).isRequired)]),
    /**
     * If `true`, component is hidden on screens below (but not including) this size.
     * @default false
     */
    smDown: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens this size and above.
     * @default false
     */
    smUp: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens below (but not including) this size.
     * @default false
     */
    xlDown: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens this size and above.
     * @default false
     */
    xlUp: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens below (but not including) this size.
     * @default false
     */
    xsDown: PropTypes.bool,
    /**
     * If `true`, component is hidden on screens this size and above.
     * @default false
     */
    xsUp: PropTypes.bool
  } ;

  function getIconUtilityClass(slot) {
    return generateUtilityClass('MuiIcon', slot);
  }
  const iconClasses = generateUtilityClasses('MuiIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);
  var iconClasses$1 = iconClasses;

  const _excluded$17 = ["baseClassName", "className", "color", "component", "fontSize"];
  const useUtilityClasses$Z = ownerState => {
    const {
      color,
      fontSize,
      classes
    } = ownerState;
    const slots = {
      root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]
    };
    return composeClasses(slots, getIconUtilityClass, classes);
  };
  const IconRoot = styled$1('span', {
    name: 'MuiIcon',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];
    }
  })(({
    theme,
    ownerState
  }) => ({
    userSelect: 'none',
    width: '1em',
    height: '1em',
    // Chrome fix for https://bugs.chromium.org/p/chromium/issues/detail?id=820541
    // To remove at some point.
    overflow: 'hidden',
    display: 'inline-block',
    // allow overflow hidden to take action
    textAlign: 'center',
    // support non-square icon
    flexShrink: 0,
    fontSize: {
      inherit: 'inherit',
      small: theme.typography.pxToRem(20),
      medium: theme.typography.pxToRem(24),
      large: theme.typography.pxToRem(36)
    }[ownerState.fontSize],
    // TODO v5 deprecate, v6 remove for sx
    color: {
      primary: (theme.vars || theme).palette.primary.main,
      secondary: (theme.vars || theme).palette.secondary.main,
      info: (theme.vars || theme).palette.info.main,
      success: (theme.vars || theme).palette.success.main,
      warning: (theme.vars || theme).palette.warning.main,
      action: (theme.vars || theme).palette.action.active,
      error: (theme.vars || theme).palette.error.main,
      disabled: (theme.vars || theme).palette.action.disabled,
      inherit: undefined
    }[ownerState.color]
  }));
  const Icon = /*#__PURE__*/React__namespace.forwardRef(function Icon(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiIcon'
    });
    const {
        baseClassName = 'material-icons',
        className,
        color = 'inherit',
        component: Component = 'span',
        fontSize = 'medium'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$17);
    const ownerState = _extends({}, props, {
      baseClassName,
      color,
      component: Component,
      fontSize
    });
    const classes = useUtilityClasses$Z(ownerState);
    return /*#__PURE__*/jsxRuntime_1(IconRoot, _extends({
      as: Component,
      className: clsx(baseClassName,
      // Prevent the translation of the text content.
      // The font relies on the exact text content to render the icon.
      'notranslate', classes.root, className),
      ownerState: ownerState,
      "aria-hidden": true,
      ref: ref
    }, other));
  });
  Icon.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The base class applied to the icon. Defaults to 'material-icons', but can be changed to any
     * other base class that suits the icon font you're using (e.g. material-icons-rounded, fas, etc).
     * @default 'material-icons'
     */
    baseClassName: PropTypes.string,
    /**
     * The name of the icon font ligature.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'inherit'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.
     * @default 'medium'
     */
    fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  Icon.muiName = 'Icon';
  var Icon$1 = Icon;

  function getImageListUtilityClass(slot) {
    return generateUtilityClass('MuiImageList', slot);
  }
  const imageListClasses = generateUtilityClasses('MuiImageList', ['root', 'masonry', 'quilted', 'standard', 'woven']);
  var imageListClasses$1 = imageListClasses;

  /**
   * @ignore - internal component.
   * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}
   */
  const ImageListContext = /*#__PURE__*/React__namespace.createContext({});
  {
    ImageListContext.displayName = 'ImageListContext';
  }
  var ImageListContext$1 = ImageListContext;

  const _excluded$16 = ["children", "className", "cols", "component", "rowHeight", "gap", "style", "variant"];
  const useUtilityClasses$Y = ownerState => {
    const {
      classes,
      variant
    } = ownerState;
    const slots = {
      root: ['root', variant]
    };
    return composeClasses(slots, getImageListUtilityClass, classes);
  };
  const ImageListRoot = styled$1('ul', {
    name: 'MuiImageList',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant]];
    }
  })(({
    ownerState
  }) => {
    return _extends({
      display: 'grid',
      overflowY: 'auto',
      listStyle: 'none',
      padding: 0,
      // Add iOS momentum scrolling for iOS < 13.0
      WebkitOverflowScrolling: 'touch'
    }, ownerState.variant === 'masonry' && {
      display: 'block'
    });
  });
  const ImageList = /*#__PURE__*/React__namespace.forwardRef(function ImageList(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiImageList'
    });
    const {
        children,
        className,
        cols = 2,
        component = 'ul',
        rowHeight = 'auto',
        gap = 4,
        style: styleProp,
        variant = 'standard'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$16);
    const contextValue = React__namespace.useMemo(() => ({
      rowHeight,
      gap,
      variant
    }), [rowHeight, gap, variant]);
    React__namespace.useEffect(() => {
      {
        // Detect Internet Explorer 8+
        if (document !== undefined && 'objectFit' in document.documentElement.style === false) {
          console.error(['MUI: ImageList v5+ no longer natively supports Internet Explorer.', 'Use v4 of this component instead, or polyfill CSS object-fit.'].join('\n'));
        }
      }
    }, []);
    const style = variant === 'masonry' ? _extends({
      columnCount: cols,
      columnGap: gap
    }, styleProp) : _extends({
      gridTemplateColumns: `repeat(${cols}, 1fr)`,
      gap
    }, styleProp);
    const ownerState = _extends({}, props, {
      component,
      gap,
      rowHeight,
      variant
    });
    const classes = useUtilityClasses$Y(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ImageListRoot, _extends({
      as: component,
      className: clsx(classes.root, classes[variant], className),
      ref: ref,
      style: style,
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(ImageListContext$1.Provider, {
        value: contextValue,
        children: children
      })
    }));
  });
  ImageList.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally `ImageListItem`s.
     */
    children: PropTypes /* @typescript-to-proptypes-ignore */.node.isRequired,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Number of columns.
     * @default 2
     */
    cols: integerPropType,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The gap between items in px.
     * @default 4
     */
    gap: PropTypes.number,
    /**
     * The height of one row in px.
     * @default 'auto'
     */
    rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'standard'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['masonry', 'quilted', 'standard', 'woven']), PropTypes.string])
  } ;
  var ImageList$1 = ImageList;

  function getImageListItemUtilityClass(slot) {
    return generateUtilityClass('MuiImageListItem', slot);
  }
  const imageListItemClasses = generateUtilityClasses('MuiImageListItem', ['root', 'img', 'standard', 'woven', 'masonry', 'quilted']);
  var imageListItemClasses$1 = imageListItemClasses;

  const _excluded$15 = ["children", "className", "cols", "component", "rows", "style"];
  const useUtilityClasses$X = ownerState => {
    const {
      classes,
      variant
    } = ownerState;
    const slots = {
      root: ['root', variant],
      img: ['img']
    };
    return composeClasses(slots, getImageListItemUtilityClass, classes);
  };
  const ImageListItemRoot = styled$1('li', {
    name: 'MuiImageListItem',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${imageListItemClasses$1.img}`]: styles.img
      }, styles.root, styles[ownerState.variant]];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'block',
    position: 'relative'
  }, ownerState.variant === 'standard' && {
    // For titlebar under list item
    display: 'flex',
    flexDirection: 'column'
  }, ownerState.variant === 'woven' && {
    height: '100%',
    alignSelf: 'center',
    '&:nth-of-type(even)': {
      height: '70%'
    }
  }, {
    [`& .${imageListItemClasses$1.img}`]: _extends({
      objectFit: 'cover',
      width: '100%',
      height: '100%',
      display: 'block'
    }, ownerState.variant === 'standard' && {
      height: 'auto',
      flexGrow: 1
    })
  }));
  const ImageListItem = /*#__PURE__*/React__namespace.forwardRef(function ImageListItem(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiImageListItem'
    });

    // TODO: - Use jsdoc @default?: "cols rows default values are for docs only"
    const {
        children,
        className,
        cols = 1,
        component = 'li',
        rows = 1,
        style
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$15);
    const {
      rowHeight = 'auto',
      gap,
      variant
    } = React__namespace.useContext(ImageListContext$1);
    let height = 'auto';
    if (variant === 'woven') {
      height = undefined;
    } else if (rowHeight !== 'auto') {
      height = rowHeight * rows + gap * (rows - 1);
    }
    const ownerState = _extends({}, props, {
      cols,
      component,
      gap,
      rowHeight,
      rows,
      variant
    });
    const classes = useUtilityClasses$X(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ImageListItemRoot, _extends({
      as: component,
      className: clsx(classes.root, classes[variant], className),
      ref: ref,
      style: _extends({
        height,
        gridColumnEnd: variant !== 'masonry' ? `span ${cols}` : undefined,
        gridRowEnd: variant !== 'masonry' ? `span ${rows}` : undefined,
        marginBottom: variant === 'masonry' ? gap : undefined,
        breakInside: variant === 'masonry' ? 'avoid' : undefined
      }, style),
      ownerState: ownerState
    }, other, {
      children: React__namespace.Children.map(children, child => {
        if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
          return null;
        }
        {
          if (reactIs_2(child)) {
            console.error(["MUI: The ImageListItem component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
          }
        }
        if (child.type === 'img' || isMuiElement(child, ['Image'])) {
          return /*#__PURE__*/React__namespace.cloneElement(child, {
            className: clsx(classes.img, child.props.className)
          });
        }
        return child;
      })
    }));
  });
  ImageListItem.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally an `<img>`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Width of the item in number of grid columns.
     * @default 1
     */
    cols: integerPropType,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Height of the item in number of grid rows.
     * @default 1
     */
    rows: integerPropType,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ImageListItem$1 = ImageListItem;

  function getImageListItemBarUtilityClass(slot) {
    return generateUtilityClass('MuiImageListItemBar', slot);
  }
  const imageListItemBarClasses = generateUtilityClasses('MuiImageListItemBar', ['root', 'positionBottom', 'positionTop', 'positionBelow', 'titleWrap', 'titleWrapBottom', 'titleWrapTop', 'titleWrapBelow', 'titleWrapActionPosLeft', 'titleWrapActionPosRight', 'title', 'subtitle', 'actionIcon', 'actionIconActionPosLeft', 'actionIconActionPosRight']);
  var imageListItemBarClasses$1 = imageListItemBarClasses;

  const _excluded$14 = ["actionIcon", "actionPosition", "className", "subtitle", "title", "position"];
  const useUtilityClasses$W = ownerState => {
    const {
      classes,
      position,
      actionIcon,
      actionPosition
    } = ownerState;
    const slots = {
      root: ['root', `position${capitalize(position)}`],
      titleWrap: ['titleWrap', `titleWrap${capitalize(position)}`, actionIcon && `titleWrapActionPos${capitalize(actionPosition)}`],
      title: ['title'],
      subtitle: ['subtitle'],
      actionIcon: ['actionIcon', `actionIconActionPos${capitalize(actionPosition)}`]
    };
    return composeClasses(slots, getImageListItemBarUtilityClass, classes);
  };
  const ImageListItemBarRoot = styled$1('div', {
    name: 'MuiImageListItemBar',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`position${capitalize(ownerState.position)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    return _extends({
      position: 'absolute',
      left: 0,
      right: 0,
      background: 'rgba(0, 0, 0, 0.5)',
      display: 'flex',
      alignItems: 'center',
      fontFamily: theme.typography.fontFamily
    }, ownerState.position === 'bottom' && {
      bottom: 0
    }, ownerState.position === 'top' && {
      top: 0
    }, ownerState.position === 'below' && {
      position: 'relative',
      background: 'transparent',
      alignItems: 'normal'
    });
  });
  const ImageListItemBarTitleWrap = styled$1('div', {
    name: 'MuiImageListItemBar',
    slot: 'TitleWrap',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.titleWrap, styles[`titleWrap${capitalize(ownerState.position)}`], ownerState.actionIcon && styles[`titleWrapActionPos${capitalize(ownerState.actionPosition)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    return _extends({
      flexGrow: 1,
      padding: '12px 16px',
      color: (theme.vars || theme).palette.common.white,
      overflow: 'hidden'
    }, ownerState.position === 'below' && {
      padding: '6px 0 12px',
      color: 'inherit'
    }, ownerState.actionIcon && ownerState.actionPosition === 'left' && {
      paddingLeft: 0
    }, ownerState.actionIcon && ownerState.actionPosition === 'right' && {
      paddingRight: 0
    });
  });
  const ImageListItemBarTitle = styled$1('div', {
    name: 'MuiImageListItemBar',
    slot: 'Title',
    overridesResolver: (props, styles) => styles.title
  })(({
    theme
  }) => {
    return {
      fontSize: theme.typography.pxToRem(16),
      lineHeight: '24px',
      textOverflow: 'ellipsis',
      overflow: 'hidden',
      whiteSpace: 'nowrap'
    };
  });
  const ImageListItemBarSubtitle = styled$1('div', {
    name: 'MuiImageListItemBar',
    slot: 'Subtitle',
    overridesResolver: (props, styles) => styles.subtitle
  })(({
    theme
  }) => {
    return {
      fontSize: theme.typography.pxToRem(12),
      lineHeight: 1,
      textOverflow: 'ellipsis',
      overflow: 'hidden',
      whiteSpace: 'nowrap'
    };
  });
  const ImageListItemBarActionIcon = styled$1('div', {
    name: 'MuiImageListItemBar',
    slot: 'ActionIcon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.actionIcon, styles[`actionIconActionPos${capitalize(ownerState.actionPosition)}`]];
    }
  })(({
    ownerState
  }) => {
    return _extends({}, ownerState.actionPosition === 'left' && {
      order: -1
    });
  });
  const ImageListItemBar = /*#__PURE__*/React__namespace.forwardRef(function ImageListItemBar(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiImageListItemBar'
    });
    const {
        actionIcon,
        actionPosition = 'right',
        className,
        subtitle,
        title,
        position = 'bottom'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$14);
    const ownerState = _extends({}, props, {
      position,
      actionPosition
    });
    const classes = useUtilityClasses$W(ownerState);
    return /*#__PURE__*/jsxRuntime_2(ImageListItemBarRoot, _extends({
      ownerState: ownerState,
      className: clsx(classes.root, className),
      ref: ref
    }, other, {
      children: [/*#__PURE__*/jsxRuntime_2(ImageListItemBarTitleWrap, {
        ownerState: ownerState,
        className: classes.titleWrap,
        children: [/*#__PURE__*/jsxRuntime_1(ImageListItemBarTitle, {
          className: classes.title,
          children: title
        }), subtitle ? /*#__PURE__*/jsxRuntime_1(ImageListItemBarSubtitle, {
          className: classes.subtitle,
          children: subtitle
        }) : null]
      }), actionIcon ? /*#__PURE__*/jsxRuntime_1(ImageListItemBarActionIcon, {
        ownerState: ownerState,
        className: classes.actionIcon,
        children: actionIcon
      }) : null]
    }));
  });
  ImageListItemBar.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * An IconButton element to be used as secondary action target
     * (primary action target is the item itself).
     */
    actionIcon: PropTypes.node,
    /**
     * Position of secondary action IconButton.
     * @default 'right'
     */
    actionPosition: PropTypes.oneOf(['left', 'right']),
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Position of the title bar.
     * @default 'bottom'
     */
    position: PropTypes.oneOf(['below', 'bottom', 'top']),
    /**
     * String or element serving as subtitle (support text).
     */
    subtitle: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Title to be displayed.
     */
    title: PropTypes.node
  } ;
  var ImageListItemBar$1 = ImageListItemBar;

  const _excluded$13 = ["disableUnderline", "components", "componentsProps", "fullWidth", "inputComponent", "multiline", "slotProps", "slots", "type"];
  const useUtilityClasses$V = ownerState => {
    const {
      classes,
      disableUnderline
    } = ownerState;
    const slots = {
      root: ['root', !disableUnderline && 'underline'],
      input: ['input']
    };
    const composedClasses = composeClasses(slots, getInputUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const InputRoot = styled$1(InputBaseRoot, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiInput',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [...rootOverridesResolver(props, styles), !ownerState.disableUnderline && styles.underline];
    }
  })(({
    theme,
    ownerState
  }) => {
    const light = theme.palette.mode === 'light';
    let bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';
    if (theme.vars) {
      bottomLineColor = `rgba(${theme.vars.palette.common.onBackgroundChannel} / ${theme.vars.opacity.inputUnderline})`;
    }
    return _extends({
      position: 'relative'
    }, ownerState.formControl && {
      'label + &': {
        marginTop: 16
      }
    }, !ownerState.disableUnderline && {
      '&:after': {
        borderBottom: `2px solid ${(theme.vars || theme).palette[ownerState.color].main}`,
        left: 0,
        bottom: 0,
        // Doing the other way around crash on IE11 "''" https://github.com/cssinjs/jss/issues/242
        content: '""',
        position: 'absolute',
        right: 0,
        transform: 'scaleX(0)',
        transition: theme.transitions.create('transform', {
          duration: theme.transitions.duration.shorter,
          easing: theme.transitions.easing.easeOut
        }),
        pointerEvents: 'none' // Transparent to the hover style.
      },
      [`&.${inputClasses$1.focused}:after`]: {
        // translateX(0) is a workaround for Safari transform scale bug
        // See https://github.com/mui/material-ui/issues/31766
        transform: 'scaleX(1) translateX(0)'
      },
      [`&.${inputClasses$1.error}`]: {
        '&:before, &:after': {
          borderBottomColor: (theme.vars || theme).palette.error.main
        }
      },
      '&:before': {
        borderBottom: `1px solid ${bottomLineColor}`,
        left: 0,
        bottom: 0,
        // Doing the other way around crash on IE11 "''" https://github.com/cssinjs/jss/issues/242
        content: '"\\00a0"',
        position: 'absolute',
        right: 0,
        transition: theme.transitions.create('border-bottom-color', {
          duration: theme.transitions.duration.shorter
        }),
        pointerEvents: 'none' // Transparent to the hover style.
      },
      [`&:hover:not(.${inputClasses$1.disabled}, .${inputClasses$1.error}):before`]: {
        borderBottom: `2px solid ${(theme.vars || theme).palette.text.primary}`,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          borderBottom: `1px solid ${bottomLineColor}`
        }
      },
      [`&.${inputClasses$1.disabled}:before`]: {
        borderBottomStyle: 'dotted'
      }
    });
  });
  const InputInput = styled$1(InputBaseComponent, {
    name: 'MuiInput',
    slot: 'Input',
    overridesResolver: inputOverridesResolver
  })({});
  const Input = /*#__PURE__*/React__namespace.forwardRef(function Input(inProps, ref) {
    var _ref, _slots$root, _ref2, _slots$input;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiInput'
    });
    const {
        disableUnderline,
        components = {},
        componentsProps: componentsPropsProp,
        fullWidth = false,
        inputComponent = 'input',
        multiline = false,
        slotProps,
        slots = {},
        type = 'text'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$13);
    const classes = useUtilityClasses$V(props);
    const ownerState = {
      disableUnderline
    };
    const inputComponentsProps = {
      root: {
        ownerState
      }
    };
    const componentsProps = (slotProps != null ? slotProps : componentsPropsProp) ? deepmerge(slotProps != null ? slotProps : componentsPropsProp, inputComponentsProps) : inputComponentsProps;
    const RootSlot = (_ref = (_slots$root = slots.root) != null ? _slots$root : components.Root) != null ? _ref : InputRoot;
    const InputSlot = (_ref2 = (_slots$input = slots.input) != null ? _slots$input : components.Input) != null ? _ref2 : InputInput;
    return /*#__PURE__*/jsxRuntime_1(InputBase$1, _extends({
      slots: {
        root: RootSlot,
        input: InputSlot
      },
      slotProps: componentsProps,
      fullWidth: fullWidth,
      inputComponent: inputComponent,
      multiline: multiline,
      ref: ref,
      type: type
    }, other, {
      classes: classes
    }));
  });
  Input.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
     */
    autoComplete: PropTypes.string,
    /**
     * If `true`, the `input` element is focused during the first mount.
     */
    autoFocus: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Input: PropTypes.elementType,
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      input: PropTypes.object,
      root: PropTypes.object
    }),
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, the component is disabled.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the `input` will not have an underline.
     */
    disableUnderline: PropTypes.bool,
    /**
     * End `InputAdornment` for this component.
     */
    endAdornment: PropTypes.node,
    /**
     * If `true`, the `input` will indicate an error.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the `input` will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * The component used for the `input` element.
     * Either a string to use a HTML element or a component.
     * @default 'input'
     */
    inputComponent: PropTypes.elementType,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     * @default {}
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * If `dense`, will adjust vertical spacing. This is normally obtained via context from
     * FormControl.
     * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.
     */
    margin: PropTypes.oneOf(['dense', 'none']),
    /**
     * Maximum number of rows to display when multiline option is set to true.
     */
    maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Minimum number of rows to display when multiline option is set to true.
     */
    minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * If `true`, a [TextareaAutosize](/material-ui/react-textarea-autosize/) element is rendered.
     * @default false
     */
    multiline: PropTypes.bool,
    /**
     * Name attribute of the `input` element.
     */
    name: PropTypes.string,
    /**
     * Callback fired when the value is changed.
     *
     * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * The short hint displayed in the `input` before the user enters a value.
     */
    placeholder: PropTypes.string,
    /**
     * It prevents the user from changing the value of the field
     * (not from interacting with the field).
     */
    readOnly: PropTypes.bool,
    /**
     * If `true`, the `input` element is required.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    required: PropTypes.bool,
    /**
     * Number of rows to display when multiline option is set to true.
     */
    rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      input: PropTypes.object,
      root: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      input: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * Start `InputAdornment` for this component.
     */
    startAdornment: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
     * @default 'text'
     */
    type: PropTypes.string,
    /**
     * The value of the `input` element, required for a controlled component.
     */
    value: PropTypes.any
  } ;
  Input.muiName = 'Input';
  var Input$1 = Input;

  function getInputAdornmentUtilityClass(slot) {
    return generateUtilityClass('MuiInputAdornment', slot);
  }
  const inputAdornmentClasses = generateUtilityClasses('MuiInputAdornment', ['root', 'filled', 'standard', 'outlined', 'positionStart', 'positionEnd', 'disablePointerEvents', 'hiddenLabel', 'sizeSmall']);
  var inputAdornmentClasses$1 = inputAdornmentClasses;

  var _span$2;
  const _excluded$12 = ["children", "className", "component", "disablePointerEvents", "disableTypography", "position", "variant"];
  const overridesResolver$4 = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, styles[`position${capitalize(ownerState.position)}`], ownerState.disablePointerEvents === true && styles.disablePointerEvents, styles[ownerState.variant]];
  };
  const useUtilityClasses$U = ownerState => {
    const {
      classes,
      disablePointerEvents,
      hiddenLabel,
      position,
      size,
      variant
    } = ownerState;
    const slots = {
      root: ['root', disablePointerEvents && 'disablePointerEvents', position && `position${capitalize(position)}`, variant, hiddenLabel && 'hiddenLabel', size && `size${capitalize(size)}`]
    };
    return composeClasses(slots, getInputAdornmentUtilityClass, classes);
  };
  const InputAdornmentRoot = styled$1('div', {
    name: 'MuiInputAdornment',
    slot: 'Root',
    overridesResolver: overridesResolver$4
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'flex',
    height: '0.01em',
    // Fix IE11 flexbox alignment. To remove at some point.
    maxHeight: '2em',
    alignItems: 'center',
    whiteSpace: 'nowrap',
    color: (theme.vars || theme).palette.action.active
  }, ownerState.variant === 'filled' && {
    // Styles applied to the root element if `variant="filled"`.
    [`&.${inputAdornmentClasses$1.positionStart}&:not(.${inputAdornmentClasses$1.hiddenLabel})`]: {
      marginTop: 16
    }
  }, ownerState.position === 'start' && {
    // Styles applied to the root element if `position="start"`.
    marginRight: 8
  }, ownerState.position === 'end' && {
    // Styles applied to the root element if `position="end"`.
    marginLeft: 8
  }, ownerState.disablePointerEvents === true && {
    // Styles applied to the root element if `disablePointerEvents={true}`.
    pointerEvents: 'none'
  }));
  const InputAdornment = /*#__PURE__*/React__namespace.forwardRef(function InputAdornment(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiInputAdornment'
    });
    const {
        children,
        className,
        component = 'div',
        disablePointerEvents = false,
        disableTypography = false,
        position,
        variant: variantProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$12);
    const muiFormControl = useFormControl() || {};
    let variant = variantProp;
    if (variantProp && muiFormControl.variant) {
      {
        if (variantProp === muiFormControl.variant) {
          console.error('MUI: The `InputAdornment` variant infers the variant prop ' + 'you do not have to provide one.');
        }
      }
    }
    if (muiFormControl && !variant) {
      variant = muiFormControl.variant;
    }
    const ownerState = _extends({}, props, {
      hiddenLabel: muiFormControl.hiddenLabel,
      size: muiFormControl.size,
      disablePointerEvents,
      position,
      variant
    });
    const classes = useUtilityClasses$U(ownerState);
    return /*#__PURE__*/jsxRuntime_1(FormControlContext$1.Provider, {
      value: null,
      children: /*#__PURE__*/jsxRuntime_1(InputAdornmentRoot, _extends({
        as: component,
        ownerState: ownerState,
        className: clsx(classes.root, className),
        ref: ref
      }, other, {
        children: typeof children === 'string' && !disableTypography ? /*#__PURE__*/jsxRuntime_1(Typography$1, {
          color: "text.secondary",
          children: children
        }) : /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
          children: [position === 'start' ? ( /* notranslate needed while Google Translate will not fix zero-width space issue */_span$2 || (_span$2 = /*#__PURE__*/jsxRuntime_1("span", {
            className: "notranslate",
            children: "\u200B"
          }))) : null, children]
        })
      }))
    });
  });
  InputAdornment.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally an `IconButton` or string.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Disable pointer events on the root.
     * This allows for the content of the adornment to focus the `input` on click.
     * @default false
     */
    disablePointerEvents: PropTypes.bool,
    /**
     * If children is a string then disable wrapping in a Typography component.
     * @default false
     */
    disableTypography: PropTypes.bool,
    /**
     * The position this adornment should appear relative to the `Input`.
     */
    position: PropTypes.oneOf(['end', 'start']).isRequired,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * Note: If you are using the `TextField` component or the `FormControl` component
     * you do not have to set this manually.
     */
    variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
  } ;
  var InputAdornment$1 = InputAdornment;

  function getInputLabelUtilityClasses(slot) {
    return generateUtilityClass('MuiInputLabel', slot);
  }
  const inputLabelClasses = generateUtilityClasses('MuiInputLabel', ['root', 'focused', 'disabled', 'error', 'required', 'asterisk', 'formControl', 'sizeSmall', 'shrink', 'animated', 'standard', 'filled', 'outlined']);
  var inputLabelClasses$1 = inputLabelClasses;

  const _excluded$11 = ["disableAnimation", "margin", "shrink", "variant", "className"];
  const useUtilityClasses$T = ownerState => {
    const {
      classes,
      formControl,
      size,
      shrink,
      disableAnimation,
      variant,
      required
    } = ownerState;
    const slots = {
      root: ['root', formControl && 'formControl', !disableAnimation && 'animated', shrink && 'shrink', size && size !== 'normal' && `size${capitalize(size)}`, variant],
      asterisk: [required && 'asterisk']
    };
    const composedClasses = composeClasses(slots, getInputLabelUtilityClasses, classes);
    return _extends({}, classes, composedClasses);
  };
  const InputLabelRoot = styled$1(FormLabel$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiInputLabel',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${formLabelClasses$1.asterisk}`]: styles.asterisk
      }, styles.root, ownerState.formControl && styles.formControl, ownerState.size === 'small' && styles.sizeSmall, ownerState.shrink && styles.shrink, !ownerState.disableAnimation && styles.animated, ownerState.focused && styles.focused, styles[ownerState.variant]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'block',
    transformOrigin: 'top left',
    whiteSpace: 'nowrap',
    overflow: 'hidden',
    textOverflow: 'ellipsis',
    maxWidth: '100%'
  }, ownerState.formControl && {
    position: 'absolute',
    left: 0,
    top: 0,
    // slight alteration to spec spacing to match visual spec result
    transform: 'translate(0, 20px) scale(1)'
  }, ownerState.size === 'small' && {
    // Compensation for the `Input.inputSizeSmall` style.
    transform: 'translate(0, 17px) scale(1)'
  }, ownerState.shrink && {
    transform: 'translate(0, -1.5px) scale(0.75)',
    transformOrigin: 'top left',
    maxWidth: '133%'
  }, !ownerState.disableAnimation && {
    transition: theme.transitions.create(['color', 'transform', 'max-width'], {
      duration: theme.transitions.duration.shorter,
      easing: theme.transitions.easing.easeOut
    })
  }, ownerState.variant === 'filled' && _extends({
    // Chrome's autofill feature gives the input field a yellow background.
    // Since the input field is behind the label in the HTML tree,
    // the input field is drawn last and hides the label with an opaque background color.
    // zIndex: 1 will raise the label above opaque background-colors of input.
    zIndex: 1,
    pointerEvents: 'none',
    transform: 'translate(12px, 16px) scale(1)',
    maxWidth: 'calc(100% - 24px)'
  }, ownerState.size === 'small' && {
    transform: 'translate(12px, 13px) scale(1)'
  }, ownerState.shrink && _extends({
    userSelect: 'none',
    pointerEvents: 'auto',
    transform: 'translate(12px, 7px) scale(0.75)',
    maxWidth: 'calc(133% - 24px)'
  }, ownerState.size === 'small' && {
    transform: 'translate(12px, 4px) scale(0.75)'
  })), ownerState.variant === 'outlined' && _extends({
    // see comment above on filled.zIndex
    zIndex: 1,
    pointerEvents: 'none',
    transform: 'translate(14px, 16px) scale(1)',
    maxWidth: 'calc(100% - 24px)'
  }, ownerState.size === 'small' && {
    transform: 'translate(14px, 9px) scale(1)'
  }, ownerState.shrink && {
    userSelect: 'none',
    pointerEvents: 'auto',
    // Theoretically, we should have (8+5)*2/0.75 = 34px
    // but it feels a better when it bleeds a bit on the left, so 32px.
    maxWidth: 'calc(133% - 32px)',
    transform: 'translate(14px, -9px) scale(0.75)'
  })));
  const InputLabel = /*#__PURE__*/React__namespace.forwardRef(function InputLabel(inProps, ref) {
    const props = useThemeProps({
      name: 'MuiInputLabel',
      props: inProps
    });
    const {
        disableAnimation = false,
        shrink: shrinkProp,
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$11);
    const muiFormControl = useFormControl();
    let shrink = shrinkProp;
    if (typeof shrink === 'undefined' && muiFormControl) {
      shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;
    }
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['size', 'variant', 'required', 'focused']
    });
    const ownerState = _extends({}, props, {
      disableAnimation,
      formControl: muiFormControl,
      shrink,
      size: fcs.size,
      variant: fcs.variant,
      required: fcs.required,
      focused: fcs.focused
    });
    const classes = useUtilityClasses$T(ownerState);
    return /*#__PURE__*/jsxRuntime_1(InputLabelRoot, _extends({
      "data-shrink": shrink,
      ownerState: ownerState,
      ref: ref,
      className: clsx(classes.root, className)
    }, other, {
      classes: classes
    }));
  });
  InputLabel.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
    /**
     * If `true`, the transition animation is disabled.
     * @default false
     */
    disableAnimation: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the label is displayed in an error state.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the `input` of this label is focused.
     */
    focused: PropTypes.bool,
    /**
     * If `dense`, will adjust vertical spacing. This is normally obtained via context from
     * FormControl.
     */
    margin: PropTypes.oneOf(['dense']),
    /**
     * if `true`, the label will indicate that the `input` is required.
     */
    required: PropTypes.bool,
    /**
     * If `true`, the label is shrunk.
     */
    shrink: PropTypes.bool,
    /**
     * The size of the component.
     * @default 'normal'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['normal', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     */
    variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
  } ;
  var InputLabel$1 = InputLabel;

  function getLinearProgressUtilityClass(slot) {
    return generateUtilityClass('MuiLinearProgress', slot);
  }
  const linearProgressClasses = generateUtilityClasses('MuiLinearProgress', ['root', 'colorPrimary', 'colorSecondary', 'determinate', 'indeterminate', 'buffer', 'query', 'dashed', 'dashedColorPrimary', 'dashedColorSecondary', 'bar', 'barColorPrimary', 'barColorSecondary', 'bar1Indeterminate', 'bar1Determinate', 'bar1Buffer', 'bar2Indeterminate', 'bar2Buffer']);
  var linearProgressClasses$1 = linearProgressClasses;

  const _excluded$10 = ["className", "color", "value", "valueBuffer", "variant"];
  let _$1 = t => t,
    _t$1,
    _t2$1,
    _t3$1,
    _t4$1,
    _t5,
    _t6;
  const TRANSITION_DURATION = 4; // seconds
  const indeterminate1Keyframe = keyframes(_t$1 || (_t$1 = _$1`
  0% {
    left: -35%;
    right: 100%;
  }

  60% {
    left: 100%;
    right: -90%;
  }

  100% {
    left: 100%;
    right: -90%;
  }
`));
  const indeterminate2Keyframe = keyframes(_t2$1 || (_t2$1 = _$1`
  0% {
    left: -200%;
    right: 100%;
  }

  60% {
    left: 107%;
    right: -8%;
  }

  100% {
    left: 107%;
    right: -8%;
  }
`));
  const bufferKeyframe = keyframes(_t3$1 || (_t3$1 = _$1`
  0% {
    opacity: 1;
    background-position: 0 -23px;
  }

  60% {
    opacity: 0;
    background-position: 0 -23px;
  }

  100% {
    opacity: 1;
    background-position: -200px -23px;
  }
`));
  const useUtilityClasses$S = ownerState => {
    const {
      classes,
      variant,
      color
    } = ownerState;
    const slots = {
      root: ['root', `color${capitalize(color)}`, variant],
      dashed: ['dashed', `dashedColor${capitalize(color)}`],
      bar1: ['bar', `barColor${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar1Indeterminate', variant === 'determinate' && 'bar1Determinate', variant === 'buffer' && 'bar1Buffer'],
      bar2: ['bar', variant !== 'buffer' && `barColor${capitalize(color)}`, variant === 'buffer' && `color${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar2Indeterminate', variant === 'buffer' && 'bar2Buffer']
    };
    return composeClasses(slots, getLinearProgressUtilityClass, classes);
  };
  const getColorShade = (theme, color) => {
    if (color === 'inherit') {
      return 'currentColor';
    }
    if (theme.vars) {
      return theme.vars.palette.LinearProgress[`${color}Bg`];
    }
    return theme.palette.mode === 'light' ? lighten(theme.palette[color].main, 0.62) : darken(theme.palette[color].main, 0.5);
  };
  const LinearProgressRoot = styled$1('span', {
    name: 'MuiLinearProgress',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`color${capitalize(ownerState.color)}`], styles[ownerState.variant]];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    position: 'relative',
    overflow: 'hidden',
    display: 'block',
    height: 4,
    zIndex: 0,
    // Fix Safari's bug during composition of different paint.
    '@media print': {
      colorAdjust: 'exact'
    },
    backgroundColor: getColorShade(theme, ownerState.color)
  }, ownerState.color === 'inherit' && ownerState.variant !== 'buffer' && {
    backgroundColor: 'none',
    '&::before': {
      content: '""',
      position: 'absolute',
      left: 0,
      top: 0,
      right: 0,
      bottom: 0,
      backgroundColor: 'currentColor',
      opacity: 0.3
    }
  }, ownerState.variant === 'buffer' && {
    backgroundColor: 'transparent'
  }, ownerState.variant === 'query' && {
    transform: 'rotate(180deg)'
  }));
  const LinearProgressDashed = styled$1('span', {
    name: 'MuiLinearProgress',
    slot: 'Dashed',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.dashed, styles[`dashedColor${capitalize(ownerState.color)}`]];
    }
  })(({
    ownerState,
    theme
  }) => {
    const backgroundColor = getColorShade(theme, ownerState.color);
    return _extends({
      position: 'absolute',
      marginTop: 0,
      height: '100%',
      width: '100%'
    }, ownerState.color === 'inherit' && {
      opacity: 0.3
    }, {
      backgroundImage: `radial-gradient(${backgroundColor} 0%, ${backgroundColor} 16%, transparent 42%)`,
      backgroundSize: '10px 10px',
      backgroundPosition: '0 -23px'
    });
  }, css(_t4$1 || (_t4$1 = _$1`
    animation: ${0} 3s infinite linear;
  `), bufferKeyframe));
  const LinearProgressBar1 = styled$1('span', {
    name: 'MuiLinearProgress',
    slot: 'Bar1',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.bar, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar1Indeterminate, ownerState.variant === 'determinate' && styles.bar1Determinate, ownerState.variant === 'buffer' && styles.bar1Buffer];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    width: '100%',
    position: 'absolute',
    left: 0,
    bottom: 0,
    top: 0,
    transition: 'transform 0.2s linear',
    transformOrigin: 'left',
    backgroundColor: ownerState.color === 'inherit' ? 'currentColor' : (theme.vars || theme).palette[ownerState.color].main
  }, ownerState.variant === 'determinate' && {
    transition: `transform .${TRANSITION_DURATION}s linear`
  }, ownerState.variant === 'buffer' && {
    zIndex: 1,
    transition: `transform .${TRANSITION_DURATION}s linear`
  }), ({
    ownerState
  }) => (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && css(_t5 || (_t5 = _$1`
      width: auto;
      animation: ${0} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
    `), indeterminate1Keyframe));
  const LinearProgressBar2 = styled$1('span', {
    name: 'MuiLinearProgress',
    slot: 'Bar2',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.bar, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar2Indeterminate, ownerState.variant === 'buffer' && styles.bar2Buffer];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    width: '100%',
    position: 'absolute',
    left: 0,
    bottom: 0,
    top: 0,
    transition: 'transform 0.2s linear',
    transformOrigin: 'left'
  }, ownerState.variant !== 'buffer' && {
    backgroundColor: ownerState.color === 'inherit' ? 'currentColor' : (theme.vars || theme).palette[ownerState.color].main
  }, ownerState.color === 'inherit' && {
    opacity: 0.3
  }, ownerState.variant === 'buffer' && {
    backgroundColor: getColorShade(theme, ownerState.color),
    transition: `transform .${TRANSITION_DURATION}s linear`
  }), ({
    ownerState
  }) => (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && css(_t6 || (_t6 = _$1`
      width: auto;
      animation: ${0} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;
    `), indeterminate2Keyframe));

  /**
   * ## ARIA
   *
   * If the progress bar is describing the loading progress of a particular region of a page,
   * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`
   * attribute to `true` on that region until it has finished loading.
   */
  const LinearProgress = /*#__PURE__*/React__namespace.forwardRef(function LinearProgress(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiLinearProgress'
    });
    const {
        className,
        color = 'primary',
        value,
        valueBuffer,
        variant = 'indeterminate'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$10);
    const ownerState = _extends({}, props, {
      color,
      variant
    });
    const classes = useUtilityClasses$S(ownerState);
    const theme = useTheme();
    const rootProps = {};
    const inlineStyles = {
      bar1: {},
      bar2: {}
    };
    if (variant === 'determinate' || variant === 'buffer') {
      if (value !== undefined) {
        rootProps['aria-valuenow'] = Math.round(value);
        rootProps['aria-valuemin'] = 0;
        rootProps['aria-valuemax'] = 100;
        let transform = value - 100;
        if (theme.direction === 'rtl') {
          transform = -transform;
        }
        inlineStyles.bar1.transform = `translateX(${transform}%)`;
      } else {
        console.error('MUI: You need to provide a value prop ' + 'when using the determinate or buffer variant of LinearProgress .');
      }
    }
    if (variant === 'buffer') {
      if (valueBuffer !== undefined) {
        let transform = (valueBuffer || 0) - 100;
        if (theme.direction === 'rtl') {
          transform = -transform;
        }
        inlineStyles.bar2.transform = `translateX(${transform}%)`;
      } else {
        console.error('MUI: You need to provide a valueBuffer prop ' + 'when using the buffer variant of LinearProgress.');
      }
    }
    return /*#__PURE__*/jsxRuntime_2(LinearProgressRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      role: "progressbar"
    }, rootProps, {
      ref: ref
    }, other, {
      children: [variant === 'buffer' ? /*#__PURE__*/jsxRuntime_1(LinearProgressDashed, {
        className: classes.dashed,
        ownerState: ownerState
      }) : null, /*#__PURE__*/jsxRuntime_1(LinearProgressBar1, {
        className: classes.bar1,
        ownerState: ownerState,
        style: inlineStyles.bar1
      }), variant === 'determinate' ? null : /*#__PURE__*/jsxRuntime_1(LinearProgressBar2, {
        className: classes.bar2,
        ownerState: ownerState,
        style: inlineStyles.bar2
      })]
    }));
  });
  LinearProgress.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the progress indicator for the determinate and buffer variants.
     * Value between 0 and 100.
     */
    value: PropTypes.number,
    /**
     * The value for the buffer variant.
     * Value between 0 and 100.
     */
    valueBuffer: PropTypes.number,
    /**
     * The variant to use.
     * Use indeterminate or query when there is no progress value.
     * @default 'indeterminate'
     */
    variant: PropTypes.oneOf(['buffer', 'determinate', 'indeterminate', 'query'])
  } ;
  var LinearProgress$1 = LinearProgress;

  function getLinkUtilityClass(slot) {
    return generateUtilityClass('MuiLink', slot);
  }
  const linkClasses = generateUtilityClasses('MuiLink', ['root', 'underlineNone', 'underlineHover', 'underlineAlways', 'button', 'focusVisible']);
  var linkClasses$1 = linkClasses;

  const colorTransformations = {
    primary: 'primary.main',
    textPrimary: 'text.primary',
    secondary: 'secondary.main',
    textSecondary: 'text.secondary',
    error: 'error.main'
  };
  const transformDeprecatedColors = color => {
    return colorTransformations[color] || color;
  };
  const getTextDecoration = ({
    theme,
    ownerState
  }) => {
    const transformedColor = transformDeprecatedColors(ownerState.color);
    const color = getPath(theme, `palette.${transformedColor}`, false) || ownerState.color;
    const channelColor = getPath(theme, `palette.${transformedColor}Channel`);
    if ('vars' in theme && channelColor) {
      return `rgba(${channelColor} / 0.4)`;
    }
    return alpha(color, 0.4);
  };
  var getTextDecoration$1 = getTextDecoration;

  const _excluded$$ = ["className", "color", "component", "onBlur", "onFocus", "TypographyClasses", "underline", "variant", "sx"];
  const useUtilityClasses$R = ownerState => {
    const {
      classes,
      component,
      focusVisible,
      underline
    } = ownerState;
    const slots = {
      root: ['root', `underline${capitalize(underline)}`, component === 'button' && 'button', focusVisible && 'focusVisible']
    };
    return composeClasses(slots, getLinkUtilityClass, classes);
  };
  const LinkRoot = styled$1(Typography$1, {
    name: 'MuiLink',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`underline${capitalize(ownerState.underline)}`], ownerState.component === 'button' && styles.button];
    }
  })(({
    theme,
    ownerState
  }) => {
    return _extends({}, ownerState.underline === 'none' && {
      textDecoration: 'none'
    }, ownerState.underline === 'hover' && {
      textDecoration: 'none',
      '&:hover': {
        textDecoration: 'underline'
      }
    }, ownerState.underline === 'always' && _extends({
      textDecoration: 'underline'
    }, ownerState.color !== 'inherit' && {
      textDecorationColor: getTextDecoration$1({
        theme,
        ownerState
      })
    }, {
      '&:hover': {
        textDecorationColor: 'inherit'
      }
    }), ownerState.component === 'button' && {
      position: 'relative',
      WebkitTapHighlightColor: 'transparent',
      backgroundColor: 'transparent',
      // Reset default value
      // We disable the focus ring for mouse, touch and keyboard users.
      outline: 0,
      border: 0,
      margin: 0,
      // Remove the margin in Safari
      borderRadius: 0,
      padding: 0,
      // Remove the padding in Firefox
      cursor: 'pointer',
      userSelect: 'none',
      verticalAlign: 'middle',
      MozAppearance: 'none',
      // Reset
      WebkitAppearance: 'none',
      // Reset
      '&::-moz-focus-inner': {
        borderStyle: 'none' // Remove Firefox dotted outline.
      },
      [`&.${linkClasses$1.focusVisible}`]: {
        outline: 'auto'
      }
    });
  });
  const Link = /*#__PURE__*/React__namespace.forwardRef(function Link(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiLink'
    });
    const {
        className,
        color = 'primary',
        component = 'a',
        onBlur,
        onFocus,
        TypographyClasses,
        underline = 'always',
        variant = 'inherit',
        sx
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$$);
    const {
      isFocusVisibleRef,
      onBlur: handleBlurVisible,
      onFocus: handleFocusVisible,
      ref: focusVisibleRef
    } = useIsFocusVisible();
    const [focusVisible, setFocusVisible] = React__namespace.useState(false);
    const handlerRef = useForkRef(ref, focusVisibleRef);
    const handleBlur = event => {
      handleBlurVisible(event);
      if (isFocusVisibleRef.current === false) {
        setFocusVisible(false);
      }
      if (onBlur) {
        onBlur(event);
      }
    };
    const handleFocus = event => {
      handleFocusVisible(event);
      if (isFocusVisibleRef.current === true) {
        setFocusVisible(true);
      }
      if (onFocus) {
        onFocus(event);
      }
    };
    const ownerState = _extends({}, props, {
      color,
      component,
      focusVisible,
      underline,
      variant
    });
    const classes = useUtilityClasses$R(ownerState);
    return /*#__PURE__*/jsxRuntime_1(LinkRoot, _extends({
      color: color,
      className: clsx(classes.root, className),
      classes: TypographyClasses,
      component: component,
      onBlur: handleBlur,
      onFocus: handleFocus,
      ref: handlerRef,
      ownerState: ownerState,
      variant: variant,
      sx: [...(!Object.keys(colorTransformations).includes(color) ? [{
        color
      }] : []), ...(Array.isArray(sx) ? sx : [sx])]
    }, other));
  });
  Link.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the link.
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.any,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: elementTypeAcceptingRef$1,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * `classes` prop applied to the [`Typography`](/material-ui/api/typography/) element.
     */
    TypographyClasses: PropTypes.object,
    /**
     * Controls when the link should have an underline.
     * @default 'always'
     */
    underline: PropTypes.oneOf(['always', 'hover', 'none']),
    /**
     * Applies the theme typography styles.
     * @default 'inherit'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['body1', 'body2', 'button', 'caption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'inherit', 'overline', 'subtitle1', 'subtitle2']), PropTypes.string])
  } ;
  var Link$1 = Link;

  /**
   * @ignore - internal component.
   */
  const ListContext = /*#__PURE__*/React__namespace.createContext({});
  {
    ListContext.displayName = 'ListContext';
  }
  var ListContext$1 = ListContext;

  function getListUtilityClass(slot) {
    return generateUtilityClass('MuiList', slot);
  }
  const listClasses = generateUtilityClasses('MuiList', ['root', 'padding', 'dense', 'subheader']);
  var listClasses$1 = listClasses;

  const _excluded$_ = ["children", "className", "component", "dense", "disablePadding", "subheader"];
  const useUtilityClasses$Q = ownerState => {
    const {
      classes,
      disablePadding,
      dense,
      subheader
    } = ownerState;
    const slots = {
      root: ['root', !disablePadding && 'padding', dense && 'dense', subheader && 'subheader']
    };
    return composeClasses(slots, getListUtilityClass, classes);
  };
  const ListRoot = styled$1('ul', {
    name: 'MuiList',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.disablePadding && styles.padding, ownerState.dense && styles.dense, ownerState.subheader && styles.subheader];
    }
  })(({
    ownerState
  }) => _extends({
    listStyle: 'none',
    margin: 0,
    padding: 0,
    position: 'relative'
  }, !ownerState.disablePadding && {
    paddingTop: 8,
    paddingBottom: 8
  }, ownerState.subheader && {
    paddingTop: 0
  }));
  const List = /*#__PURE__*/React__namespace.forwardRef(function List(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiList'
    });
    const {
        children,
        className,
        component = 'ul',
        dense = false,
        disablePadding = false,
        subheader
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$_);
    const context = React__namespace.useMemo(() => ({
      dense
    }), [dense]);
    const ownerState = _extends({}, props, {
      component,
      dense,
      disablePadding
    });
    const classes = useUtilityClasses$Q(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ListContext$1.Provider, {
      value: context,
      children: /*#__PURE__*/jsxRuntime_2(ListRoot, _extends({
        as: component,
        className: clsx(classes.root, className),
        ref: ref,
        ownerState: ownerState
      }, other, {
        children: [subheader, children]
      }))
    });
  });
  List.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, compact vertical padding designed for keyboard and mouse input is used for
     * the list and list items.
     * The prop is available to descendant components as the `dense` context.
     * @default false
     */
    dense: PropTypes.bool,
    /**
     * If `true`, vertical padding is removed from the list.
     * @default false
     */
    disablePadding: PropTypes.bool,
    /**
     * The content of the subheader, normally `ListSubheader`.
     */
    subheader: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var List$1 = List;

  function getListItemUtilityClass(slot) {
    return generateUtilityClass('MuiListItem', slot);
  }
  const listItemClasses = generateUtilityClasses('MuiListItem', ['root', 'container', 'focusVisible', 'dense', 'alignItemsFlexStart', 'disabled', 'divider', 'gutters', 'padding', 'button', 'secondaryAction', 'selected']);
  var listItemClasses$1 = listItemClasses;

  function getListItemButtonUtilityClass(slot) {
    return generateUtilityClass('MuiListItemButton', slot);
  }
  const listItemButtonClasses = generateUtilityClasses('MuiListItemButton', ['root', 'focusVisible', 'dense', 'alignItemsFlexStart', 'disabled', 'divider', 'gutters', 'selected']);
  var listItemButtonClasses$1 = listItemButtonClasses;

  const _excluded$Z = ["alignItems", "autoFocus", "component", "children", "dense", "disableGutters", "divider", "focusVisibleClassName", "selected", "className"];
  const overridesResolver$3 = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, ownerState.dense && styles.dense, ownerState.alignItems === 'flex-start' && styles.alignItemsFlexStart, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters];
  };
  const useUtilityClasses$P = ownerState => {
    const {
      alignItems,
      classes,
      dense,
      disabled,
      disableGutters,
      divider,
      selected
    } = ownerState;
    const slots = {
      root: ['root', dense && 'dense', !disableGutters && 'gutters', divider && 'divider', disabled && 'disabled', alignItems === 'flex-start' && 'alignItemsFlexStart', selected && 'selected']
    };
    const composedClasses = composeClasses(slots, getListItemButtonUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const ListItemButtonRoot = styled$1(ButtonBase$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiListItemButton',
    slot: 'Root',
    overridesResolver: overridesResolver$3
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'flex',
    flexGrow: 1,
    justifyContent: 'flex-start',
    alignItems: 'center',
    position: 'relative',
    textDecoration: 'none',
    minWidth: 0,
    boxSizing: 'border-box',
    textAlign: 'left',
    paddingTop: 8,
    paddingBottom: 8,
    transition: theme.transitions.create('background-color', {
      duration: theme.transitions.duration.shortest
    }),
    '&:hover': {
      textDecoration: 'none',
      backgroundColor: (theme.vars || theme).palette.action.hover,
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    },
    [`&.${listItemButtonClasses$1.selected}`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
      [`&.${listItemButtonClasses$1.focusVisible}`]: {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
      }
    },
    [`&.${listItemButtonClasses$1.selected}:hover`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
      }
    },
    [`&.${listItemButtonClasses$1.focusVisible}`]: {
      backgroundColor: (theme.vars || theme).palette.action.focus
    },
    [`&.${listItemButtonClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity
    }
  }, ownerState.divider && {
    borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,
    backgroundClip: 'padding-box'
  }, ownerState.alignItems === 'flex-start' && {
    alignItems: 'flex-start'
  }, !ownerState.disableGutters && {
    paddingLeft: 16,
    paddingRight: 16
  }, ownerState.dense && {
    paddingTop: 4,
    paddingBottom: 4
  }));
  const ListItemButton = /*#__PURE__*/React__namespace.forwardRef(function ListItemButton(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListItemButton'
    });
    const {
        alignItems = 'center',
        autoFocus = false,
        component = 'div',
        children,
        dense = false,
        disableGutters = false,
        divider = false,
        focusVisibleClassName,
        selected = false,
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$Z);
    const context = React__namespace.useContext(ListContext$1);
    const childContext = React__namespace.useMemo(() => ({
      dense: dense || context.dense || false,
      alignItems,
      disableGutters
    }), [alignItems, context.dense, dense, disableGutters]);
    const listItemRef = React__namespace.useRef(null);
    useEnhancedEffect$1(() => {
      if (autoFocus) {
        if (listItemRef.current) {
          listItemRef.current.focus();
        } else {
          console.error('MUI: Unable to set focus to a ListItemButton whose component has not been rendered.');
        }
      }
    }, [autoFocus]);
    const ownerState = _extends({}, props, {
      alignItems,
      dense: childContext.dense,
      disableGutters,
      divider,
      selected
    });
    const classes = useUtilityClasses$P(ownerState);
    const handleRef = useForkRef(listItemRef, ref);
    return /*#__PURE__*/jsxRuntime_1(ListContext$1.Provider, {
      value: childContext,
      children: /*#__PURE__*/jsxRuntime_1(ListItemButtonRoot, _extends({
        ref: handleRef,
        href: other.href || other.to
        // `ButtonBase` processes `href` or `to` if `component` is set to 'button'
        ,
        component: (other.href || other.to) && component === 'div' ? 'button' : component,
        focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
        ownerState: ownerState,
        className: clsx(classes.root, className)
      }, other, {
        classes: classes,
        children: children
      }))
    });
  });
  ListItemButton.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Defines the `align-items` style property.
     * @default 'center'
     */
    alignItems: PropTypes.oneOf(['center', 'flex-start']),
    /**
     * If `true`, the list item is focused during the first mount.
     * Focus will also be triggered if the value changes from false to true.
     * @default false
     */
    autoFocus: PropTypes.bool,
    /**
     * The content of the component if a `ListItemSecondaryAction` is used it must
     * be the last child.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, compact vertical padding designed for keyboard and mouse input is used.
     * The prop defaults to the value inherited from the parent List component.
     * @default false
     */
    dense: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the left and right padding is removed.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * If `true`, a 1px light border is added to the bottom of the list item.
     * @default false
     */
    divider: PropTypes.bool,
    /**
     * This prop can help identify which element has keyboard focus.
     * The class name will be applied when the element gains the focus through keyboard interaction.
     * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).
     * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).
     * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components
     * if needed.
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * @ignore
     */
    href: PropTypes.string,
    /**
     * Use to apply selected styling.
     * @default false
     */
    selected: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ListItemButton$1 = ListItemButton;

  function getListItemSecondaryActionClassesUtilityClass(slot) {
    return generateUtilityClass('MuiListItemSecondaryAction', slot);
  }
  const listItemSecondaryActionClasses = generateUtilityClasses('MuiListItemSecondaryAction', ['root', 'disableGutters']);
  var listItemSecondaryActionClasses$1 = listItemSecondaryActionClasses;

  const _excluded$Y = ["className"];
  const useUtilityClasses$O = ownerState => {
    const {
      disableGutters,
      classes
    } = ownerState;
    const slots = {
      root: ['root', disableGutters && 'disableGutters']
    };
    return composeClasses(slots, getListItemSecondaryActionClassesUtilityClass, classes);
  };
  const ListItemSecondaryActionRoot = styled$1('div', {
    name: 'MuiListItemSecondaryAction',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.disableGutters && styles.disableGutters];
    }
  })(({
    ownerState
  }) => _extends({
    position: 'absolute',
    right: 16,
    top: '50%',
    transform: 'translateY(-50%)'
  }, ownerState.disableGutters && {
    right: 0
  }));

  /**
   * Must be used as the last child of ListItem to function properly.
   */
  const ListItemSecondaryAction = /*#__PURE__*/React__namespace.forwardRef(function ListItemSecondaryAction(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListItemSecondaryAction'
    });
    const {
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$Y);
    const context = React__namespace.useContext(ListContext$1);
    const ownerState = _extends({}, props, {
      disableGutters: context.disableGutters
    });
    const classes = useUtilityClasses$O(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ListItemSecondaryActionRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  ListItemSecondaryAction.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally an `IconButton` or selection control.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  ListItemSecondaryAction.muiName = 'ListItemSecondaryAction';
  var ListItemSecondaryAction$1 = ListItemSecondaryAction;

  const _excluded$X = ["className"],
    _excluded2$8 = ["alignItems", "autoFocus", "button", "children", "className", "component", "components", "componentsProps", "ContainerComponent", "ContainerProps", "dense", "disabled", "disableGutters", "disablePadding", "divider", "focusVisibleClassName", "secondaryAction", "selected", "slotProps", "slots"];
  const overridesResolver$2 = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, ownerState.dense && styles.dense, ownerState.alignItems === 'flex-start' && styles.alignItemsFlexStart, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters, !ownerState.disablePadding && styles.padding, ownerState.button && styles.button, ownerState.hasSecondaryAction && styles.secondaryAction];
  };
  const useUtilityClasses$N = ownerState => {
    const {
      alignItems,
      button,
      classes,
      dense,
      disabled,
      disableGutters,
      disablePadding,
      divider,
      hasSecondaryAction,
      selected
    } = ownerState;
    const slots = {
      root: ['root', dense && 'dense', !disableGutters && 'gutters', !disablePadding && 'padding', divider && 'divider', disabled && 'disabled', button && 'button', alignItems === 'flex-start' && 'alignItemsFlexStart', hasSecondaryAction && 'secondaryAction', selected && 'selected'],
      container: ['container']
    };
    return composeClasses(slots, getListItemUtilityClass, classes);
  };
  const ListItemRoot = styled$1('div', {
    name: 'MuiListItem',
    slot: 'Root',
    overridesResolver: overridesResolver$2
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'flex',
    justifyContent: 'flex-start',
    alignItems: 'center',
    position: 'relative',
    textDecoration: 'none',
    width: '100%',
    boxSizing: 'border-box',
    textAlign: 'left'
  }, !ownerState.disablePadding && _extends({
    paddingTop: 8,
    paddingBottom: 8
  }, ownerState.dense && {
    paddingTop: 4,
    paddingBottom: 4
  }, !ownerState.disableGutters && {
    paddingLeft: 16,
    paddingRight: 16
  }, !!ownerState.secondaryAction && {
    // Add some space to avoid collision as `ListItemSecondaryAction`
    // is absolutely positioned.
    paddingRight: 48
  }), !!ownerState.secondaryAction && {
    [`& > .${listItemButtonClasses$1.root}`]: {
      paddingRight: 48
    }
  }, {
    [`&.${listItemClasses$1.focusVisible}`]: {
      backgroundColor: (theme.vars || theme).palette.action.focus
    },
    [`&.${listItemClasses$1.selected}`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
      [`&.${listItemClasses$1.focusVisible}`]: {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
      }
    },
    [`&.${listItemClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity
    }
  }, ownerState.alignItems === 'flex-start' && {
    alignItems: 'flex-start'
  }, ownerState.divider && {
    borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,
    backgroundClip: 'padding-box'
  }, ownerState.button && {
    transition: theme.transitions.create('background-color', {
      duration: theme.transitions.duration.shortest
    }),
    '&:hover': {
      textDecoration: 'none',
      backgroundColor: (theme.vars || theme).palette.action.hover,
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    },
    [`&.${listItemClasses$1.selected}:hover`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
      }
    }
  }, ownerState.hasSecondaryAction && {
    // Add some space to avoid collision as `ListItemSecondaryAction`
    // is absolutely positioned.
    paddingRight: 48
  }));
  const ListItemContainer = styled$1('li', {
    name: 'MuiListItem',
    slot: 'Container',
    overridesResolver: (props, styles) => styles.container
  })({
    position: 'relative'
  });

  /**
   * Uses an additional container component if `ListItemSecondaryAction` is the last child.
   */
  const ListItem = /*#__PURE__*/React__namespace.forwardRef(function ListItem(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListItem'
    });
    const {
        alignItems = 'center',
        autoFocus = false,
        button = false,
        children: childrenProp,
        className,
        component: componentProp,
        components = {},
        componentsProps = {},
        ContainerComponent = 'li',
        ContainerProps: {
          className: ContainerClassName
        } = {},
        dense = false,
        disabled = false,
        disableGutters = false,
        disablePadding = false,
        divider = false,
        focusVisibleClassName,
        secondaryAction,
        selected = false,
        slotProps = {},
        slots = {}
      } = props,
      ContainerProps = _objectWithoutPropertiesLoose(props.ContainerProps, _excluded$X),
      other = _objectWithoutPropertiesLoose(props, _excluded2$8);
    const context = React__namespace.useContext(ListContext$1);
    const childContext = React__namespace.useMemo(() => ({
      dense: dense || context.dense || false,
      alignItems,
      disableGutters
    }), [alignItems, context.dense, dense, disableGutters]);
    const listItemRef = React__namespace.useRef(null);
    useEnhancedEffect$1(() => {
      if (autoFocus) {
        if (listItemRef.current) {
          listItemRef.current.focus();
        } else {
          console.error('MUI: Unable to set focus to a ListItem whose component has not been rendered.');
        }
      }
    }, [autoFocus]);
    const children = React__namespace.Children.toArray(childrenProp);

    // v4 implementation, deprecated in v5, will be removed in v6
    const hasSecondaryAction = children.length && isMuiElement(children[children.length - 1], ['ListItemSecondaryAction']);
    const ownerState = _extends({}, props, {
      alignItems,
      autoFocus,
      button,
      dense: childContext.dense,
      disabled,
      disableGutters,
      disablePadding,
      divider,
      hasSecondaryAction,
      selected
    });
    const classes = useUtilityClasses$N(ownerState);
    const handleRef = useForkRef(listItemRef, ref);
    const Root = slots.root || components.Root || ListItemRoot;
    const rootProps = slotProps.root || componentsProps.root || {};
    const componentProps = _extends({
      className: clsx(classes.root, rootProps.className, className),
      disabled
    }, other);
    let Component = componentProp || 'li';
    if (button) {
      componentProps.component = componentProp || 'div';
      componentProps.focusVisibleClassName = clsx(listItemClasses$1.focusVisible, focusVisibleClassName);
      Component = ButtonBase$1;
    }

    // v4 implementation, deprecated in v5, will be removed in v6
    if (hasSecondaryAction) {
      // Use div by default.
      Component = !componentProps.component && !componentProp ? 'div' : Component;

      // Avoid nesting of li > li.
      if (ContainerComponent === 'li') {
        if (Component === 'li') {
          Component = 'div';
        } else if (componentProps.component === 'li') {
          componentProps.component = 'div';
        }
      }
      return /*#__PURE__*/jsxRuntime_1(ListContext$1.Provider, {
        value: childContext,
        children: /*#__PURE__*/jsxRuntime_2(ListItemContainer, _extends({
          as: ContainerComponent,
          className: clsx(classes.container, ContainerClassName),
          ref: handleRef,
          ownerState: ownerState
        }, ContainerProps, {
          children: [/*#__PURE__*/jsxRuntime_1(Root, _extends({}, rootProps, !isHostComponent(Root) && {
            as: Component,
            ownerState: _extends({}, ownerState, rootProps.ownerState)
          }, componentProps, {
            children: children
          })), children.pop()]
        }))
      });
    }
    return /*#__PURE__*/jsxRuntime_1(ListContext$1.Provider, {
      value: childContext,
      children: /*#__PURE__*/jsxRuntime_2(Root, _extends({}, rootProps, {
        as: Component,
        ref: handleRef
      }, !isHostComponent(Root) && {
        ownerState: _extends({}, ownerState, rootProps.ownerState)
      }, componentProps, {
        children: [children, secondaryAction && /*#__PURE__*/jsxRuntime_1(ListItemSecondaryAction$1, {
          children: secondaryAction
        })]
      }))
    });
  });
  ListItem.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Defines the `align-items` style property.
     * @default 'center'
     */
    alignItems: PropTypes.oneOf(['center', 'flex-start']),
    /**
     * If `true`, the list item is focused during the first mount.
     * Focus will also be triggered if the value changes from false to true.
     * @default false
     * @deprecated checkout [ListItemButton](/material-ui/api/list-item-button/) instead
     */
    autoFocus: PropTypes.bool,
    /**
     * If `true`, the list item is a button (using `ButtonBase`). Props intended
     * for `ButtonBase` can then be applied to `ListItem`.
     * @default false
     * @deprecated checkout [ListItemButton](/material-ui/api/list-item-button/) instead
     */
    button: PropTypes.bool,
    /**
     * The content of the component if a `ListItemSecondaryAction` is used it must
     * be the last child.
     */
    children: chainPropTypes(PropTypes.node, props => {
      const children = React__namespace.Children.toArray(props.children);

      // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)
      let secondaryActionIndex = -1;
      for (let i = children.length - 1; i >= 0; i -= 1) {
        const child = children[i];
        if (isMuiElement(child, ['ListItemSecondaryAction'])) {
          secondaryActionIndex = i;
          break;
        }
      }

      //  is ListItemSecondaryAction the last child of ListItem
      if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {
        return new Error('MUI: You used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + 'you must pass it as the last child to ListItem.');
      }
      return null;
    }),
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Root: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      root: PropTypes.object
    }),
    /**
     * The container component used when a `ListItemSecondaryAction` is the last child.
     * @default 'li'
     * @deprecated
     */
    ContainerComponent: elementTypeAcceptingRef$1,
    /**
     * Props applied to the container component if used.
     * @default {}
     * @deprecated
     */
    ContainerProps: PropTypes.object,
    /**
     * If `true`, compact vertical padding designed for keyboard and mouse input is used.
     * The prop defaults to the value inherited from the parent List component.
     * @default false
     */
    dense: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     * @default false
     * @deprecated checkout [ListItemButton](/material-ui/api/list-item-button/) instead
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the left and right padding is removed.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * If `true`, all padding is removed.
     * @default false
     */
    disablePadding: PropTypes.bool,
    /**
     * If `true`, a 1px light border is added to the bottom of the list item.
     * @default false
     */
    divider: PropTypes.bool,
    /**
     * @ignore
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * The element to display at the end of ListItem.
     */
    secondaryAction: PropTypes.node,
    /**
     * Use to apply selected styling.
     * @default false
     * @deprecated checkout [ListItemButton](/material-ui/api/list-item-button/) instead
     */
    selected: PropTypes.bool,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      root: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ListItem$1 = ListItem;

  function getListItemAvatarUtilityClass(slot) {
    return generateUtilityClass('MuiListItemAvatar', slot);
  }
  const listItemAvatarClasses = generateUtilityClasses('MuiListItemAvatar', ['root', 'alignItemsFlexStart']);
  var listItemAvatarClasses$1 = listItemAvatarClasses;

  const _excluded$W = ["className"];
  const useUtilityClasses$M = ownerState => {
    const {
      alignItems,
      classes
    } = ownerState;
    const slots = {
      root: ['root', alignItems === 'flex-start' && 'alignItemsFlexStart']
    };
    return composeClasses(slots, getListItemAvatarUtilityClass, classes);
  };
  const ListItemAvatarRoot = styled$1('div', {
    name: 'MuiListItemAvatar',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.alignItems === 'flex-start' && styles.alignItemsFlexStart];
    }
  })(({
    ownerState
  }) => _extends({
    minWidth: 56,
    flexShrink: 0
  }, ownerState.alignItems === 'flex-start' && {
    marginTop: 8
  }));

  /**
   * A simple wrapper to apply `List` styles to an `Avatar`.
   */
  const ListItemAvatar = /*#__PURE__*/React__namespace.forwardRef(function ListItemAvatar(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListItemAvatar'
    });
    const {
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$W);
    const context = React__namespace.useContext(ListContext$1);
    const ownerState = _extends({}, props, {
      alignItems: context.alignItems
    });
    const classes = useUtilityClasses$M(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ListItemAvatarRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  ListItemAvatar.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally an `Avatar`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ListItemAvatar$1 = ListItemAvatar;

  function getListItemIconUtilityClass(slot) {
    return generateUtilityClass('MuiListItemIcon', slot);
  }
  const listItemIconClasses = generateUtilityClasses('MuiListItemIcon', ['root', 'alignItemsFlexStart']);
  var listItemIconClasses$1 = listItemIconClasses;

  const _excluded$V = ["className"];
  const useUtilityClasses$L = ownerState => {
    const {
      alignItems,
      classes
    } = ownerState;
    const slots = {
      root: ['root', alignItems === 'flex-start' && 'alignItemsFlexStart']
    };
    return composeClasses(slots, getListItemIconUtilityClass, classes);
  };
  const ListItemIconRoot = styled$1('div', {
    name: 'MuiListItemIcon',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.alignItems === 'flex-start' && styles.alignItemsFlexStart];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    minWidth: 56,
    color: (theme.vars || theme).palette.action.active,
    flexShrink: 0,
    display: 'inline-flex'
  }, ownerState.alignItems === 'flex-start' && {
    marginTop: 8
  }));

  /**
   * A simple wrapper to apply `List` styles to an `Icon` or `SvgIcon`.
   */
  const ListItemIcon = /*#__PURE__*/React__namespace.forwardRef(function ListItemIcon(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListItemIcon'
    });
    const {
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$V);
    const context = React__namespace.useContext(ListContext$1);
    const ownerState = _extends({}, props, {
      alignItems: context.alignItems
    });
    const classes = useUtilityClasses$L(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ListItemIconRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other));
  });
  ListItemIcon.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally `Icon`, `SvgIcon`,
     * or a `@mui/icons-material` SVG icon element.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ListItemIcon$1 = ListItemIcon;

  function getListItemTextUtilityClass(slot) {
    return generateUtilityClass('MuiListItemText', slot);
  }
  const listItemTextClasses = generateUtilityClasses('MuiListItemText', ['root', 'multiline', 'dense', 'inset', 'primary', 'secondary']);
  var listItemTextClasses$1 = listItemTextClasses;

  const _excluded$U = ["children", "className", "disableTypography", "inset", "primary", "primaryTypographyProps", "secondary", "secondaryTypographyProps"];
  const useUtilityClasses$K = ownerState => {
    const {
      classes,
      inset,
      primary,
      secondary,
      dense
    } = ownerState;
    const slots = {
      root: ['root', inset && 'inset', dense && 'dense', primary && secondary && 'multiline'],
      primary: ['primary'],
      secondary: ['secondary']
    };
    return composeClasses(slots, getListItemTextUtilityClass, classes);
  };
  const ListItemTextRoot = styled$1('div', {
    name: 'MuiListItemText',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${listItemTextClasses$1.primary}`]: styles.primary
      }, {
        [`& .${listItemTextClasses$1.secondary}`]: styles.secondary
      }, styles.root, ownerState.inset && styles.inset, ownerState.primary && ownerState.secondary && styles.multiline, ownerState.dense && styles.dense];
    }
  })(({
    ownerState
  }) => _extends({
    flex: '1 1 auto',
    minWidth: 0,
    marginTop: 4,
    marginBottom: 4
  }, ownerState.primary && ownerState.secondary && {
    marginTop: 6,
    marginBottom: 6
  }, ownerState.inset && {
    paddingLeft: 56
  }));
  const ListItemText = /*#__PURE__*/React__namespace.forwardRef(function ListItemText(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiListItemText'
    });
    const {
        children,
        className,
        disableTypography = false,
        inset = false,
        primary: primaryProp,
        primaryTypographyProps,
        secondary: secondaryProp,
        secondaryTypographyProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$U);
    const {
      dense
    } = React__namespace.useContext(ListContext$1);
    let primary = primaryProp != null ? primaryProp : children;
    let secondary = secondaryProp;
    const ownerState = _extends({}, props, {
      disableTypography,
      inset,
      primary: !!primary,
      secondary: !!secondary,
      dense
    });
    const classes = useUtilityClasses$K(ownerState);
    if (primary != null && primary.type !== Typography$1 && !disableTypography) {
      primary = /*#__PURE__*/jsxRuntime_1(Typography$1, _extends({
        variant: dense ? 'body2' : 'body1',
        className: classes.primary,
        component: primaryTypographyProps != null && primaryTypographyProps.variant ? undefined : 'span',
        display: "block"
      }, primaryTypographyProps, {
        children: primary
      }));
    }
    if (secondary != null && secondary.type !== Typography$1 && !disableTypography) {
      secondary = /*#__PURE__*/jsxRuntime_1(Typography$1, _extends({
        variant: "body2",
        className: classes.secondary,
        color: "text.secondary",
        display: "block"
      }, secondaryTypographyProps, {
        children: secondary
      }));
    }
    return /*#__PURE__*/jsxRuntime_2(ListItemTextRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other, {
      children: [primary, secondary]
    }));
  });
  ListItemText.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Alias for the `primary` prop.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the children won't be wrapped by a Typography component.
     * This can be useful to render an alternative Typography variant by wrapping
     * the `children` (or `primary`) text, and optional `secondary` text
     * with the Typography component.
     * @default false
     */
    disableTypography: PropTypes.bool,
    /**
     * If `true`, the children are indented.
     * This should be used if there is no left avatar or left icon.
     * @default false
     */
    inset: PropTypes.bool,
    /**
     * The main content element.
     */
    primary: PropTypes.node,
    /**
     * These props will be forwarded to the primary typography component
     * (as long as disableTypography is not `true`).
     */
    primaryTypographyProps: PropTypes.object,
    /**
     * The secondary content element.
     */
    secondary: PropTypes.node,
    /**
     * These props will be forwarded to the secondary typography component
     * (as long as disableTypography is not `true`).
     */
    secondaryTypographyProps: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ListItemText$1 = ListItemText;

  const _excluded$T = ["actions", "autoFocus", "autoFocusItem", "children", "className", "disabledItemsFocusable", "disableListWrap", "onKeyDown", "variant"];
  function nextItem$1(list, item, disableListWrap) {
    if (list === item) {
      return list.firstChild;
    }
    if (item && item.nextElementSibling) {
      return item.nextElementSibling;
    }
    return disableListWrap ? null : list.firstChild;
  }
  function previousItem$1(list, item, disableListWrap) {
    if (list === item) {
      return disableListWrap ? list.firstChild : list.lastChild;
    }
    if (item && item.previousElementSibling) {
      return item.previousElementSibling;
    }
    return disableListWrap ? null : list.lastChild;
  }
  function textCriteriaMatches(nextFocus, textCriteria) {
    if (textCriteria === undefined) {
      return true;
    }
    let text = nextFocus.innerText;
    if (text === undefined) {
      // jsdom doesn't support innerText
      text = nextFocus.textContent;
    }
    text = text.trim().toLowerCase();
    if (text.length === 0) {
      return false;
    }
    if (textCriteria.repeating) {
      return text[0] === textCriteria.keys[0];
    }
    return text.indexOf(textCriteria.keys.join('')) === 0;
  }
  function moveFocus$1(list, currentFocus, disableListWrap, disabledItemsFocusable, traversalFunction, textCriteria) {
    let wrappedOnce = false;
    let nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);
    while (nextFocus) {
      // Prevent infinite loop.
      if (nextFocus === list.firstChild) {
        if (wrappedOnce) {
          return false;
        }
        wrappedOnce = true;
      }

      // Same logic as useAutocomplete.js
      const nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';
      if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {
        // Move to the next element.
        nextFocus = traversalFunction(list, nextFocus, disableListWrap);
      } else {
        nextFocus.focus();
        return true;
      }
    }
    return false;
  }

  /**
   * A permanently displayed menu following https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/.
   * It's exposed to help customization of the [`Menu`](/material-ui/api/menu/) component if you
   * use it separately you need to move focus into the component manually. Once
   * the focus is placed inside the component it is fully keyboard accessible.
   */
  const MenuList = /*#__PURE__*/React__namespace.forwardRef(function MenuList(props, ref) {
    const {
        // private
        // eslint-disable-next-line react/prop-types
        actions,
        autoFocus = false,
        autoFocusItem = false,
        children,
        className,
        disabledItemsFocusable = false,
        disableListWrap = false,
        onKeyDown,
        variant = 'selectedMenu'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$T);
    const listRef = React__namespace.useRef(null);
    const textCriteriaRef = React__namespace.useRef({
      keys: [],
      repeating: true,
      previousKeyMatched: true,
      lastTime: null
    });
    useEnhancedEffect$1(() => {
      if (autoFocus) {
        listRef.current.focus();
      }
    }, [autoFocus]);
    React__namespace.useImperativeHandle(actions, () => ({
      adjustStyleForScrollbar: (containerElement, theme) => {
        // Let's ignore that piece of logic if users are already overriding the width
        // of the menu.
        const noExplicitWidth = !listRef.current.style.width;
        if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {
          const scrollbarSize = `${getScrollbarSize(ownerDocument(containerElement))}px`;
          listRef.current.style[theme.direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;
          listRef.current.style.width = `calc(100% + ${scrollbarSize})`;
        }
        return listRef.current;
      }
    }), []);
    const handleKeyDown = event => {
      const list = listRef.current;
      const key = event.key;
      /**
       * @type {Element} - will always be defined since we are in a keydown handler
       * attached to an element. A keydown event is either dispatched to the activeElement
       * or document.body or document.documentElement. Only the first case will
       * trigger this specific handler.
       */
      const currentFocus = ownerDocument(list).activeElement;
      if (key === 'ArrowDown') {
        // Prevent scroll of the page
        event.preventDefault();
        moveFocus$1(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem$1);
      } else if (key === 'ArrowUp') {
        event.preventDefault();
        moveFocus$1(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem$1);
      } else if (key === 'Home') {
        event.preventDefault();
        moveFocus$1(list, null, disableListWrap, disabledItemsFocusable, nextItem$1);
      } else if (key === 'End') {
        event.preventDefault();
        moveFocus$1(list, null, disableListWrap, disabledItemsFocusable, previousItem$1);
      } else if (key.length === 1) {
        const criteria = textCriteriaRef.current;
        const lowerKey = key.toLowerCase();
        const currTime = performance.now();
        if (criteria.keys.length > 0) {
          // Reset
          if (currTime - criteria.lastTime > 500) {
            criteria.keys = [];
            criteria.repeating = true;
            criteria.previousKeyMatched = true;
          } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {
            criteria.repeating = false;
          }
        }
        criteria.lastTime = currTime;
        criteria.keys.push(lowerKey);
        const keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);
        if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus$1(list, currentFocus, false, disabledItemsFocusable, nextItem$1, criteria))) {
          event.preventDefault();
        } else {
          criteria.previousKeyMatched = false;
        }
      }
      if (onKeyDown) {
        onKeyDown(event);
      }
    };
    const handleRef = useForkRef(listRef, ref);

    /**
     * the index of the item should receive focus
     * in a `variant="selectedMenu"` it's the first `selected` item
     * otherwise it's the very first item.
     */
    let activeItemIndex = -1;
    // since we inject focus related props into children we have to do a lookahead
    // to check if there is a `selected` item. We're looking for the last `selected`
    // item and use the first valid item as a fallback
    React__namespace.Children.forEach(children, (child, index) => {
      if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
        if (activeItemIndex === index) {
          activeItemIndex += 1;
          if (activeItemIndex >= children.length) {
            // there are no focusable items within the list.
            activeItemIndex = -1;
          }
        }
        return;
      }
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The Menu component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      if (!child.props.disabled) {
        if (variant === 'selectedMenu' && child.props.selected) {
          activeItemIndex = index;
        } else if (activeItemIndex === -1) {
          activeItemIndex = index;
        }
      }
      if (activeItemIndex === index && (child.props.disabled || child.props.muiSkipListHighlight || child.type.muiSkipListHighlight)) {
        activeItemIndex += 1;
        if (activeItemIndex >= children.length) {
          // there are no focusable items within the list.
          activeItemIndex = -1;
        }
      }
    });
    const items = React__namespace.Children.map(children, (child, index) => {
      if (index === activeItemIndex) {
        const newChildProps = {};
        if (autoFocusItem) {
          newChildProps.autoFocus = true;
        }
        if (child.props.tabIndex === undefined && variant === 'selectedMenu') {
          newChildProps.tabIndex = 0;
        }
        return /*#__PURE__*/React__namespace.cloneElement(child, newChildProps);
      }
      return child;
    });
    return /*#__PURE__*/jsxRuntime_1(List$1, _extends({
      role: "menu",
      ref: handleRef,
      className: className,
      onKeyDown: handleKeyDown,
      tabIndex: autoFocus ? 0 : -1
    }, other, {
      children: items
    }));
  });
  MenuList.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, will focus the `[role="menu"]` container and move into tab order.
     * @default false
     */
    autoFocus: PropTypes.bool,
    /**
     * If `true`, will focus the first menuitem if `variant="menu"` or selected item
     * if `variant="selectedMenu"`.
     * @default false
     */
    autoFocusItem: PropTypes.bool,
    /**
     * MenuList contents, normally `MenuItem`s.
     */
    children: PropTypes.node,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, will allow focus on disabled items.
     * @default false
     */
    disabledItemsFocusable: PropTypes.bool,
    /**
     * If `true`, the menu items will not wrap focus.
     * @default false
     */
    disableListWrap: PropTypes.bool,
    /**
     * @ignore
     */
    onKeyDown: PropTypes.func,
    /**
     * The variant to use. Use `menu` to prevent selected items from impacting the initial focus
     * and the vertical alignment relative to the anchor element.
     * @default 'selectedMenu'
     */
    variant: PropTypes.oneOf(['menu', 'selectedMenu'])
  } ;
  var MenuList$1 = MenuList;

  function getPopoverUtilityClass(slot) {
    return generateUtilityClass('MuiPopover', slot);
  }
  const popoverClasses = generateUtilityClasses('MuiPopover', ['root', 'paper']);
  var popoverClasses$1 = popoverClasses;

  const _excluded$S = ["onEntering"],
    _excluded2$7 = ["action", "anchorEl", "anchorOrigin", "anchorPosition", "anchorReference", "children", "className", "container", "elevation", "marginThreshold", "open", "PaperProps", "slots", "slotProps", "transformOrigin", "TransitionComponent", "transitionDuration", "TransitionProps", "disableScrollLock"],
    _excluded3$1 = ["slotProps"];
  function getOffsetTop(rect, vertical) {
    let offset = 0;
    if (typeof vertical === 'number') {
      offset = vertical;
    } else if (vertical === 'center') {
      offset = rect.height / 2;
    } else if (vertical === 'bottom') {
      offset = rect.height;
    }
    return offset;
  }
  function getOffsetLeft(rect, horizontal) {
    let offset = 0;
    if (typeof horizontal === 'number') {
      offset = horizontal;
    } else if (horizontal === 'center') {
      offset = rect.width / 2;
    } else if (horizontal === 'right') {
      offset = rect.width;
    }
    return offset;
  }
  function getTransformOriginValue(transformOrigin) {
    return [transformOrigin.horizontal, transformOrigin.vertical].map(n => typeof n === 'number' ? `${n}px` : n).join(' ');
  }
  function resolveAnchorEl(anchorEl) {
    return typeof anchorEl === 'function' ? anchorEl() : anchorEl;
  }
  const useUtilityClasses$J = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      paper: ['paper']
    };
    return composeClasses(slots, getPopoverUtilityClass, classes);
  };
  const PopoverRoot = styled$1(Modal$1, {
    name: 'MuiPopover',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({});
  const PopoverPaper = styled$1(Paper$1, {
    name: 'MuiPopover',
    slot: 'Paper',
    overridesResolver: (props, styles) => styles.paper
  })({
    position: 'absolute',
    overflowY: 'auto',
    overflowX: 'hidden',
    // So we see the popover when it's empty.
    // It's most likely on issue on userland.
    minWidth: 16,
    minHeight: 16,
    maxWidth: 'calc(100% - 32px)',
    maxHeight: 'calc(100% - 32px)',
    // We disable the focus ring for mouse, touch and keyboard users.
    outline: 0
  });
  const Popover = /*#__PURE__*/React__namespace.forwardRef(function Popover(inProps, ref) {
    var _slotProps$paper, _slots$root, _slots$paper;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiPopover'
    });
    const {
        action,
        anchorEl,
        anchorOrigin = {
          vertical: 'top',
          horizontal: 'left'
        },
        anchorPosition,
        anchorReference = 'anchorEl',
        children,
        className,
        container: containerProp,
        elevation = 8,
        marginThreshold = 16,
        open,
        PaperProps: PaperPropsProp = {},
        slots,
        slotProps,
        transformOrigin = {
          vertical: 'top',
          horizontal: 'left'
        },
        TransitionComponent = Grow$1,
        transitionDuration: transitionDurationProp = 'auto',
        TransitionProps: {
          onEntering
        } = {},
        disableScrollLock = false
      } = props,
      TransitionProps = _objectWithoutPropertiesLoose(props.TransitionProps, _excluded$S),
      other = _objectWithoutPropertiesLoose(props, _excluded2$7);
    const externalPaperSlotProps = (_slotProps$paper = slotProps == null ? void 0 : slotProps.paper) != null ? _slotProps$paper : PaperPropsProp;
    const paperRef = React__namespace.useRef();
    const handlePaperRef = useForkRef(paperRef, externalPaperSlotProps.ref);
    const ownerState = _extends({}, props, {
      anchorOrigin,
      anchorReference,
      elevation,
      marginThreshold,
      externalPaperSlotProps,
      transformOrigin,
      TransitionComponent,
      transitionDuration: transitionDurationProp,
      TransitionProps
    });
    const classes = useUtilityClasses$J(ownerState);

    // Returns the top/left offset of the position
    // to attach to on the anchor element (or body if none is provided)
    const getAnchorOffset = React__namespace.useCallback(() => {
      if (anchorReference === 'anchorPosition') {
        {
          if (!anchorPosition) {
            console.error('MUI: You need to provide a `anchorPosition` prop when using ' + '<Popover anchorReference="anchorPosition" />.');
          }
        }
        return anchorPosition;
      }
      const resolvedAnchorEl = resolveAnchorEl(anchorEl);

      // If an anchor element wasn't provided, just use the parent body element of this Popover
      const anchorElement = resolvedAnchorEl && resolvedAnchorEl.nodeType === 1 ? resolvedAnchorEl : ownerDocument(paperRef.current).body;
      const anchorRect = anchorElement.getBoundingClientRect();
      {
        const box = anchorElement.getBoundingClientRect();
        if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
          console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
        }
      }
      return {
        top: anchorRect.top + getOffsetTop(anchorRect, anchorOrigin.vertical),
        left: anchorRect.left + getOffsetLeft(anchorRect, anchorOrigin.horizontal)
      };
    }, [anchorEl, anchorOrigin.horizontal, anchorOrigin.vertical, anchorPosition, anchorReference]);

    // Returns the base transform origin using the element
    const getTransformOrigin = React__namespace.useCallback(elemRect => {
      return {
        vertical: getOffsetTop(elemRect, transformOrigin.vertical),
        horizontal: getOffsetLeft(elemRect, transformOrigin.horizontal)
      };
    }, [transformOrigin.horizontal, transformOrigin.vertical]);
    const getPositioningStyle = React__namespace.useCallback(element => {
      const elemRect = {
        width: element.offsetWidth,
        height: element.offsetHeight
      };

      // Get the transform origin point on the element itself
      const elemTransformOrigin = getTransformOrigin(elemRect);
      if (anchorReference === 'none') {
        return {
          top: null,
          left: null,
          transformOrigin: getTransformOriginValue(elemTransformOrigin)
        };
      }

      // Get the offset of the anchoring element
      const anchorOffset = getAnchorOffset();

      // Calculate element positioning
      let top = anchorOffset.top - elemTransformOrigin.vertical;
      let left = anchorOffset.left - elemTransformOrigin.horizontal;
      const bottom = top + elemRect.height;
      const right = left + elemRect.width;

      // Use the parent window of the anchorEl if provided
      const containerWindow = ownerWindow(resolveAnchorEl(anchorEl));

      // Window thresholds taking required margin into account
      const heightThreshold = containerWindow.innerHeight - marginThreshold;
      const widthThreshold = containerWindow.innerWidth - marginThreshold;

      // Check if the vertical axis needs shifting
      if (marginThreshold !== null && top < marginThreshold) {
        const diff = top - marginThreshold;
        top -= diff;
        elemTransformOrigin.vertical += diff;
      } else if (marginThreshold !== null && bottom > heightThreshold) {
        const diff = bottom - heightThreshold;
        top -= diff;
        elemTransformOrigin.vertical += diff;
      }
      {
        if (elemRect.height > heightThreshold && elemRect.height && heightThreshold) {
          console.error(['MUI: The popover component is too tall.', `Some part of it can not be seen on the screen (${elemRect.height - heightThreshold}px).`, 'Please consider adding a `max-height` to improve the user-experience.'].join('\n'));
        }
      }

      // Check if the horizontal axis needs shifting
      if (marginThreshold !== null && left < marginThreshold) {
        const diff = left - marginThreshold;
        left -= diff;
        elemTransformOrigin.horizontal += diff;
      } else if (right > widthThreshold) {
        const diff = right - widthThreshold;
        left -= diff;
        elemTransformOrigin.horizontal += diff;
      }
      return {
        top: `${Math.round(top)}px`,
        left: `${Math.round(left)}px`,
        transformOrigin: getTransformOriginValue(elemTransformOrigin)
      };
    }, [anchorEl, anchorReference, getAnchorOffset, getTransformOrigin, marginThreshold]);
    const [isPositioned, setIsPositioned] = React__namespace.useState(open);
    const setPositioningStyles = React__namespace.useCallback(() => {
      const element = paperRef.current;
      if (!element) {
        return;
      }
      const positioning = getPositioningStyle(element);
      if (positioning.top !== null) {
        element.style.top = positioning.top;
      }
      if (positioning.left !== null) {
        element.style.left = positioning.left;
      }
      element.style.transformOrigin = positioning.transformOrigin;
      setIsPositioned(true);
    }, [getPositioningStyle]);
    React__namespace.useEffect(() => {
      if (disableScrollLock) {
        window.addEventListener('scroll', setPositioningStyles);
      }
      return () => window.removeEventListener('scroll', setPositioningStyles);
    }, [anchorEl, disableScrollLock, setPositioningStyles]);
    const handleEntering = (element, isAppearing) => {
      if (onEntering) {
        onEntering(element, isAppearing);
      }
      setPositioningStyles();
    };
    const handleExited = () => {
      setIsPositioned(false);
    };
    React__namespace.useEffect(() => {
      if (open) {
        setPositioningStyles();
      }
    });
    React__namespace.useImperativeHandle(action, () => open ? {
      updatePosition: () => {
        setPositioningStyles();
      }
    } : null, [open, setPositioningStyles]);
    React__namespace.useEffect(() => {
      if (!open) {
        return undefined;
      }
      const handleResize = debounce$1(() => {
        setPositioningStyles();
      });
      const containerWindow = ownerWindow(anchorEl);
      containerWindow.addEventListener('resize', handleResize);
      return () => {
        handleResize.clear();
        containerWindow.removeEventListener('resize', handleResize);
      };
    }, [anchorEl, open, setPositioningStyles]);
    let transitionDuration = transitionDurationProp;
    if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {
      transitionDuration = undefined;
    }

    // If the container prop is provided, use that
    // If the anchorEl prop is provided, use its parent body element as the container
    // If neither are provided let the Modal take care of choosing the container
    const container = containerProp || (anchorEl ? ownerDocument(resolveAnchorEl(anchorEl)).body : undefined);
    const RootSlot = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : PopoverRoot;
    const PaperSlot = (_slots$paper = slots == null ? void 0 : slots.paper) != null ? _slots$paper : PopoverPaper;
    const paperProps = useSlotProps({
      elementType: PaperSlot,
      externalSlotProps: _extends({}, externalPaperSlotProps, {
        style: isPositioned ? externalPaperSlotProps.style : _extends({}, externalPaperSlotProps.style, {
          opacity: 0
        })
      }),
      additionalProps: {
        elevation,
        ref: handlePaperRef
      },
      ownerState,
      className: clsx(classes.paper, externalPaperSlotProps == null ? void 0 : externalPaperSlotProps.className)
    });
    const _useSlotProps = useSlotProps({
        elementType: RootSlot,
        externalSlotProps: (slotProps == null ? void 0 : slotProps.root) || {},
        externalForwardedProps: other,
        additionalProps: {
          ref,
          slotProps: {
            backdrop: {
              invisible: true
            }
          },
          container,
          open
        },
        ownerState,
        className: clsx(classes.root, className)
      }),
      {
        slotProps: rootSlotPropsProp
      } = _useSlotProps,
      rootProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded3$1);
    return /*#__PURE__*/jsxRuntime_1(RootSlot, _extends({}, rootProps, !isHostComponent(RootSlot) && {
      slotProps: rootSlotPropsProp,
      disableScrollLock
    }, {
      children: /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
        appear: true,
        in: open,
        onEntering: handleEntering,
        onExited: handleExited,
        timeout: transitionDuration
      }, TransitionProps, {
        children: /*#__PURE__*/jsxRuntime_1(PaperSlot, _extends({}, paperProps, {
          children: children
        }))
      }))
    }));
  });
  Popover.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * A ref for imperative actions.
     * It currently only supports updatePosition() action.
     */
    action: refType$1,
    /**
     * An HTML element, [PopoverVirtualElement](/material-ui/react-popover/#virtual-element),
     * or a function that returns either.
     * It's used to set the position of the popover.
     */
    anchorEl: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.func]), props => {
      if (props.open && (!props.anchorReference || props.anchorReference === 'anchorEl')) {
        const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);
        if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {
          const box = resolvedAnchorEl.getBoundingClientRect();
          if (box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
            return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
          }
        } else {
          return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', `It should be an Element or PopoverVirtualElement instance but it's \`${resolvedAnchorEl}\` instead.`].join('\n'));
        }
      }
      return null;
    }),
    /**
     * This is the point on the anchor where the popover's
     * `anchorEl` will attach to. This is not used when the
     * anchorReference is 'anchorPosition'.
     *
     * Options:
     * vertical: [top, center, bottom];
     * horizontal: [left, center, right].
     * @default {
     *   vertical: 'top',
     *   horizontal: 'left',
     * }
     */
    anchorOrigin: PropTypes.shape({
      horizontal: PropTypes.oneOfType([PropTypes.oneOf(['center', 'left', 'right']), PropTypes.number]).isRequired,
      vertical: PropTypes.oneOfType([PropTypes.oneOf(['bottom', 'center', 'top']), PropTypes.number]).isRequired
    }),
    /**
     * This is the position that may be used to set the position of the popover.
     * The coordinates are relative to the application's client area.
     */
    anchorPosition: PropTypes.shape({
      left: PropTypes.number.isRequired,
      top: PropTypes.number.isRequired
    }),
    /**
     * This determines which anchor prop to refer to when setting
     * the position of the popover.
     * @default 'anchorEl'
     */
    anchorReference: PropTypes.oneOf(['anchorEl', 'anchorPosition', 'none']),
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * An HTML element, component instance, or function that returns either.
     * The `container` will passed to the Modal component.
     *
     * By default, it uses the body of the anchorEl's top-level document object,
     * so it's simply `document.body` most of the time.
     */
    container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),
    /**
     * Disable the scroll lock behavior.
     * @default false
     */
    disableScrollLock: PropTypes.bool,
    /**
     * The elevation of the popover.
     * @default 8
     */
    elevation: integerPropType,
    /**
     * Specifies how close to the edge of the window the popover can appear.
     * If null, the popover will not be constrained by the window.
     * @default 16
     */
    marginThreshold: PropTypes.number,
    /**
     * Callback fired when the component requests to be closed.
     * The `reason` parameter can optionally be used to control the response to `onClose`.
     */
    onClose: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * Props applied to the [`Paper`](/material-ui/api/paper/) element.
     *
     * This prop is an alias for `slotProps.paper` and will be overriden by it if both are used.
     * @deprecated Use `slotProps.paper` instead.
     *
     * @default {}
     */
    PaperProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({
      component: elementTypeAcceptingRef$1
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      paper: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * This is the point on the popover which
     * will attach to the anchor's origin.
     *
     * Options:
     * vertical: [top, center, bottom, x(px)];
     * horizontal: [left, center, right, x(px)].
     * @default {
     *   vertical: 'top',
     *   horizontal: 'left',
     * }
     */
    transformOrigin: PropTypes.shape({
      horizontal: PropTypes.oneOfType([PropTypes.oneOf(['center', 'left', 'right']), PropTypes.number]).isRequired,
      vertical: PropTypes.oneOfType([PropTypes.oneOf(['bottom', 'center', 'top']), PropTypes.number]).isRequired
    }),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Grow
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * Set to 'auto' to automatically calculate transition time based on height.
     * @default 'auto'
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     * @default {}
     */
    TransitionProps: PropTypes.object
  } ;
  var Popover$1 = Popover;

  function getMenuUtilityClass(slot) {
    return generateUtilityClass('MuiMenu', slot);
  }
  const menuClasses = generateUtilityClasses('MuiMenu', ['root', 'paper', 'list']);
  var menuClasses$1 = menuClasses;

  const _excluded$R = ["onEntering"],
    _excluded2$6 = ["autoFocus", "children", "className", "disableAutoFocusItem", "MenuListProps", "onClose", "open", "PaperProps", "PopoverClasses", "transitionDuration", "TransitionProps", "variant", "slots", "slotProps"];
  const RTL_ORIGIN = {
    vertical: 'top',
    horizontal: 'right'
  };
  const LTR_ORIGIN = {
    vertical: 'top',
    horizontal: 'left'
  };
  const useUtilityClasses$I = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      paper: ['paper'],
      list: ['list']
    };
    return composeClasses(slots, getMenuUtilityClass, classes);
  };
  const MenuRoot = styled$1(Popover$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiMenu',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({});
  const MenuPaper = styled$1(PopoverPaper, {
    name: 'MuiMenu',
    slot: 'Paper',
    overridesResolver: (props, styles) => styles.paper
  })({
    // specZ: The maximum height of a simple menu should be one or more rows less than the view
    // height. This ensures a tappable area outside of the simple menu with which to dismiss
    // the menu.
    maxHeight: 'calc(100% - 96px)',
    // Add iOS momentum scrolling for iOS < 13.0
    WebkitOverflowScrolling: 'touch'
  });
  const MenuMenuList = styled$1(MenuList$1, {
    name: 'MuiMenu',
    slot: 'List',
    overridesResolver: (props, styles) => styles.list
  })({
    // We disable the focus ring for mouse, touch and keyboard users.
    outline: 0
  });
  const Menu = /*#__PURE__*/React__namespace.forwardRef(function Menu(inProps, ref) {
    var _slots$paper, _slotProps$paper;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiMenu'
    });
    const {
        autoFocus = true,
        children,
        className,
        disableAutoFocusItem = false,
        MenuListProps = {},
        onClose,
        open,
        PaperProps = {},
        PopoverClasses,
        transitionDuration = 'auto',
        TransitionProps: {
          onEntering
        } = {},
        variant = 'selectedMenu',
        slots = {},
        slotProps = {}
      } = props,
      TransitionProps = _objectWithoutPropertiesLoose(props.TransitionProps, _excluded$R),
      other = _objectWithoutPropertiesLoose(props, _excluded2$6);
    const theme = useTheme();
    const isRtl = theme.direction === 'rtl';
    const ownerState = _extends({}, props, {
      autoFocus,
      disableAutoFocusItem,
      MenuListProps,
      onEntering,
      PaperProps,
      transitionDuration,
      TransitionProps,
      variant
    });
    const classes = useUtilityClasses$I(ownerState);
    const autoFocusItem = autoFocus && !disableAutoFocusItem && open;
    const menuListActionsRef = React__namespace.useRef(null);
    const handleEntering = (element, isAppearing) => {
      if (menuListActionsRef.current) {
        menuListActionsRef.current.adjustStyleForScrollbar(element, theme);
      }
      if (onEntering) {
        onEntering(element, isAppearing);
      }
    };
    const handleListKeyDown = event => {
      if (event.key === 'Tab') {
        event.preventDefault();
        if (onClose) {
          onClose(event, 'tabKeyDown');
        }
      }
    };

    /**
     * the index of the item should receive focus
     * in a `variant="selectedMenu"` it's the first `selected` item
     * otherwise it's the very first item.
     */
    let activeItemIndex = -1;
    // since we inject focus related props into children we have to do a lookahead
    // to check if there is a `selected` item. We're looking for the last `selected`
    // item and use the first valid item as a fallback
    React__namespace.Children.map(children, (child, index) => {
      if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
        return;
      }
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The Menu component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      if (!child.props.disabled) {
        if (variant === 'selectedMenu' && child.props.selected) {
          activeItemIndex = index;
        } else if (activeItemIndex === -1) {
          activeItemIndex = index;
        }
      }
    });
    const PaperSlot = (_slots$paper = slots.paper) != null ? _slots$paper : MenuPaper;
    const paperExternalSlotProps = (_slotProps$paper = slotProps.paper) != null ? _slotProps$paper : PaperProps;
    const rootSlotProps = useSlotProps({
      elementType: slots.root,
      externalSlotProps: slotProps.root,
      ownerState,
      className: [classes.root, className]
    });
    const paperSlotProps = useSlotProps({
      elementType: PaperSlot,
      externalSlotProps: paperExternalSlotProps,
      ownerState,
      className: classes.paper
    });
    return /*#__PURE__*/jsxRuntime_1(MenuRoot, _extends({
      onClose: onClose,
      anchorOrigin: {
        vertical: 'bottom',
        horizontal: isRtl ? 'right' : 'left'
      },
      transformOrigin: isRtl ? RTL_ORIGIN : LTR_ORIGIN,
      slots: {
        paper: PaperSlot,
        root: slots.root
      },
      slotProps: {
        root: rootSlotProps,
        paper: paperSlotProps
      },
      open: open,
      ref: ref,
      transitionDuration: transitionDuration,
      TransitionProps: _extends({
        onEntering: handleEntering
      }, TransitionProps),
      ownerState: ownerState
    }, other, {
      classes: PopoverClasses,
      children: /*#__PURE__*/jsxRuntime_1(MenuMenuList, _extends({
        onKeyDown: handleListKeyDown,
        actions: menuListActionsRef,
        autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),
        autoFocusItem: autoFocusItem,
        variant: variant
      }, MenuListProps, {
        className: clsx(classes.list, MenuListProps.className),
        children: children
      }))
    }));
  });
  Menu.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * An HTML element, or a function that returns one.
     * It's used to set the position of the menu.
     */
    anchorEl: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),
    /**
     * If `true` (Default) will focus the `[role="menu"]` if no focusable child is found. Disabled
     * children are not focusable. If you set this prop to `false` focus will be placed
     * on the parent modal container. This has severe accessibility implications
     * and should only be considered if you manage focus otherwise.
     * @default true
     */
    autoFocus: PropTypes.bool,
    /**
     * Menu contents, normally `MenuItem`s.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * When opening the menu will not focus the active item but the `[role="menu"]`
     * unless `autoFocus` is also set to `false`. Not using the default means not
     * following WAI-ARIA authoring practices. Please be considerate about possible
     * accessibility implications.
     * @default false
     */
    disableAutoFocusItem: PropTypes.bool,
    /**
     * Props applied to the [`MenuList`](/material-ui/api/menu-list/) element.
     * @default {}
     */
    MenuListProps: PropTypes.object,
    /**
     * Callback fired when the component requests to be closed.
     *
     * @param {object} event The event source of the callback.
     * @param {string} reason Can be: `"escapeKeyDown"`, `"backdropClick"`, `"tabKeyDown"`.
     */
    onClose: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool.isRequired,
    /**
     * @ignore
     */
    PaperProps: PropTypes.object,
    /**
     * `classes` prop applied to the [`Popover`](/material-ui/api/popover/) element.
     */
    PopoverClasses: PropTypes.object,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      paper: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The length of the transition in `ms`, or 'auto'
     * @default 'auto'
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     * @default {}
     */
    TransitionProps: PropTypes.object,
    /**
     * The variant to use. Use `menu` to prevent selected items from impacting the initial focus.
     * @default 'selectedMenu'
     */
    variant: PropTypes.oneOf(['menu', 'selectedMenu'])
  } ;
  var Menu$1 = Menu;

  function getMenuItemUtilityClass(slot) {
    return generateUtilityClass('MuiMenuItem', slot);
  }
  const menuItemClasses = generateUtilityClasses('MuiMenuItem', ['root', 'focusVisible', 'dense', 'disabled', 'divider', 'gutters', 'selected']);
  var menuItemClasses$1 = menuItemClasses;

  const _excluded$Q = ["autoFocus", "component", "dense", "divider", "disableGutters", "focusVisibleClassName", "role", "tabIndex", "className"];
  const overridesResolver$1 = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, ownerState.dense && styles.dense, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters];
  };
  const useUtilityClasses$H = ownerState => {
    const {
      disabled,
      dense,
      divider,
      disableGutters,
      selected,
      classes
    } = ownerState;
    const slots = {
      root: ['root', dense && 'dense', disabled && 'disabled', !disableGutters && 'gutters', divider && 'divider', selected && 'selected']
    };
    const composedClasses = composeClasses(slots, getMenuItemUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const MenuItemRoot = styled$1(ButtonBase$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiMenuItem',
    slot: 'Root',
    overridesResolver: overridesResolver$1
  })(({
    theme,
    ownerState
  }) => _extends({}, theme.typography.body1, {
    display: 'flex',
    justifyContent: 'flex-start',
    alignItems: 'center',
    position: 'relative',
    textDecoration: 'none',
    minHeight: 48,
    paddingTop: 6,
    paddingBottom: 6,
    boxSizing: 'border-box',
    whiteSpace: 'nowrap'
  }, !ownerState.disableGutters && {
    paddingLeft: 16,
    paddingRight: 16
  }, ownerState.divider && {
    borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,
    backgroundClip: 'padding-box'
  }, {
    '&:hover': {
      textDecoration: 'none',
      backgroundColor: (theme.vars || theme).palette.action.hover,
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    },
    [`&.${menuItemClasses$1.selected}`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
      [`&.${menuItemClasses$1.focusVisible}`]: {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
      }
    },
    [`&.${menuItemClasses$1.selected}:hover`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
      }
    },
    [`&.${menuItemClasses$1.focusVisible}`]: {
      backgroundColor: (theme.vars || theme).palette.action.focus
    },
    [`&.${menuItemClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity
    },
    [`& + .${dividerClasses$1.root}`]: {
      marginTop: theme.spacing(1),
      marginBottom: theme.spacing(1)
    },
    [`& + .${dividerClasses$1.inset}`]: {
      marginLeft: 52
    },
    [`& .${listItemTextClasses$1.root}`]: {
      marginTop: 0,
      marginBottom: 0
    },
    [`& .${listItemTextClasses$1.inset}`]: {
      paddingLeft: 36
    },
    [`& .${listItemIconClasses$1.root}`]: {
      minWidth: 36
    }
  }, !ownerState.dense && {
    [theme.breakpoints.up('sm')]: {
      minHeight: 'auto'
    }
  }, ownerState.dense && _extends({
    minHeight: 32,
    // https://m2.material.io/components/menus#specs > Dense
    paddingTop: 4,
    paddingBottom: 4
  }, theme.typography.body2, {
    [`& .${listItemIconClasses$1.root} svg`]: {
      fontSize: '1.25rem'
    }
  })));
  const MenuItem = /*#__PURE__*/React__namespace.forwardRef(function MenuItem(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiMenuItem'
    });
    const {
        autoFocus = false,
        component = 'li',
        dense = false,
        divider = false,
        disableGutters = false,
        focusVisibleClassName,
        role = 'menuitem',
        tabIndex: tabIndexProp,
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$Q);
    const context = React__namespace.useContext(ListContext$1);
    const childContext = React__namespace.useMemo(() => ({
      dense: dense || context.dense || false,
      disableGutters
    }), [context.dense, dense, disableGutters]);
    const menuItemRef = React__namespace.useRef(null);
    useEnhancedEffect$1(() => {
      if (autoFocus) {
        if (menuItemRef.current) {
          menuItemRef.current.focus();
        } else {
          console.error('MUI: Unable to set focus to a MenuItem whose component has not been rendered.');
        }
      }
    }, [autoFocus]);
    const ownerState = _extends({}, props, {
      dense: childContext.dense,
      divider,
      disableGutters
    });
    const classes = useUtilityClasses$H(props);
    const handleRef = useForkRef(menuItemRef, ref);
    let tabIndex;
    if (!props.disabled) {
      tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;
    }
    return /*#__PURE__*/jsxRuntime_1(ListContext$1.Provider, {
      value: childContext,
      children: /*#__PURE__*/jsxRuntime_1(MenuItemRoot, _extends({
        ref: handleRef,
        role: role,
        tabIndex: tabIndex,
        component: component,
        focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
        className: clsx(classes.root, className)
      }, other, {
        ownerState: ownerState,
        classes: classes
      }))
    });
  });
  MenuItem.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the list item is focused during the first mount.
     * Focus will also be triggered if the value changes from false to true.
     * @default false
     */
    autoFocus: PropTypes.bool,
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, compact vertical padding designed for keyboard and mouse input is used.
     * The prop defaults to the value inherited from the parent Menu component.
     * @default false
     */
    dense: PropTypes.bool,
    /**
     * @ignore
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the left and right padding is removed.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * If `true`, a 1px light border is added to the bottom of the menu item.
     * @default false
     */
    divider: PropTypes.bool,
    /**
     * This prop can help identify which element has keyboard focus.
     * The class name will be applied when the element gains the focus through keyboard interaction.
     * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).
     * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).
     * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components
     * if needed.
     */
    focusVisibleClassName: PropTypes.string,
    /**
     * @ignore
     */
    role: PropTypes /* @typescript-to-proptypes-ignore */.string,
    /**
     * If `true`, the component is selected.
     * @default false
     */
    selected: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * @default 0
     */
    tabIndex: PropTypes.number
  } ;
  var MenuItem$1 = MenuItem;

  function getMobileStepperUtilityClass(slot) {
    return generateUtilityClass('MuiMobileStepper', slot);
  }
  const mobileStepperClasses = generateUtilityClasses('MuiMobileStepper', ['root', 'positionBottom', 'positionTop', 'positionStatic', 'dots', 'dot', 'dotActive', 'progress']);
  var mobileStepperClasses$1 = mobileStepperClasses;

  const _excluded$P = ["activeStep", "backButton", "className", "LinearProgressProps", "nextButton", "position", "steps", "variant"];
  const useUtilityClasses$G = ownerState => {
    const {
      classes,
      position
    } = ownerState;
    const slots = {
      root: ['root', `position${capitalize(position)}`],
      dots: ['dots'],
      dot: ['dot'],
      dotActive: ['dotActive'],
      progress: ['progress']
    };
    return composeClasses(slots, getMobileStepperUtilityClass, classes);
  };
  const MobileStepperRoot = styled$1(Paper$1, {
    name: 'MuiMobileStepper',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`position${capitalize(ownerState.position)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'flex',
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    background: (theme.vars || theme).palette.background.default,
    padding: 8
  }, ownerState.position === 'bottom' && {
    position: 'fixed',
    bottom: 0,
    left: 0,
    right: 0,
    zIndex: (theme.vars || theme).zIndex.mobileStepper
  }, ownerState.position === 'top' && {
    position: 'fixed',
    top: 0,
    left: 0,
    right: 0,
    zIndex: (theme.vars || theme).zIndex.mobileStepper
  }));
  const MobileStepperDots = styled$1('div', {
    name: 'MuiMobileStepper',
    slot: 'Dots',
    overridesResolver: (props, styles) => styles.dots
  })(({
    ownerState
  }) => _extends({}, ownerState.variant === 'dots' && {
    display: 'flex',
    flexDirection: 'row'
  }));
  const MobileStepperDot = styled$1('div', {
    name: 'MuiMobileStepper',
    slot: 'Dot',
    shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'dotActive',
    overridesResolver: (props, styles) => {
      const {
        dotActive
      } = props;
      return [styles.dot, dotActive && styles.dotActive];
    }
  })(({
    theme,
    ownerState,
    dotActive
  }) => _extends({}, ownerState.variant === 'dots' && _extends({
    transition: theme.transitions.create('background-color', {
      duration: theme.transitions.duration.shortest
    }),
    backgroundColor: (theme.vars || theme).palette.action.disabled,
    borderRadius: '50%',
    width: 8,
    height: 8,
    margin: '0 2px'
  }, dotActive && {
    backgroundColor: (theme.vars || theme).palette.primary.main
  })));
  const MobileStepperProgress = styled$1(LinearProgress$1, {
    name: 'MuiMobileStepper',
    slot: 'Progress',
    overridesResolver: (props, styles) => styles.progress
  })(({
    ownerState
  }) => _extends({}, ownerState.variant === 'progress' && {
    width: '50%'
  }));
  const MobileStepper = /*#__PURE__*/React__namespace.forwardRef(function MobileStepper(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiMobileStepper'
    });
    const {
        activeStep = 0,
        backButton,
        className,
        LinearProgressProps,
        nextButton,
        position = 'bottom',
        steps,
        variant = 'dots'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$P);
    const ownerState = _extends({}, props, {
      activeStep,
      position,
      variant
    });
    let value;
    if (variant === 'progress') {
      if (steps === 1) {
        value = 100;
      } else {
        value = Math.ceil(activeStep / (steps - 1) * 100);
      }
    }
    const classes = useUtilityClasses$G(ownerState);
    return /*#__PURE__*/jsxRuntime_2(MobileStepperRoot, _extends({
      square: true,
      elevation: 0,
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [backButton, variant === 'text' && /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
        children: [activeStep + 1, " / ", steps]
      }), variant === 'dots' && /*#__PURE__*/jsxRuntime_1(MobileStepperDots, {
        ownerState: ownerState,
        className: classes.dots,
        children: [...new Array(steps)].map((_, index) => /*#__PURE__*/jsxRuntime_1(MobileStepperDot, {
          className: clsx(classes.dot, index === activeStep && classes.dotActive),
          ownerState: ownerState,
          dotActive: index === activeStep
        }, index))
      }), variant === 'progress' && /*#__PURE__*/jsxRuntime_1(MobileStepperProgress, _extends({
        ownerState: ownerState,
        className: classes.progress,
        variant: "determinate",
        value: value
      }, LinearProgressProps)), nextButton]
    }));
  });
  MobileStepper.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Set the active step (zero based index).
     * Defines which dot is highlighted when the variant is 'dots'.
     * @default 0
     */
    activeStep: integerPropType,
    /**
     * A back button element. For instance, it can be a `Button` or an `IconButton`.
     */
    backButton: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Props applied to the `LinearProgress` element.
     */
    LinearProgressProps: PropTypes.object,
    /**
     * A next button element. For instance, it can be a `Button` or an `IconButton`.
     */
    nextButton: PropTypes.node,
    /**
     * Set the positioning type.
     * @default 'bottom'
     */
    position: PropTypes.oneOf(['bottom', 'static', 'top']),
    /**
     * The total steps.
     */
    steps: integerPropType.isRequired,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'dots'
     */
    variant: PropTypes.oneOf(['dots', 'progress', 'text'])
  } ;
  var MobileStepper$1 = MobileStepper;

  function getNativeSelectUtilityClasses(slot) {
    return generateUtilityClass('MuiNativeSelect', slot);
  }
  const nativeSelectClasses = generateUtilityClasses('MuiNativeSelect', ['root', 'select', 'multiple', 'filled', 'outlined', 'standard', 'disabled', 'icon', 'iconOpen', 'iconFilled', 'iconOutlined', 'iconStandard', 'nativeInput', 'error']);
  var nativeSelectClasses$1 = nativeSelectClasses;

  const _excluded$O = ["className", "disabled", "error", "IconComponent", "inputRef", "variant"];
  const useUtilityClasses$F = ownerState => {
    const {
      classes,
      variant,
      disabled,
      multiple,
      open,
      error
    } = ownerState;
    const slots = {
      select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],
      icon: ['icon', `icon${capitalize(variant)}`, open && 'iconOpen', disabled && 'disabled']
    };
    return composeClasses(slots, getNativeSelectUtilityClasses, classes);
  };
  const nativeSelectSelectStyles = ({
    ownerState,
    theme
  }) => _extends({
    MozAppearance: 'none',
    // Reset
    WebkitAppearance: 'none',
    // Reset
    // When interacting quickly, the text can end up selected.
    // Native select can't be selected either.
    userSelect: 'none',
    borderRadius: 0,
    // Reset
    cursor: 'pointer',
    '&:focus': _extends({}, theme.vars ? {
      backgroundColor: `rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.05)`
    } : {
      backgroundColor: theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.05)' : 'rgba(255, 255, 255, 0.05)'
    }, {
      borderRadius: 0 // Reset Chrome style
    }),
    // Remove IE11 arrow
    '&::-ms-expand': {
      display: 'none'
    },
    [`&.${nativeSelectClasses$1.disabled}`]: {
      cursor: 'default'
    },
    '&[multiple]': {
      height: 'auto'
    },
    '&:not([multiple]) option, &:not([multiple]) optgroup': {
      backgroundColor: (theme.vars || theme).palette.background.paper
    },
    // Bump specificity to allow extending custom inputs
    '&&&': {
      paddingRight: 24,
      minWidth: 16 // So it doesn't collapse.
    }
  }, ownerState.variant === 'filled' && {
    '&&&': {
      paddingRight: 32
    }
  }, ownerState.variant === 'outlined' && {
    borderRadius: (theme.vars || theme).shape.borderRadius,
    '&:focus': {
      borderRadius: (theme.vars || theme).shape.borderRadius // Reset the reset for Chrome style
    },
    '&&&': {
      paddingRight: 32
    }
  });
  const NativeSelectSelect = styled$1('select', {
    name: 'MuiNativeSelect',
    slot: 'Select',
    shouldForwardProp: rootShouldForwardProp,
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.select, styles[ownerState.variant], ownerState.error && styles.error, {
        [`&.${nativeSelectClasses$1.multiple}`]: styles.multiple
      }];
    }
  })(nativeSelectSelectStyles);
  const nativeSelectIconStyles = ({
    ownerState,
    theme
  }) => _extends({
    // We use a position absolute over a flexbox in order to forward the pointer events
    // to the input and to support wrapping tags..
    position: 'absolute',
    right: 0,
    top: 'calc(50% - .5em)',
    // Center vertically, height is 1em
    pointerEvents: 'none',
    // Don't block pointer events on the select under the icon.
    color: (theme.vars || theme).palette.action.active,
    [`&.${nativeSelectClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.action.disabled
    }
  }, ownerState.open && {
    transform: 'rotate(180deg)'
  }, ownerState.variant === 'filled' && {
    right: 7
  }, ownerState.variant === 'outlined' && {
    right: 7
  });
  const NativeSelectIcon = styled$1('svg', {
    name: 'MuiNativeSelect',
    slot: 'Icon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.icon, ownerState.variant && styles[`icon${capitalize(ownerState.variant)}`], ownerState.open && styles.iconOpen];
    }
  })(nativeSelectIconStyles);

  /**
   * @ignore - internal component.
   */
  const NativeSelectInput = /*#__PURE__*/React__namespace.forwardRef(function NativeSelectInput(props, ref) {
    const {
        className,
        disabled,
        error,
        IconComponent,
        inputRef,
        variant = 'standard'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$O);
    const ownerState = _extends({}, props, {
      disabled,
      variant,
      error
    });
    const classes = useUtilityClasses$F(ownerState);
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1(NativeSelectSelect, _extends({
        ownerState: ownerState,
        className: clsx(classes.select, className),
        disabled: disabled,
        ref: inputRef || ref
      }, other)), props.multiple ? null : /*#__PURE__*/jsxRuntime_1(NativeSelectIcon, {
        as: IconComponent,
        ownerState: ownerState,
        className: classes.icon
      })]
    });
  });
  NativeSelectInput.propTypes = {
    /**
     * The option elements to populate the select with.
     * Can be some `<option>` elements.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
    /**
     * The CSS class name of the select element.
     */
    className: PropTypes.string,
    /**
     * If `true`, the select is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the `select input` will indicate an error.
     */
    error: PropTypes.bool,
    /**
     * The icon that displays the arrow.
     */
    IconComponent: PropTypes.elementType.isRequired,
    /**
     * Use that prop to pass a ref to the native select element.
     * @deprecated
     */
    inputRef: refType$1,
    /**
     * @ignore
     */
    multiple: PropTypes.bool,
    /**
     * Name attribute of the `select` or hidden `input` element.
     */
    name: PropTypes.string,
    /**
     * Callback fired when a menu item is selected.
     *
     * @param {object} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * The input value.
     */
    value: PropTypes.any,
    /**
     * The variant to use.
     */
    variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])
  } ;
  var NativeSelectInput$1 = NativeSelectInput;

  const _excluded$N = ["className", "children", "classes", "IconComponent", "input", "inputProps", "variant"],
    _excluded2$5 = ["root"];
  const useUtilityClasses$E = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getNativeSelectUtilityClasses, classes);
  };
  const defaultInput = /*#__PURE__*/jsxRuntime_1(Input$1, {});
  /**
   * An alternative to `<Select native />` with a much smaller bundle size footprint.
   */
  const NativeSelect = /*#__PURE__*/React__namespace.forwardRef(function NativeSelect(inProps, ref) {
    const props = useThemeProps({
      name: 'MuiNativeSelect',
      props: inProps
    });
    const {
        className,
        children,
        classes: classesProp = {},
        IconComponent = ArrowDropDownIcon,
        input = defaultInput,
        inputProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$N);
    const muiFormControl = useFormControl();
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['variant']
    });
    const ownerState = _extends({}, props, {
      classes: classesProp
    });
    const classes = useUtilityClasses$E(ownerState);
    const otherClasses = _objectWithoutPropertiesLoose(classesProp, _excluded2$5);
    return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
      children: /*#__PURE__*/React__namespace.cloneElement(input, _extends({
        // Most of the logic is implemented in `NativeSelectInput`.
        // The `Select` component is a simple API wrapper to expose something better to play with.
        inputComponent: NativeSelectInput$1,
        inputProps: _extends({
          children,
          classes: otherClasses,
          IconComponent,
          variant: fcs.variant,
          type: undefined
        }, inputProps, input ? input.props.inputProps : {}),
        ref
      }, other, {
        className: clsx(classes.root, input.props.className, className)
      }))
    });
  });
  NativeSelect.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The option elements to populate the select with.
     * Can be some `<option>` elements.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     * @default {}
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The icon that displays the arrow.
     * @default ArrowDropDownIcon
     */
    IconComponent: PropTypes.elementType,
    /**
     * An `Input` element; does not have to be a material-ui specific `Input`.
     * @default <Input />
     */
    input: PropTypes.element,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attributes) applied to the `select` element.
     */
    inputProps: PropTypes.object,
    /**
     * Callback fired when a menu item is selected.
     *
     * @param {React.ChangeEvent<HTMLSelectElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The `input` value. The DOM API casts this to a string.
     */
    value: PropTypes.any,
    /**
     * The variant to use.
     */
    variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
  } ;
  NativeSelect.muiName = 'Select';
  var NativeSelect$1 = NativeSelect;

  var _span$1;
  const _excluded$M = ["children", "classes", "className", "label", "notched"];
  const NotchedOutlineRoot$1 = styled$1('fieldset', {
    shouldForwardProp: rootShouldForwardProp
  })({
    textAlign: 'left',
    position: 'absolute',
    bottom: 0,
    right: 0,
    top: -5,
    left: 0,
    margin: 0,
    padding: '0 8px',
    pointerEvents: 'none',
    borderRadius: 'inherit',
    borderStyle: 'solid',
    borderWidth: 1,
    overflow: 'hidden',
    minWidth: '0%'
  });
  const NotchedOutlineLegend = styled$1('legend', {
    shouldForwardProp: rootShouldForwardProp
  })(({
    ownerState,
    theme
  }) => _extends({
    float: 'unset',
    // Fix conflict with bootstrap
    width: 'auto',
    // Fix conflict with bootstrap
    overflow: 'hidden'
  }, !ownerState.withLabel && {
    padding: 0,
    lineHeight: '11px',
    // sync with `height` in `legend` styles
    transition: theme.transitions.create('width', {
      duration: 150,
      easing: theme.transitions.easing.easeOut
    })
  }, ownerState.withLabel && _extends({
    display: 'block',
    // Fix conflict with normalize.css and sanitize.css
    padding: 0,
    height: 11,
    // sync with `lineHeight` in `legend` styles
    fontSize: '0.75em',
    visibility: 'hidden',
    maxWidth: 0.01,
    transition: theme.transitions.create('max-width', {
      duration: 50,
      easing: theme.transitions.easing.easeOut
    }),
    whiteSpace: 'nowrap',
    '& > span': {
      paddingLeft: 5,
      paddingRight: 5,
      display: 'inline-block',
      opacity: 0,
      visibility: 'visible'
    }
  }, ownerState.notched && {
    maxWidth: '100%',
    transition: theme.transitions.create('max-width', {
      duration: 100,
      easing: theme.transitions.easing.easeOut,
      delay: 50
    })
  })));

  /**
   * @ignore - internal component.
   */
  function NotchedOutline(props) {
    const {
        className,
        label,
        notched
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$M);
    const withLabel = label != null && label !== '';
    const ownerState = _extends({}, props, {
      notched,
      withLabel
    });
    return /*#__PURE__*/jsxRuntime_1(NotchedOutlineRoot$1, _extends({
      "aria-hidden": true,
      className: className,
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(NotchedOutlineLegend, {
        ownerState: ownerState,
        children: withLabel ? /*#__PURE__*/jsxRuntime_1("span", {
          children: label
        }) : // notranslate needed while Google Translate will not fix zero-width space issue
        _span$1 || (_span$1 = /*#__PURE__*/jsxRuntime_1("span", {
          className: "notranslate",
          children: "\u200B"
        }))
      })
    }));
  }
  NotchedOutline.propTypes = {
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The label.
     */
    label: PropTypes.node,
    /**
     * If `true`, the outline is notched to accommodate the label.
     */
    notched: PropTypes.bool.isRequired,
    /**
     * @ignore
     */
    style: PropTypes.object
  } ;

  const _excluded$L = ["components", "fullWidth", "inputComponent", "label", "multiline", "notched", "slots", "type"];
  const useUtilityClasses$D = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      notchedOutline: ['notchedOutline'],
      input: ['input']
    };
    const composedClasses = composeClasses(slots, getOutlinedInputUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const OutlinedInputRoot = styled$1(InputBaseRoot, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiOutlinedInput',
    slot: 'Root',
    overridesResolver: rootOverridesResolver
  })(({
    theme,
    ownerState
  }) => {
    const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';
    return _extends({
      position: 'relative',
      borderRadius: (theme.vars || theme).shape.borderRadius,
      [`&:hover .${outlinedInputClasses$1.notchedOutline}`]: {
        borderColor: (theme.vars || theme).palette.text.primary
      },
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        [`&:hover .${outlinedInputClasses$1.notchedOutline}`]: {
          borderColor: theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.23)` : borderColor
        }
      },
      [`&.${outlinedInputClasses$1.focused} .${outlinedInputClasses$1.notchedOutline}`]: {
        borderColor: (theme.vars || theme).palette[ownerState.color].main,
        borderWidth: 2
      },
      [`&.${outlinedInputClasses$1.error} .${outlinedInputClasses$1.notchedOutline}`]: {
        borderColor: (theme.vars || theme).palette.error.main
      },
      [`&.${outlinedInputClasses$1.disabled} .${outlinedInputClasses$1.notchedOutline}`]: {
        borderColor: (theme.vars || theme).palette.action.disabled
      }
    }, ownerState.startAdornment && {
      paddingLeft: 14
    }, ownerState.endAdornment && {
      paddingRight: 14
    }, ownerState.multiline && _extends({
      padding: '16.5px 14px'
    }, ownerState.size === 'small' && {
      padding: '8.5px 14px'
    }));
  });
  const NotchedOutlineRoot = styled$1(NotchedOutline, {
    name: 'MuiOutlinedInput',
    slot: 'NotchedOutline',
    overridesResolver: (props, styles) => styles.notchedOutline
  })(({
    theme
  }) => {
    const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';
    return {
      borderColor: theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.23)` : borderColor
    };
  });
  const OutlinedInputInput = styled$1(InputBaseComponent, {
    name: 'MuiOutlinedInput',
    slot: 'Input',
    overridesResolver: inputOverridesResolver
  })(({
    theme,
    ownerState
  }) => _extends({
    padding: '16.5px 14px'
  }, !theme.vars && {
    '&:-webkit-autofill': {
      WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset',
      WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff',
      caretColor: theme.palette.mode === 'light' ? null : '#fff',
      borderRadius: 'inherit'
    }
  }, theme.vars && {
    '&:-webkit-autofill': {
      borderRadius: 'inherit'
    },
    [theme.getColorSchemeSelector('dark')]: {
      '&:-webkit-autofill': {
        WebkitBoxShadow: '0 0 0 100px #266798 inset',
        WebkitTextFillColor: '#fff',
        caretColor: '#fff'
      }
    }
  }, ownerState.size === 'small' && {
    padding: '8.5px 14px'
  }, ownerState.multiline && {
    padding: 0
  }, ownerState.startAdornment && {
    paddingLeft: 0
  }, ownerState.endAdornment && {
    paddingRight: 0
  }));
  const OutlinedInput = /*#__PURE__*/React__namespace.forwardRef(function OutlinedInput(inProps, ref) {
    var _ref, _slots$root, _ref2, _slots$input, _React$Fragment;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiOutlinedInput'
    });
    const {
        components = {},
        fullWidth = false,
        inputComponent = 'input',
        label,
        multiline = false,
        notched,
        slots = {},
        type = 'text'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$L);
    const classes = useUtilityClasses$D(props);
    const muiFormControl = useFormControl();
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['color', 'disabled', 'error', 'focused', 'hiddenLabel', 'size', 'required']
    });
    const ownerState = _extends({}, props, {
      color: fcs.color || 'primary',
      disabled: fcs.disabled,
      error: fcs.error,
      focused: fcs.focused,
      formControl: muiFormControl,
      fullWidth,
      hiddenLabel: fcs.hiddenLabel,
      multiline,
      size: fcs.size,
      type
    });
    const RootSlot = (_ref = (_slots$root = slots.root) != null ? _slots$root : components.Root) != null ? _ref : OutlinedInputRoot;
    const InputSlot = (_ref2 = (_slots$input = slots.input) != null ? _slots$input : components.Input) != null ? _ref2 : OutlinedInputInput;
    return /*#__PURE__*/jsxRuntime_1(InputBase$1, _extends({
      slots: {
        root: RootSlot,
        input: InputSlot
      },
      renderSuffix: state => /*#__PURE__*/jsxRuntime_1(NotchedOutlineRoot, {
        ownerState: ownerState,
        className: classes.notchedOutline,
        label: label != null && label !== '' && fcs.required ? _React$Fragment || (_React$Fragment = /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
          children: [label, "\u2009", '*']
        })) : label,
        notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)
      }),
      fullWidth: fullWidth,
      inputComponent: inputComponent,
      multiline: multiline,
      ref: ref,
      type: type
    }, other, {
      classes: _extends({}, classes, {
        notchedOutline: null
      })
    }));
  });
  OutlinedInput.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
     */
    autoComplete: PropTypes.string,
    /**
     * If `true`, the `input` element is focused during the first mount.
     */
    autoFocus: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Input: PropTypes.elementType,
      Root: PropTypes.elementType
    }),
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, the component is disabled.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    disabled: PropTypes.bool,
    /**
     * End `InputAdornment` for this component.
     */
    endAdornment: PropTypes.node,
    /**
     * If `true`, the `input` will indicate an error.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    error: PropTypes.bool,
    /**
     * If `true`, the `input` will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * The component used for the `input` element.
     * Either a string to use a HTML element or a component.
     * @default 'input'
     */
    inputComponent: PropTypes.elementType,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     * @default {}
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * The label of the `input`. It is only used for layout. The actual labelling
     * is handled by `InputLabel`.
     */
    label: PropTypes.node,
    /**
     * If `dense`, will adjust vertical spacing. This is normally obtained via context from
     * FormControl.
     * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.
     */
    margin: PropTypes.oneOf(['dense', 'none']),
    /**
     * Maximum number of rows to display when multiline option is set to true.
     */
    maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Minimum number of rows to display when multiline option is set to true.
     */
    minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * If `true`, a [TextareaAutosize](/material-ui/react-textarea-autosize/) element is rendered.
     * @default false
     */
    multiline: PropTypes.bool,
    /**
     * Name attribute of the `input` element.
     */
    name: PropTypes.string,
    /**
     * If `true`, the outline is notched to accommodate the label.
     */
    notched: PropTypes.bool,
    /**
     * Callback fired when the value is changed.
     *
     * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * The short hint displayed in the `input` before the user enters a value.
     */
    placeholder: PropTypes.string,
    /**
     * It prevents the user from changing the value of the field
     * (not from interacting with the field).
     */
    readOnly: PropTypes.bool,
    /**
     * If `true`, the `input` element is required.
     * The prop defaults to the value (`false`) inherited from the parent FormControl component.
     */
    required: PropTypes.bool,
    /**
     * Number of rows to display when multiline option is set to true.
     */
    rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      input: PropTypes.elementType,
      root: PropTypes.elementType
    }),
    /**
     * Start `InputAdornment` for this component.
     */
    startAdornment: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
     * @default 'text'
     */
    type: PropTypes.string,
    /**
     * The value of the `input` element, required for a controlled component.
     */
    value: PropTypes.any
  } ;
  OutlinedInput.muiName = 'Input';
  var OutlinedInput$1 = OutlinedInput;

  function getPaginationUtilityClass(slot) {
    return generateUtilityClass('MuiPagination', slot);
  }
  const paginationClasses = generateUtilityClasses('MuiPagination', ['root', 'ul', 'outlined', 'text']);
  var paginationClasses$1 = paginationClasses;

  const _excluded$K = ["boundaryCount", "componentName", "count", "defaultPage", "disabled", "hideNextButton", "hidePrevButton", "onChange", "page", "showFirstButton", "showLastButton", "siblingCount"];
  function usePagination(props = {}) {
    // keep default values in sync with @default tags in Pagination.propTypes
    const {
        boundaryCount = 1,
        componentName = 'usePagination',
        count = 1,
        defaultPage = 1,
        disabled = false,
        hideNextButton = false,
        hidePrevButton = false,
        onChange: handleChange,
        page: pageProp,
        showFirstButton = false,
        showLastButton = false,
        siblingCount = 1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$K);
    const [page, setPageState] = useControlled({
      controlled: pageProp,
      default: defaultPage,
      name: componentName,
      state: 'page'
    });
    const handleClick = (event, value) => {
      if (!pageProp) {
        setPageState(value);
      }
      if (handleChange) {
        handleChange(event, value);
      }
    };

    // https://dev.to/namirsab/comment/2050
    const range = (start, end) => {
      const length = end - start + 1;
      return Array.from({
        length
      }, (_, i) => start + i);
    };
    const startPages = range(1, Math.min(boundaryCount, count));
    const endPages = range(Math.max(count - boundaryCount + 1, boundaryCount + 1), count);
    const siblingsStart = Math.max(Math.min(
    // Natural start
    page - siblingCount,
    // Lower boundary when page is high
    count - boundaryCount - siblingCount * 2 - 1),
    // Greater than startPages
    boundaryCount + 2);
    const siblingsEnd = Math.min(Math.max(
    // Natural end
    page + siblingCount,
    // Upper boundary when page is low
    boundaryCount + siblingCount * 2 + 2),
    // Less than endPages
    endPages.length > 0 ? endPages[0] - 2 : count - 1);

    // Basic list of items to render
    // e.g. itemList = ['first', 'previous', 1, 'ellipsis', 4, 5, 6, 'ellipsis', 10, 'next', 'last']
    const itemList = [...(showFirstButton ? ['first'] : []), ...(hidePrevButton ? [] : ['previous']), ...startPages,
    // Start ellipsis
    // eslint-disable-next-line no-nested-ternary
    ...(siblingsStart > boundaryCount + 2 ? ['start-ellipsis'] : boundaryCount + 1 < count - boundaryCount ? [boundaryCount + 1] : []),
    // Sibling pages
    ...range(siblingsStart, siblingsEnd),
    // End ellipsis
    // eslint-disable-next-line no-nested-ternary
    ...(siblingsEnd < count - boundaryCount - 1 ? ['end-ellipsis'] : count - boundaryCount > boundaryCount ? [count - boundaryCount] : []), ...endPages, ...(hideNextButton ? [] : ['next']), ...(showLastButton ? ['last'] : [])];

    // Map the button type to its page number
    const buttonPage = type => {
      switch (type) {
        case 'first':
          return 1;
        case 'previous':
          return page - 1;
        case 'next':
          return page + 1;
        case 'last':
          return count;
        default:
          return null;
      }
    };

    // Convert the basic item list to PaginationItem props objects
    const items = itemList.map(item => {
      return typeof item === 'number' ? {
        onClick: event => {
          handleClick(event, item);
        },
        type: 'page',
        page: item,
        selected: item === page,
        disabled,
        'aria-current': item === page ? 'true' : undefined
      } : {
        onClick: event => {
          handleClick(event, buttonPage(item));
        },
        type: item,
        page: buttonPage(item),
        selected: false,
        disabled: disabled || item.indexOf('ellipsis') === -1 && (item === 'next' || item === 'last' ? page >= count : page <= 1)
      };
    });
    return _extends({
      items
    }, other);
  }

  function getPaginationItemUtilityClass(slot) {
    return generateUtilityClass('MuiPaginationItem', slot);
  }
  const paginationItemClasses = generateUtilityClasses('MuiPaginationItem', ['root', 'page', 'sizeSmall', 'sizeLarge', 'text', 'textPrimary', 'textSecondary', 'outlined', 'outlinedPrimary', 'outlinedSecondary', 'rounded', 'ellipsis', 'firstLast', 'previousNext', 'focusVisible', 'disabled', 'selected', 'icon']);
  var paginationItemClasses$1 = paginationItemClasses;

  var FirstPageIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"
  }), 'FirstPage');

  var LastPageIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"
  }), 'LastPage');

  var NavigateBeforeIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"
  }), 'NavigateBefore');

  var NavigateNextIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"
  }), 'NavigateNext');

  const _excluded$J = ["className", "color", "component", "components", "disabled", "page", "selected", "shape", "size", "slots", "type", "variant"];
  const overridesResolver = (props, styles) => {
    const {
      ownerState
    } = props;
    return [styles.root, styles[ownerState.variant], styles[`size${capitalize(ownerState.size)}`], ownerState.variant === 'text' && styles[`text${capitalize(ownerState.color)}`], ownerState.variant === 'outlined' && styles[`outlined${capitalize(ownerState.color)}`], ownerState.shape === 'rounded' && styles.rounded, ownerState.type === 'page' && styles.page, (ownerState.type === 'start-ellipsis' || ownerState.type === 'end-ellipsis') && styles.ellipsis, (ownerState.type === 'previous' || ownerState.type === 'next') && styles.previousNext, (ownerState.type === 'first' || ownerState.type === 'last') && styles.firstLast];
  };
  const useUtilityClasses$C = ownerState => {
    const {
      classes,
      color,
      disabled,
      selected,
      size,
      shape,
      type,
      variant
    } = ownerState;
    const slots = {
      root: ['root', `size${capitalize(size)}`, variant, shape, color !== 'standard' && `${variant}${capitalize(color)}`, disabled && 'disabled', selected && 'selected', {
        page: 'page',
        first: 'firstLast',
        last: 'firstLast',
        'start-ellipsis': 'ellipsis',
        'end-ellipsis': 'ellipsis',
        previous: 'previousNext',
        next: 'previousNext'
      }[type]],
      icon: ['icon']
    };
    return composeClasses(slots, getPaginationItemUtilityClass, classes);
  };
  const PaginationItemEllipsis = styled$1('div', {
    name: 'MuiPaginationItem',
    slot: 'Root',
    overridesResolver
  })(({
    theme,
    ownerState
  }) => _extends({}, theme.typography.body2, {
    borderRadius: 32 / 2,
    textAlign: 'center',
    boxSizing: 'border-box',
    minWidth: 32,
    padding: '0 6px',
    margin: '0 3px',
    color: (theme.vars || theme).palette.text.primary,
    height: 'auto',
    [`&.${paginationItemClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity
    }
  }, ownerState.size === 'small' && {
    minWidth: 26,
    borderRadius: 26 / 2,
    margin: '0 1px',
    padding: '0 4px'
  }, ownerState.size === 'large' && {
    minWidth: 40,
    borderRadius: 40 / 2,
    padding: '0 10px',
    fontSize: theme.typography.pxToRem(15)
  }));
  const PaginationItemPage = styled$1(ButtonBase$1, {
    name: 'MuiPaginationItem',
    slot: 'Root',
    overridesResolver
  })(({
    theme,
    ownerState
  }) => _extends({}, theme.typography.body2, {
    borderRadius: 32 / 2,
    textAlign: 'center',
    boxSizing: 'border-box',
    minWidth: 32,
    height: 32,
    padding: '0 6px',
    margin: '0 3px',
    color: (theme.vars || theme).palette.text.primary,
    [`&.${paginationItemClasses$1.focusVisible}`]: {
      backgroundColor: (theme.vars || theme).palette.action.focus
    },
    [`&.${paginationItemClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity
    },
    transition: theme.transitions.create(['color', 'background-color'], {
      duration: theme.transitions.duration.short
    }),
    '&:hover': {
      backgroundColor: (theme.vars || theme).palette.action.hover,
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    },
    [`&.${paginationItemClasses$1.selected}`]: {
      backgroundColor: (theme.vars || theme).palette.action.selected,
      '&:hover': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: (theme.vars || theme).palette.action.selected
        }
      },
      [`&.${paginationItemClasses$1.focusVisible}`]: {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
      },
      [`&.${paginationItemClasses$1.disabled}`]: {
        opacity: 1,
        color: (theme.vars || theme).palette.action.disabled,
        backgroundColor: (theme.vars || theme).palette.action.selected
      }
    }
  }, ownerState.size === 'small' && {
    minWidth: 26,
    height: 26,
    borderRadius: 26 / 2,
    margin: '0 1px',
    padding: '0 4px'
  }, ownerState.size === 'large' && {
    minWidth: 40,
    height: 40,
    borderRadius: 40 / 2,
    padding: '0 10px',
    fontSize: theme.typography.pxToRem(15)
  }, ownerState.shape === 'rounded' && {
    borderRadius: (theme.vars || theme).shape.borderRadius
  }), ({
    theme,
    ownerState
  }) => _extends({}, ownerState.variant === 'text' && {
    [`&.${paginationItemClasses$1.selected}`]: _extends({}, ownerState.color !== 'standard' && {
      color: (theme.vars || theme).palette[ownerState.color].contrastText,
      backgroundColor: (theme.vars || theme).palette[ownerState.color].main,
      '&:hover': {
        backgroundColor: (theme.vars || theme).palette[ownerState.color].dark,
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: (theme.vars || theme).palette[ownerState.color].main
        }
      },
      [`&.${paginationItemClasses$1.focusVisible}`]: {
        backgroundColor: (theme.vars || theme).palette[ownerState.color].dark
      }
    }, {
      [`&.${paginationItemClasses$1.disabled}`]: {
        color: (theme.vars || theme).palette.action.disabled
      }
    })
  }, ownerState.variant === 'outlined' && {
    border: theme.vars ? `1px solid rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.23)` : `1px solid ${theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'}`,
    [`&.${paginationItemClasses$1.selected}`]: _extends({}, ownerState.color !== 'standard' && {
      color: (theme.vars || theme).palette[ownerState.color].main,
      border: `1px solid ${theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.5)` : alpha(theme.palette[ownerState.color].main, 0.5)}`,
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.activatedOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.activatedOpacity),
      '&:hover': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / calc(${theme.vars.palette.action.activatedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette[ownerState.color].main, theme.palette.action.activatedOpacity + theme.palette.action.focusOpacity),
        // Reset on touch devices, it doesn't add specificity
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      },
      [`&.${paginationItemClasses$1.focusVisible}`]: {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / calc(${theme.vars.palette.action.activatedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette[ownerState.color].main, theme.palette.action.activatedOpacity + theme.palette.action.focusOpacity)
      }
    }, {
      [`&.${paginationItemClasses$1.disabled}`]: {
        borderColor: (theme.vars || theme).palette.action.disabledBackground,
        color: (theme.vars || theme).palette.action.disabled
      }
    })
  }));
  const PaginationItemPageIcon = styled$1('div', {
    name: 'MuiPaginationItem',
    slot: 'Icon',
    overridesResolver: (props, styles) => styles.icon
  })(({
    theme,
    ownerState
  }) => _extends({
    fontSize: theme.typography.pxToRem(20),
    margin: '0 -8px'
  }, ownerState.size === 'small' && {
    fontSize: theme.typography.pxToRem(18)
  }, ownerState.size === 'large' && {
    fontSize: theme.typography.pxToRem(22)
  }));
  const PaginationItem = /*#__PURE__*/React__namespace.forwardRef(function PaginationItem(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiPaginationItem'
    });
    const {
        className,
        color = 'standard',
        component,
        components = {},
        disabled = false,
        page,
        selected = false,
        shape = 'circular',
        size = 'medium',
        slots = {},
        type = 'page',
        variant = 'text'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$J);
    const ownerState = _extends({}, props, {
      color,
      disabled,
      selected,
      shape,
      size,
      type,
      variant
    });
    const theme = useTheme();
    const classes = useUtilityClasses$C(ownerState);
    const normalizedIcons = theme.direction === 'rtl' ? {
      previous: slots.next || components.next || NavigateNextIcon,
      next: slots.previous || components.previous || NavigateBeforeIcon,
      last: slots.first || components.first || FirstPageIcon,
      first: slots.last || components.last || LastPageIcon
    } : {
      previous: slots.previous || components.previous || NavigateBeforeIcon,
      next: slots.next || components.next || NavigateNextIcon,
      first: slots.first || components.first || FirstPageIcon,
      last: slots.last || components.last || LastPageIcon
    };
    const Icon = normalizedIcons[type];
    return type === 'start-ellipsis' || type === 'end-ellipsis' ? /*#__PURE__*/jsxRuntime_1(PaginationItemEllipsis, {
      ref: ref,
      ownerState: ownerState,
      className: clsx(classes.root, className),
      children: "\u2026"
    }) : /*#__PURE__*/jsxRuntime_2(PaginationItemPage, _extends({
      ref: ref,
      ownerState: ownerState,
      component: component,
      disabled: disabled,
      className: clsx(classes.root, className)
    }, other, {
      children: [type === 'page' && page, Icon ? /*#__PURE__*/jsxRuntime_1(PaginationItemPageIcon, {
        as: Icon,
        ownerState: ownerState,
        className: classes.icon
      }) : null]
    }));
  });
  PaginationItem.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The active color.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'standard'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'standard']), PropTypes.string]),
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      first: PropTypes.elementType,
      last: PropTypes.elementType,
      next: PropTypes.elementType,
      previous: PropTypes.elementType
    }),
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * The current page number.
     */
    page: PropTypes.node,
    /**
     * If `true` the pagination item is selected.
     * @default false
     */
    selected: PropTypes.bool,
    /**
     * The shape of the pagination item.
     * @default 'circular'
     */
    shape: PropTypes.oneOf(['circular', 'rounded']),
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      first: PropTypes.elementType,
      last: PropTypes.elementType,
      next: PropTypes.elementType,
      previous: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The type of pagination item.
     * @default 'page'
     */
    type: PropTypes.oneOf(['end-ellipsis', 'first', 'last', 'next', 'page', 'previous', 'start-ellipsis']),
    /**
     * The variant to use.
     * @default 'text'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['outlined', 'text']), PropTypes.string])
  } ;
  var PaginationItem$1 = PaginationItem;

  const _excluded$I = ["boundaryCount", "className", "color", "count", "defaultPage", "disabled", "getItemAriaLabel", "hideNextButton", "hidePrevButton", "onChange", "page", "renderItem", "shape", "showFirstButton", "showLastButton", "siblingCount", "size", "variant"];
  const useUtilityClasses$B = ownerState => {
    const {
      classes,
      variant
    } = ownerState;
    const slots = {
      root: ['root', variant],
      ul: ['ul']
    };
    return composeClasses(slots, getPaginationUtilityClass, classes);
  };
  const PaginationRoot = styled$1('nav', {
    name: 'MuiPagination',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant]];
    }
  })({});
  const PaginationUl = styled$1('ul', {
    name: 'MuiPagination',
    slot: 'Ul',
    overridesResolver: (props, styles) => styles.ul
  })({
    display: 'flex',
    flexWrap: 'wrap',
    alignItems: 'center',
    padding: 0,
    margin: 0,
    listStyle: 'none'
  });
  function defaultGetAriaLabel$1(type, page, selected) {
    if (type === 'page') {
      return `${selected ? '' : 'Go to '}page ${page}`;
    }
    return `Go to ${type} page`;
  }
  const Pagination = /*#__PURE__*/React__namespace.forwardRef(function Pagination(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiPagination'
    });
    const {
        boundaryCount = 1,
        className,
        color = 'standard',
        count = 1,
        defaultPage = 1,
        disabled = false,
        getItemAriaLabel = defaultGetAriaLabel$1,
        hideNextButton = false,
        hidePrevButton = false,
        renderItem = item => /*#__PURE__*/jsxRuntime_1(PaginationItem$1, _extends({}, item)),
        shape = 'circular',
        showFirstButton = false,
        showLastButton = false,
        siblingCount = 1,
        size = 'medium',
        variant = 'text'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$I);
    const {
      items
    } = usePagination(_extends({}, props, {
      componentName: 'Pagination'
    }));
    const ownerState = _extends({}, props, {
      boundaryCount,
      color,
      count,
      defaultPage,
      disabled,
      getItemAriaLabel,
      hideNextButton,
      hidePrevButton,
      renderItem,
      shape,
      showFirstButton,
      showLastButton,
      siblingCount,
      size,
      variant
    });
    const classes = useUtilityClasses$B(ownerState);
    return /*#__PURE__*/jsxRuntime_1(PaginationRoot, _extends({
      "aria-label": "pagination navigation",
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(PaginationUl, {
        className: classes.ul,
        ownerState: ownerState,
        children: items.map((item, index) => /*#__PURE__*/jsxRuntime_1("li", {
          children: renderItem(_extends({}, item, {
            color,
            'aria-label': getItemAriaLabel(item.type, item.page, item.selected),
            shape,
            size,
            variant
          }))
        }, index))
      })
    }));
  });

  // @default tags synced with default values from usePagination

  Pagination.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Number of always visible pages at the beginning and end.
     * @default 1
     */
    boundaryCount: integerPropType,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The active color.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'standard'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'standard']), PropTypes.string]),
    /**
     * The total number of pages.
     * @default 1
     */
    count: integerPropType,
    /**
     * The page selected by default when the component is uncontrolled.
     * @default 1
     */
    defaultPage: integerPropType,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the current page.
     * This is important for screen reader users.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @param {string} type The link or button type to format ('page' | 'first' | 'last' | 'next' | 'previous' | 'start-ellipsis' | 'end-ellipsis'). Defaults to 'page'.
     * @param {number} page The page number to format.
     * @param {bool} selected If true, the current page is selected.
     * @returns {string}
     */
    getItemAriaLabel: PropTypes.func,
    /**
     * If `true`, hide the next-page button.
     * @default false
     */
    hideNextButton: PropTypes.bool,
    /**
     * If `true`, hide the previous-page button.
     * @default false
     */
    hidePrevButton: PropTypes.bool,
    /**
     * Callback fired when the page is changed.
     *
     * @param {React.ChangeEvent<unknown>} event The event source of the callback.
     * @param {number} page The page selected.
     */
    onChange: PropTypes.func,
    /**
     * The current page.
     */
    page: integerPropType,
    /**
     * Render the item.
     * @param {PaginationRenderItemParams} params The props to spread on a PaginationItem.
     * @returns {ReactNode}
     * @default (item) => <PaginationItem {...item} />
     */
    renderItem: PropTypes.func,
    /**
     * The shape of the pagination items.
     * @default 'circular'
     */
    shape: PropTypes.oneOf(['circular', 'rounded']),
    /**
     * If `true`, show the first-page button.
     * @default false
     */
    showFirstButton: PropTypes.bool,
    /**
     * If `true`, show the last-page button.
     * @default false
     */
    showLastButton: PropTypes.bool,
    /**
     * Number of always visible pages before and after the current page.
     * @default 1
     */
    siblingCount: integerPropType,
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'text'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['outlined', 'text']), PropTypes.string])
  } ;
  var Pagination$1 = Pagination;

  var RadioButtonUncheckedIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
  }), 'RadioButtonUnchecked');

  var RadioButtonCheckedIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"
  }), 'RadioButtonChecked');

  const RadioButtonIconRoot = styled$1('span', {
    shouldForwardProp: rootShouldForwardProp
  })({
    position: 'relative',
    display: 'flex'
  });
  const RadioButtonIconBackground = styled$1(RadioButtonUncheckedIcon)({
    // Scale applied to prevent dot misalignment in Safari
    transform: 'scale(1)'
  });
  const RadioButtonIconDot = styled$1(RadioButtonCheckedIcon)(({
    theme,
    ownerState
  }) => _extends({
    left: 0,
    position: 'absolute',
    transform: 'scale(0)',
    transition: theme.transitions.create('transform', {
      easing: theme.transitions.easing.easeIn,
      duration: theme.transitions.duration.shortest
    })
  }, ownerState.checked && {
    transform: 'scale(1)',
    transition: theme.transitions.create('transform', {
      easing: theme.transitions.easing.easeOut,
      duration: theme.transitions.duration.shortest
    })
  }));

  /**
   * @ignore - internal component.
   */
  function RadioButtonIcon(props) {
    const {
      checked = false,
      classes = {},
      fontSize
    } = props;
    const ownerState = _extends({}, props, {
      checked
    });
    return /*#__PURE__*/jsxRuntime_2(RadioButtonIconRoot, {
      className: classes.root,
      ownerState: ownerState,
      children: [/*#__PURE__*/jsxRuntime_1(RadioButtonIconBackground, {
        fontSize: fontSize,
        className: classes.background,
        ownerState: ownerState
      }), /*#__PURE__*/jsxRuntime_1(RadioButtonIconDot, {
        fontSize: fontSize,
        className: classes.dot,
        ownerState: ownerState
      })]
    });
  }
  RadioButtonIcon.propTypes = {
    /**
     * If `true`, the component is checked.
     */
    checked: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
    /**
     * The size of the component.
     * `small` is equivalent to the dense radio styling.
     */
    fontSize: PropTypes.oneOf(['small', 'medium'])
  } ;

  /**
   * @ignore - internal component.
   */
  const RadioGroupContext = /*#__PURE__*/React__namespace.createContext(undefined);
  {
    RadioGroupContext.displayName = 'RadioGroupContext';
  }
  var RadioGroupContext$1 = RadioGroupContext;

  function useRadioGroup() {
    return React__namespace.useContext(RadioGroupContext$1);
  }

  function getRadioUtilityClass(slot) {
    return generateUtilityClass('MuiRadio', slot);
  }
  const radioClasses = generateUtilityClasses('MuiRadio', ['root', 'checked', 'disabled', 'colorPrimary', 'colorSecondary', 'sizeSmall']);
  var radioClasses$1 = radioClasses;

  const _excluded$H = ["checked", "checkedIcon", "color", "icon", "name", "onChange", "size", "className"];
  const useUtilityClasses$A = ownerState => {
    const {
      classes,
      color,
      size
    } = ownerState;
    const slots = {
      root: ['root', `color${capitalize(color)}`, size !== 'medium' && `size${capitalize(size)}`]
    };
    return _extends({}, classes, composeClasses(slots, getRadioUtilityClass, classes));
  };
  const RadioRoot = styled$1(SwitchBase$1, {
    shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
    name: 'MuiRadio',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.size !== 'medium' && styles[`size${capitalize(ownerState.size)}`], styles[`color${capitalize(ownerState.color)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    color: (theme.vars || theme).palette.text.secondary
  }, !ownerState.disableRipple && {
    '&:hover': {
      backgroundColor: theme.vars ? `rgba(${ownerState.color === 'default' ? theme.vars.palette.action.activeChannel : theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(ownerState.color === 'default' ? theme.palette.action.active : theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    }
  }, ownerState.color !== 'default' && {
    [`&.${radioClasses$1.checked}`]: {
      color: (theme.vars || theme).palette[ownerState.color].main
    }
  }, {
    [`&.${radioClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.action.disabled
    }
  }));
  function areEqualValues$1(a, b) {
    if (typeof b === 'object' && b !== null) {
      return a === b;
    }

    // The value could be a number, the DOM will stringify it anyway.
    return String(a) === String(b);
  }
  const defaultCheckedIcon = /*#__PURE__*/jsxRuntime_1(RadioButtonIcon, {
    checked: true
  });
  const defaultIcon$1 = /*#__PURE__*/jsxRuntime_1(RadioButtonIcon, {});
  const Radio = /*#__PURE__*/React__namespace.forwardRef(function Radio(inProps, ref) {
    var _defaultIcon$props$fo, _defaultCheckedIcon$p;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiRadio'
    });
    const {
        checked: checkedProp,
        checkedIcon = defaultCheckedIcon,
        color = 'primary',
        icon = defaultIcon$1,
        name: nameProp,
        onChange: onChangeProp,
        size = 'medium',
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$H);
    const ownerState = _extends({}, props, {
      color,
      size
    });
    const classes = useUtilityClasses$A(ownerState);
    const radioGroup = useRadioGroup();
    let checked = checkedProp;
    const onChange = createChainedFunction(onChangeProp, radioGroup && radioGroup.onChange);
    let name = nameProp;
    if (radioGroup) {
      if (typeof checked === 'undefined') {
        checked = areEqualValues$1(radioGroup.value, props.value);
      }
      if (typeof name === 'undefined') {
        name = radioGroup.name;
      }
    }
    return /*#__PURE__*/jsxRuntime_1(RadioRoot, _extends({
      type: "radio",
      icon: /*#__PURE__*/React__namespace.cloneElement(icon, {
        fontSize: (_defaultIcon$props$fo = defaultIcon$1.props.fontSize) != null ? _defaultIcon$props$fo : size
      }),
      checkedIcon: /*#__PURE__*/React__namespace.cloneElement(checkedIcon, {
        fontSize: (_defaultCheckedIcon$p = defaultCheckedIcon.props.fontSize) != null ? _defaultCheckedIcon$p : size
      }),
      ownerState: ownerState,
      classes: classes,
      name: name,
      checked: checked,
      onChange: onChange,
      ref: ref,
      className: clsx(classes.root, className)
    }, other));
  });
  Radio.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the component is checked.
     */
    checked: PropTypes.bool,
    /**
     * The icon to display when the component is checked.
     * @default <RadioButtonIcon checked />
     */
    checkedIcon: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * If `true`, the component is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * The icon to display when the component is unchecked.
     * @default <RadioButtonIcon />
     */
    icon: PropTypes.node,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * Name attribute of the `input` element.
     */
    name: PropTypes.string,
    /**
     * Callback fired when the state is changed.
     *
     * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     * You can pull out the new checked state by accessing `event.target.checked` (boolean).
     */
    onChange: PropTypes.func,
    /**
     * If `true`, the `input` element is required.
     * @default false
     */
    required: PropTypes.bool,
    /**
     * The size of the component.
     * `small` is equivalent to the dense radio styling.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the component. The DOM API casts this to a string.
     */
    value: PropTypes.any
  } ;
  var Radio$1 = Radio;

  const _excluded$G = ["actions", "children", "defaultValue", "name", "onChange", "value"];
  const RadioGroup = /*#__PURE__*/React__namespace.forwardRef(function RadioGroup(props, ref) {
    const {
        // private
        // eslint-disable-next-line react/prop-types
        actions,
        children,
        defaultValue,
        name: nameProp,
        onChange,
        value: valueProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$G);
    const rootRef = React__namespace.useRef(null);
    const [value, setValueState] = useControlled({
      controlled: valueProp,
      default: defaultValue,
      name: 'RadioGroup'
    });
    React__namespace.useImperativeHandle(actions, () => ({
      focus: () => {
        let input = rootRef.current.querySelector('input:not(:disabled):checked');
        if (!input) {
          input = rootRef.current.querySelector('input:not(:disabled)');
        }
        if (input) {
          input.focus();
        }
      }
    }), []);
    const handleRef = useForkRef(ref, rootRef);
    const name = useId(nameProp);
    const contextValue = React__namespace.useMemo(() => ({
      name,
      onChange(event) {
        setValueState(event.target.value);
        if (onChange) {
          onChange(event, event.target.value);
        }
      },
      value
    }), [name, onChange, setValueState, value]);
    return /*#__PURE__*/jsxRuntime_1(RadioGroupContext$1.Provider, {
      value: contextValue,
      children: /*#__PURE__*/jsxRuntime_1(FormGroup$1, _extends({
        role: "radiogroup",
        ref: handleRef
      }, other, {
        children: children
      }))
    });
  });
  RadioGroup.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * The name used to reference the value of the control.
     * If you don't provide this prop, it falls back to a randomly generated name.
     */
    name: PropTypes.string,
    /**
     * Callback fired when a radio button is selected.
     *
     * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.
     * @param {string} value The value of the selected radio button.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * Value of the selected radio button. The DOM API casts this to a string.
     */
    value: PropTypes.any
  } ;
  var RadioGroup$1 = RadioGroup;

  var Star = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"
  }), 'Star');

  var StarBorder = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"
  }), 'StarBorder');

  function getRatingUtilityClass(slot) {
    return generateUtilityClass('MuiRating', slot);
  }
  const ratingClasses = generateUtilityClasses('MuiRating', ['root', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'readOnly', 'disabled', 'focusVisible', 'visuallyHidden', 'pristine', 'label', 'labelEmptyValueActive', 'icon', 'iconEmpty', 'iconFilled', 'iconHover', 'iconFocus', 'iconActive', 'decimal']);
  var ratingClasses$1 = ratingClasses;

  const _excluded$F = ["value"],
    _excluded2$4 = ["className", "defaultValue", "disabled", "emptyIcon", "emptyLabelText", "getLabelText", "highlightSelectedOnly", "icon", "IconContainerComponent", "max", "name", "onChange", "onChangeActive", "onMouseLeave", "onMouseMove", "precision", "readOnly", "size", "value"];
  function clamp$1(value, min, max) {
    if (value < min) {
      return min;
    }
    if (value > max) {
      return max;
    }
    return value;
  }
  function getDecimalPrecision(num) {
    const decimalPart = num.toString().split('.')[1];
    return decimalPart ? decimalPart.length : 0;
  }
  function roundValueToPrecision(value, precision) {
    if (value == null) {
      return value;
    }
    const nearest = Math.round(value / precision) * precision;
    return Number(nearest.toFixed(getDecimalPrecision(precision)));
  }
  const useUtilityClasses$z = ownerState => {
    const {
      classes,
      size,
      readOnly,
      disabled,
      emptyValueFocused,
      focusVisible
    } = ownerState;
    const slots = {
      root: ['root', `size${capitalize(size)}`, disabled && 'disabled', focusVisible && 'focusVisible', readOnly && 'readOnly'],
      label: ['label', 'pristine'],
      labelEmptyValue: [emptyValueFocused && 'labelEmptyValueActive'],
      icon: ['icon'],
      iconEmpty: ['iconEmpty'],
      iconFilled: ['iconFilled'],
      iconHover: ['iconHover'],
      iconFocus: ['iconFocus'],
      iconActive: ['iconActive'],
      decimal: ['decimal'],
      visuallyHidden: ['visuallyHidden']
    };
    return composeClasses(slots, getRatingUtilityClass, classes);
  };
  const RatingRoot = styled$1('span', {
    name: 'MuiRating',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${ratingClasses$1.visuallyHidden}`]: styles.visuallyHidden
      }, styles.root, styles[`size${capitalize(ownerState.size)}`], ownerState.readOnly && styles.readOnly];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'inline-flex',
    // Required to position the pristine input absolutely
    position: 'relative',
    fontSize: theme.typography.pxToRem(24),
    color: '#faaf00',
    cursor: 'pointer',
    textAlign: 'left',
    WebkitTapHighlightColor: 'transparent',
    [`&.${ratingClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity,
      pointerEvents: 'none'
    },
    [`&.${ratingClasses$1.focusVisible} .${ratingClasses$1.iconActive}`]: {
      outline: '1px solid #999'
    },
    [`& .${ratingClasses$1.visuallyHidden}`]: visuallyHidden$1
  }, ownerState.size === 'small' && {
    fontSize: theme.typography.pxToRem(18)
  }, ownerState.size === 'large' && {
    fontSize: theme.typography.pxToRem(30)
  }, ownerState.readOnly && {
    pointerEvents: 'none'
  }));
  const RatingLabel = styled$1('label', {
    name: 'MuiRating',
    slot: 'Label',
    overridesResolver: ({
      ownerState
    }, styles) => [styles.label, ownerState.emptyValueFocused && styles.labelEmptyValueActive]
  })(({
    ownerState
  }) => _extends({
    cursor: 'inherit'
  }, ownerState.emptyValueFocused && {
    top: 0,
    bottom: 0,
    position: 'absolute',
    outline: '1px solid #999',
    width: '100%'
  }));
  const RatingIcon = styled$1('span', {
    name: 'MuiRating',
    slot: 'Icon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.icon, ownerState.iconEmpty && styles.iconEmpty, ownerState.iconFilled && styles.iconFilled, ownerState.iconHover && styles.iconHover, ownerState.iconFocus && styles.iconFocus, ownerState.iconActive && styles.iconActive];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    // Fit wrapper to actual icon size.
    display: 'flex',
    transition: theme.transitions.create('transform', {
      duration: theme.transitions.duration.shortest
    }),
    // Fix mouseLeave issue.
    // https://github.com/facebook/react/issues/4492
    pointerEvents: 'none'
  }, ownerState.iconActive && {
    transform: 'scale(1.2)'
  }, ownerState.iconEmpty && {
    color: (theme.vars || theme).palette.action.disabled
  }));
  const RatingDecimal = styled$1('span', {
    name: 'MuiRating',
    slot: 'Decimal',
    shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'iconActive',
    overridesResolver: (props, styles) => {
      const {
        iconActive
      } = props;
      return [styles.decimal, iconActive && styles.iconActive];
    }
  })(({
    iconActive
  }) => _extends({
    position: 'relative'
  }, iconActive && {
    transform: 'scale(1.2)'
  }));
  function IconContainer(props) {
    const other = _objectWithoutPropertiesLoose(props, _excluded$F);
    return /*#__PURE__*/jsxRuntime_1("span", _extends({}, other));
  }
  IconContainer.propTypes = {
    value: PropTypes.number.isRequired
  } ;
  function RatingItem(props) {
    const {
      classes,
      disabled,
      emptyIcon,
      focus,
      getLabelText,
      highlightSelectedOnly,
      hover,
      icon,
      IconContainerComponent,
      isActive,
      itemValue,
      labelProps,
      name,
      onBlur,
      onChange,
      onClick,
      onFocus,
      readOnly,
      ownerState,
      ratingValue,
      ratingValueRounded
    } = props;
    const isFilled = highlightSelectedOnly ? itemValue === ratingValue : itemValue <= ratingValue;
    const isHovered = itemValue <= hover;
    const isFocused = itemValue <= focus;
    const isChecked = itemValue === ratingValueRounded;
    const id = useId();
    const container = /*#__PURE__*/jsxRuntime_1(RatingIcon, {
      as: IconContainerComponent,
      value: itemValue,
      className: clsx(classes.icon, isFilled ? classes.iconFilled : classes.iconEmpty, isHovered && classes.iconHover, isFocused && classes.iconFocus, isActive && classes.iconActive),
      ownerState: _extends({}, ownerState, {
        iconEmpty: !isFilled,
        iconFilled: isFilled,
        iconHover: isHovered,
        iconFocus: isFocused,
        iconActive: isActive
      }),
      children: emptyIcon && !isFilled ? emptyIcon : icon
    });
    if (readOnly) {
      return /*#__PURE__*/jsxRuntime_1("span", _extends({}, labelProps, {
        children: container
      }));
    }
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_2(RatingLabel, _extends({
        ownerState: _extends({}, ownerState, {
          emptyValueFocused: undefined
        }),
        htmlFor: id
      }, labelProps, {
        children: [container, /*#__PURE__*/jsxRuntime_1("span", {
          className: classes.visuallyHidden,
          children: getLabelText(itemValue)
        })]
      })), /*#__PURE__*/jsxRuntime_1("input", {
        className: classes.visuallyHidden,
        onFocus: onFocus,
        onBlur: onBlur,
        onChange: onChange,
        onClick: onClick,
        disabled: disabled,
        value: itemValue,
        id: id,
        type: "radio",
        name: name,
        checked: isChecked
      })]
    });
  }
  RatingItem.propTypes = {
    classes: PropTypes.object.isRequired,
    disabled: PropTypes.bool.isRequired,
    emptyIcon: PropTypes.node,
    focus: PropTypes.number.isRequired,
    getLabelText: PropTypes.func.isRequired,
    highlightSelectedOnly: PropTypes.bool.isRequired,
    hover: PropTypes.number.isRequired,
    icon: PropTypes.node,
    IconContainerComponent: PropTypes.elementType.isRequired,
    isActive: PropTypes.bool.isRequired,
    itemValue: PropTypes.number.isRequired,
    labelProps: PropTypes.object,
    name: PropTypes.string,
    onBlur: PropTypes.func.isRequired,
    onChange: PropTypes.func.isRequired,
    onClick: PropTypes.func.isRequired,
    onFocus: PropTypes.func.isRequired,
    ownerState: PropTypes.object.isRequired,
    ratingValue: PropTypes.number,
    ratingValueRounded: PropTypes.number,
    readOnly: PropTypes.bool.isRequired
  } ;
  const defaultIcon = /*#__PURE__*/jsxRuntime_1(Star, {
    fontSize: "inherit"
  });
  const defaultEmptyIcon = /*#__PURE__*/jsxRuntime_1(StarBorder, {
    fontSize: "inherit"
  });
  function defaultLabelText(value) {
    return `${value} Star${value !== 1 ? 's' : ''}`;
  }
  const Rating = /*#__PURE__*/React__namespace.forwardRef(function Rating(inProps, ref) {
    const props = useThemeProps({
      name: 'MuiRating',
      props: inProps
    });
    const {
        className,
        defaultValue = null,
        disabled = false,
        emptyIcon = defaultEmptyIcon,
        emptyLabelText = 'Empty',
        getLabelText = defaultLabelText,
        highlightSelectedOnly = false,
        icon = defaultIcon,
        IconContainerComponent = IconContainer,
        max = 5,
        name: nameProp,
        onChange,
        onChangeActive,
        onMouseLeave,
        onMouseMove,
        precision = 1,
        readOnly = false,
        size = 'medium',
        value: valueProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded2$4);
    const name = useId(nameProp);
    const [valueDerived, setValueState] = useControlled({
      controlled: valueProp,
      default: defaultValue,
      name: 'Rating'
    });
    const valueRounded = roundValueToPrecision(valueDerived, precision);
    const theme = useTheme();
    const [{
      hover,
      focus
    }, setState] = React__namespace.useState({
      hover: -1,
      focus: -1
    });
    let value = valueRounded;
    if (hover !== -1) {
      value = hover;
    }
    if (focus !== -1) {
      value = focus;
    }
    const {
      isFocusVisibleRef,
      onBlur: handleBlurVisible,
      onFocus: handleFocusVisible,
      ref: focusVisibleRef
    } = useIsFocusVisible();
    const [focusVisible, setFocusVisible] = React__namespace.useState(false);
    const rootRef = React__namespace.useRef();
    const handleRef = useForkRef(focusVisibleRef, rootRef, ref);
    const handleMouseMove = event => {
      if (onMouseMove) {
        onMouseMove(event);
      }
      const rootNode = rootRef.current;
      const {
        right,
        left,
        width: containerWidth
      } = rootNode.getBoundingClientRect();
      let percent;
      if (theme.direction === 'rtl') {
        percent = (right - event.clientX) / containerWidth;
      } else {
        percent = (event.clientX - left) / containerWidth;
      }
      let newHover = roundValueToPrecision(max * percent + precision / 2, precision);
      newHover = clamp$1(newHover, precision, max);
      setState(prev => prev.hover === newHover && prev.focus === newHover ? prev : {
        hover: newHover,
        focus: newHover
      });
      setFocusVisible(false);
      if (onChangeActive && hover !== newHover) {
        onChangeActive(event, newHover);
      }
    };
    const handleMouseLeave = event => {
      if (onMouseLeave) {
        onMouseLeave(event);
      }
      const newHover = -1;
      setState({
        hover: newHover,
        focus: newHover
      });
      if (onChangeActive && hover !== newHover) {
        onChangeActive(event, newHover);
      }
    };
    const handleChange = event => {
      let newValue = event.target.value === '' ? null : parseFloat(event.target.value);

      // Give mouse priority over keyboard
      // Fix https://github.com/mui/material-ui/issues/22827
      if (hover !== -1) {
        newValue = hover;
      }
      setValueState(newValue);
      if (onChange) {
        onChange(event, newValue);
      }
    };
    const handleClear = event => {
      // Ignore keyboard events
      // https://github.com/facebook/react/issues/7407
      if (event.clientX === 0 && event.clientY === 0) {
        return;
      }
      setState({
        hover: -1,
        focus: -1
      });
      setValueState(null);
      if (onChange && parseFloat(event.target.value) === valueRounded) {
        onChange(event, null);
      }
    };
    const handleFocus = event => {
      handleFocusVisible(event);
      if (isFocusVisibleRef.current === true) {
        setFocusVisible(true);
      }
      const newFocus = parseFloat(event.target.value);
      setState(prev => ({
        hover: prev.hover,
        focus: newFocus
      }));
    };
    const handleBlur = event => {
      if (hover !== -1) {
        return;
      }
      handleBlurVisible(event);
      if (isFocusVisibleRef.current === false) {
        setFocusVisible(false);
      }
      const newFocus = -1;
      setState(prev => ({
        hover: prev.hover,
        focus: newFocus
      }));
    };
    const [emptyValueFocused, setEmptyValueFocused] = React__namespace.useState(false);
    const ownerState = _extends({}, props, {
      defaultValue,
      disabled,
      emptyIcon,
      emptyLabelText,
      emptyValueFocused,
      focusVisible,
      getLabelText,
      icon,
      IconContainerComponent,
      max,
      precision,
      readOnly,
      size
    });
    const classes = useUtilityClasses$z(ownerState);
    return /*#__PURE__*/jsxRuntime_2(RatingRoot, _extends({
      ref: handleRef,
      onMouseMove: handleMouseMove,
      onMouseLeave: handleMouseLeave,
      className: clsx(classes.root, className, readOnly && 'MuiRating-readOnly'),
      ownerState: ownerState,
      role: readOnly ? 'img' : null,
      "aria-label": readOnly ? getLabelText(value) : null
    }, other, {
      children: [Array.from(new Array(max)).map((_, index) => {
        const itemValue = index + 1;
        const ratingItemProps = {
          classes,
          disabled,
          emptyIcon,
          focus,
          getLabelText,
          highlightSelectedOnly,
          hover,
          icon,
          IconContainerComponent,
          name,
          onBlur: handleBlur,
          onChange: handleChange,
          onClick: handleClear,
          onFocus: handleFocus,
          ratingValue: value,
          ratingValueRounded: valueRounded,
          readOnly,
          ownerState
        };
        const isActive = itemValue === Math.ceil(value) && (hover !== -1 || focus !== -1);
        if (precision < 1) {
          const items = Array.from(new Array(1 / precision));
          return /*#__PURE__*/jsxRuntime_1(RatingDecimal, {
            className: clsx(classes.decimal, isActive && classes.iconActive),
            ownerState: ownerState,
            iconActive: isActive,
            children: items.map(($, indexDecimal) => {
              const itemDecimalValue = roundValueToPrecision(itemValue - 1 + (indexDecimal + 1) * precision, precision);
              return /*#__PURE__*/jsxRuntime_1(RatingItem, _extends({}, ratingItemProps, {
                // The icon is already displayed as active
                isActive: false,
                itemValue: itemDecimalValue,
                labelProps: {
                  style: items.length - 1 === indexDecimal ? {} : {
                    width: itemDecimalValue === value ? `${(indexDecimal + 1) * precision * 100}%` : '0%',
                    overflow: 'hidden',
                    position: 'absolute'
                  }
                }
              }), itemDecimalValue);
            })
          }, itemValue);
        }
        return /*#__PURE__*/jsxRuntime_1(RatingItem, _extends({}, ratingItemProps, {
          isActive: isActive,
          itemValue: itemValue
        }), itemValue);
      }), !readOnly && !disabled && /*#__PURE__*/jsxRuntime_2(RatingLabel, {
        className: clsx(classes.label, classes.labelEmptyValue),
        ownerState: ownerState,
        children: [/*#__PURE__*/jsxRuntime_1("input", {
          className: classes.visuallyHidden,
          value: "",
          id: `${name}-empty`,
          type: "radio",
          name: name,
          checked: valueRounded == null,
          onFocus: () => setEmptyValueFocused(true),
          onBlur: () => setEmptyValueFocused(false),
          onChange: handleChange
        }), /*#__PURE__*/jsxRuntime_1("span", {
          className: classes.visuallyHidden,
          children: emptyLabelText
        })]
      })]
    }));
  });
  Rating.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The default value. Use when the component is not controlled.
     * @default null
     */
    defaultValue: PropTypes.number,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * The icon to display when empty.
     * @default <StarBorder fontSize="inherit" />
     */
    emptyIcon: PropTypes.node,
    /**
     * The label read when the rating input is empty.
     * @default 'Empty'
     */
    emptyLabelText: PropTypes.node,
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the current value of the rating.
     * This is important for screen reader users.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @param {number} value The rating label's value to format.
     * @returns {string}
     * @default function defaultLabelText(value) {
     *   return `${value} Star${value !== 1 ? 's' : ''}`;
     * }
     */
    getLabelText: PropTypes.func,
    /**
     * If `true`, only the selected icon will be highlighted.
     * @default false
     */
    highlightSelectedOnly: PropTypes.bool,
    /**
     * The icon to display.
     * @default <Star fontSize="inherit" />
     */
    icon: PropTypes.node,
    /**
     * The component containing the icon.
     * @default function IconContainer(props) {
     *   const { value, ...other } = props;
     *   return <span {...other} />;
     * }
     */
    IconContainerComponent: PropTypes.elementType,
    /**
     * Maximum rating.
     * @default 5
     */
    max: PropTypes.number,
    /**
     * The name attribute of the radio `input` elements.
     * This input `name` should be unique within the page.
     * Being unique within a form is insufficient since the `name` is used to generated IDs.
     */
    name: PropTypes.string,
    /**
     * Callback fired when the value changes.
     * @param {React.SyntheticEvent} event The event source of the callback.
     * @param {number|null} value The new value.
     */
    onChange: PropTypes.func,
    /**
     * Callback function that is fired when the hover state changes.
     * @param {React.SyntheticEvent} event The event source of the callback.
     * @param {number} value The new value.
     */
    onChangeActive: PropTypes.func,
    /**
     * @ignore
     */
    onMouseLeave: PropTypes.func,
    /**
     * @ignore
     */
    onMouseMove: PropTypes.func,
    /**
     * The minimum increment value change allowed.
     * @default 1
     */
    precision: chainPropTypes(PropTypes.number, props => {
      if (props.precision < 0.1) {
        return new Error(['MUI: The prop `precision` should be above 0.1.', 'A value below this limit has an imperceptible impact.'].join('\n'));
      }
      return null;
    }),
    /**
     * Removes all hover effects and pointer events.
     * @default false
     */
    readOnly: PropTypes.bool,
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The rating value.
     */
    value: PropTypes.number
  } ;
  var Rating$1 = Rating;

  function getScopedCssBaselineUtilityClass(slot) {
    return generateUtilityClass('MuiScopedCssBaseline', slot);
  }
  const scopedCssBaselineClasses = generateUtilityClasses('MuiScopedCssBaseline', ['root']);
  var scopedCssBaselineClasses$1 = scopedCssBaselineClasses;

  const _excluded$E = ["className", "component", "enableColorScheme"];
  const useUtilityClasses$y = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getScopedCssBaselineUtilityClass, classes);
  };
  const ScopedCssBaselineRoot = styled$1('div', {
    name: 'MuiScopedCssBaseline',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme,
    ownerState
  }) => {
    const colorSchemeStyles = {};
    if (ownerState.enableColorScheme && theme.colorSchemes) {
      Object.entries(theme.colorSchemes).forEach(([key, scheme]) => {
        var _scheme$palette;
        colorSchemeStyles[`&${theme.getColorSchemeSelector(key).replace(/\s*&/, '')}`] = {
          colorScheme: (_scheme$palette = scheme.palette) == null ? void 0 : _scheme$palette.mode
        };
      });
    }
    return _extends({}, html(theme, ownerState.enableColorScheme), body(theme), {
      '& *, & *::before, & *::after': {
        boxSizing: 'inherit'
      },
      '& strong, & b': {
        fontWeight: theme.typography.fontWeightBold
      }
    }, colorSchemeStyles);
  });
  const ScopedCssBaseline = /*#__PURE__*/React__namespace.forwardRef(function ScopedCssBaseline(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiScopedCssBaseline'
    });
    const {
        className,
        component = 'div'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$E);
    const ownerState = _extends({}, props, {
      component
    });
    const classes = useUtilityClasses$y(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ScopedCssBaselineRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other));
  });
  ScopedCssBaseline.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Enable `color-scheme` CSS property to use `theme.palette.mode`.
     * For more details, check out https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme
     * For browser support, check out https://caniuse.com/?search=color-scheme
     */
    enableColorScheme: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var ScopedCssBaseline$1 = ScopedCssBaseline;

  function getSelectUtilityClasses(slot) {
    return generateUtilityClass('MuiSelect', slot);
  }
  const selectClasses = generateUtilityClasses('MuiSelect', ['root', 'select', 'multiple', 'filled', 'outlined', 'standard', 'disabled', 'focused', 'icon', 'iconOpen', 'iconFilled', 'iconOutlined', 'iconStandard', 'nativeInput', 'error']);
  var selectClasses$1 = selectClasses;

  var _span;
  const _excluded$D = ["aria-describedby", "aria-label", "autoFocus", "autoWidth", "children", "className", "defaultOpen", "defaultValue", "disabled", "displayEmpty", "error", "IconComponent", "inputRef", "labelId", "MenuProps", "multiple", "name", "onBlur", "onChange", "onClose", "onFocus", "onOpen", "open", "readOnly", "renderValue", "SelectDisplayProps", "tabIndex", "type", "value", "variant"];
  const SelectSelect = styled$1('div', {
    name: 'MuiSelect',
    slot: 'Select',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [
      // Win specificity over the input base
      {
        [`&.${selectClasses$1.select}`]: styles.select
      }, {
        [`&.${selectClasses$1.select}`]: styles[ownerState.variant]
      }, {
        [`&.${selectClasses$1.error}`]: styles.error
      }, {
        [`&.${selectClasses$1.multiple}`]: styles.multiple
      }];
    }
  })(nativeSelectSelectStyles, {
    // Win specificity over the input base
    [`&.${selectClasses$1.select}`]: {
      height: 'auto',
      // Resets for multiple select with chips
      minHeight: '1.4375em',
      // Required for select\text-field height consistency
      textOverflow: 'ellipsis',
      whiteSpace: 'nowrap',
      overflow: 'hidden'
    }
  });
  const SelectIcon = styled$1('svg', {
    name: 'MuiSelect',
    slot: 'Icon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.icon, ownerState.variant && styles[`icon${capitalize(ownerState.variant)}`], ownerState.open && styles.iconOpen];
    }
  })(nativeSelectIconStyles);
  const SelectNativeInput = styled$1('input', {
    shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'classes',
    name: 'MuiSelect',
    slot: 'NativeInput',
    overridesResolver: (props, styles) => styles.nativeInput
  })({
    bottom: 0,
    left: 0,
    position: 'absolute',
    opacity: 0,
    pointerEvents: 'none',
    width: '100%',
    boxSizing: 'border-box'
  });
  function areEqualValues(a, b) {
    if (typeof b === 'object' && b !== null) {
      return a === b;
    }

    // The value could be a number, the DOM will stringify it anyway.
    return String(a) === String(b);
  }
  function isEmpty(display) {
    return display == null || typeof display === 'string' && !display.trim();
  }
  const useUtilityClasses$x = ownerState => {
    const {
      classes,
      variant,
      disabled,
      multiple,
      open,
      error
    } = ownerState;
    const slots = {
      select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],
      icon: ['icon', `icon${capitalize(variant)}`, open && 'iconOpen', disabled && 'disabled'],
      nativeInput: ['nativeInput']
    };
    return composeClasses(slots, getSelectUtilityClasses, classes);
  };

  /**
   * @ignore - internal component.
   */
  const SelectInput = /*#__PURE__*/React__namespace.forwardRef(function SelectInput(props, ref) {
    var _MenuProps$slotProps;
    const {
        'aria-describedby': ariaDescribedby,
        'aria-label': ariaLabel,
        autoFocus,
        autoWidth,
        children,
        className,
        defaultOpen,
        defaultValue,
        disabled,
        displayEmpty,
        error = false,
        IconComponent,
        inputRef: inputRefProp,
        labelId,
        MenuProps = {},
        multiple,
        name,
        onBlur,
        onChange,
        onClose,
        onFocus,
        onOpen,
        open: openProp,
        readOnly,
        renderValue,
        SelectDisplayProps = {},
        tabIndex: tabIndexProp
        // catching `type` from Input which makes no sense for SelectInput
        ,

        value: valueProp,
        variant = 'standard'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$D);
    const [value, setValueState] = useControlled({
      controlled: valueProp,
      default: defaultValue,
      name: 'Select'
    });
    const [openState, setOpenState] = useControlled({
      controlled: openProp,
      default: defaultOpen,
      name: 'Select'
    });
    const inputRef = React__namespace.useRef(null);
    const displayRef = React__namespace.useRef(null);
    const [displayNode, setDisplayNode] = React__namespace.useState(null);
    const {
      current: isOpenControlled
    } = React__namespace.useRef(openProp != null);
    const [menuMinWidthState, setMenuMinWidthState] = React__namespace.useState();
    const handleRef = useForkRef(ref, inputRefProp);
    const handleDisplayRef = React__namespace.useCallback(node => {
      displayRef.current = node;
      if (node) {
        setDisplayNode(node);
      }
    }, []);
    const anchorElement = displayNode == null ? void 0 : displayNode.parentNode;
    React__namespace.useImperativeHandle(handleRef, () => ({
      focus: () => {
        displayRef.current.focus();
      },
      node: inputRef.current,
      value
    }), [value]);

    // Resize menu on `defaultOpen` automatic toggle.
    React__namespace.useEffect(() => {
      if (defaultOpen && openState && displayNode && !isOpenControlled) {
        setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);
        displayRef.current.focus();
      }
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [displayNode, autoWidth]);
    // `isOpenControlled` is ignored because the component should never switch between controlled and uncontrolled modes.
    // `defaultOpen` and `openState` are ignored to avoid unnecessary callbacks.
    React__namespace.useEffect(() => {
      if (autoFocus) {
        displayRef.current.focus();
      }
    }, [autoFocus]);
    React__namespace.useEffect(() => {
      if (!labelId) {
        return undefined;
      }
      const label = ownerDocument(displayRef.current).getElementById(labelId);
      if (label) {
        const handler = () => {
          if (getSelection().isCollapsed) {
            displayRef.current.focus();
          }
        };
        label.addEventListener('click', handler);
        return () => {
          label.removeEventListener('click', handler);
        };
      }
      return undefined;
    }, [labelId]);
    const update = (open, event) => {
      if (open) {
        if (onOpen) {
          onOpen(event);
        }
      } else if (onClose) {
        onClose(event);
      }
      if (!isOpenControlled) {
        setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);
        setOpenState(open);
      }
    };
    const handleMouseDown = event => {
      // Ignore everything but left-click
      if (event.button !== 0) {
        return;
      }
      // Hijack the default focus behavior.
      event.preventDefault();
      displayRef.current.focus();
      update(true, event);
    };
    const handleClose = event => {
      update(false, event);
    };
    const childrenArray = React__namespace.Children.toArray(children);

    // Support autofill.
    const handleChange = event => {
      const child = childrenArray.find(childItem => childItem.props.value === event.target.value);
      if (child === undefined) {
        return;
      }
      setValueState(child.props.value);
      if (onChange) {
        onChange(event, child);
      }
    };
    const handleItemClick = child => event => {
      let newValue;

      // We use the tabindex attribute to signal the available options.
      if (!event.currentTarget.hasAttribute('tabindex')) {
        return;
      }
      if (multiple) {
        newValue = Array.isArray(value) ? value.slice() : [];
        const itemIndex = value.indexOf(child.props.value);
        if (itemIndex === -1) {
          newValue.push(child.props.value);
        } else {
          newValue.splice(itemIndex, 1);
        }
      } else {
        newValue = child.props.value;
      }
      if (child.props.onClick) {
        child.props.onClick(event);
      }
      if (value !== newValue) {
        setValueState(newValue);
        if (onChange) {
          // Redefine target to allow name and value to be read.
          // This allows seamless integration with the most popular form libraries.
          // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492
          // Clone the event to not override `target` of the original event.
          const nativeEvent = event.nativeEvent || event;
          const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);
          Object.defineProperty(clonedEvent, 'target', {
            writable: true,
            value: {
              value: newValue,
              name
            }
          });
          onChange(clonedEvent, child);
        }
      }
      if (!multiple) {
        update(false, event);
      }
    };
    const handleKeyDown = event => {
      if (!readOnly) {
        const validKeys = [' ', 'ArrowUp', 'ArrowDown',
        // The native select doesn't respond to enter on macOS, but it's recommended by
        // https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/
        'Enter'];
        if (validKeys.indexOf(event.key) !== -1) {
          event.preventDefault();
          update(true, event);
        }
      }
    };
    const open = displayNode !== null && openState;
    const handleBlur = event => {
      // if open event.stopImmediatePropagation
      if (!open && onBlur) {
        // Preact support, target is read only property on a native event.
        Object.defineProperty(event, 'target', {
          writable: true,
          value: {
            value,
            name
          }
        });
        onBlur(event);
      }
    };
    delete other['aria-invalid'];
    let display;
    let displaySingle;
    const displayMultiple = [];
    let computeDisplay = false;
    let foundMatch = false;

    // No need to display any value if the field is empty.
    if (isFilled({
      value
    }) || displayEmpty) {
      if (renderValue) {
        display = renderValue(value);
      } else {
        computeDisplay = true;
      }
    }
    const items = childrenArray.map(child => {
      if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
        return null;
      }
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The Select component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      let selected;
      if (multiple) {
        if (!Array.isArray(value)) {
          throw new Error(`MUI: The \`value\` prop must be an array when using the \`Select\` component with \`multiple\`.` );
        }
        selected = value.some(v => areEqualValues(v, child.props.value));
        if (selected && computeDisplay) {
          displayMultiple.push(child.props.children);
        }
      } else {
        selected = areEqualValues(value, child.props.value);
        if (selected && computeDisplay) {
          displaySingle = child.props.children;
        }
      }
      if (selected) {
        foundMatch = true;
      }
      return /*#__PURE__*/React__namespace.cloneElement(child, {
        'aria-selected': selected ? 'true' : 'false',
        onClick: handleItemClick(child),
        onKeyUp: event => {
          if (event.key === ' ') {
            // otherwise our MenuItems dispatches a click event
            // it's not behavior of the native <option> and causes
            // the select to close immediately since we open on space keydown
            event.preventDefault();
          }
          if (child.props.onKeyUp) {
            child.props.onKeyUp(event);
          }
        },
        role: 'option',
        selected,
        value: undefined,
        // The value is most likely not a valid HTML attribute.
        'data-value': child.props.value // Instead, we provide it as a data attribute.
      });
    });
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useEffect(() => {
        if (!foundMatch && !multiple && value !== '') {
          const values = childrenArray.map(child => child.props.value);
          console.warn([`MUI: You have provided an out-of-range value \`${value}\` for the select ${name ? `(name="${name}") ` : ''}component.`, "Consider providing a value that matches one of the available options or ''.", `The available values are ${values.filter(x => x != null).map(x => `\`${x}\``).join(', ') || '""'}.`].join('\n'));
        }
      }, [foundMatch, childrenArray, multiple, name, value]);
    }
    if (computeDisplay) {
      if (multiple) {
        if (displayMultiple.length === 0) {
          display = null;
        } else {
          display = displayMultiple.reduce((output, child, index) => {
            output.push(child);
            if (index < displayMultiple.length - 1) {
              output.push(', ');
            }
            return output;
          }, []);
        }
      } else {
        display = displaySingle;
      }
    }

    // Avoid performing a layout computation in the render method.
    let menuMinWidth = menuMinWidthState;
    if (!autoWidth && isOpenControlled && displayNode) {
      menuMinWidth = anchorElement.clientWidth;
    }
    let tabIndex;
    if (typeof tabIndexProp !== 'undefined') {
      tabIndex = tabIndexProp;
    } else {
      tabIndex = disabled ? null : 0;
    }
    const buttonId = SelectDisplayProps.id || (name ? `mui-component-select-${name}` : undefined);
    const ownerState = _extends({}, props, {
      variant,
      value,
      open,
      error
    });
    const classes = useUtilityClasses$x(ownerState);
    const paperProps = _extends({}, MenuProps.PaperProps, (_MenuProps$slotProps = MenuProps.slotProps) == null ? void 0 : _MenuProps$slotProps.paper);
    const listboxId = useId();
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1(SelectSelect, _extends({
        ref: handleDisplayRef,
        tabIndex: tabIndex,
        role: "combobox",
        "aria-controls": listboxId,
        "aria-disabled": disabled ? 'true' : undefined,
        "aria-expanded": open ? 'true' : 'false',
        "aria-haspopup": "listbox",
        "aria-label": ariaLabel,
        "aria-labelledby": [labelId, buttonId].filter(Boolean).join(' ') || undefined,
        "aria-describedby": ariaDescribedby,
        onKeyDown: handleKeyDown,
        onMouseDown: disabled || readOnly ? null : handleMouseDown,
        onBlur: handleBlur,
        onFocus: onFocus
      }, SelectDisplayProps, {
        ownerState: ownerState,
        className: clsx(SelectDisplayProps.className, classes.select, className)
        // The id is required for proper a11y
        ,
        id: buttonId,
        children: isEmpty(display) ? // notranslate needed while Google Translate will not fix zero-width space issue
        _span || (_span = /*#__PURE__*/jsxRuntime_1("span", {
          className: "notranslate",
          children: "\u200B"
        })) : display
      })), /*#__PURE__*/jsxRuntime_1(SelectNativeInput, _extends({
        "aria-invalid": error,
        value: Array.isArray(value) ? value.join(',') : value,
        name: name,
        ref: inputRef,
        "aria-hidden": true,
        onChange: handleChange,
        tabIndex: -1,
        disabled: disabled,
        className: classes.nativeInput,
        autoFocus: autoFocus,
        ownerState: ownerState
      }, other)), /*#__PURE__*/jsxRuntime_1(SelectIcon, {
        as: IconComponent,
        className: classes.icon,
        ownerState: ownerState
      }), /*#__PURE__*/jsxRuntime_1(Menu$1, _extends({
        id: `menu-${name || ''}`,
        anchorEl: anchorElement,
        open: open,
        onClose: handleClose,
        anchorOrigin: {
          vertical: 'bottom',
          horizontal: 'center'
        },
        transformOrigin: {
          vertical: 'top',
          horizontal: 'center'
        }
      }, MenuProps, {
        MenuListProps: _extends({
          'aria-labelledby': labelId,
          role: 'listbox',
          'aria-multiselectable': multiple ? 'true' : undefined,
          disableListWrap: true,
          id: listboxId
        }, MenuProps.MenuListProps),
        slotProps: _extends({}, MenuProps.slotProps, {
          paper: _extends({}, paperProps, {
            style: _extends({
              minWidth: menuMinWidth
            }, paperProps != null ? paperProps.style : null)
          })
        }),
        children: items
      }))]
    });
  });
  SelectInput.propTypes = {
    /**
     * @ignore
     */
    'aria-describedby': PropTypes.string,
    /**
     * @ignore
     */
    'aria-label': PropTypes.string,
    /**
     * @ignore
     */
    autoFocus: PropTypes.bool,
    /**
     * If `true`, the width of the popover will automatically be set according to the items inside the
     * menu, otherwise it will be at least the width of the select input.
     */
    autoWidth: PropTypes.bool,
    /**
     * The option elements to populate the select with.
     * Can be some `<MenuItem>` elements.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
    /**
     * The CSS class name of the select element.
     */
    className: PropTypes.string,
    /**
     * If `true`, the component is toggled on mount. Use when the component open state is not controlled.
     * You can only use it when the `native` prop is `false` (default).
     */
    defaultOpen: PropTypes.bool,
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, the select is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the selected item is displayed even if its value is empty.
     */
    displayEmpty: PropTypes.bool,
    /**
     * If `true`, the `select input` will indicate an error.
     */
    error: PropTypes.bool,
    /**
     * The icon that displays the arrow.
     */
    IconComponent: PropTypes.elementType.isRequired,
    /**
     * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`
     * Equivalent to `ref`
     */
    inputRef: refType$1,
    /**
     * The ID of an element that acts as an additional label. The Select will
     * be labelled by the additional label and the selected value.
     */
    labelId: PropTypes.string,
    /**
     * Props applied to the [`Menu`](/material-ui/api/menu/) element.
     */
    MenuProps: PropTypes.object,
    /**
     * If `true`, `value` must be an array and the menu will support multiple selections.
     */
    multiple: PropTypes.bool,
    /**
     * Name attribute of the `select` or hidden `input` element.
     */
    name: PropTypes.string,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * Callback fired when a menu item is selected.
     *
     * @param {object} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (any).
     * @param {object} [child] The react element that was selected.
     */
    onChange: PropTypes.func,
    /**
     * Callback fired when the component requests to be closed.
     * Use in controlled mode (see open).
     *
     * @param {object} event The event source of the callback.
     */
    onClose: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * Callback fired when the component requests to be opened.
     * Use in controlled mode (see open).
     *
     * @param {object} event The event source of the callback.
     */
    onOpen: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * @ignore
     */
    readOnly: PropTypes.bool,
    /**
     * Render the selected value.
     *
     * @param {any} value The `value` provided to the component.
     * @returns {ReactNode}
     */
    renderValue: PropTypes.func,
    /**
     * Props applied to the clickable div element.
     */
    SelectDisplayProps: PropTypes.object,
    /**
     * @ignore
     */
    tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * @ignore
     */
    type: PropTypes.any,
    /**
     * The input value.
     */
    value: PropTypes.any,
    /**
     * The variant to use.
     */
    variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])
  } ;
  var SelectInput$1 = SelectInput;

  const _excluded$C = ["autoWidth", "children", "classes", "className", "defaultOpen", "displayEmpty", "IconComponent", "id", "input", "inputProps", "label", "labelId", "MenuProps", "multiple", "native", "onClose", "onOpen", "open", "renderValue", "SelectDisplayProps", "variant"],
    _excluded2$3 = ["root"];
  const useUtilityClasses$w = ownerState => {
    const {
      classes
    } = ownerState;
    return classes;
  };
  const styledRootConfig = {
    name: 'MuiSelect',
    overridesResolver: (props, styles) => styles.root,
    shouldForwardProp: prop => rootShouldForwardProp(prop) && prop !== 'variant',
    slot: 'Root'
  };
  const StyledInput = styled$1(Input$1, styledRootConfig)('');
  const StyledOutlinedInput = styled$1(OutlinedInput$1, styledRootConfig)('');
  const StyledFilledInput = styled$1(FilledInput$1, styledRootConfig)('');
  const Select = /*#__PURE__*/React__namespace.forwardRef(function Select(inProps, ref) {
    const props = useThemeProps({
      name: 'MuiSelect',
      props: inProps
    });
    const {
        autoWidth = false,
        children,
        classes: classesProp = {},
        className,
        defaultOpen = false,
        displayEmpty = false,
        IconComponent = ArrowDropDownIcon,
        id,
        input,
        inputProps,
        label,
        labelId,
        MenuProps,
        multiple = false,
        native = false,
        onClose,
        onOpen,
        open,
        renderValue,
        SelectDisplayProps,
        variant: variantProp = 'outlined'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$C);
    const inputComponent = native ? NativeSelectInput$1 : SelectInput$1;
    const muiFormControl = useFormControl();
    const fcs = formControlState({
      props,
      muiFormControl,
      states: ['variant', 'error']
    });
    const variant = fcs.variant || variantProp;
    const ownerState = _extends({}, props, {
      variant,
      classes: classesProp
    });
    const classes = useUtilityClasses$w(ownerState);
    const restOfClasses = _objectWithoutPropertiesLoose(classes, _excluded2$3);
    const InputComponent = input || {
      standard: /*#__PURE__*/jsxRuntime_1(StyledInput, {
        ownerState: ownerState
      }),
      outlined: /*#__PURE__*/jsxRuntime_1(StyledOutlinedInput, {
        label: label,
        ownerState: ownerState
      }),
      filled: /*#__PURE__*/jsxRuntime_1(StyledFilledInput, {
        ownerState: ownerState
      })
    }[variant];
    const inputComponentRef = useForkRef(ref, InputComponent.ref);
    return /*#__PURE__*/jsxRuntime_1(React__namespace.Fragment, {
      children: /*#__PURE__*/React__namespace.cloneElement(InputComponent, _extends({
        // Most of the logic is implemented in `SelectInput`.
        // The `Select` component is a simple API wrapper to expose something better to play with.
        inputComponent,
        inputProps: _extends({
          children,
          error: fcs.error,
          IconComponent,
          variant,
          type: undefined,
          // We render a select. We can ignore the type provided by the `Input`.
          multiple
        }, native ? {
          id
        } : {
          autoWidth,
          defaultOpen,
          displayEmpty,
          labelId,
          MenuProps,
          onClose,
          onOpen,
          open,
          renderValue,
          SelectDisplayProps: _extends({
            id
          }, SelectDisplayProps)
        }, inputProps, {
          classes: inputProps ? deepmerge(restOfClasses, inputProps.classes) : restOfClasses
        }, input ? input.props.inputProps : {})
      }, multiple && native && variant === 'outlined' ? {
        notched: true
      } : {}, {
        ref: inputComponentRef,
        className: clsx(InputComponent.props.className, className, classes.root)
      }, !input && {
        variant
      }, other))
    });
  });
  Select.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the width of the popover will automatically be set according to the items inside the
     * menu, otherwise it will be at least the width of the select input.
     * @default false
     */
    autoWidth: PropTypes.bool,
    /**
     * The option elements to populate the select with.
     * Can be some `MenuItem` when `native` is false and `option` when `native` is true.
     *
     * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     * @default {}
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the component is initially open. Use when the component open state is not controlled (i.e. the `open` prop is not defined).
     * You can only use it when the `native` prop is `false` (default).
     * @default false
     */
    defaultOpen: PropTypes.bool,
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, a value is displayed even if no items are selected.
     *
     * In order to display a meaningful value, a function can be passed to the `renderValue` prop which
     * returns the value to be displayed when no items are selected.
     *
     * ⚠️ When using this prop, make sure the label doesn't overlap with the empty displayed value.
     * The label should either be hidden or forced to a shrunk state.
     * @default false
     */
    displayEmpty: PropTypes.bool,
    /**
     * The icon that displays the arrow.
     * @default ArrowDropDownIcon
     */
    IconComponent: PropTypes.elementType,
    /**
     * The `id` of the wrapper element or the `select` element when `native`.
     */
    id: PropTypes.string,
    /**
     * An `Input` element; does not have to be a material-ui specific `Input`.
     */
    input: PropTypes.element,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     * When `native` is `true`, the attributes are applied on the `select` element.
     */
    inputProps: PropTypes.object,
    /**
     * See [OutlinedInput#label](/material-ui/api/outlined-input/#props)
     */
    label: PropTypes.node,
    /**
     * The ID of an element that acts as an additional label. The Select will
     * be labelled by the additional label and the selected value.
     */
    labelId: PropTypes.string,
    /**
     * Props applied to the [`Menu`](/material-ui/api/menu/) element.
     */
    MenuProps: PropTypes.object,
    /**
     * If `true`, `value` must be an array and the menu will support multiple selections.
     * @default false
     */
    multiple: PropTypes.bool,
    /**
     * If `true`, the component uses a native `select` element.
     * @default false
     */
    native: PropTypes.bool,
    /**
     * Callback fired when a menu item is selected.
     *
     * @param {SelectChangeEvent<Value>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (any).
     * **Warning**: This is a generic event, not a change event, unless the change event is caused by browser autofill.
     * @param {object} [child] The react element that was selected when `native` is `false` (default).
     */
    onChange: PropTypes.func,
    /**
     * Callback fired when the component requests to be closed.
     * Use it in either controlled (see the `open` prop), or uncontrolled mode (to detect when the Select collapses).
     *
     * @param {object} event The event source of the callback.
     */
    onClose: PropTypes.func,
    /**
     * Callback fired when the component requests to be opened.
     * Use it in either controlled (see the `open` prop), or uncontrolled mode (to detect when the Select expands).
     *
     * @param {object} event The event source of the callback.
     */
    onOpen: PropTypes.func,
    /**
     * If `true`, the component is shown.
     * You can only use it when the `native` prop is `false` (default).
     */
    open: PropTypes.bool,
    /**
     * Render the selected value.
     * You can only use it when the `native` prop is `false` (default).
     *
     * @param {any} value The `value` provided to the component.
     * @returns {ReactNode}
     */
    renderValue: PropTypes.func,
    /**
     * Props applied to the clickable div element.
     */
    SelectDisplayProps: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The `input` value. Providing an empty string will select no options.
     * Set to an empty string `''` if you don't want any of the available options to be selected.
     *
     * If the value is an object it must have reference equality with the option in order to be selected.
     * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.
     */
    value: PropTypes.oneOfType([PropTypes.oneOf(['']), PropTypes.any]),
    /**
     * The variant to use.
     * @default 'outlined'
     */
    variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
  } ;
  Select.muiName = 'Select';
  var Select$1 = Select;

  function getSkeletonUtilityClass(slot) {
    return generateUtilityClass('MuiSkeleton', slot);
  }
  const skeletonClasses = generateUtilityClasses('MuiSkeleton', ['root', 'text', 'rectangular', 'rounded', 'circular', 'pulse', 'wave', 'withChildren', 'fitContent', 'heightAuto']);
  var skeletonClasses$1 = skeletonClasses;

  const _excluded$B = ["animation", "className", "component", "height", "style", "variant", "width"];
  let _ = t => t,
    _t,
    _t2,
    _t3,
    _t4;
  const useUtilityClasses$v = ownerState => {
    const {
      classes,
      variant,
      animation,
      hasChildren,
      width,
      height
    } = ownerState;
    const slots = {
      root: ['root', variant, animation, hasChildren && 'withChildren', hasChildren && !width && 'fitContent', hasChildren && !height && 'heightAuto']
    };
    return composeClasses(slots, getSkeletonUtilityClass, classes);
  };
  const pulseKeyframe = keyframes(_t || (_t = _`
  0% {
    opacity: 1;
  }

  50% {
    opacity: 0.4;
  }

  100% {
    opacity: 1;
  }
`));
  const waveKeyframe = keyframes(_t2 || (_t2 = _`
  0% {
    transform: translateX(-100%);
  }

  50% {
    /* +0.5s of delay between each loop */
    transform: translateX(100%);
  }

  100% {
    transform: translateX(100%);
  }
`));
  const SkeletonRoot = styled$1('span', {
    name: 'MuiSkeleton',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], ownerState.animation !== false && styles[ownerState.animation], ownerState.hasChildren && styles.withChildren, ownerState.hasChildren && !ownerState.width && styles.fitContent, ownerState.hasChildren && !ownerState.height && styles.heightAuto];
    }
  })(({
    theme,
    ownerState
  }) => {
    const radiusUnit = getUnit(theme.shape.borderRadius) || 'px';
    const radiusValue = toUnitless(theme.shape.borderRadius);
    return _extends({
      display: 'block',
      // Create a "on paper" color with sufficient contrast retaining the color
      backgroundColor: theme.vars ? theme.vars.palette.Skeleton.bg : alpha(theme.palette.text.primary, theme.palette.mode === 'light' ? 0.11 : 0.13),
      height: '1.2em'
    }, ownerState.variant === 'text' && {
      marginTop: 0,
      marginBottom: 0,
      height: 'auto',
      transformOrigin: '0 55%',
      transform: 'scale(1, 0.60)',
      borderRadius: `${radiusValue}${radiusUnit}/${Math.round(radiusValue / 0.6 * 10) / 10}${radiusUnit}`,
      '&:empty:before': {
        content: '"\\00a0"'
      }
    }, ownerState.variant === 'circular' && {
      borderRadius: '50%'
    }, ownerState.variant === 'rounded' && {
      borderRadius: (theme.vars || theme).shape.borderRadius
    }, ownerState.hasChildren && {
      '& > *': {
        visibility: 'hidden'
      }
    }, ownerState.hasChildren && !ownerState.width && {
      maxWidth: 'fit-content'
    }, ownerState.hasChildren && !ownerState.height && {
      height: 'auto'
    });
  }, ({
    ownerState
  }) => ownerState.animation === 'pulse' && css(_t3 || (_t3 = _`
      animation: ${0} 2s ease-in-out 0.5s infinite;
    `), pulseKeyframe), ({
    ownerState,
    theme
  }) => ownerState.animation === 'wave' && css(_t4 || (_t4 = _`
      position: relative;
      overflow: hidden;

      /* Fix bug in Safari https://bugs.webkit.org/show_bug.cgi?id=68196 */
      -webkit-mask-image: -webkit-radial-gradient(white, black);

      &::after {
        animation: ${0} 2s linear 0.5s infinite;
        background: linear-gradient(
          90deg,
          transparent,
          ${0},
          transparent
        );
        content: '';
        position: absolute;
        transform: translateX(-100%); /* Avoid flash during server-side hydration */
        bottom: 0;
        left: 0;
        right: 0;
        top: 0;
      }
    `), waveKeyframe, (theme.vars || theme).palette.action.hover));
  const Skeleton = /*#__PURE__*/React__namespace.forwardRef(function Skeleton(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSkeleton'
    });
    const {
        animation = 'pulse',
        className,
        component = 'span',
        height,
        style,
        variant = 'text',
        width
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$B);
    const ownerState = _extends({}, props, {
      animation,
      component,
      variant,
      hasChildren: Boolean(other.children)
    });
    const classes = useUtilityClasses$v(ownerState);
    return /*#__PURE__*/jsxRuntime_1(SkeletonRoot, _extends({
      as: component,
      ref: ref,
      className: clsx(classes.root, className),
      ownerState: ownerState
    }, other, {
      style: _extends({
        width,
        height
      }, style)
    }));
  });
  Skeleton.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The animation.
     * If `false` the animation effect is disabled.
     * @default 'pulse'
     */
    animation: PropTypes.oneOf(['pulse', 'wave', false]),
    /**
     * Optional children to infer width and height from.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Height of the skeleton.
     * Useful when you don't want to adapt the skeleton to a text element but for instance a card.
     */
    height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The type of content that will be rendered.
     * @default 'text'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rectangular', 'rounded', 'text']), PropTypes.string]),
    /**
     * Width of the skeleton.
     * Useful when the skeleton is inside an inline element with no width of its own.
     */
    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
  } ;
  var Skeleton$1 = Skeleton;

  const shouldSpreadAdditionalProps = Slot => {
    return !Slot || !isHostComponent(Slot);
  };
  var shouldSpreadAdditionalProps$1 = shouldSpreadAdditionalProps;

  function getSliderUtilityClass(slot) {
    return generateUtilityClass('MuiSlider', slot);
  }
  const sliderClasses = generateUtilityClasses('MuiSlider', ['root', 'active', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'disabled', 'dragging', 'focusVisible', 'mark', 'markActive', 'marked', 'markLabel', 'markLabelActive', 'rail', 'sizeSmall', 'thumb', 'thumbColorPrimary', 'thumbColorSecondary', 'thumbColorError', 'thumbColorSuccess', 'thumbColorInfo', 'thumbColorWarning', 'track', 'trackInverted', 'trackFalse', 'thumbSizeSmall', 'valueLabel', 'valueLabelOpen', 'valueLabelCircle', 'valueLabelLabel', 'vertical']);
  var sliderClasses$1 = sliderClasses;

  const useValueLabelClasses = props => {
    const {
      open
    } = props;
    const utilityClasses = {
      offset: clsx(open && sliderClasses$1.valueLabelOpen),
      circle: sliderClasses$1.valueLabelCircle,
      label: sliderClasses$1.valueLabelLabel
    };
    return utilityClasses;
  };

  /**
   * @ignore - internal component.
   */
  function SliderValueLabel$1(props) {
    const {
      children,
      className,
      value
    } = props;
    const classes = useValueLabelClasses(props);
    if (!children) {
      return null;
    }
    return /*#__PURE__*/React__namespace.cloneElement(children, {
      className: clsx(children.props.className)
    }, /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [children.props.children, /*#__PURE__*/jsxRuntime_1("span", {
        className: clsx(classes.offset, className),
        "aria-hidden": true,
        children: /*#__PURE__*/jsxRuntime_1("span", {
          className: classes.circle,
          children: /*#__PURE__*/jsxRuntime_1("span", {
            className: classes.label,
            children: value
          })
        })
      })]
    }));
  }
  SliderValueLabel$1.propTypes = {
    children: PropTypes.element.isRequired,
    className: PropTypes.string,
    value: PropTypes.node
  } ;

  const _excluded$A = ["aria-label", "aria-valuetext", "aria-labelledby", "component", "components", "componentsProps", "color", "classes", "className", "disableSwap", "disabled", "getAriaLabel", "getAriaValueText", "marks", "max", "min", "name", "onChange", "onChangeCommitted", "orientation", "size", "step", "scale", "slotProps", "slots", "tabIndex", "track", "value", "valueLabelDisplay", "valueLabelFormat"];
  function Identity(x) {
    return x;
  }
  const SliderRoot = styled$1('span', {
    name: 'MuiSlider',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`color${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`size${capitalize(ownerState.size)}`], ownerState.marked && styles.marked, ownerState.orientation === 'vertical' && styles.vertical, ownerState.track === 'inverted' && styles.trackInverted, ownerState.track === false && styles.trackFalse];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    borderRadius: 12,
    boxSizing: 'content-box',
    display: 'inline-block',
    position: 'relative',
    cursor: 'pointer',
    touchAction: 'none',
    color: (theme.vars || theme).palette[ownerState.color].main,
    WebkitTapHighlightColor: 'transparent'
  }, ownerState.orientation === 'horizontal' && _extends({
    height: 4,
    width: '100%',
    padding: '13px 0',
    // The primary input mechanism of the device includes a pointing device of limited accuracy.
    '@media (pointer: coarse)': {
      // Reach 42px touch target, about ~8mm on screen.
      padding: '20px 0'
    }
  }, ownerState.size === 'small' && {
    height: 2
  }, ownerState.marked && {
    marginBottom: 20
  }), ownerState.orientation === 'vertical' && _extends({
    height: '100%',
    width: 4,
    padding: '0 13px',
    // The primary input mechanism of the device includes a pointing device of limited accuracy.
    '@media (pointer: coarse)': {
      // Reach 42px touch target, about ~8mm on screen.
      padding: '0 20px'
    }
  }, ownerState.size === 'small' && {
    width: 2
  }, ownerState.marked && {
    marginRight: 44
  }), {
    '@media print': {
      colorAdjust: 'exact'
    },
    [`&.${sliderClasses$1.disabled}`]: {
      pointerEvents: 'none',
      cursor: 'default',
      color: (theme.vars || theme).palette.grey[400]
    },
    [`&.${sliderClasses$1.dragging}`]: {
      [`& .${sliderClasses$1.thumb}, & .${sliderClasses$1.track}`]: {
        transition: 'none'
      }
    }
  }));
  const SliderRail = styled$1('span', {
    name: 'MuiSlider',
    slot: 'Rail',
    overridesResolver: (props, styles) => styles.rail
  })(({
    ownerState
  }) => _extends({
    display: 'block',
    position: 'absolute',
    borderRadius: 'inherit',
    backgroundColor: 'currentColor',
    opacity: 0.38
  }, ownerState.orientation === 'horizontal' && {
    width: '100%',
    height: 'inherit',
    top: '50%',
    transform: 'translateY(-50%)'
  }, ownerState.orientation === 'vertical' && {
    height: '100%',
    width: 'inherit',
    left: '50%',
    transform: 'translateX(-50%)'
  }, ownerState.track === 'inverted' && {
    opacity: 1
  }));
  const SliderTrack = styled$1('span', {
    name: 'MuiSlider',
    slot: 'Track',
    overridesResolver: (props, styles) => styles.track
  })(({
    theme,
    ownerState
  }) => {
    const color =
    // Same logic as the LinearProgress track color
    theme.palette.mode === 'light' ? lighten(theme.palette[ownerState.color].main, 0.62) : darken(theme.palette[ownerState.color].main, 0.5);
    return _extends({
      display: 'block',
      position: 'absolute',
      borderRadius: 'inherit',
      border: '1px solid currentColor',
      backgroundColor: 'currentColor',
      transition: theme.transitions.create(['left', 'width', 'bottom', 'height'], {
        duration: theme.transitions.duration.shortest
      })
    }, ownerState.size === 'small' && {
      border: 'none'
    }, ownerState.orientation === 'horizontal' && {
      height: 'inherit',
      top: '50%',
      transform: 'translateY(-50%)'
    }, ownerState.orientation === 'vertical' && {
      width: 'inherit',
      left: '50%',
      transform: 'translateX(-50%)'
    }, ownerState.track === false && {
      display: 'none'
    }, ownerState.track === 'inverted' && {
      backgroundColor: theme.vars ? theme.vars.palette.Slider[`${ownerState.color}Track`] : color,
      borderColor: theme.vars ? theme.vars.palette.Slider[`${ownerState.color}Track`] : color
    });
  });
  const SliderThumb = styled$1('span', {
    name: 'MuiSlider',
    slot: 'Thumb',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.thumb, styles[`thumbColor${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`thumbSize${capitalize(ownerState.size)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    position: 'absolute',
    width: 20,
    height: 20,
    boxSizing: 'border-box',
    borderRadius: '50%',
    outline: 0,
    backgroundColor: 'currentColor',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    transition: theme.transitions.create(['box-shadow', 'left', 'bottom'], {
      duration: theme.transitions.duration.shortest
    })
  }, ownerState.size === 'small' && {
    width: 12,
    height: 12
  }, ownerState.orientation === 'horizontal' && {
    top: '50%',
    transform: 'translate(-50%, -50%)'
  }, ownerState.orientation === 'vertical' && {
    left: '50%',
    transform: 'translate(-50%, 50%)'
  }, {
    '&:before': _extends({
      position: 'absolute',
      content: '""',
      borderRadius: 'inherit',
      width: '100%',
      height: '100%',
      boxShadow: (theme.vars || theme).shadows[2]
    }, ownerState.size === 'small' && {
      boxShadow: 'none'
    }),
    '&::after': {
      position: 'absolute',
      content: '""',
      borderRadius: '50%',
      // 42px is the hit target
      width: 42,
      height: 42,
      top: '50%',
      left: '50%',
      transform: 'translate(-50%, -50%)'
    },
    [`&:hover, &.${sliderClasses$1.focusVisible}`]: {
      boxShadow: `0px 0px 0px 8px ${theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.16)` : alpha(theme.palette[ownerState.color].main, 0.16)}`,
      '@media (hover: none)': {
        boxShadow: 'none'
      }
    },
    [`&.${sliderClasses$1.active}`]: {
      boxShadow: `0px 0px 0px 14px ${theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.16)` : alpha(theme.palette[ownerState.color].main, 0.16)}`
    },
    [`&.${sliderClasses$1.disabled}`]: {
      '&:hover': {
        boxShadow: 'none'
      }
    }
  }));
  const SliderValueLabel = styled$1(SliderValueLabel$1, {
    name: 'MuiSlider',
    slot: 'ValueLabel',
    overridesResolver: (props, styles) => styles.valueLabel
  })(({
    theme,
    ownerState
  }) => _extends({
    [`&.${sliderClasses$1.valueLabelOpen}`]: {
      transform: `${ownerState.orientation === 'vertical' ? 'translateY(-50%)' : 'translateY(-100%)'} scale(1)`
    },
    zIndex: 1,
    whiteSpace: 'nowrap'
  }, theme.typography.body2, {
    fontWeight: 500,
    transition: theme.transitions.create(['transform'], {
      duration: theme.transitions.duration.shortest
    }),
    transform: `${ownerState.orientation === 'vertical' ? 'translateY(-50%)' : 'translateY(-100%)'} scale(0)`,
    position: 'absolute',
    backgroundColor: (theme.vars || theme).palette.grey[600],
    borderRadius: 2,
    color: (theme.vars || theme).palette.common.white,
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    padding: '0.25rem 0.75rem'
  }, ownerState.orientation === 'horizontal' && {
    top: '-10px',
    transformOrigin: 'bottom center',
    '&:before': {
      position: 'absolute',
      content: '""',
      width: 8,
      height: 8,
      transform: 'translate(-50%, 50%) rotate(45deg)',
      backgroundColor: 'inherit',
      bottom: 0,
      left: '50%'
    }
  }, ownerState.orientation === 'vertical' && {
    right: ownerState.size === 'small' ? '20px' : '30px',
    top: '50%',
    transformOrigin: 'right center',
    '&:before': {
      position: 'absolute',
      content: '""',
      width: 8,
      height: 8,
      transform: 'translate(-50%, -50%) rotate(45deg)',
      backgroundColor: 'inherit',
      right: -8,
      top: '50%'
    }
  }, ownerState.size === 'small' && {
    fontSize: theme.typography.pxToRem(12),
    padding: '0.25rem 0.5rem'
  }));
  const SliderMark = styled$1('span', {
    name: 'MuiSlider',
    slot: 'Mark',
    shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markActive',
    overridesResolver: (props, styles) => {
      const {
        markActive
      } = props;
      return [styles.mark, markActive && styles.markActive];
    }
  })(({
    theme,
    ownerState,
    markActive
  }) => _extends({
    position: 'absolute',
    width: 2,
    height: 2,
    borderRadius: 1,
    backgroundColor: 'currentColor'
  }, ownerState.orientation === 'horizontal' && {
    top: '50%',
    transform: 'translate(-1px, -50%)'
  }, ownerState.orientation === 'vertical' && {
    left: '50%',
    transform: 'translate(-50%, 1px)'
  }, markActive && {
    backgroundColor: (theme.vars || theme).palette.background.paper,
    opacity: 0.8
  }));
  const SliderMarkLabel = styled$1('span', {
    name: 'MuiSlider',
    slot: 'MarkLabel',
    shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markLabelActive',
    overridesResolver: (props, styles) => styles.markLabel
  })(({
    theme,
    ownerState,
    markLabelActive
  }) => _extends({}, theme.typography.body2, {
    color: (theme.vars || theme).palette.text.secondary,
    position: 'absolute',
    whiteSpace: 'nowrap'
  }, ownerState.orientation === 'horizontal' && {
    top: 30,
    transform: 'translateX(-50%)',
    '@media (pointer: coarse)': {
      top: 40
    }
  }, ownerState.orientation === 'vertical' && {
    left: 36,
    transform: 'translateY(50%)',
    '@media (pointer: coarse)': {
      left: 44
    }
  }, markLabelActive && {
    color: (theme.vars || theme).palette.text.primary
  }));
  const useUtilityClasses$u = ownerState => {
    const {
      disabled,
      dragging,
      marked,
      orientation,
      track,
      classes,
      color,
      size
    } = ownerState;
    const slots = {
      root: ['root', disabled && 'disabled', dragging && 'dragging', marked && 'marked', orientation === 'vertical' && 'vertical', track === 'inverted' && 'trackInverted', track === false && 'trackFalse', color && `color${capitalize(color)}`, size && `size${capitalize(size)}`],
      rail: ['rail'],
      track: ['track'],
      mark: ['mark'],
      markActive: ['markActive'],
      markLabel: ['markLabel'],
      markLabelActive: ['markLabelActive'],
      valueLabel: ['valueLabel'],
      thumb: ['thumb', disabled && 'disabled', size && `thumbSize${capitalize(size)}`, color && `thumbColor${capitalize(color)}`],
      active: ['active'],
      disabled: ['disabled'],
      focusVisible: ['focusVisible']
    };
    return composeClasses(slots, getSliderUtilityClass, classes);
  };
  const Forward = ({
    children
  }) => children;
  const Slider = /*#__PURE__*/React__namespace.forwardRef(function Slider(inputProps, ref) {
    var _ref, _slots$root, _ref2, _slots$rail, _ref3, _slots$track, _ref4, _slots$thumb, _ref5, _slots$valueLabel, _ref6, _slots$mark, _ref7, _slots$markLabel, _ref8, _slots$input, _slotProps$root, _slotProps$rail, _slotProps$track, _slotProps$thumb, _slotProps$valueLabel, _slotProps$mark, _slotProps$markLabel, _slotProps$input;
    const props = useThemeProps({
      props: inputProps,
      name: 'MuiSlider'
    });
    const theme = useTheme();
    const isRtl = theme.direction === 'rtl';
    const {
        'aria-label': ariaLabel,
        'aria-valuetext': ariaValuetext,
        'aria-labelledby': ariaLabelledby,
        // eslint-disable-next-line react/prop-types
        component = 'span',
        components = {},
        componentsProps = {},
        color = 'primary',
        classes: classesProp,
        className,
        disableSwap = false,
        disabled = false,
        getAriaLabel,
        getAriaValueText,
        marks: marksProp = false,
        max = 100,
        min = 0,
        orientation = 'horizontal',
        size = 'medium',
        step = 1,
        scale = Identity,
        slotProps,
        slots,
        track = 'normal',
        valueLabelDisplay = 'off',
        valueLabelFormat = Identity
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$A);
    const ownerState = _extends({}, props, {
      isRtl,
      max,
      min,
      classes: classesProp,
      disabled,
      disableSwap,
      orientation,
      marks: marksProp,
      color,
      size,
      step,
      scale,
      track,
      valueLabelDisplay,
      valueLabelFormat
    });
    const {
      axisProps,
      getRootProps,
      getHiddenInputProps,
      getThumbProps,
      open,
      active,
      axis,
      focusedThumbIndex,
      range,
      dragging,
      marks,
      values,
      trackOffset,
      trackLeap,
      getThumbStyle
    } = useSlider(_extends({}, ownerState, {
      rootRef: ref
    }));
    ownerState.marked = marks.length > 0 && marks.some(mark => mark.label);
    ownerState.dragging = dragging;
    ownerState.focusedThumbIndex = focusedThumbIndex;
    const classes = useUtilityClasses$u(ownerState);

    // support both `slots` and `components` for backward compatibility
    const RootSlot = (_ref = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components.Root) != null ? _ref : SliderRoot;
    const RailSlot = (_ref2 = (_slots$rail = slots == null ? void 0 : slots.rail) != null ? _slots$rail : components.Rail) != null ? _ref2 : SliderRail;
    const TrackSlot = (_ref3 = (_slots$track = slots == null ? void 0 : slots.track) != null ? _slots$track : components.Track) != null ? _ref3 : SliderTrack;
    const ThumbSlot = (_ref4 = (_slots$thumb = slots == null ? void 0 : slots.thumb) != null ? _slots$thumb : components.Thumb) != null ? _ref4 : SliderThumb;
    const ValueLabelSlot = (_ref5 = (_slots$valueLabel = slots == null ? void 0 : slots.valueLabel) != null ? _slots$valueLabel : components.ValueLabel) != null ? _ref5 : SliderValueLabel;
    const MarkSlot = (_ref6 = (_slots$mark = slots == null ? void 0 : slots.mark) != null ? _slots$mark : components.Mark) != null ? _ref6 : SliderMark;
    const MarkLabelSlot = (_ref7 = (_slots$markLabel = slots == null ? void 0 : slots.markLabel) != null ? _slots$markLabel : components.MarkLabel) != null ? _ref7 : SliderMarkLabel;
    const InputSlot = (_ref8 = (_slots$input = slots == null ? void 0 : slots.input) != null ? _slots$input : components.Input) != null ? _ref8 : 'input';
    const rootSlotProps = (_slotProps$root = slotProps == null ? void 0 : slotProps.root) != null ? _slotProps$root : componentsProps.root;
    const railSlotProps = (_slotProps$rail = slotProps == null ? void 0 : slotProps.rail) != null ? _slotProps$rail : componentsProps.rail;
    const trackSlotProps = (_slotProps$track = slotProps == null ? void 0 : slotProps.track) != null ? _slotProps$track : componentsProps.track;
    const thumbSlotProps = (_slotProps$thumb = slotProps == null ? void 0 : slotProps.thumb) != null ? _slotProps$thumb : componentsProps.thumb;
    const valueLabelSlotProps = (_slotProps$valueLabel = slotProps == null ? void 0 : slotProps.valueLabel) != null ? _slotProps$valueLabel : componentsProps.valueLabel;
    const markSlotProps = (_slotProps$mark = slotProps == null ? void 0 : slotProps.mark) != null ? _slotProps$mark : componentsProps.mark;
    const markLabelSlotProps = (_slotProps$markLabel = slotProps == null ? void 0 : slotProps.markLabel) != null ? _slotProps$markLabel : componentsProps.markLabel;
    const inputSlotProps = (_slotProps$input = slotProps == null ? void 0 : slotProps.input) != null ? _slotProps$input : componentsProps.input;
    const rootProps = useSlotProps({
      elementType: RootSlot,
      getSlotProps: getRootProps,
      externalSlotProps: rootSlotProps,
      externalForwardedProps: other,
      additionalProps: _extends({}, shouldSpreadAdditionalProps$1(RootSlot) && {
        as: component
      }),
      ownerState: _extends({}, ownerState, rootSlotProps == null ? void 0 : rootSlotProps.ownerState),
      className: [classes.root, className]
    });
    const railProps = useSlotProps({
      elementType: RailSlot,
      externalSlotProps: railSlotProps,
      ownerState,
      className: classes.rail
    });
    const trackProps = useSlotProps({
      elementType: TrackSlot,
      externalSlotProps: trackSlotProps,
      additionalProps: {
        style: _extends({}, axisProps[axis].offset(trackOffset), axisProps[axis].leap(trackLeap))
      },
      ownerState: _extends({}, ownerState, trackSlotProps == null ? void 0 : trackSlotProps.ownerState),
      className: classes.track
    });
    const thumbProps = useSlotProps({
      elementType: ThumbSlot,
      getSlotProps: getThumbProps,
      externalSlotProps: thumbSlotProps,
      ownerState: _extends({}, ownerState, thumbSlotProps == null ? void 0 : thumbSlotProps.ownerState),
      className: classes.thumb
    });
    const valueLabelProps = useSlotProps({
      elementType: ValueLabelSlot,
      externalSlotProps: valueLabelSlotProps,
      ownerState: _extends({}, ownerState, valueLabelSlotProps == null ? void 0 : valueLabelSlotProps.ownerState),
      className: classes.valueLabel
    });
    const markProps = useSlotProps({
      elementType: MarkSlot,
      externalSlotProps: markSlotProps,
      ownerState,
      className: classes.mark
    });
    const markLabelProps = useSlotProps({
      elementType: MarkLabelSlot,
      externalSlotProps: markLabelSlotProps,
      ownerState,
      className: classes.markLabel
    });
    const inputSliderProps = useSlotProps({
      elementType: InputSlot,
      getSlotProps: getHiddenInputProps,
      externalSlotProps: inputSlotProps,
      ownerState
    });
    return /*#__PURE__*/jsxRuntime_2(RootSlot, _extends({}, rootProps, {
      children: [/*#__PURE__*/jsxRuntime_1(RailSlot, _extends({}, railProps)), /*#__PURE__*/jsxRuntime_1(TrackSlot, _extends({}, trackProps)), marks.filter(mark => mark.value >= min && mark.value <= max).map((mark, index) => {
        const percent = valueToPercent(mark.value, min, max);
        const style = axisProps[axis].offset(percent);
        let markActive;
        if (track === false) {
          markActive = values.indexOf(mark.value) !== -1;
        } else {
          markActive = track === 'normal' && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === 'inverted' && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]);
        }
        return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
          children: [/*#__PURE__*/jsxRuntime_1(MarkSlot, _extends({
            "data-index": index
          }, markProps, !isHostComponent(MarkSlot) && {
            markActive
          }, {
            style: _extends({}, style, markProps.style),
            className: clsx(markProps.className, markActive && classes.markActive)
          })), mark.label != null ? /*#__PURE__*/jsxRuntime_1(MarkLabelSlot, _extends({
            "aria-hidden": true,
            "data-index": index
          }, markLabelProps, !isHostComponent(MarkLabelSlot) && {
            markLabelActive: markActive
          }, {
            style: _extends({}, style, markLabelProps.style),
            className: clsx(classes.markLabel, markLabelProps.className, markActive && classes.markLabelActive),
            children: mark.label
          })) : null]
        }, index);
      }), values.map((value, index) => {
        const percent = valueToPercent(value, min, max);
        const style = axisProps[axis].offset(percent);
        const ValueLabelComponent = valueLabelDisplay === 'off' ? Forward : ValueLabelSlot;
        return (
          /*#__PURE__*/
          /* TODO v6: Change component structure. It will help in avoiding the complicated React.cloneElement API added in SliderValueLabel component. Should be: Thumb -> Input, ValueLabel. Follow Joy UI's Slider structure. */
          jsxRuntime_1(ValueLabelComponent, _extends({}, !isHostComponent(ValueLabelComponent) && {
            valueLabelFormat,
            valueLabelDisplay,
            value: typeof valueLabelFormat === 'function' ? valueLabelFormat(scale(value), index) : valueLabelFormat,
            index,
            open: open === index || active === index || valueLabelDisplay === 'on',
            disabled
          }, valueLabelProps, {
            children: /*#__PURE__*/jsxRuntime_1(ThumbSlot, _extends({
              "data-index": index
            }, thumbProps, {
              className: clsx(classes.thumb, thumbProps.className, active === index && classes.active, focusedThumbIndex === index && classes.focusVisible),
              style: _extends({}, style, getThumbStyle(index), thumbProps.style),
              children: /*#__PURE__*/jsxRuntime_1(InputSlot, _extends({
                "data-index": index,
                "aria-label": getAriaLabel ? getAriaLabel(index) : ariaLabel,
                "aria-valuenow": scale(value),
                "aria-labelledby": ariaLabelledby,
                "aria-valuetext": getAriaValueText ? getAriaValueText(scale(value), index) : ariaValuetext,
                value: values[index]
              }, inputSliderProps))
            }))
          }), index)
        );
      })]
    }));
  });
  Slider.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The label of the slider.
     */
    'aria-label': chainPropTypes(PropTypes.string, props => {
      const range = Array.isArray(props.value || props.defaultValue);
      if (range && props['aria-label'] != null) {
        return new Error('MUI: You need to use the `getAriaLabel` prop instead of `aria-label` when using a range slider.');
      }
      return null;
    }),
    /**
     * The id of the element containing a label for the slider.
     */
    'aria-labelledby': PropTypes.string,
    /**
     * A string value that provides a user-friendly name for the current value of the slider.
     */
    'aria-valuetext': chainPropTypes(PropTypes.string, props => {
      const range = Array.isArray(props.value || props.defaultValue);
      if (range && props['aria-valuetext'] != null) {
        return new Error('MUI: You need to use the `getAriaValueText` prop instead of `aria-valuetext` when using a range slider.');
      }
      return null;
    }),
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Input: PropTypes.elementType,
      Mark: PropTypes.elementType,
      MarkLabel: PropTypes.elementType,
      Rail: PropTypes.elementType,
      Root: PropTypes.elementType,
      Thumb: PropTypes.elementType,
      Track: PropTypes.elementType,
      ValueLabel: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
        children: PropTypes.element,
        className: PropTypes.string,
        open: PropTypes.bool,
        style: PropTypes.object,
        value: PropTypes.number,
        valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])
      })])
    }),
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the active thumb doesn't swap when moving pointer over a thumb while dragging another thumb.
     * @default false
     */
    disableSwap: PropTypes.bool,
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the thumb labels of the slider.
     * This is important for screen reader users.
     * @param {number} index The thumb label's index to format.
     * @returns {string}
     */
    getAriaLabel: PropTypes.func,
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the current value of the slider.
     * This is important for screen reader users.
     * @param {number} value The thumb label's value to format.
     * @param {number} index The thumb label's index to format.
     * @returns {string}
     */
    getAriaValueText: PropTypes.func,
    /**
     * Marks indicate predetermined values to which the user can move the slider.
     * If `true` the marks are spaced according the value of the `step` prop.
     * If an array, it should contain objects with `value` and an optional `label` keys.
     * @default false
     */
    marks: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({
      label: PropTypes.node,
      value: PropTypes.number.isRequired
    })), PropTypes.bool]),
    /**
     * The maximum allowed value of the slider.
     * Should not be equal to min.
     * @default 100
     */
    max: PropTypes.number,
    /**
     * The minimum allowed value of the slider.
     * Should not be equal to max.
     * @default 0
     */
    min: PropTypes.number,
    /**
     * Name attribute of the hidden `input` element.
     */
    name: PropTypes.string,
    /**
     * Callback function that is fired when the slider's value changed.
     *
     * @param {Event} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (any).
     * **Warning**: This is a generic event not a change event.
     * @param {number | number[]} value The new value.
     * @param {number} activeThumb Index of the currently moved thumb.
     */
    onChange: PropTypes.func,
    /**
     * Callback function that is fired when the `mouseup` is triggered.
     *
     * @param {React.SyntheticEvent | Event} event The event source of the callback. **Warning**: This is a generic event not a change event.
     * @param {number | number[]} value The new value.
     */
    onChangeCommitted: PropTypes.func,
    /**
     * The component orientation.
     * @default 'horizontal'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * A transformation function, to change the scale of the slider.
     * @param {any} x
     * @returns {any}
     * @default function Identity(x) {
     *   return x;
     * }
     */
    scale: PropTypes.func,
    /**
     * The size of the slider.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium']), PropTypes.string]),
    /**
     * The props used for each slot inside the Slider.
     * @default {}
     */
    slotProps: PropTypes.shape({
      input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
        children: PropTypes.element,
        className: PropTypes.string,
        open: PropTypes.bool,
        style: PropTypes.object,
        value: PropTypes.number,
        valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])
      })])
    }),
    /**
     * The components used for each slot inside the Slider.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    slots: PropTypes.shape({
      input: PropTypes.elementType,
      mark: PropTypes.elementType,
      markLabel: PropTypes.elementType,
      rail: PropTypes.elementType,
      root: PropTypes.elementType,
      thumb: PropTypes.elementType,
      track: PropTypes.elementType,
      valueLabel: PropTypes.elementType
    }),
    /**
     * The granularity with which the slider can step through values. (A "discrete" slider.)
     * The `min` prop serves as the origin for the valid values.
     * We recommend (max - min) to be evenly divisible by the step.
     *
     * When step is `null`, the thumb can only be slid onto marks provided with the `marks` prop.
     * @default 1
     */
    step: PropTypes.number,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Tab index attribute of the hidden `input` element.
     */
    tabIndex: PropTypes.number,
    /**
     * The track presentation:
     *
     * - `normal` the track will render a bar representing the slider value.
     * - `inverted` the track will render a bar representing the remaining slider value.
     * - `false` the track will render without a bar.
     * @default 'normal'
     */
    track: PropTypes.oneOf(['inverted', 'normal', false]),
    /**
     * The value of the slider.
     * For ranged sliders, provide an array with two values.
     */
    value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),
    /**
     * Controls when the value label is displayed:
     *
     * - `auto` the value label will display when the thumb is hovered or focused.
     * - `on` will display persistently.
     * - `off` will never display.
     * @default 'off'
     */
    valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on']),
    /**
     * The format function the value label's value.
     *
     * When a function is provided, it should have the following signature:
     *
     * - {number} value The value label's value to format
     * - {number} index The value label's index to format
     * @param {any} x
     * @returns {any}
     * @default function Identity(x) {
     *   return x;
     * }
     */
    valueLabelFormat: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
  } ;
  var Slider$1 = Slider;

  function getSnackbarContentUtilityClass(slot) {
    return generateUtilityClass('MuiSnackbarContent', slot);
  }
  const snackbarContentClasses = generateUtilityClasses('MuiSnackbarContent', ['root', 'message', 'action']);
  var snackbarContentClasses$1 = snackbarContentClasses;

  const _excluded$z = ["action", "className", "message", "role"];
  const useUtilityClasses$t = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      action: ['action'],
      message: ['message']
    };
    return composeClasses(slots, getSnackbarContentUtilityClass, classes);
  };
  const SnackbarContentRoot = styled$1(Paper$1, {
    name: 'MuiSnackbarContent',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => {
    const emphasis = theme.palette.mode === 'light' ? 0.8 : 0.98;
    const backgroundColor = emphasize(theme.palette.background.default, emphasis);
    return _extends({}, theme.typography.body2, {
      color: theme.vars ? theme.vars.palette.SnackbarContent.color : theme.palette.getContrastText(backgroundColor),
      backgroundColor: theme.vars ? theme.vars.palette.SnackbarContent.bg : backgroundColor,
      display: 'flex',
      alignItems: 'center',
      flexWrap: 'wrap',
      padding: '6px 16px',
      borderRadius: (theme.vars || theme).shape.borderRadius,
      flexGrow: 1,
      [theme.breakpoints.up('sm')]: {
        flexGrow: 'initial',
        minWidth: 288
      }
    });
  });
  const SnackbarContentMessage = styled$1('div', {
    name: 'MuiSnackbarContent',
    slot: 'Message',
    overridesResolver: (props, styles) => styles.message
  })({
    padding: '8px 0'
  });
  const SnackbarContentAction = styled$1('div', {
    name: 'MuiSnackbarContent',
    slot: 'Action',
    overridesResolver: (props, styles) => styles.action
  })({
    display: 'flex',
    alignItems: 'center',
    marginLeft: 'auto',
    paddingLeft: 16,
    marginRight: -8
  });
  const SnackbarContent = /*#__PURE__*/React__namespace.forwardRef(function SnackbarContent(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSnackbarContent'
    });
    const {
        action,
        className,
        message,
        role = 'alert'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$z);
    const ownerState = props;
    const classes = useUtilityClasses$t(ownerState);
    return /*#__PURE__*/jsxRuntime_2(SnackbarContentRoot, _extends({
      role: role,
      square: true,
      elevation: 6,
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref
    }, other, {
      children: [/*#__PURE__*/jsxRuntime_1(SnackbarContentMessage, {
        className: classes.message,
        ownerState: ownerState,
        children: message
      }), action ? /*#__PURE__*/jsxRuntime_1(SnackbarContentAction, {
        className: classes.action,
        ownerState: ownerState,
        children: action
      }) : null]
    }));
  });
  SnackbarContent.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The action to display. It renders after the message, at the end of the snackbar.
     */
    action: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The message to display.
     */
    message: PropTypes.node,
    /**
     * The ARIA role attribute of the element.
     * @default 'alert'
     */
    role: PropTypes /* @typescript-to-proptypes-ignore */.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var SnackbarContent$1 = SnackbarContent;

  function getSnackbarUtilityClass(slot) {
    return generateUtilityClass('MuiSnackbar', slot);
  }
  const snackbarClasses = generateUtilityClasses('MuiSnackbar', ['root', 'anchorOriginTopCenter', 'anchorOriginBottomCenter', 'anchorOriginTopRight', 'anchorOriginBottomRight', 'anchorOriginTopLeft', 'anchorOriginBottomLeft']);
  var snackbarClasses$1 = snackbarClasses;

  const _excluded$y = ["onEnter", "onExited"],
    _excluded2$2 = ["action", "anchorOrigin", "autoHideDuration", "children", "className", "ClickAwayListenerProps", "ContentProps", "disableWindowBlurListener", "message", "onBlur", "onClose", "onFocus", "onMouseEnter", "onMouseLeave", "open", "resumeHideDuration", "TransitionComponent", "transitionDuration", "TransitionProps"];
  const useUtilityClasses$s = ownerState => {
    const {
      classes,
      anchorOrigin
    } = ownerState;
    const slots = {
      root: ['root', `anchorOrigin${capitalize(anchorOrigin.vertical)}${capitalize(anchorOrigin.horizontal)}`]
    };
    return composeClasses(slots, getSnackbarUtilityClass, classes);
  };
  const SnackbarRoot = styled$1('div', {
    name: 'MuiSnackbar',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`anchorOrigin${capitalize(ownerState.anchorOrigin.vertical)}${capitalize(ownerState.anchorOrigin.horizontal)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    const center = {
      left: '50%',
      right: 'auto',
      transform: 'translateX(-50%)'
    };
    return _extends({
      zIndex: (theme.vars || theme).zIndex.snackbar,
      position: 'fixed',
      display: 'flex',
      left: 8,
      right: 8,
      justifyContent: 'center',
      alignItems: 'center'
    }, ownerState.anchorOrigin.vertical === 'top' ? {
      top: 8
    } : {
      bottom: 8
    }, ownerState.anchorOrigin.horizontal === 'left' && {
      justifyContent: 'flex-start'
    }, ownerState.anchorOrigin.horizontal === 'right' && {
      justifyContent: 'flex-end'
    }, {
      [theme.breakpoints.up('sm')]: _extends({}, ownerState.anchorOrigin.vertical === 'top' ? {
        top: 24
      } : {
        bottom: 24
      }, ownerState.anchorOrigin.horizontal === 'center' && center, ownerState.anchorOrigin.horizontal === 'left' && {
        left: 24,
        right: 'auto'
      }, ownerState.anchorOrigin.horizontal === 'right' && {
        right: 24,
        left: 'auto'
      })
    });
  });
  const Snackbar = /*#__PURE__*/React__namespace.forwardRef(function Snackbar(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSnackbar'
    });
    const theme = useTheme();
    const defaultTransitionDuration = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        action,
        anchorOrigin: {
          vertical,
          horizontal
        } = {
          vertical: 'bottom',
          horizontal: 'left'
        },
        autoHideDuration = null,
        children,
        className,
        ClickAwayListenerProps,
        ContentProps,
        disableWindowBlurListener = false,
        message,
        open,
        TransitionComponent = Grow$1,
        transitionDuration = defaultTransitionDuration,
        TransitionProps: {
          onEnter,
          onExited
        } = {}
      } = props,
      TransitionProps = _objectWithoutPropertiesLoose(props.TransitionProps, _excluded$y),
      other = _objectWithoutPropertiesLoose(props, _excluded2$2);
    const ownerState = _extends({}, props, {
      anchorOrigin: {
        vertical,
        horizontal
      },
      autoHideDuration,
      disableWindowBlurListener,
      TransitionComponent,
      transitionDuration
    });
    const classes = useUtilityClasses$s(ownerState);
    const {
      getRootProps,
      onClickAway
    } = useSnackbar(_extends({}, ownerState));
    const [exited, setExited] = React__namespace.useState(true);
    const rootProps = useSlotProps({
      elementType: SnackbarRoot,
      getSlotProps: getRootProps,
      externalForwardedProps: other,
      ownerState,
      additionalProps: {
        ref
      },
      className: [classes.root, className]
    });
    const handleExited = node => {
      setExited(true);
      if (onExited) {
        onExited(node);
      }
    };
    const handleEnter = (node, isAppearing) => {
      setExited(false);
      if (onEnter) {
        onEnter(node, isAppearing);
      }
    };

    // So we only render active snackbars.
    if (!open && exited) {
      return null;
    }
    return /*#__PURE__*/jsxRuntime_1(ClickAwayListener, _extends({
      onClickAway: onClickAway
    }, ClickAwayListenerProps, {
      children: /*#__PURE__*/jsxRuntime_1(SnackbarRoot, _extends({}, rootProps, {
        children: /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
          appear: true,
          in: open,
          timeout: transitionDuration,
          direction: vertical === 'top' ? 'down' : 'up',
          onEnter: handleEnter,
          onExited: handleExited
        }, TransitionProps, {
          children: children || /*#__PURE__*/jsxRuntime_1(SnackbarContent$1, _extends({
            message: message,
            action: action
          }, ContentProps))
        }))
      }))
    }));
  });
  Snackbar.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The action to display. It renders after the message, at the end of the snackbar.
     */
    action: PropTypes.node,
    /**
     * The anchor of the `Snackbar`.
     * On smaller screens, the component grows to occupy all the available width,
     * the horizontal alignment is ignored.
     * @default { vertical: 'bottom', horizontal: 'left' }
     */
    anchorOrigin: PropTypes.shape({
      horizontal: PropTypes.oneOf(['center', 'left', 'right']).isRequired,
      vertical: PropTypes.oneOf(['bottom', 'top']).isRequired
    }),
    /**
     * The number of milliseconds to wait before automatically calling the
     * `onClose` function. `onClose` should then set the state of the `open`
     * prop to hide the Snackbar. This behavior is disabled by default with
     * the `null` value.
     * @default null
     */
    autoHideDuration: PropTypes.number,
    /**
     * Replace the `SnackbarContent` component.
     */
    children: PropTypes.element,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Props applied to the `ClickAwayListener` element.
     */
    ClickAwayListenerProps: PropTypes.object,
    /**
     * Props applied to the [`SnackbarContent`](/material-ui/api/snackbar-content/) element.
     */
    ContentProps: PropTypes.object,
    /**
     * If `true`, the `autoHideDuration` timer will expire even if the window is not focused.
     * @default false
     */
    disableWindowBlurListener: PropTypes.bool,
    /**
     * When displaying multiple consecutive snackbars using a single parent-rendered
     * `<Snackbar/>`, add the `key` prop to ensure independent treatment of each message.
     * For instance, use `<Snackbar key={message} />`. Otherwise, messages might update
     * in place, and features like `autoHideDuration` could be affected.
     */
    key: () => null,
    /**
     * The message to display.
     */
    message: PropTypes.node,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * Callback fired when the component requests to be closed.
     * Typically `onClose` is used to set state in the parent component,
     * which is used to control the `Snackbar` `open` prop.
     * The `reason` parameter can optionally be used to control the response to `onClose`,
     * for example ignoring `clickaway`.
     *
     * @param {React.SyntheticEvent<any> | Event} event The event source of the callback.
     * @param {string} reason Can be: `"timeout"` (`autoHideDuration` expired), `"clickaway"`, or `"escapeKeyDown"`.
     */
    onClose: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * @ignore
     */
    onMouseEnter: PropTypes.func,
    /**
     * @ignore
     */
    onMouseLeave: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * The number of milliseconds to wait before dismissing after user interaction.
     * If `autoHideDuration` prop isn't specified, it does nothing.
     * If `autoHideDuration` prop is specified but `resumeHideDuration` isn't,
     * we default to `autoHideDuration / 2` ms.
     */
    resumeHideDuration: PropTypes.number,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Grow
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     * @default {}
     */
    TransitionProps: PropTypes.object
  } ;
  var Snackbar$1 = Snackbar;

  const _excluded$x = ["addEndListener", "appear", "children", "easing", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "style", "timeout", "TransitionComponent"];
  const styles$1 = {
    entering: {
      transform: 'none'
    },
    entered: {
      transform: 'none'
    }
  };

  /**
   * The Zoom transition can be used for the floating variant of the
   * [Button](/material-ui/react-button/#floating-action-buttons) component.
   * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
   */
  const Zoom = /*#__PURE__*/React__namespace.forwardRef(function Zoom(props, ref) {
    const theme = useTheme();
    const defaultTimeout = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        addEndListener,
        appear = true,
        children,
        easing,
        in: inProp,
        onEnter,
        onEntered,
        onEntering,
        onExit,
        onExited,
        onExiting,
        style,
        timeout = defaultTimeout,
        // eslint-disable-next-line react/prop-types
        TransitionComponent = Transition$1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$x);
    const nodeRef = React__namespace.useRef(null);
    const handleRef = useForkRef(nodeRef, children.ref, ref);
    const normalizedTransitionCallback = callback => maybeIsAppearing => {
      if (callback) {
        const node = nodeRef.current;

        // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
        if (maybeIsAppearing === undefined) {
          callback(node);
        } else {
          callback(node, maybeIsAppearing);
        }
      }
    };
    const handleEntering = normalizedTransitionCallback(onEntering);
    const handleEnter = normalizedTransitionCallback((node, isAppearing) => {
      reflow(node); // So the animation always start from the start.

      const transitionProps = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'enter'
      });
      node.style.webkitTransition = theme.transitions.create('transform', transitionProps);
      node.style.transition = theme.transitions.create('transform', transitionProps);
      if (onEnter) {
        onEnter(node, isAppearing);
      }
    });
    const handleEntered = normalizedTransitionCallback(onEntered);
    const handleExiting = normalizedTransitionCallback(onExiting);
    const handleExit = normalizedTransitionCallback(node => {
      const transitionProps = getTransitionProps({
        style,
        timeout,
        easing
      }, {
        mode: 'exit'
      });
      node.style.webkitTransition = theme.transitions.create('transform', transitionProps);
      node.style.transition = theme.transitions.create('transform', transitionProps);
      if (onExit) {
        onExit(node);
      }
    });
    const handleExited = normalizedTransitionCallback(onExited);
    const handleAddEndListener = next => {
      if (addEndListener) {
        // Old call signature before `react-transition-group` implemented `nodeRef`
        addEndListener(nodeRef.current, next);
      }
    };
    return /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
      appear: appear,
      in: inProp,
      nodeRef: nodeRef,
      onEnter: handleEnter,
      onEntered: handleEntered,
      onEntering: handleEntering,
      onExit: handleExit,
      onExited: handleExited,
      onExiting: handleExiting,
      addEndListener: handleAddEndListener,
      timeout: timeout
    }, other, {
      children: (state, childProps) => {
        return /*#__PURE__*/React__namespace.cloneElement(children, _extends({
          style: _extends({
            transform: 'scale(0)',
            visibility: state === 'exited' && !inProp ? 'hidden' : undefined
          }, styles$1[state], style, children.props.style),
          ref: handleRef
        }, childProps));
      }
    }));
  });
  Zoom.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Add a custom transition end trigger. Called with the transitioning DOM
     * node and a done callback. Allows for more fine grained transition end
     * logic. Note: Timeouts are still used as a fallback if provided.
     */
    addEndListener: PropTypes.func,
    /**
     * Perform the enter transition when it first mounts if `in` is also `true`.
     * Set this to `false` to disable this behavior.
     * @default true
     */
    appear: PropTypes.bool,
    /**
     * A single child content element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * The transition timing function.
     * You may specify a single easing or a object containing enter and exit values.
     */
    easing: PropTypes.oneOfType([PropTypes.shape({
      enter: PropTypes.string,
      exit: PropTypes.string
    }), PropTypes.string]),
    /**
     * If `true`, the component will transition in.
     */
    in: PropTypes.bool,
    /**
     * @ignore
     */
    onEnter: PropTypes.func,
    /**
     * @ignore
     */
    onEntered: PropTypes.func,
    /**
     * @ignore
     */
    onEntering: PropTypes.func,
    /**
     * @ignore
     */
    onExit: PropTypes.func,
    /**
     * @ignore
     */
    onExited: PropTypes.func,
    /**
     * @ignore
     */
    onExiting: PropTypes.func,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })])
  } ;
  var Zoom$1 = Zoom;

  function getSpeedDialUtilityClass(slot) {
    return generateUtilityClass('MuiSpeedDial', slot);
  }
  const speedDialClasses = generateUtilityClasses('MuiSpeedDial', ['root', 'fab', 'directionUp', 'directionDown', 'directionLeft', 'directionRight', 'actions', 'actionsClosed']);
  var speedDialClasses$1 = speedDialClasses;

  const _excluded$w = ["ref"],
    _excluded2$1 = ["ariaLabel", "FabProps", "children", "className", "direction", "hidden", "icon", "onBlur", "onClose", "onFocus", "onKeyDown", "onMouseEnter", "onMouseLeave", "onOpen", "open", "openIcon", "TransitionComponent", "transitionDuration", "TransitionProps"],
    _excluded3 = ["ref"];
  const useUtilityClasses$r = ownerState => {
    const {
      classes,
      open,
      direction
    } = ownerState;
    const slots = {
      root: ['root', `direction${capitalize(direction)}`],
      fab: ['fab'],
      actions: ['actions', !open && 'actionsClosed']
    };
    return composeClasses(slots, getSpeedDialUtilityClass, classes);
  };
  function getOrientation(direction) {
    if (direction === 'up' || direction === 'down') {
      return 'vertical';
    }
    if (direction === 'right' || direction === 'left') {
      return 'horizontal';
    }
    return undefined;
  }
  function clamp(value, min, max) {
    if (value < min) {
      return min;
    }
    if (value > max) {
      return max;
    }
    return value;
  }
  const dialRadius = 32;
  const spacingActions = 16;
  const SpeedDialRoot = styled$1('div', {
    name: 'MuiSpeedDial',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`direction${capitalize(ownerState.direction)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    zIndex: (theme.vars || theme).zIndex.speedDial,
    display: 'flex',
    alignItems: 'center',
    pointerEvents: 'none'
  }, ownerState.direction === 'up' && {
    flexDirection: 'column-reverse',
    [`& .${speedDialClasses$1.actions}`]: {
      flexDirection: 'column-reverse',
      marginBottom: -dialRadius,
      paddingBottom: spacingActions + dialRadius
    }
  }, ownerState.direction === 'down' && {
    flexDirection: 'column',
    [`& .${speedDialClasses$1.actions}`]: {
      flexDirection: 'column',
      marginTop: -dialRadius,
      paddingTop: spacingActions + dialRadius
    }
  }, ownerState.direction === 'left' && {
    flexDirection: 'row-reverse',
    [`& .${speedDialClasses$1.actions}`]: {
      flexDirection: 'row-reverse',
      marginRight: -dialRadius,
      paddingRight: spacingActions + dialRadius
    }
  }, ownerState.direction === 'right' && {
    flexDirection: 'row',
    [`& .${speedDialClasses$1.actions}`]: {
      flexDirection: 'row',
      marginLeft: -dialRadius,
      paddingLeft: spacingActions + dialRadius
    }
  }));
  const SpeedDialFab = styled$1(Fab$1, {
    name: 'MuiSpeedDial',
    slot: 'Fab',
    overridesResolver: (props, styles) => styles.fab
  })(() => ({
    pointerEvents: 'auto'
  }));
  const SpeedDialActions = styled$1('div', {
    name: 'MuiSpeedDial',
    slot: 'Actions',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.actions, !ownerState.open && styles.actionsClosed];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex',
    pointerEvents: 'auto'
  }, !ownerState.open && {
    transition: 'top 0s linear 0.2s',
    pointerEvents: 'none'
  }));
  const SpeedDial = /*#__PURE__*/React__namespace.forwardRef(function SpeedDial(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSpeedDial'
    });
    const theme = useTheme();
    const defaultTransitionDuration = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        ariaLabel,
        FabProps: {
          ref: origDialButtonRef
        } = {},
        children: childrenProp,
        className,
        direction = 'up',
        hidden = false,
        icon,
        onBlur,
        onClose,
        onFocus,
        onKeyDown,
        onMouseEnter,
        onMouseLeave,
        onOpen,
        open: openProp,
        TransitionComponent = Zoom$1,
        transitionDuration = defaultTransitionDuration,
        TransitionProps
      } = props,
      FabProps = _objectWithoutPropertiesLoose(props.FabProps, _excluded$w),
      other = _objectWithoutPropertiesLoose(props, _excluded2$1);
    const [open, setOpenState] = useControlled({
      controlled: openProp,
      default: false,
      name: 'SpeedDial',
      state: 'open'
    });
    const ownerState = _extends({}, props, {
      open,
      direction
    });
    const classes = useUtilityClasses$r(ownerState);
    const eventTimer = React__namespace.useRef();
    React__namespace.useEffect(() => {
      return () => {
        clearTimeout(eventTimer.current);
      };
    }, []);

    /**
     * an index in actions.current
     */
    const focusedAction = React__namespace.useRef(0);

    /**
     * pressing this key while the focus is on a child SpeedDialAction focuses
     * the next SpeedDialAction.
     * It is equal to the first arrow key pressed while focus is on the SpeedDial
     * that is not orthogonal to the direction.
     * @type {utils.ArrowKey?}
     */
    const nextItemArrowKey = React__namespace.useRef();

    /**
     * refs to the Button that have an action associated to them in this SpeedDial
     * [Fab, ...(SpeedDialActions > Button)]
     * @type {HTMLButtonElement[]}
     */
    const actions = React__namespace.useRef([]);
    actions.current = [actions.current[0]];
    const handleOwnFabRef = React__namespace.useCallback(fabFef => {
      actions.current[0] = fabFef;
    }, []);
    const handleFabRef = useForkRef(origDialButtonRef, handleOwnFabRef);

    /**
     * creates a ref callback for the Button in a SpeedDialAction
     * Is called before the original ref callback for Button that was set in buttonProps
     *
     * @param dialActionIndex {number}
     * @param origButtonRef {React.RefObject?}
     */
    const createHandleSpeedDialActionButtonRef = (dialActionIndex, origButtonRef) => {
      return buttonRef => {
        actions.current[dialActionIndex + 1] = buttonRef;
        if (origButtonRef) {
          origButtonRef(buttonRef);
        }
      };
    };
    const handleKeyDown = event => {
      if (onKeyDown) {
        onKeyDown(event);
      }
      const key = event.key.replace('Arrow', '').toLowerCase();
      const {
        current: nextItemArrowKeyCurrent = key
      } = nextItemArrowKey;
      if (event.key === 'Escape') {
        setOpenState(false);
        actions.current[0].focus();
        if (onClose) {
          onClose(event, 'escapeKeyDown');
        }
        return;
      }
      if (getOrientation(key) === getOrientation(nextItemArrowKeyCurrent) && getOrientation(key) !== undefined) {
        event.preventDefault();
        const actionStep = key === nextItemArrowKeyCurrent ? 1 : -1;

        // stay within array indices
        const nextAction = clamp(focusedAction.current + actionStep, 0, actions.current.length - 1);
        actions.current[nextAction].focus();
        focusedAction.current = nextAction;
        nextItemArrowKey.current = nextItemArrowKeyCurrent;
      }
    };
    React__namespace.useEffect(() => {
      // actions were closed while navigation state was not reset
      if (!open) {
        focusedAction.current = 0;
        nextItemArrowKey.current = undefined;
      }
    }, [open]);
    const handleClose = event => {
      if (event.type === 'mouseleave' && onMouseLeave) {
        onMouseLeave(event);
      }
      if (event.type === 'blur' && onBlur) {
        onBlur(event);
      }
      clearTimeout(eventTimer.current);
      if (event.type === 'blur') {
        eventTimer.current = setTimeout(() => {
          setOpenState(false);
          if (onClose) {
            onClose(event, 'blur');
          }
        });
      } else {
        setOpenState(false);
        if (onClose) {
          onClose(event, 'mouseLeave');
        }
      }
    };
    const handleClick = event => {
      if (FabProps.onClick) {
        FabProps.onClick(event);
      }
      clearTimeout(eventTimer.current);
      if (open) {
        setOpenState(false);
        if (onClose) {
          onClose(event, 'toggle');
        }
      } else {
        setOpenState(true);
        if (onOpen) {
          onOpen(event, 'toggle');
        }
      }
    };
    const handleOpen = event => {
      if (event.type === 'mouseenter' && onMouseEnter) {
        onMouseEnter(event);
      }
      if (event.type === 'focus' && onFocus) {
        onFocus(event);
      }

      // When moving the focus between two items,
      // a chain if blur and focus event is triggered.
      // We only handle the last event.
      clearTimeout(eventTimer.current);
      if (!open) {
        // Wait for a future focus or click event
        eventTimer.current = setTimeout(() => {
          setOpenState(true);
          if (onOpen) {
            const eventMap = {
              focus: 'focus',
              mouseenter: 'mouseEnter'
            };
            onOpen(event, eventMap[event.type]);
          }
        });
      }
    };

    // Filter the label for valid id characters.
    const id = ariaLabel.replace(/^[^a-z]+|[^\w:.-]+/gi, '');
    const allItems = React__namespace.Children.toArray(childrenProp).filter(child => {
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The SpeedDial component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      return /*#__PURE__*/React__namespace.isValidElement(child);
    });
    const children = allItems.map((child, index) => {
      const _child$props = child.props,
        {
          FabProps: {
            ref: origButtonRef
          } = {},
          tooltipPlacement: tooltipPlacementProp
        } = _child$props,
        ChildFabProps = _objectWithoutPropertiesLoose(_child$props.FabProps, _excluded3);
      const tooltipPlacement = tooltipPlacementProp || (getOrientation(direction) === 'vertical' ? 'left' : 'top');
      return /*#__PURE__*/React__namespace.cloneElement(child, {
        FabProps: _extends({}, ChildFabProps, {
          ref: createHandleSpeedDialActionButtonRef(index, origButtonRef)
        }),
        delay: 30 * (open ? index : allItems.length - index),
        open,
        tooltipPlacement,
        id: `${id}-action-${index}`
      });
    });
    return /*#__PURE__*/jsxRuntime_2(SpeedDialRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      role: "presentation",
      onKeyDown: handleKeyDown,
      onBlur: handleClose,
      onFocus: handleOpen,
      onMouseEnter: handleOpen,
      onMouseLeave: handleClose,
      ownerState: ownerState
    }, other, {
      children: [/*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
        in: !hidden,
        timeout: transitionDuration,
        unmountOnExit: true
      }, TransitionProps, {
        children: /*#__PURE__*/jsxRuntime_1(SpeedDialFab, _extends({
          color: "primary",
          "aria-label": ariaLabel,
          "aria-haspopup": "true",
          "aria-expanded": open,
          "aria-controls": `${id}-actions`
        }, FabProps, {
          onClick: handleClick,
          className: clsx(classes.fab, FabProps.className),
          ref: handleFabRef,
          ownerState: ownerState,
          children: /*#__PURE__*/React__namespace.isValidElement(icon) && isMuiElement(icon, ['SpeedDialIcon']) ? /*#__PURE__*/React__namespace.cloneElement(icon, {
            open
          }) : icon
        }))
      })), /*#__PURE__*/jsxRuntime_1(SpeedDialActions, {
        id: `${id}-actions`,
        role: "menu",
        "aria-orientation": getOrientation(direction),
        className: clsx(classes.actions, !open && classes.actionsClosed),
        ownerState: ownerState,
        children: children
      })]
    }));
  });
  SpeedDial.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The aria-label of the button element.
     * Also used to provide the `id` for the `SpeedDial` element and its children.
     */
    ariaLabel: PropTypes.string.isRequired,
    /**
     * SpeedDialActions to display when the SpeedDial is `open`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The direction the actions open relative to the floating action button.
     * @default 'up'
     */
    direction: PropTypes.oneOf(['down', 'left', 'right', 'up']),
    /**
     * Props applied to the [`Fab`](/material-ui/api/fab/) element.
     * @default {}
     */
    FabProps: PropTypes.object,
    /**
     * If `true`, the SpeedDial is hidden.
     * @default false
     */
    hidden: PropTypes.bool,
    /**
     * The icon to display in the SpeedDial Fab. The `SpeedDialIcon` component
     * provides a default Icon with animation.
     */
    icon: PropTypes.node,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * Callback fired when the component requests to be closed.
     *
     * @param {object} event The event source of the callback.
     * @param {string} reason Can be: `"toggle"`, `"blur"`, `"mouseLeave"`, `"escapeKeyDown"`.
     */
    onClose: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * @ignore
     */
    onKeyDown: PropTypes.func,
    /**
     * @ignore
     */
    onMouseEnter: PropTypes.func,
    /**
     * @ignore
     */
    onMouseLeave: PropTypes.func,
    /**
     * Callback fired when the component requests to be open.
     *
     * @param {object} event The event source of the callback.
     * @param {string} reason Can be: `"toggle"`, `"focus"`, `"mouseEnter"`.
     */
    onOpen: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * The icon to display in the SpeedDial Fab when the SpeedDial is open.
     */
    openIcon: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Zoom
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     */
    TransitionProps: PropTypes.object
  } ;
  var SpeedDial$1 = SpeedDial;

  function getTooltipUtilityClass(slot) {
    return generateUtilityClass('MuiTooltip', slot);
  }
  const tooltipClasses = generateUtilityClasses('MuiTooltip', ['popper', 'popperInteractive', 'popperArrow', 'popperClose', 'tooltip', 'tooltipArrow', 'touch', 'tooltipPlacementLeft', 'tooltipPlacementRight', 'tooltipPlacementTop', 'tooltipPlacementBottom', 'arrow']);
  var tooltipClasses$1 = tooltipClasses;

  const _excluded$v = ["arrow", "children", "classes", "components", "componentsProps", "describeChild", "disableFocusListener", "disableHoverListener", "disableInteractive", "disableTouchListener", "enterDelay", "enterNextDelay", "enterTouchDelay", "followCursor", "id", "leaveDelay", "leaveTouchDelay", "onClose", "onOpen", "open", "placement", "PopperComponent", "PopperProps", "slotProps", "slots", "title", "TransitionComponent", "TransitionProps"];
  function round(value) {
    return Math.round(value * 1e5) / 1e5;
  }
  const useUtilityClasses$q = ownerState => {
    const {
      classes,
      disableInteractive,
      arrow,
      touch,
      placement
    } = ownerState;
    const slots = {
      popper: ['popper', !disableInteractive && 'popperInteractive', arrow && 'popperArrow'],
      tooltip: ['tooltip', arrow && 'tooltipArrow', touch && 'touch', `tooltipPlacement${capitalize(placement.split('-')[0])}`],
      arrow: ['arrow']
    };
    return composeClasses(slots, getTooltipUtilityClass, classes);
  };
  const TooltipPopper = styled$1(Popper$1, {
    name: 'MuiTooltip',
    slot: 'Popper',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.popper, !ownerState.disableInteractive && styles.popperInteractive, ownerState.arrow && styles.popperArrow, !ownerState.open && styles.popperClose];
    }
  })(({
    theme,
    ownerState,
    open
  }) => _extends({
    zIndex: (theme.vars || theme).zIndex.tooltip,
    pointerEvents: 'none'
  }, !ownerState.disableInteractive && {
    pointerEvents: 'auto'
  }, !open && {
    pointerEvents: 'none'
  }, ownerState.arrow && {
    [`&[data-popper-placement*="bottom"] .${tooltipClasses$1.arrow}`]: {
      top: 0,
      marginTop: '-0.71em',
      '&::before': {
        transformOrigin: '0 100%'
      }
    },
    [`&[data-popper-placement*="top"] .${tooltipClasses$1.arrow}`]: {
      bottom: 0,
      marginBottom: '-0.71em',
      '&::before': {
        transformOrigin: '100% 0'
      }
    },
    [`&[data-popper-placement*="right"] .${tooltipClasses$1.arrow}`]: _extends({}, !ownerState.isRtl ? {
      left: 0,
      marginLeft: '-0.71em'
    } : {
      right: 0,
      marginRight: '-0.71em'
    }, {
      height: '1em',
      width: '0.71em',
      '&::before': {
        transformOrigin: '100% 100%'
      }
    }),
    [`&[data-popper-placement*="left"] .${tooltipClasses$1.arrow}`]: _extends({}, !ownerState.isRtl ? {
      right: 0,
      marginRight: '-0.71em'
    } : {
      left: 0,
      marginLeft: '-0.71em'
    }, {
      height: '1em',
      width: '0.71em',
      '&::before': {
        transformOrigin: '0 0'
      }
    })
  }));
  const TooltipTooltip = styled$1('div', {
    name: 'MuiTooltip',
    slot: 'Tooltip',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.tooltip, ownerState.touch && styles.touch, ownerState.arrow && styles.tooltipArrow, styles[`tooltipPlacement${capitalize(ownerState.placement.split('-')[0])}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    backgroundColor: theme.vars ? theme.vars.palette.Tooltip.bg : alpha(theme.palette.grey[700], 0.92),
    borderRadius: (theme.vars || theme).shape.borderRadius,
    color: (theme.vars || theme).palette.common.white,
    fontFamily: theme.typography.fontFamily,
    padding: '4px 8px',
    fontSize: theme.typography.pxToRem(11),
    maxWidth: 300,
    margin: 2,
    wordWrap: 'break-word',
    fontWeight: theme.typography.fontWeightMedium
  }, ownerState.arrow && {
    position: 'relative',
    margin: 0
  }, ownerState.touch && {
    padding: '8px 16px',
    fontSize: theme.typography.pxToRem(14),
    lineHeight: `${round(16 / 14)}em`,
    fontWeight: theme.typography.fontWeightRegular
  }, {
    [`.${tooltipClasses$1.popper}[data-popper-placement*="left"] &`]: _extends({
      transformOrigin: 'right center'
    }, !ownerState.isRtl ? _extends({
      marginRight: '14px'
    }, ownerState.touch && {
      marginRight: '24px'
    }) : _extends({
      marginLeft: '14px'
    }, ownerState.touch && {
      marginLeft: '24px'
    })),
    [`.${tooltipClasses$1.popper}[data-popper-placement*="right"] &`]: _extends({
      transformOrigin: 'left center'
    }, !ownerState.isRtl ? _extends({
      marginLeft: '14px'
    }, ownerState.touch && {
      marginLeft: '24px'
    }) : _extends({
      marginRight: '14px'
    }, ownerState.touch && {
      marginRight: '24px'
    })),
    [`.${tooltipClasses$1.popper}[data-popper-placement*="top"] &`]: _extends({
      transformOrigin: 'center bottom',
      marginBottom: '14px'
    }, ownerState.touch && {
      marginBottom: '24px'
    }),
    [`.${tooltipClasses$1.popper}[data-popper-placement*="bottom"] &`]: _extends({
      transformOrigin: 'center top',
      marginTop: '14px'
    }, ownerState.touch && {
      marginTop: '24px'
    })
  }));
  const TooltipArrow = styled$1('span', {
    name: 'MuiTooltip',
    slot: 'Arrow',
    overridesResolver: (props, styles) => styles.arrow
  })(({
    theme
  }) => ({
    overflow: 'hidden',
    position: 'absolute',
    width: '1em',
    height: '0.71em' /* = width / sqrt(2) = (length of the hypotenuse) */,
    boxSizing: 'border-box',
    color: theme.vars ? theme.vars.palette.Tooltip.bg : alpha(theme.palette.grey[700], 0.9),
    '&::before': {
      content: '""',
      margin: 'auto',
      display: 'block',
      width: '100%',
      height: '100%',
      backgroundColor: 'currentColor',
      transform: 'rotate(45deg)'
    }
  }));
  let hystersisOpen = false;
  let hystersisTimer = null;
  let cursorPosition = {
    x: 0,
    y: 0
  };
  function composeEventHandler(handler, eventHandler) {
    return event => {
      if (eventHandler) {
        eventHandler(event);
      }
      handler(event);
    };
  }

  // TODO v6: Remove PopperComponent, PopperProps, TransitionComponent and TransitionProps.
  const Tooltip = /*#__PURE__*/React__namespace.forwardRef(function Tooltip(inProps, ref) {
    var _ref, _slots$popper, _ref2, _ref3, _slots$transition, _ref4, _slots$tooltip, _ref5, _slots$arrow, _slotProps$popper, _ref6, _slotProps$popper2, _slotProps$transition, _slotProps$tooltip, _ref7, _slotProps$tooltip2, _slotProps$arrow, _ref8, _slotProps$arrow2;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTooltip'
    });
    const {
        arrow = false,
        children: childrenProp,
        components = {},
        componentsProps = {},
        describeChild = false,
        disableFocusListener = false,
        disableHoverListener = false,
        disableInteractive: disableInteractiveProp = false,
        disableTouchListener = false,
        enterDelay = 100,
        enterNextDelay = 0,
        enterTouchDelay = 700,
        followCursor = false,
        id: idProp,
        leaveDelay = 0,
        leaveTouchDelay = 1500,
        onClose,
        onOpen,
        open: openProp,
        placement = 'bottom',
        PopperComponent: PopperComponentProp,
        PopperProps = {},
        slotProps = {},
        slots = {},
        title,
        TransitionComponent: TransitionComponentProp = Grow$1,
        TransitionProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$v);

    // to prevent runtime errors, developers will need to provide a child as a React element anyway.
    const children = /*#__PURE__*/React__namespace.isValidElement(childrenProp) ? childrenProp : /*#__PURE__*/jsxRuntime_1("span", {
      children: childrenProp
    });
    const theme = useTheme();
    const isRtl = theme.direction === 'rtl';
    const [childNode, setChildNode] = React__namespace.useState();
    const [arrowRef, setArrowRef] = React__namespace.useState(null);
    const ignoreNonTouchEvents = React__namespace.useRef(false);
    const disableInteractive = disableInteractiveProp || followCursor;
    const closeTimer = React__namespace.useRef();
    const enterTimer = React__namespace.useRef();
    const leaveTimer = React__namespace.useRef();
    const touchTimer = React__namespace.useRef();
    const [openState, setOpenState] = useControlled({
      controlled: openProp,
      default: false,
      name: 'Tooltip',
      state: 'open'
    });
    let open = openState;
    {
      // eslint-disable-next-line react-hooks/rules-of-hooks
      const {
        current: isControlled
      } = React__namespace.useRef(openProp !== undefined);

      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useEffect(() => {
        if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {
          console.error(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', "Tooltip needs to listen to the child element's events to display the title.", '', 'Add a simple wrapper element, such as a `span`.'].join('\n'));
        }
      }, [title, childNode, isControlled]);
    }
    const id = useId(idProp);
    const prevUserSelect = React__namespace.useRef();
    const stopTouchInteraction = React__namespace.useCallback(() => {
      if (prevUserSelect.current !== undefined) {
        document.body.style.WebkitUserSelect = prevUserSelect.current;
        prevUserSelect.current = undefined;
      }
      clearTimeout(touchTimer.current);
    }, []);
    React__namespace.useEffect(() => {
      return () => {
        clearTimeout(closeTimer.current);
        clearTimeout(enterTimer.current);
        clearTimeout(leaveTimer.current);
        stopTouchInteraction();
      };
    }, [stopTouchInteraction]);
    const handleOpen = event => {
      clearTimeout(hystersisTimer);
      hystersisOpen = true;

      // The mouseover event will trigger for every nested element in the tooltip.
      // We can skip rerendering when the tooltip is already open.
      // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.
      setOpenState(true);
      if (onOpen && !open) {
        onOpen(event);
      }
    };
    const handleClose = useEventCallback(
    /**
     * @param {React.SyntheticEvent | Event} event
     */
    event => {
      clearTimeout(hystersisTimer);
      hystersisTimer = setTimeout(() => {
        hystersisOpen = false;
      }, 800 + leaveDelay);
      setOpenState(false);
      if (onClose && open) {
        onClose(event);
      }
      clearTimeout(closeTimer.current);
      closeTimer.current = setTimeout(() => {
        ignoreNonTouchEvents.current = false;
      }, theme.transitions.duration.shortest);
    });
    const handleEnter = event => {
      if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {
        return;
      }

      // Remove the title ahead of time.
      // We don't want to wait for the next render commit.
      // We would risk displaying two tooltips at the same time (native + this one).
      if (childNode) {
        childNode.removeAttribute('title');
      }
      clearTimeout(enterTimer.current);
      clearTimeout(leaveTimer.current);
      if (enterDelay || hystersisOpen && enterNextDelay) {
        enterTimer.current = setTimeout(() => {
          handleOpen(event);
        }, hystersisOpen ? enterNextDelay : enterDelay);
      } else {
        handleOpen(event);
      }
    };
    const handleLeave = event => {
      clearTimeout(enterTimer.current);
      clearTimeout(leaveTimer.current);
      leaveTimer.current = setTimeout(() => {
        handleClose(event);
      }, leaveDelay);
    };
    const {
      isFocusVisibleRef,
      onBlur: handleBlurVisible,
      onFocus: handleFocusVisible,
      ref: focusVisibleRef
    } = useIsFocusVisible();
    // We don't necessarily care about the focusVisible state (which is safe to access via ref anyway).
    // We just need to re-render the Tooltip if the focus-visible state changes.
    const [, setChildIsFocusVisible] = React__namespace.useState(false);
    const handleBlur = event => {
      handleBlurVisible(event);
      if (isFocusVisibleRef.current === false) {
        setChildIsFocusVisible(false);
        handleLeave(event);
      }
    };
    const handleFocus = event => {
      // Workaround for https://github.com/facebook/react/issues/7769
      // The autoFocus of React might trigger the event before the componentDidMount.
      // We need to account for this eventuality.
      if (!childNode) {
        setChildNode(event.currentTarget);
      }
      handleFocusVisible(event);
      if (isFocusVisibleRef.current === true) {
        setChildIsFocusVisible(true);
        handleEnter(event);
      }
    };
    const detectTouchStart = event => {
      ignoreNonTouchEvents.current = true;
      const childrenProps = children.props;
      if (childrenProps.onTouchStart) {
        childrenProps.onTouchStart(event);
      }
    };
    const handleMouseOver = handleEnter;
    const handleMouseLeave = handleLeave;
    const handleTouchStart = event => {
      detectTouchStart(event);
      clearTimeout(leaveTimer.current);
      clearTimeout(closeTimer.current);
      stopTouchInteraction();
      prevUserSelect.current = document.body.style.WebkitUserSelect;
      // Prevent iOS text selection on long-tap.
      document.body.style.WebkitUserSelect = 'none';
      touchTimer.current = setTimeout(() => {
        document.body.style.WebkitUserSelect = prevUserSelect.current;
        handleEnter(event);
      }, enterTouchDelay);
    };
    const handleTouchEnd = event => {
      if (children.props.onTouchEnd) {
        children.props.onTouchEnd(event);
      }
      stopTouchInteraction();
      clearTimeout(leaveTimer.current);
      leaveTimer.current = setTimeout(() => {
        handleClose(event);
      }, leaveTouchDelay);
    };
    React__namespace.useEffect(() => {
      if (!open) {
        return undefined;
      }

      /**
       * @param {KeyboardEvent} nativeEvent
       */
      function handleKeyDown(nativeEvent) {
        // IE11, Edge (prior to using Bink?) use 'Esc'
        if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {
          handleClose(nativeEvent);
        }
      }
      document.addEventListener('keydown', handleKeyDown);
      return () => {
        document.removeEventListener('keydown', handleKeyDown);
      };
    }, [handleClose, open]);
    const handleRef = useForkRef(children.ref, focusVisibleRef, setChildNode, ref);

    // There is no point in displaying an empty tooltip.
    if (!title && title !== 0) {
      open = false;
    }
    const popperRef = React__namespace.useRef();
    const handleMouseMove = event => {
      const childrenProps = children.props;
      if (childrenProps.onMouseMove) {
        childrenProps.onMouseMove(event);
      }
      cursorPosition = {
        x: event.clientX,
        y: event.clientY
      };
      if (popperRef.current) {
        popperRef.current.update();
      }
    };
    const nameOrDescProps = {};
    const titleIsString = typeof title === 'string';
    if (describeChild) {
      nameOrDescProps.title = !open && titleIsString && !disableHoverListener ? title : null;
      nameOrDescProps['aria-describedby'] = open ? id : null;
    } else {
      nameOrDescProps['aria-label'] = titleIsString ? title : null;
      nameOrDescProps['aria-labelledby'] = open && !titleIsString ? id : null;
    }
    const childrenProps = _extends({}, nameOrDescProps, other, children.props, {
      className: clsx(other.className, children.props.className),
      onTouchStart: detectTouchStart,
      ref: handleRef
    }, followCursor ? {
      onMouseMove: handleMouseMove
    } : {});
    {
      childrenProps['data-mui-internal-clone-element'] = true;

      // eslint-disable-next-line react-hooks/rules-of-hooks
      React__namespace.useEffect(() => {
        if (childNode && !childNode.getAttribute('data-mui-internal-clone-element')) {
          console.error(['MUI: The `children` component of the Tooltip is not forwarding its props correctly.', 'Please make sure that props are spread on the same element that the ref is applied to.'].join('\n'));
        }
      }, [childNode]);
    }
    const interactiveWrapperListeners = {};
    if (!disableTouchListener) {
      childrenProps.onTouchStart = handleTouchStart;
      childrenProps.onTouchEnd = handleTouchEnd;
    }
    if (!disableHoverListener) {
      childrenProps.onMouseOver = composeEventHandler(handleMouseOver, childrenProps.onMouseOver);
      childrenProps.onMouseLeave = composeEventHandler(handleMouseLeave, childrenProps.onMouseLeave);
      if (!disableInteractive) {
        interactiveWrapperListeners.onMouseOver = handleMouseOver;
        interactiveWrapperListeners.onMouseLeave = handleMouseLeave;
      }
    }
    if (!disableFocusListener) {
      childrenProps.onFocus = composeEventHandler(handleFocus, childrenProps.onFocus);
      childrenProps.onBlur = composeEventHandler(handleBlur, childrenProps.onBlur);
      if (!disableInteractive) {
        interactiveWrapperListeners.onFocus = handleFocus;
        interactiveWrapperListeners.onBlur = handleBlur;
      }
    }
    {
      if (children.props.title) {
        console.error(['MUI: You have provided a `title` prop to the child of <Tooltip />.', `Remove this title prop \`${children.props.title}\` or the Tooltip component.`].join('\n'));
      }
    }
    const popperOptions = React__namespace.useMemo(() => {
      var _PopperProps$popperOp;
      let tooltipModifiers = [{
        name: 'arrow',
        enabled: Boolean(arrowRef),
        options: {
          element: arrowRef,
          padding: 4
        }
      }];
      if ((_PopperProps$popperOp = PopperProps.popperOptions) != null && _PopperProps$popperOp.modifiers) {
        tooltipModifiers = tooltipModifiers.concat(PopperProps.popperOptions.modifiers);
      }
      return _extends({}, PopperProps.popperOptions, {
        modifiers: tooltipModifiers
      });
    }, [arrowRef, PopperProps]);
    const ownerState = _extends({}, props, {
      isRtl,
      arrow,
      disableInteractive,
      placement,
      PopperComponentProp,
      touch: ignoreNonTouchEvents.current
    });
    const classes = useUtilityClasses$q(ownerState);
    const PopperComponent = (_ref = (_slots$popper = slots.popper) != null ? _slots$popper : components.Popper) != null ? _ref : TooltipPopper;
    const TransitionComponent = (_ref2 = (_ref3 = (_slots$transition = slots.transition) != null ? _slots$transition : components.Transition) != null ? _ref3 : TransitionComponentProp) != null ? _ref2 : Grow$1;
    const TooltipComponent = (_ref4 = (_slots$tooltip = slots.tooltip) != null ? _slots$tooltip : components.Tooltip) != null ? _ref4 : TooltipTooltip;
    const ArrowComponent = (_ref5 = (_slots$arrow = slots.arrow) != null ? _slots$arrow : components.Arrow) != null ? _ref5 : TooltipArrow;
    const popperProps = appendOwnerState(PopperComponent, _extends({}, PopperProps, (_slotProps$popper = slotProps.popper) != null ? _slotProps$popper : componentsProps.popper, {
      className: clsx(classes.popper, PopperProps == null ? void 0 : PopperProps.className, (_ref6 = (_slotProps$popper2 = slotProps.popper) != null ? _slotProps$popper2 : componentsProps.popper) == null ? void 0 : _ref6.className)
    }), ownerState);
    const transitionProps = appendOwnerState(TransitionComponent, _extends({}, TransitionProps, (_slotProps$transition = slotProps.transition) != null ? _slotProps$transition : componentsProps.transition), ownerState);
    const tooltipProps = appendOwnerState(TooltipComponent, _extends({}, (_slotProps$tooltip = slotProps.tooltip) != null ? _slotProps$tooltip : componentsProps.tooltip, {
      className: clsx(classes.tooltip, (_ref7 = (_slotProps$tooltip2 = slotProps.tooltip) != null ? _slotProps$tooltip2 : componentsProps.tooltip) == null ? void 0 : _ref7.className)
    }), ownerState);
    const tooltipArrowProps = appendOwnerState(ArrowComponent, _extends({}, (_slotProps$arrow = slotProps.arrow) != null ? _slotProps$arrow : componentsProps.arrow, {
      className: clsx(classes.arrow, (_ref8 = (_slotProps$arrow2 = slotProps.arrow) != null ? _slotProps$arrow2 : componentsProps.arrow) == null ? void 0 : _ref8.className)
    }), ownerState);
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/React__namespace.cloneElement(children, childrenProps), /*#__PURE__*/jsxRuntime_1(PopperComponent, _extends({
        as: PopperComponentProp != null ? PopperComponentProp : Popper$1,
        placement: placement,
        anchorEl: followCursor ? {
          getBoundingClientRect: () => ({
            top: cursorPosition.y,
            left: cursorPosition.x,
            right: cursorPosition.x,
            bottom: cursorPosition.y,
            width: 0,
            height: 0
          })
        } : childNode,
        popperRef: popperRef,
        open: childNode ? open : false,
        id: id,
        transition: true
      }, interactiveWrapperListeners, popperProps, {
        popperOptions: popperOptions,
        children: ({
          TransitionProps: TransitionPropsInner
        }) => /*#__PURE__*/jsxRuntime_1(TransitionComponent, _extends({
          timeout: theme.transitions.duration.shorter
        }, TransitionPropsInner, transitionProps, {
          children: /*#__PURE__*/jsxRuntime_2(TooltipComponent, _extends({}, tooltipProps, {
            children: [title, arrow ? /*#__PURE__*/jsxRuntime_1(ArrowComponent, _extends({}, tooltipArrowProps, {
              ref: setArrowRef
            })) : null]
          }))
        }))
      }))]
    });
  });
  Tooltip.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, adds an arrow to the tooltip.
     * @default false
     */
    arrow: PropTypes.bool,
    /**
     * Tooltip reference element.
     */
    children: elementAcceptingRef$1.isRequired,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `slots` prop.
     * It's recommended to use the `slots` prop instead.
     *
     * @default {}
     */
    components: PropTypes.shape({
      Arrow: PropTypes.elementType,
      Popper: PropTypes.elementType,
      Tooltip: PropTypes.elementType,
      Transition: PropTypes.elementType
    }),
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `slotProps` prop.
     * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.
     *
     * @default {}
     */
    componentsProps: PropTypes.shape({
      arrow: PropTypes.object,
      popper: PropTypes.object,
      tooltip: PropTypes.object,
      transition: PropTypes.object
    }),
    /**
     * Set to `true` if the `title` acts as an accessible description.
     * By default the `title` acts as an accessible label for the child.
     * @default false
     */
    describeChild: PropTypes.bool,
    /**
     * Do not respond to focus-visible events.
     * @default false
     */
    disableFocusListener: PropTypes.bool,
    /**
     * Do not respond to hover events.
     * @default false
     */
    disableHoverListener: PropTypes.bool,
    /**
     * Makes a tooltip not interactive, i.e. it will close when the user
     * hovers over the tooltip before the `leaveDelay` is expired.
     * @default false
     */
    disableInteractive: PropTypes.bool,
    /**
     * Do not respond to long press touch events.
     * @default false
     */
    disableTouchListener: PropTypes.bool,
    /**
     * The number of milliseconds to wait before showing the tooltip.
     * This prop won't impact the enter touch delay (`enterTouchDelay`).
     * @default 100
     */
    enterDelay: PropTypes.number,
    /**
     * The number of milliseconds to wait before showing the tooltip when one was already recently opened.
     * @default 0
     */
    enterNextDelay: PropTypes.number,
    /**
     * The number of milliseconds a user must touch the element before showing the tooltip.
     * @default 700
     */
    enterTouchDelay: PropTypes.number,
    /**
     * If `true`, the tooltip follow the cursor over the wrapped element.
     * @default false
     */
    followCursor: PropTypes.bool,
    /**
     * This prop is used to help implement the accessibility logic.
     * If you don't provide this prop. It falls back to a randomly generated id.
     */
    id: PropTypes.string,
    /**
     * The number of milliseconds to wait before hiding the tooltip.
     * This prop won't impact the leave touch delay (`leaveTouchDelay`).
     * @default 0
     */
    leaveDelay: PropTypes.number,
    /**
     * The number of milliseconds after the user stops touching an element before hiding the tooltip.
     * @default 1500
     */
    leaveTouchDelay: PropTypes.number,
    /**
     * Callback fired when the component requests to be closed.
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     */
    onClose: PropTypes.func,
    /**
     * Callback fired when the component requests to be open.
     *
     * @param {React.SyntheticEvent} event The event source of the callback.
     */
    onOpen: PropTypes.func,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * Tooltip placement.
     * @default 'bottom'
     */
    placement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
    /**
     * The component used for the popper.
     * @default Popper
     */
    PopperComponent: PropTypes.elementType,
    /**
     * Props applied to the [`Popper`](/material-ui/api/popper/) element.
     * @default {}
     */
    PopperProps: PropTypes.object,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     *
     * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slotProps: PropTypes.shape({
      arrow: PropTypes.object,
      popper: PropTypes.object,
      tooltip: PropTypes.object,
      transition: PropTypes.object
    }),
    /**
     * The components used for each slot inside.
     *
     * This prop is an alias for the `components` prop, which will be deprecated in the future.
     *
     * @default {}
     */
    slots: PropTypes.shape({
      arrow: PropTypes.elementType,
      popper: PropTypes.elementType,
      tooltip: PropTypes.elementType,
      transition: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Tooltip title. Zero-length titles string, undefined, null and false are never displayed.
     */
    title: PropTypes.node,
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Grow
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     */
    TransitionProps: PropTypes.object
  } ;
  var Tooltip$1 = Tooltip;

  function getSpeedDialActionUtilityClass(slot) {
    return generateUtilityClass('MuiSpeedDialAction', slot);
  }
  const speedDialActionClasses = generateUtilityClasses('MuiSpeedDialAction', ['fab', 'fabClosed', 'staticTooltip', 'staticTooltipClosed', 'staticTooltipLabel', 'tooltipPlacementLeft', 'tooltipPlacementRight']);
  var speedDialActionClasses$1 = speedDialActionClasses;

  const _excluded$u = ["className", "delay", "FabProps", "icon", "id", "open", "TooltipClasses", "tooltipOpen", "tooltipPlacement", "tooltipTitle"];
  const useUtilityClasses$p = ownerState => {
    const {
      open,
      tooltipPlacement,
      classes
    } = ownerState;
    const slots = {
      fab: ['fab', !open && 'fabClosed'],
      staticTooltip: ['staticTooltip', `tooltipPlacement${capitalize(tooltipPlacement)}`, !open && 'staticTooltipClosed'],
      staticTooltipLabel: ['staticTooltipLabel']
    };
    return composeClasses(slots, getSpeedDialActionUtilityClass, classes);
  };
  const SpeedDialActionFab = styled$1(Fab$1, {
    name: 'MuiSpeedDialAction',
    slot: 'Fab',
    skipVariantsResolver: false,
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.fab, !ownerState.open && styles.fabClosed];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    margin: 8,
    color: (theme.vars || theme).palette.text.secondary,
    backgroundColor: (theme.vars || theme).palette.background.paper,
    '&:hover': {
      backgroundColor: theme.vars ? theme.vars.palette.SpeedDialAction.fabHoverBg : emphasize(theme.palette.background.paper, 0.15)
    },
    transition: `${theme.transitions.create('transform', {
    duration: theme.transitions.duration.shorter
  })}, opacity 0.8s`,
    opacity: 1
  }, !ownerState.open && {
    opacity: 0,
    transform: 'scale(0)'
  }));
  const SpeedDialActionStaticTooltip = styled$1('span', {
    name: 'MuiSpeedDialAction',
    slot: 'StaticTooltip',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.staticTooltip, !ownerState.open && styles.staticTooltipClosed, styles[`tooltipPlacement${capitalize(ownerState.tooltipPlacement)}`]];
    }
  })(({
    theme,
    ownerState
  }) => ({
    position: 'relative',
    display: 'flex',
    alignItems: 'center',
    [`& .${speedDialActionClasses$1.staticTooltipLabel}`]: _extends({
      transition: theme.transitions.create(['transform', 'opacity'], {
        duration: theme.transitions.duration.shorter
      }),
      opacity: 1
    }, !ownerState.open && {
      opacity: 0,
      transform: 'scale(0.5)'
    }, ownerState.tooltipPlacement === 'left' && {
      transformOrigin: '100% 50%',
      right: '100%',
      marginRight: 8
    }, ownerState.tooltipPlacement === 'right' && {
      transformOrigin: '0% 50%',
      left: '100%',
      marginLeft: 8
    })
  }));
  const SpeedDialActionStaticTooltipLabel = styled$1('span', {
    name: 'MuiSpeedDialAction',
    slot: 'StaticTooltipLabel',
    overridesResolver: (props, styles) => styles.staticTooltipLabel
  })(({
    theme
  }) => _extends({
    position: 'absolute'
  }, theme.typography.body1, {
    backgroundColor: (theme.vars || theme).palette.background.paper,
    borderRadius: (theme.vars || theme).shape.borderRadius,
    boxShadow: (theme.vars || theme).shadows[1],
    color: (theme.vars || theme).palette.text.secondary,
    padding: '4px 16px',
    wordBreak: 'keep-all'
  }));
  const SpeedDialAction = /*#__PURE__*/React__namespace.forwardRef(function SpeedDialAction(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSpeedDialAction'
    });
    const {
        className,
        delay = 0,
        FabProps = {},
        icon,
        id,
        open,
        TooltipClasses,
        tooltipOpen: tooltipOpenProp = false,
        tooltipPlacement = 'left',
        tooltipTitle
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$u);
    const ownerState = _extends({}, props, {
      tooltipPlacement
    });
    const classes = useUtilityClasses$p(ownerState);
    const [tooltipOpen, setTooltipOpen] = React__namespace.useState(tooltipOpenProp);
    const handleTooltipClose = () => {
      setTooltipOpen(false);
    };
    const handleTooltipOpen = () => {
      setTooltipOpen(true);
    };
    const transitionStyle = {
      transitionDelay: `${delay}ms`
    };
    const fab = /*#__PURE__*/jsxRuntime_1(SpeedDialActionFab, _extends({
      size: "small",
      className: clsx(classes.fab, className),
      tabIndex: -1,
      role: "menuitem",
      ownerState: ownerState
    }, FabProps, {
      style: _extends({}, transitionStyle, FabProps.style),
      children: icon
    }));
    if (tooltipOpenProp) {
      return /*#__PURE__*/jsxRuntime_2(SpeedDialActionStaticTooltip, _extends({
        id: id,
        ref: ref,
        className: classes.staticTooltip,
        ownerState: ownerState
      }, other, {
        children: [/*#__PURE__*/jsxRuntime_1(SpeedDialActionStaticTooltipLabel, {
          style: transitionStyle,
          id: `${id}-label`,
          className: classes.staticTooltipLabel,
          ownerState: ownerState,
          children: tooltipTitle
        }), /*#__PURE__*/React__namespace.cloneElement(fab, {
          'aria-labelledby': `${id}-label`
        })]
      }));
    }
    if (!open && tooltipOpen) {
      setTooltipOpen(false);
    }
    return /*#__PURE__*/jsxRuntime_1(Tooltip$1, _extends({
      id: id,
      ref: ref,
      title: tooltipTitle,
      placement: tooltipPlacement,
      onClose: handleTooltipClose,
      onOpen: handleTooltipOpen,
      open: open && tooltipOpen,
      classes: TooltipClasses
    }, other, {
      children: fab
    }));
  });
  SpeedDialAction.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Adds a transition delay, to allow a series of SpeedDialActions to be animated.
     * @default 0
     */
    delay: PropTypes.number,
    /**
     * Props applied to the [`Fab`](/material-ui/api/fab/) component.
     * @default {}
     */
    FabProps: PropTypes.object,
    /**
     * The icon to display in the SpeedDial Fab.
     */
    icon: PropTypes.node,
    /**
     * This prop is used to help implement the accessibility logic.
     * If you don't provide this prop. It falls back to a randomly generated id.
     */
    id: PropTypes.string,
    /**
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * `classes` prop applied to the [`Tooltip`](/material-ui/api/tooltip/) element.
     */
    TooltipClasses: PropTypes.object,
    /**
     * Make the tooltip always visible when the SpeedDial is open.
     * @default false
     */
    tooltipOpen: PropTypes.bool,
    /**
     * Placement of the tooltip.
     * @default 'left'
     */
    tooltipPlacement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
    /**
     * Label to display in the tooltip.
     */
    tooltipTitle: PropTypes.node
  } ;
  var SpeedDialAction$1 = SpeedDialAction;

  var AddIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"
  }), 'Add');

  function getSpeedDialIconUtilityClass(slot) {
    return generateUtilityClass('MuiSpeedDialIcon', slot);
  }
  const speedDialIconClasses = generateUtilityClasses('MuiSpeedDialIcon', ['root', 'icon', 'iconOpen', 'iconWithOpenIconOpen', 'openIcon', 'openIconOpen']);
  var speedDialIconClasses$1 = speedDialIconClasses;

  const _excluded$t = ["className", "icon", "open", "openIcon"];
  const useUtilityClasses$o = ownerState => {
    const {
      classes,
      open,
      openIcon
    } = ownerState;
    const slots = {
      root: ['root'],
      icon: ['icon', open && 'iconOpen', openIcon && open && 'iconWithOpenIconOpen'],
      openIcon: ['openIcon', open && 'openIconOpen']
    };
    return composeClasses(slots, getSpeedDialIconUtilityClass, classes);
  };
  const SpeedDialIconRoot = styled$1('span', {
    name: 'MuiSpeedDialIcon',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${speedDialIconClasses$1.icon}`]: styles.icon
      }, {
        [`& .${speedDialIconClasses$1.icon}`]: ownerState.open && styles.iconOpen
      }, {
        [`& .${speedDialIconClasses$1.icon}`]: ownerState.open && ownerState.openIcon && styles.iconWithOpenIconOpen
      }, {
        [`& .${speedDialIconClasses$1.openIcon}`]: styles.openIcon
      }, {
        [`& .${speedDialIconClasses$1.openIcon}`]: ownerState.open && styles.openIconOpen
      }, styles.root];
    }
  })(({
    theme,
    ownerState
  }) => ({
    height: 24,
    [`& .${speedDialIconClasses$1.icon}`]: _extends({
      transition: theme.transitions.create(['transform', 'opacity'], {
        duration: theme.transitions.duration.short
      })
    }, ownerState.open && _extends({
      transform: 'rotate(45deg)'
    }, ownerState.openIcon && {
      opacity: 0
    })),
    [`& .${speedDialIconClasses$1.openIcon}`]: _extends({
      position: 'absolute',
      transition: theme.transitions.create(['transform', 'opacity'], {
        duration: theme.transitions.duration.short
      }),
      opacity: 0,
      transform: 'rotate(-45deg)'
    }, ownerState.open && {
      transform: 'rotate(0deg)',
      opacity: 1
    })
  }));
  const SpeedDialIcon = /*#__PURE__*/React__namespace.forwardRef(function SpeedDialIcon(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSpeedDialIcon'
    });
    const {
        className,
        icon: iconProp,
        openIcon: openIconProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$t);
    const ownerState = props;
    const classes = useUtilityClasses$o(ownerState);
    function formatIcon(icon, newClassName) {
      if ( /*#__PURE__*/React__namespace.isValidElement(icon)) {
        return /*#__PURE__*/React__namespace.cloneElement(icon, {
          className: newClassName
        });
      }
      return icon;
    }
    return /*#__PURE__*/jsxRuntime_2(SpeedDialIconRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [openIconProp ? formatIcon(openIconProp, classes.openIcon) : null, iconProp ? formatIcon(iconProp, classes.icon) : /*#__PURE__*/jsxRuntime_1(AddIcon, {
        className: classes.icon
      })]
    }));
  });
  SpeedDialIcon.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The icon to display.
     */
    icon: PropTypes.node,
    /**
     * @ignore
     * If `true`, the component is shown.
     */
    open: PropTypes.bool,
    /**
     * The icon to display in the SpeedDial Floating Action Button when the SpeedDial is open.
     */
    openIcon: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  SpeedDialIcon.muiName = 'SpeedDialIcon';
  var SpeedDialIcon$1 = SpeedDialIcon;

  /**
   * Provides information about the current step in Stepper.
   */
  const StepperContext = /*#__PURE__*/React__namespace.createContext({});
  {
    StepperContext.displayName = 'StepperContext';
  }

  /**
   * Returns the current StepperContext or an empty object if no StepperContext
   * has been defined in the component tree.
   */
  function useStepperContext() {
    return React__namespace.useContext(StepperContext);
  }
  var StepperContext$1 = StepperContext;

  /**
   * Provides information about the current step in Stepper.
   */
  const StepContext = /*#__PURE__*/React__namespace.createContext({});
  {
    StepContext.displayName = 'StepContext';
  }

  /**
   * Returns the current StepContext or an empty object if no StepContext
   * has been defined in the component tree.
   */
  function useStepContext() {
    return React__namespace.useContext(StepContext);
  }
  var StepContext$1 = StepContext;

  function getStepUtilityClass(slot) {
    return generateUtilityClass('MuiStep', slot);
  }
  const stepClasses = generateUtilityClasses('MuiStep', ['root', 'horizontal', 'vertical', 'alternativeLabel', 'completed']);
  var stepClasses$1 = stepClasses;

  const _excluded$s = ["active", "children", "className", "component", "completed", "disabled", "expanded", "index", "last"];
  const useUtilityClasses$n = ownerState => {
    const {
      classes,
      orientation,
      alternativeLabel,
      completed
    } = ownerState;
    const slots = {
      root: ['root', orientation, alternativeLabel && 'alternativeLabel', completed && 'completed']
    };
    return composeClasses(slots, getStepUtilityClass, classes);
  };
  const StepRoot = styled$1('div', {
    name: 'MuiStep',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.orientation], ownerState.alternativeLabel && styles.alternativeLabel, ownerState.completed && styles.completed];
    }
  })(({
    ownerState
  }) => _extends({}, ownerState.orientation === 'horizontal' && {
    paddingLeft: 8,
    paddingRight: 8
  }, ownerState.alternativeLabel && {
    flex: 1,
    position: 'relative'
  }));
  const Step = /*#__PURE__*/React__namespace.forwardRef(function Step(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStep'
    });
    const {
        active: activeProp,
        children,
        className,
        component = 'div',
        completed: completedProp,
        disabled: disabledProp,
        expanded = false,
        index,
        last
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$s);
    const {
      activeStep,
      connector,
      alternativeLabel,
      orientation,
      nonLinear
    } = React__namespace.useContext(StepperContext$1);
    let [active = false, completed = false, disabled = false] = [activeProp, completedProp, disabledProp];
    if (activeStep === index) {
      active = activeProp !== undefined ? activeProp : true;
    } else if (!nonLinear && activeStep > index) {
      completed = completedProp !== undefined ? completedProp : true;
    } else if (!nonLinear && activeStep < index) {
      disabled = disabledProp !== undefined ? disabledProp : true;
    }
    const contextValue = React__namespace.useMemo(() => ({
      index,
      last,
      expanded,
      icon: index + 1,
      active,
      completed,
      disabled
    }), [index, last, expanded, active, completed, disabled]);
    const ownerState = _extends({}, props, {
      active,
      orientation,
      alternativeLabel,
      completed,
      disabled,
      expanded,
      component
    });
    const classes = useUtilityClasses$n(ownerState);
    const newChildren = /*#__PURE__*/jsxRuntime_2(StepRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [connector && alternativeLabel && index !== 0 ? connector : null, children]
    }));
    return /*#__PURE__*/jsxRuntime_1(StepContext$1.Provider, {
      value: contextValue,
      children: connector && !alternativeLabel && index !== 0 ? /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
        children: [connector, newChildren]
      }) : newChildren
    });
  });
  Step.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Sets the step as active. Is passed to child components.
     */
    active: PropTypes.bool,
    /**
     * Should be `Step` sub-components such as `StepLabel`, `StepContent`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Mark the step as completed. Is passed to child components.
     */
    completed: PropTypes.bool,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the step is disabled, will also disable the button if
     * `StepButton` is a child of `Step`. Is passed to child components.
     */
    disabled: PropTypes.bool,
    /**
     * Expand the step.
     * @default false
     */
    expanded: PropTypes.bool,
    /**
     * The position of the step.
     * The prop defaults to the value inherited from the parent Stepper component.
     */
    index: integerPropType,
    /**
     * If `true`, the Step is displayed as rendered last.
     * The prop defaults to the value inherited from the parent Stepper component.
     */
    last: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Step$1 = Step;

  var CheckCircle = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M12 0a12 12 0 1 0 0 24 12 12 0 0 0 0-24zm-2 17l-5-5 1.4-1.4 3.6 3.6 7.6-7.6L19 8l-9 9z"
  }), 'CheckCircle');

  var Warning = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"
  }), 'Warning');

  function getStepIconUtilityClass(slot) {
    return generateUtilityClass('MuiStepIcon', slot);
  }
  const stepIconClasses = generateUtilityClasses('MuiStepIcon', ['root', 'active', 'completed', 'error', 'text']);
  var stepIconClasses$1 = stepIconClasses;

  var _circle;
  const _excluded$r = ["active", "className", "completed", "error", "icon"];
  const useUtilityClasses$m = ownerState => {
    const {
      classes,
      active,
      completed,
      error
    } = ownerState;
    const slots = {
      root: ['root', active && 'active', completed && 'completed', error && 'error'],
      text: ['text']
    };
    return composeClasses(slots, getStepIconUtilityClass, classes);
  };
  const StepIconRoot = styled$1(SvgIcon$1, {
    name: 'MuiStepIcon',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => ({
    display: 'block',
    transition: theme.transitions.create('color', {
      duration: theme.transitions.duration.shortest
    }),
    color: (theme.vars || theme).palette.text.disabled,
    [`&.${stepIconClasses$1.completed}`]: {
      color: (theme.vars || theme).palette.primary.main
    },
    [`&.${stepIconClasses$1.active}`]: {
      color: (theme.vars || theme).palette.primary.main
    },
    [`&.${stepIconClasses$1.error}`]: {
      color: (theme.vars || theme).palette.error.main
    }
  }));
  const StepIconText = styled$1('text', {
    name: 'MuiStepIcon',
    slot: 'Text',
    overridesResolver: (props, styles) => styles.text
  })(({
    theme
  }) => ({
    fill: (theme.vars || theme).palette.primary.contrastText,
    fontSize: theme.typography.caption.fontSize,
    fontFamily: theme.typography.fontFamily
  }));
  const StepIcon = /*#__PURE__*/React__namespace.forwardRef(function StepIcon(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStepIcon'
    });
    const {
        active = false,
        className: classNameProp,
        completed = false,
        error = false,
        icon
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$r);
    const ownerState = _extends({}, props, {
      active,
      completed,
      error
    });
    const classes = useUtilityClasses$m(ownerState);
    if (typeof icon === 'number' || typeof icon === 'string') {
      const className = clsx(classNameProp, classes.root);
      if (error) {
        return /*#__PURE__*/jsxRuntime_1(StepIconRoot, _extends({
          as: Warning,
          className: className,
          ref: ref,
          ownerState: ownerState
        }, other));
      }
      if (completed) {
        return /*#__PURE__*/jsxRuntime_1(StepIconRoot, _extends({
          as: CheckCircle,
          className: className,
          ref: ref,
          ownerState: ownerState
        }, other));
      }
      return /*#__PURE__*/jsxRuntime_2(StepIconRoot, _extends({
        className: className,
        ref: ref,
        ownerState: ownerState
      }, other, {
        children: [_circle || (_circle = /*#__PURE__*/jsxRuntime_1("circle", {
          cx: "12",
          cy: "12",
          r: "12"
        })), /*#__PURE__*/jsxRuntime_1(StepIconText, {
          className: classes.text,
          x: "12",
          y: "12",
          textAnchor: "middle",
          dominantBaseline: "central",
          ownerState: ownerState,
          children: icon
        })]
      }));
    }
    return icon;
  });
  StepIcon.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Whether this step is active.
     * @default false
     */
    active: PropTypes.bool,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * Mark the step as completed. Is passed to child components.
     * @default false
     */
    completed: PropTypes.bool,
    /**
     * If `true`, the step is marked as failed.
     * @default false
     */
    error: PropTypes.bool,
    /**
     * The label displayed in the step icon.
     */
    icon: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var StepIcon$1 = StepIcon;

  function getStepLabelUtilityClass(slot) {
    return generateUtilityClass('MuiStepLabel', slot);
  }
  const stepLabelClasses = generateUtilityClasses('MuiStepLabel', ['root', 'horizontal', 'vertical', 'label', 'active', 'completed', 'error', 'disabled', 'iconContainer', 'alternativeLabel', 'labelContainer']);
  var stepLabelClasses$1 = stepLabelClasses;

  const _excluded$q = ["children", "className", "componentsProps", "error", "icon", "optional", "slotProps", "StepIconComponent", "StepIconProps"];
  const useUtilityClasses$l = ownerState => {
    const {
      classes,
      orientation,
      active,
      completed,
      error,
      disabled,
      alternativeLabel
    } = ownerState;
    const slots = {
      root: ['root', orientation, error && 'error', disabled && 'disabled', alternativeLabel && 'alternativeLabel'],
      label: ['label', active && 'active', completed && 'completed', error && 'error', disabled && 'disabled', alternativeLabel && 'alternativeLabel'],
      iconContainer: ['iconContainer', active && 'active', completed && 'completed', error && 'error', disabled && 'disabled', alternativeLabel && 'alternativeLabel'],
      labelContainer: ['labelContainer', alternativeLabel && 'alternativeLabel']
    };
    return composeClasses(slots, getStepLabelUtilityClass, classes);
  };
  const StepLabelRoot = styled$1('span', {
    name: 'MuiStepLabel',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.orientation]];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex',
    alignItems: 'center',
    [`&.${stepLabelClasses$1.alternativeLabel}`]: {
      flexDirection: 'column'
    },
    [`&.${stepLabelClasses$1.disabled}`]: {
      cursor: 'default'
    }
  }, ownerState.orientation === 'vertical' && {
    textAlign: 'left',
    padding: '8px 0'
  }));
  const StepLabelLabel = styled$1('span', {
    name: 'MuiStepLabel',
    slot: 'Label',
    overridesResolver: (props, styles) => styles.label
  })(({
    theme
  }) => _extends({}, theme.typography.body2, {
    display: 'block',
    transition: theme.transitions.create('color', {
      duration: theme.transitions.duration.shortest
    }),
    [`&.${stepLabelClasses$1.active}`]: {
      color: (theme.vars || theme).palette.text.primary,
      fontWeight: 500
    },
    [`&.${stepLabelClasses$1.completed}`]: {
      color: (theme.vars || theme).palette.text.primary,
      fontWeight: 500
    },
    [`&.${stepLabelClasses$1.alternativeLabel}`]: {
      marginTop: 16
    },
    [`&.${stepLabelClasses$1.error}`]: {
      color: (theme.vars || theme).palette.error.main
    }
  }));
  const StepLabelIconContainer = styled$1('span', {
    name: 'MuiStepLabel',
    slot: 'IconContainer',
    overridesResolver: (props, styles) => styles.iconContainer
  })(() => ({
    flexShrink: 0,
    // Fix IE11 issue
    display: 'flex',
    paddingRight: 8,
    [`&.${stepLabelClasses$1.alternativeLabel}`]: {
      paddingRight: 0
    }
  }));
  const StepLabelLabelContainer = styled$1('span', {
    name: 'MuiStepLabel',
    slot: 'LabelContainer',
    overridesResolver: (props, styles) => styles.labelContainer
  })(({
    theme
  }) => ({
    width: '100%',
    color: (theme.vars || theme).palette.text.secondary,
    [`&.${stepLabelClasses$1.alternativeLabel}`]: {
      textAlign: 'center'
    }
  }));
  const StepLabel = /*#__PURE__*/React__namespace.forwardRef(function StepLabel(inProps, ref) {
    var _slotProps$label;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStepLabel'
    });
    const {
        children,
        className,
        componentsProps = {},
        error = false,
        icon: iconProp,
        optional,
        slotProps = {},
        StepIconComponent: StepIconComponentProp,
        StepIconProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$q);
    const {
      alternativeLabel,
      orientation
    } = React__namespace.useContext(StepperContext$1);
    const {
      active,
      disabled,
      completed,
      icon: iconContext
    } = React__namespace.useContext(StepContext$1);
    const icon = iconProp || iconContext;
    let StepIconComponent = StepIconComponentProp;
    if (icon && !StepIconComponent) {
      StepIconComponent = StepIcon$1;
    }
    const ownerState = _extends({}, props, {
      active,
      alternativeLabel,
      completed,
      disabled,
      error,
      orientation
    });
    const classes = useUtilityClasses$l(ownerState);
    const labelSlotProps = (_slotProps$label = slotProps.label) != null ? _slotProps$label : componentsProps.label;
    return /*#__PURE__*/jsxRuntime_2(StepLabelRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: [icon || StepIconComponent ? /*#__PURE__*/jsxRuntime_1(StepLabelIconContainer, {
        className: classes.iconContainer,
        ownerState: ownerState,
        children: /*#__PURE__*/jsxRuntime_1(StepIconComponent, _extends({
          completed: completed,
          active: active,
          error: error,
          icon: icon
        }, StepIconProps))
      }) : null, /*#__PURE__*/jsxRuntime_2(StepLabelLabelContainer, {
        className: classes.labelContainer,
        ownerState: ownerState,
        children: [children ? /*#__PURE__*/jsxRuntime_1(StepLabelLabel, _extends({
          ownerState: ownerState
        }, labelSlotProps, {
          className: clsx(classes.label, labelSlotProps == null ? void 0 : labelSlotProps.className),
          children: children
        })) : null, optional]
      })]
    }));
  });
  StepLabel.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * In most cases will simply be a string containing a title for the label.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The props used for each slot inside.
     * @default {}
     */
    componentsProps: PropTypes.shape({
      label: PropTypes.object
    }),
    /**
     * If `true`, the step is marked as failed.
     * @default false
     */
    error: PropTypes.bool,
    /**
     * Override the default label of the step icon.
     */
    icon: PropTypes.node,
    /**
     * The optional node to display.
     */
    optional: PropTypes.node,
    /**
     * The props used for each slot inside.
     * @default {}
     */
    slotProps: PropTypes.shape({
      label: PropTypes.object
    }),
    /**
     * The component to render in place of the [`StepIcon`](/material-ui/api/step-icon/).
     */
    StepIconComponent: PropTypes.elementType,
    /**
     * Props applied to the [`StepIcon`](/material-ui/api/step-icon/) element.
     */
    StepIconProps: PropTypes.object,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  StepLabel.muiName = 'StepLabel';
  var StepLabel$1 = StepLabel;

  function getStepButtonUtilityClass(slot) {
    return generateUtilityClass('MuiStepButton', slot);
  }
  const stepButtonClasses = generateUtilityClasses('MuiStepButton', ['root', 'horizontal', 'vertical', 'touchRipple']);
  var stepButtonClasses$1 = stepButtonClasses;

  const _excluded$p = ["children", "className", "icon", "optional"];
  const useUtilityClasses$k = ownerState => {
    const {
      classes,
      orientation
    } = ownerState;
    const slots = {
      root: ['root', orientation],
      touchRipple: ['touchRipple']
    };
    return composeClasses(slots, getStepButtonUtilityClass, classes);
  };
  const StepButtonRoot = styled$1(ButtonBase$1, {
    name: 'MuiStepButton',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${stepButtonClasses$1.touchRipple}`]: styles.touchRipple
      }, styles.root, styles[ownerState.orientation]];
    }
  })(({
    ownerState
  }) => _extends({
    width: '100%',
    padding: '24px 16px',
    margin: '-24px -16px',
    boxSizing: 'content-box'
  }, ownerState.orientation === 'vertical' && {
    justifyContent: 'flex-start',
    padding: '8px',
    margin: '-8px'
  }, {
    [`& .${stepButtonClasses$1.touchRipple}`]: {
      color: 'rgba(0, 0, 0, 0.3)'
    }
  }));
  const StepButton = /*#__PURE__*/React__namespace.forwardRef(function StepButton(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStepButton'
    });
    const {
        children,
        className,
        icon,
        optional
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$p);
    const {
      disabled,
      active
    } = React__namespace.useContext(StepContext$1);
    const {
      orientation
    } = React__namespace.useContext(StepperContext$1);
    const ownerState = _extends({}, props, {
      orientation
    });
    const classes = useUtilityClasses$k(ownerState);
    const childProps = {
      icon,
      optional
    };
    const child = isMuiElement(children, ['StepLabel']) ? ( /*#__PURE__*/React__namespace.cloneElement(children, childProps)) : /*#__PURE__*/jsxRuntime_1(StepLabel$1, _extends({}, childProps, {
      children: children
    }));
    return /*#__PURE__*/jsxRuntime_1(StepButtonRoot, _extends({
      focusRipple: true,
      disabled: disabled,
      TouchRippleProps: {
        className: classes.touchRipple
      },
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState,
      "aria-current": active ? 'step' : undefined
    }, other, {
      children: child
    }));
  });
  StepButton.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Can be a `StepLabel` or a node to place inside `StepLabel` as children.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The icon displayed by the step label.
     */
    icon: PropTypes.node,
    /**
     * The optional node to display.
     */
    optional: PropTypes.node,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var StepButton$1 = StepButton;

  function getStepConnectorUtilityClass(slot) {
    return generateUtilityClass('MuiStepConnector', slot);
  }
  const stepConnectorClasses = generateUtilityClasses('MuiStepConnector', ['root', 'horizontal', 'vertical', 'alternativeLabel', 'active', 'completed', 'disabled', 'line', 'lineHorizontal', 'lineVertical']);
  var stepConnectorClasses$1 = stepConnectorClasses;

  const _excluded$o = ["className"];
  const useUtilityClasses$j = ownerState => {
    const {
      classes,
      orientation,
      alternativeLabel,
      active,
      completed,
      disabled
    } = ownerState;
    const slots = {
      root: ['root', orientation, alternativeLabel && 'alternativeLabel', active && 'active', completed && 'completed', disabled && 'disabled'],
      line: ['line', `line${capitalize(orientation)}`]
    };
    return composeClasses(slots, getStepConnectorUtilityClass, classes);
  };
  const StepConnectorRoot = styled$1('div', {
    name: 'MuiStepConnector',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.orientation], ownerState.alternativeLabel && styles.alternativeLabel, ownerState.completed && styles.completed];
    }
  })(({
    ownerState
  }) => _extends({
    flex: '1 1 auto'
  }, ownerState.orientation === 'vertical' && {
    marginLeft: 12 // half icon
  }, ownerState.alternativeLabel && {
    position: 'absolute',
    top: 8 + 4,
    left: 'calc(-50% + 20px)',
    right: 'calc(50% + 20px)'
  }));
  const StepConnectorLine = styled$1('span', {
    name: 'MuiStepConnector',
    slot: 'Line',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.line, styles[`line${capitalize(ownerState.orientation)}`]];
    }
  })(({
    ownerState,
    theme
  }) => {
    const borderColor = theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[600];
    return _extends({
      display: 'block',
      borderColor: theme.vars ? theme.vars.palette.StepConnector.border : borderColor
    }, ownerState.orientation === 'horizontal' && {
      borderTopStyle: 'solid',
      borderTopWidth: 1
    }, ownerState.orientation === 'vertical' && {
      borderLeftStyle: 'solid',
      borderLeftWidth: 1,
      minHeight: 24
    });
  });
  const StepConnector = /*#__PURE__*/React__namespace.forwardRef(function StepConnector(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStepConnector'
    });
    const {
        className
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$o);
    const {
      alternativeLabel,
      orientation = 'horizontal'
    } = React__namespace.useContext(StepperContext$1);
    const {
      active,
      disabled,
      completed
    } = React__namespace.useContext(StepContext$1);
    const ownerState = _extends({}, props, {
      alternativeLabel,
      orientation,
      active,
      completed,
      disabled
    });
    const classes = useUtilityClasses$j(ownerState);
    return /*#__PURE__*/jsxRuntime_1(StepConnectorRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(StepConnectorLine, {
        className: classes.line,
        ownerState: ownerState
      })
    }));
  });
  StepConnector.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var StepConnector$1 = StepConnector;

  function getStepContentUtilityClass(slot) {
    return generateUtilityClass('MuiStepContent', slot);
  }
  const stepContentClasses = generateUtilityClasses('MuiStepContent', ['root', 'last', 'transition']);
  var stepContentClasses$1 = stepContentClasses;

  const _excluded$n = ["children", "className", "TransitionComponent", "transitionDuration", "TransitionProps"];
  const useUtilityClasses$i = ownerState => {
    const {
      classes,
      last
    } = ownerState;
    const slots = {
      root: ['root', last && 'last'],
      transition: ['transition']
    };
    return composeClasses(slots, getStepContentUtilityClass, classes);
  };
  const StepContentRoot = styled$1('div', {
    name: 'MuiStepContent',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.last && styles.last];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    marginLeft: 12,
    // half icon
    paddingLeft: 8 + 12,
    // margin + half icon
    paddingRight: 8,
    borderLeft: theme.vars ? `1px solid ${theme.vars.palette.StepContent.border}` : `1px solid ${theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]}`
  }, ownerState.last && {
    borderLeft: 'none'
  }));
  const StepContentTransition = styled$1(Collapse$1, {
    name: 'MuiStepContent',
    slot: 'Transition',
    overridesResolver: (props, styles) => styles.transition
  })({});
  const StepContent = /*#__PURE__*/React__namespace.forwardRef(function StepContent(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStepContent'
    });
    const {
        children,
        className,
        TransitionComponent = Collapse$1,
        transitionDuration: transitionDurationProp = 'auto',
        TransitionProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$n);
    const {
      orientation
    } = React__namespace.useContext(StepperContext$1);
    const {
      active,
      last,
      expanded
    } = React__namespace.useContext(StepContext$1);
    const ownerState = _extends({}, props, {
      last
    });
    const classes = useUtilityClasses$i(ownerState);
    {
      if (orientation !== 'vertical') {
        console.error('MUI: <StepContent /> is only designed for use with the vertical stepper.');
      }
    }
    let transitionDuration = transitionDurationProp;
    if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {
      transitionDuration = undefined;
    }
    return /*#__PURE__*/jsxRuntime_1(StepContentRoot, _extends({
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: /*#__PURE__*/jsxRuntime_1(StepContentTransition, _extends({
        as: TransitionComponent,
        in: active || expanded,
        className: classes.transition,
        ownerState: ownerState,
        timeout: transitionDuration,
        unmountOnExit: true
      }, TransitionProps, {
        children: children
      }))
    }));
  });
  StepContent.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The component used for the transition.
     * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
     * @default Collapse
     */
    TransitionComponent: PropTypes.elementType,
    /**
     * Adjust the duration of the content expand transition.
     * Passed as a prop to the transition component.
     *
     * Set to 'auto' to automatically calculate transition time based on height.
     * @default 'auto'
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * Props applied to the transition element.
     * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.
     */
    TransitionProps: PropTypes.object
  } ;
  var StepContent$1 = StepContent;

  function getStepperUtilityClass(slot) {
    return generateUtilityClass('MuiStepper', slot);
  }
  const stepperClasses = generateUtilityClasses('MuiStepper', ['root', 'horizontal', 'vertical', 'alternativeLabel']);
  var stepperClasses$1 = stepperClasses;

  const _excluded$m = ["activeStep", "alternativeLabel", "children", "className", "component", "connector", "nonLinear", "orientation"];
  const useUtilityClasses$h = ownerState => {
    const {
      orientation,
      alternativeLabel,
      classes
    } = ownerState;
    const slots = {
      root: ['root', orientation, alternativeLabel && 'alternativeLabel']
    };
    return composeClasses(slots, getStepperUtilityClass, classes);
  };
  const StepperRoot = styled$1('div', {
    name: 'MuiStepper',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.orientation], ownerState.alternativeLabel && styles.alternativeLabel];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex'
  }, ownerState.orientation === 'horizontal' && {
    flexDirection: 'row',
    alignItems: 'center'
  }, ownerState.orientation === 'vertical' && {
    flexDirection: 'column'
  }, ownerState.alternativeLabel && {
    alignItems: 'flex-start'
  }));
  const defaultConnector = /*#__PURE__*/jsxRuntime_1(StepConnector$1, {});
  const Stepper = /*#__PURE__*/React__namespace.forwardRef(function Stepper(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiStepper'
    });
    const {
        activeStep = 0,
        alternativeLabel = false,
        children,
        className,
        component = 'div',
        connector = defaultConnector,
        nonLinear = false,
        orientation = 'horizontal'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$m);
    const ownerState = _extends({}, props, {
      alternativeLabel,
      orientation,
      component
    });
    const classes = useUtilityClasses$h(ownerState);
    const childrenArray = React__namespace.Children.toArray(children).filter(Boolean);
    const steps = childrenArray.map((step, index) => {
      return /*#__PURE__*/React__namespace.cloneElement(step, _extends({
        index,
        last: index + 1 === childrenArray.length
      }, step.props));
    });
    const contextValue = React__namespace.useMemo(() => ({
      activeStep,
      alternativeLabel,
      connector,
      nonLinear,
      orientation
    }), [activeStep, alternativeLabel, connector, nonLinear, orientation]);
    return /*#__PURE__*/jsxRuntime_1(StepperContext$1.Provider, {
      value: contextValue,
      children: /*#__PURE__*/jsxRuntime_1(StepperRoot, _extends({
        as: component,
        ownerState: ownerState,
        className: clsx(classes.root, className),
        ref: ref
      }, other, {
        children: steps
      }))
    });
  });
  Stepper.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Set the active step (zero based index).
     * Set to -1 to disable all the steps.
     * @default 0
     */
    activeStep: integerPropType,
    /**
     * If set to 'true' and orientation is horizontal,
     * then the step label will be positioned under the icon.
     * @default false
     */
    alternativeLabel: PropTypes.bool,
    /**
     * Two or more `<Step />` components.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * An element to be placed between each step.
     * @default <StepConnector />
     */
    connector: PropTypes.element,
    /**
     * If set the `Stepper` will not assist in controlling steps for linear flow.
     * @default false
     */
    nonLinear: PropTypes.bool,
    /**
     * The component orientation (layout flow direction).
     * @default 'horizontal'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Stepper$1 = Stepper;

  const _excluded$l = ["anchor", "classes", "className", "width", "style"];
  const SwipeAreaRoot = styled$1('div', {
    shouldForwardProp: rootShouldForwardProp
  })(({
    theme,
    ownerState
  }) => _extends({
    position: 'fixed',
    top: 0,
    left: 0,
    bottom: 0,
    zIndex: theme.zIndex.drawer - 1
  }, ownerState.anchor === 'left' && {
    right: 'auto'
  }, ownerState.anchor === 'right' && {
    left: 'auto',
    right: 0
  }, ownerState.anchor === 'top' && {
    bottom: 'auto',
    right: 0
  }, ownerState.anchor === 'bottom' && {
    top: 'auto',
    bottom: 0,
    right: 0
  }));

  /**
   * @ignore - internal component.
   */
  const SwipeArea = /*#__PURE__*/React__namespace.forwardRef(function SwipeArea(props, ref) {
    const {
        anchor,
        classes = {},
        className,
        width,
        style
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$l);
    const ownerState = props;
    return /*#__PURE__*/jsxRuntime_1(SwipeAreaRoot, _extends({
      className: clsx('PrivateSwipeArea-root', classes.root, classes[`anchor${capitalize(anchor)}`], className),
      ref: ref,
      style: _extends({
        [isHorizontal(anchor) ? 'width' : 'height']: width
      }, style),
      ownerState: ownerState
    }, other));
  });
  SwipeArea.propTypes = {
    /**
     * Side on which to attach the discovery area.
     */
    anchor: PropTypes.oneOf(['left', 'top', 'right', 'bottom']).isRequired,
    /**
     * @ignore
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * @ignore
     */
    style: PropTypes.object,
    /**
     * The width of the left most (or right most) area in `px` where the
     * drawer can be swiped open from.
     */
    width: PropTypes.number.isRequired
  } ;
  var SwipeArea$1 = SwipeArea;

  const _excluded$k = ["BackdropProps"],
    _excluded2 = ["anchor", "disableBackdropTransition", "disableDiscovery", "disableSwipeToOpen", "hideBackdrop", "hysteresis", "allowSwipeInChildren", "minFlingVelocity", "ModalProps", "onClose", "onOpen", "open", "PaperProps", "SwipeAreaProps", "swipeAreaWidth", "transitionDuration", "variant"];
  const UNCERTAINTY_THRESHOLD = 3; // px

  // This is the part of the drawer displayed on touch start.
  const DRAG_STARTED_SIGNAL = 20; // px

  // We can only have one instance at the time claiming ownership for handling the swipe.
  // Otherwise, the UX would be confusing.
  // That's why we use a singleton here.
  let claimedSwipeInstance = null;
  function calculateCurrentX(anchor, touches, doc) {
    return anchor === 'right' ? doc.body.offsetWidth - touches[0].pageX : touches[0].pageX;
  }
  function calculateCurrentY(anchor, touches, containerWindow) {
    return anchor === 'bottom' ? containerWindow.innerHeight - touches[0].clientY : touches[0].clientY;
  }
  function getMaxTranslate(horizontalSwipe, paperInstance) {
    return horizontalSwipe ? paperInstance.clientWidth : paperInstance.clientHeight;
  }
  function getTranslate(currentTranslate, startLocation, open, maxTranslate) {
    return Math.min(Math.max(open ? startLocation - currentTranslate : maxTranslate + startLocation - currentTranslate, 0), maxTranslate);
  }

  /**
   * @param {Element | null} element
   * @param {Element} rootNode
   */
  function getDomTreeShapes(element, rootNode) {
    // Adapted from https://github.com/oliviertassinari/react-swipeable-views/blob/7666de1dba253b896911adf2790ce51467670856/packages/react-swipeable-views/src/SwipeableViews.js#L129
    const domTreeShapes = [];
    while (element && element !== rootNode.parentElement) {
      const style = ownerWindow(rootNode).getComputedStyle(element);
      if (
      // Ignore the scroll children if the element is absolute positioned.
      style.getPropertyValue('position') === 'absolute' ||
      // Ignore the scroll children if the element has an overflowX hidden
      style.getPropertyValue('overflow-x') === 'hidden') ; else if (element.clientWidth > 0 && element.scrollWidth > element.clientWidth || element.clientHeight > 0 && element.scrollHeight > element.clientHeight) {
        // Ignore the nodes that have no width.
        // Keep elements with a scroll
        domTreeShapes.push(element);
      }
      element = element.parentElement;
    }
    return domTreeShapes;
  }

  /**
   * @param {object} param0
   * @param {ReturnType<getDomTreeShapes>} param0.domTreeShapes
   */
  function computeHasNativeHandler({
    domTreeShapes,
    start,
    current,
    anchor
  }) {
    // Adapted from https://github.com/oliviertassinari/react-swipeable-views/blob/7666de1dba253b896911adf2790ce51467670856/packages/react-swipeable-views/src/SwipeableViews.js#L175
    const axisProperties = {
      scrollPosition: {
        x: 'scrollLeft',
        y: 'scrollTop'
      },
      scrollLength: {
        x: 'scrollWidth',
        y: 'scrollHeight'
      },
      clientLength: {
        x: 'clientWidth',
        y: 'clientHeight'
      }
    };
    return domTreeShapes.some(shape => {
      // Determine if we are going backward or forward.
      let goingForward = current >= start;
      if (anchor === 'top' || anchor === 'left') {
        goingForward = !goingForward;
      }
      const axis = anchor === 'left' || anchor === 'right' ? 'x' : 'y';
      const scrollPosition = Math.round(shape[axisProperties.scrollPosition[axis]]);
      const areNotAtStart = scrollPosition > 0;
      const areNotAtEnd = scrollPosition + shape[axisProperties.clientLength[axis]] < shape[axisProperties.scrollLength[axis]];
      if (goingForward && areNotAtEnd || !goingForward && areNotAtStart) {
        return true;
      }
      return false;
    });
  }
  const iOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent);
  const SwipeableDrawer = /*#__PURE__*/React__namespace.forwardRef(function SwipeableDrawer(inProps, ref) {
    const props = useThemeProps$1({
      name: 'MuiSwipeableDrawer',
      props: inProps
    });
    const theme = useTheme();
    const transitionDurationDefault = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen
    };
    const {
        anchor = 'left',
        disableBackdropTransition = false,
        disableDiscovery = false,
        disableSwipeToOpen = iOS,
        hideBackdrop,
        hysteresis = 0.52,
        allowSwipeInChildren = false,
        minFlingVelocity = 450,
        ModalProps: {
          BackdropProps
        } = {},
        onClose,
        onOpen,
        open = false,
        PaperProps = {},
        SwipeAreaProps,
        swipeAreaWidth = 20,
        transitionDuration = transitionDurationDefault,
        variant = 'temporary' // Mobile first.
      } = props,
      ModalPropsProp = _objectWithoutPropertiesLoose(props.ModalProps, _excluded$k),
      other = _objectWithoutPropertiesLoose(props, _excluded2);
    const [maybeSwiping, setMaybeSwiping] = React__namespace.useState(false);
    const swipeInstance = React__namespace.useRef({
      isSwiping: null
    });
    const swipeAreaRef = React__namespace.useRef();
    const backdropRef = React__namespace.useRef();
    const paperRef = React__namespace.useRef();
    const handleRef = useForkRef(PaperProps.ref, paperRef);
    const touchDetected = React__namespace.useRef(false);

    // Ref for transition duration based on / to match swipe speed
    const calculatedDurationRef = React__namespace.useRef();

    // Use a ref so the open value used is always up to date inside useCallback.
    useEnhancedEffect$1(() => {
      calculatedDurationRef.current = null;
    }, [open]);
    const setPosition = React__namespace.useCallback((translate, options = {}) => {
      const {
        mode = null,
        changeTransition = true
      } = options;
      const anchorRtl = getAnchor(theme, anchor);
      const rtlTranslateMultiplier = ['right', 'bottom'].indexOf(anchorRtl) !== -1 ? 1 : -1;
      const horizontalSwipe = isHorizontal(anchor);
      const transform = horizontalSwipe ? `translate(${rtlTranslateMultiplier * translate}px, 0)` : `translate(0, ${rtlTranslateMultiplier * translate}px)`;
      const drawerStyle = paperRef.current.style;
      drawerStyle.webkitTransform = transform;
      drawerStyle.transform = transform;
      let transition = '';
      if (mode) {
        transition = theme.transitions.create('all', getTransitionProps({
          easing: undefined,
          style: undefined,
          timeout: transitionDuration
        }, {
          mode
        }));
      }
      if (changeTransition) {
        drawerStyle.webkitTransition = transition;
        drawerStyle.transition = transition;
      }
      if (!disableBackdropTransition && !hideBackdrop) {
        const backdropStyle = backdropRef.current.style;
        backdropStyle.opacity = 1 - translate / getMaxTranslate(horizontalSwipe, paperRef.current);
        if (changeTransition) {
          backdropStyle.webkitTransition = transition;
          backdropStyle.transition = transition;
        }
      }
    }, [anchor, disableBackdropTransition, hideBackdrop, theme, transitionDuration]);
    const handleBodyTouchEnd = useEventCallback(nativeEvent => {
      if (!touchDetected.current) {
        return;
      }
      claimedSwipeInstance = null;
      touchDetected.current = false;
      ReactDOM__namespace.flushSync(() => {
        setMaybeSwiping(false);
      });

      // The swipe wasn't started.
      if (!swipeInstance.current.isSwiping) {
        swipeInstance.current.isSwiping = null;
        return;
      }
      swipeInstance.current.isSwiping = null;
      const anchorRtl = getAnchor(theme, anchor);
      const horizontal = isHorizontal(anchor);
      let current;
      if (horizontal) {
        current = calculateCurrentX(anchorRtl, nativeEvent.changedTouches, ownerDocument(nativeEvent.currentTarget));
      } else {
        current = calculateCurrentY(anchorRtl, nativeEvent.changedTouches, ownerWindow(nativeEvent.currentTarget));
      }
      const startLocation = horizontal ? swipeInstance.current.startX : swipeInstance.current.startY;
      const maxTranslate = getMaxTranslate(horizontal, paperRef.current);
      const currentTranslate = getTranslate(current, startLocation, open, maxTranslate);
      const translateRatio = currentTranslate / maxTranslate;
      if (Math.abs(swipeInstance.current.velocity) > minFlingVelocity) {
        // Calculate transition duration to match swipe speed
        calculatedDurationRef.current = Math.abs((maxTranslate - currentTranslate) / swipeInstance.current.velocity) * 1000;
      }
      if (open) {
        if (swipeInstance.current.velocity > minFlingVelocity || translateRatio > hysteresis) {
          onClose();
        } else {
          // Reset the position, the swipe was aborted.
          setPosition(0, {
            mode: 'exit'
          });
        }
        return;
      }
      if (swipeInstance.current.velocity < -minFlingVelocity || 1 - translateRatio > hysteresis) {
        onOpen();
      } else {
        // Reset the position, the swipe was aborted.
        setPosition(getMaxTranslate(horizontal, paperRef.current), {
          mode: 'enter'
        });
      }
    });
    const startMaybeSwiping = (force = false) => {
      if (!maybeSwiping) {
        // on Safari Mobile, if you want to be able to have the 'click' event fired on child elements, nothing in the DOM can be changed.
        // this is because Safari Mobile will not fire any mouse events (still fires touch though) if the DOM changes during mousemove.
        // so do this change on first touchmove instead of touchstart
        if (force || !(disableDiscovery && allowSwipeInChildren)) {
          ReactDOM__namespace.flushSync(() => {
            setMaybeSwiping(true);
          });
        }
        const horizontalSwipe = isHorizontal(anchor);
        if (!open && paperRef.current) {
          // The ref may be null when a parent component updates while swiping.
          setPosition(getMaxTranslate(horizontalSwipe, paperRef.current) + (disableDiscovery ? 15 : -DRAG_STARTED_SIGNAL), {
            changeTransition: false
          });
        }
        swipeInstance.current.velocity = 0;
        swipeInstance.current.lastTime = null;
        swipeInstance.current.lastTranslate = null;
        swipeInstance.current.paperHit = false;
        touchDetected.current = true;
      }
    };
    const handleBodyTouchMove = useEventCallback(nativeEvent => {
      // the ref may be null when a parent component updates while swiping
      if (!paperRef.current || !touchDetected.current) {
        return;
      }

      // We are not supposed to handle this touch move because the swipe was started in a scrollable container in the drawer
      if (claimedSwipeInstance !== null && claimedSwipeInstance !== swipeInstance.current) {
        return;
      }
      startMaybeSwiping(true);
      const anchorRtl = getAnchor(theme, anchor);
      const horizontalSwipe = isHorizontal(anchor);
      const currentX = calculateCurrentX(anchorRtl, nativeEvent.touches, ownerDocument(nativeEvent.currentTarget));
      const currentY = calculateCurrentY(anchorRtl, nativeEvent.touches, ownerWindow(nativeEvent.currentTarget));
      if (open && paperRef.current.contains(nativeEvent.target) && claimedSwipeInstance === null) {
        const domTreeShapes = getDomTreeShapes(nativeEvent.target, paperRef.current);
        const hasNativeHandler = computeHasNativeHandler({
          domTreeShapes,
          start: horizontalSwipe ? swipeInstance.current.startX : swipeInstance.current.startY,
          current: horizontalSwipe ? currentX : currentY,
          anchor
        });
        if (hasNativeHandler) {
          claimedSwipeInstance = true;
          return;
        }
        claimedSwipeInstance = swipeInstance.current;
      }

      // We don't know yet.
      if (swipeInstance.current.isSwiping == null) {
        const dx = Math.abs(currentX - swipeInstance.current.startX);
        const dy = Math.abs(currentY - swipeInstance.current.startY);
        const definitelySwiping = horizontalSwipe ? dx > dy && dx > UNCERTAINTY_THRESHOLD : dy > dx && dy > UNCERTAINTY_THRESHOLD;
        if (definitelySwiping && nativeEvent.cancelable) {
          nativeEvent.preventDefault();
        }
        if (definitelySwiping === true || (horizontalSwipe ? dy > UNCERTAINTY_THRESHOLD : dx > UNCERTAINTY_THRESHOLD)) {
          swipeInstance.current.isSwiping = definitelySwiping;
          if (!definitelySwiping) {
            handleBodyTouchEnd(nativeEvent);
            return;
          }

          // Shift the starting point.
          swipeInstance.current.startX = currentX;
          swipeInstance.current.startY = currentY;

          // Compensate for the part of the drawer displayed on touch start.
          if (!disableDiscovery && !open) {
            if (horizontalSwipe) {
              swipeInstance.current.startX -= DRAG_STARTED_SIGNAL;
            } else {
              swipeInstance.current.startY -= DRAG_STARTED_SIGNAL;
            }
          }
        }
      }
      if (!swipeInstance.current.isSwiping) {
        return;
      }
      const maxTranslate = getMaxTranslate(horizontalSwipe, paperRef.current);
      let startLocation = horizontalSwipe ? swipeInstance.current.startX : swipeInstance.current.startY;
      if (open && !swipeInstance.current.paperHit) {
        startLocation = Math.min(startLocation, maxTranslate);
      }
      const translate = getTranslate(horizontalSwipe ? currentX : currentY, startLocation, open, maxTranslate);
      if (open) {
        if (!swipeInstance.current.paperHit) {
          const paperHit = horizontalSwipe ? currentX < maxTranslate : currentY < maxTranslate;
          if (paperHit) {
            swipeInstance.current.paperHit = true;
            swipeInstance.current.startX = currentX;
            swipeInstance.current.startY = currentY;
          } else {
            return;
          }
        } else if (translate === 0) {
          swipeInstance.current.startX = currentX;
          swipeInstance.current.startY = currentY;
        }
      }
      if (swipeInstance.current.lastTranslate === null) {
        swipeInstance.current.lastTranslate = translate;
        swipeInstance.current.lastTime = performance.now() + 1;
      }
      const velocity = (translate - swipeInstance.current.lastTranslate) / (performance.now() - swipeInstance.current.lastTime) * 1e3;

      // Low Pass filter.
      swipeInstance.current.velocity = swipeInstance.current.velocity * 0.4 + velocity * 0.6;
      swipeInstance.current.lastTranslate = translate;
      swipeInstance.current.lastTime = performance.now();

      // We are swiping, let's prevent the scroll event on iOS.
      if (nativeEvent.cancelable) {
        nativeEvent.preventDefault();
      }
      setPosition(translate);
    });
    const handleBodyTouchStart = useEventCallback(nativeEvent => {
      // We are not supposed to handle this touch move.
      // Example of use case: ignore the event if there is a Slider.
      if (nativeEvent.defaultPrevented) {
        return;
      }

      // We can only have one node at the time claiming ownership for handling the swipe.
      if (nativeEvent.defaultMuiPrevented) {
        return;
      }

      // At least one element clogs the drawer interaction zone.
      if (open && (hideBackdrop || !backdropRef.current.contains(nativeEvent.target)) && !paperRef.current.contains(nativeEvent.target)) {
        return;
      }
      const anchorRtl = getAnchor(theme, anchor);
      const horizontalSwipe = isHorizontal(anchor);
      const currentX = calculateCurrentX(anchorRtl, nativeEvent.touches, ownerDocument(nativeEvent.currentTarget));
      const currentY = calculateCurrentY(anchorRtl, nativeEvent.touches, ownerWindow(nativeEvent.currentTarget));
      if (!open) {
        var _paperRef$current;
        // logic for if swipe should be ignored:
        // if disableSwipeToOpen
        // if target != swipeArea, and target is not a child of paper ref
        // if is a child of paper ref, and `allowSwipeInChildren` does not allow it
        if (disableSwipeToOpen || !(nativeEvent.target === swipeAreaRef.current || (_paperRef$current = paperRef.current) != null && _paperRef$current.contains(nativeEvent.target) && (typeof allowSwipeInChildren === 'function' ? allowSwipeInChildren(nativeEvent, swipeAreaRef.current, paperRef.current) : allowSwipeInChildren))) {
          return;
        }
        if (horizontalSwipe) {
          if (currentX > swipeAreaWidth) {
            return;
          }
        } else if (currentY > swipeAreaWidth) {
          return;
        }
      }
      nativeEvent.defaultMuiPrevented = true;
      claimedSwipeInstance = null;
      swipeInstance.current.startX = currentX;
      swipeInstance.current.startY = currentY;
      startMaybeSwiping();
    });
    React__namespace.useEffect(() => {
      if (variant === 'temporary') {
        const doc = ownerDocument(paperRef.current);
        doc.addEventListener('touchstart', handleBodyTouchStart);
        // A blocking listener prevents Firefox's navbar to auto-hide on scroll.
        // It only needs to prevent scrolling on the drawer's content when open.
        // When closed, the overlay prevents scrolling.
        doc.addEventListener('touchmove', handleBodyTouchMove, {
          passive: !open
        });
        doc.addEventListener('touchend', handleBodyTouchEnd);
        return () => {
          doc.removeEventListener('touchstart', handleBodyTouchStart);
          doc.removeEventListener('touchmove', handleBodyTouchMove, {
            passive: !open
          });
          doc.removeEventListener('touchend', handleBodyTouchEnd);
        };
      }
      return undefined;
    }, [variant, open, handleBodyTouchStart, handleBodyTouchMove, handleBodyTouchEnd]);
    React__namespace.useEffect(() => () => {
      // We need to release the lock.
      if (claimedSwipeInstance === swipeInstance.current) {
        claimedSwipeInstance = null;
      }
    }, []);
    React__namespace.useEffect(() => {
      if (!open) {
        setMaybeSwiping(false);
      }
    }, [open]);
    return /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
      children: [/*#__PURE__*/jsxRuntime_1(Drawer$1, _extends({
        open: variant === 'temporary' && maybeSwiping ? true : open,
        variant: variant,
        ModalProps: _extends({
          BackdropProps: _extends({}, BackdropProps, {
            ref: backdropRef
          })
        }, variant === 'temporary' && {
          keepMounted: true
        }, ModalPropsProp),
        hideBackdrop: hideBackdrop,
        PaperProps: _extends({}, PaperProps, {
          style: _extends({
            pointerEvents: variant === 'temporary' && !open && !allowSwipeInChildren ? 'none' : ''
          }, PaperProps.style),
          ref: handleRef
        }),
        anchor: anchor,
        transitionDuration: calculatedDurationRef.current || transitionDuration,
        onClose: onClose,
        ref: ref
      }, other)), !disableSwipeToOpen && variant === 'temporary' && /*#__PURE__*/jsxRuntime_1(NoSsr, {
        children: /*#__PURE__*/jsxRuntime_1(SwipeArea$1, _extends({
          anchor: anchor,
          ref: swipeAreaRef,
          width: swipeAreaWidth
        }, SwipeAreaProps))
      })]
    });
  });
  SwipeableDrawer.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If set to true, the swipe event will open the drawer even if the user begins the swipe on one of the drawer's children.
     * This can be useful in scenarios where the drawer is partially visible.
     * You can customize it further with a callback that determines which children the user can drag over to open the drawer
     * (for example, to ignore other elements that handle touch move events, like sliders).
     *
     * @param {TouchEvent} event The 'touchstart' event
     * @param {HTMLDivElement} swipeArea The swipe area element
     * @param {HTMLDivElement} paper The drawer's paper element
     *
     * @default false
     */
    allowSwipeInChildren: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),
    /**
     * @ignore
     */
    anchor: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Disable the backdrop transition.
     * This can improve the FPS on low-end devices.
     * @default false
     */
    disableBackdropTransition: PropTypes.bool,
    /**
     * If `true`, touching the screen near the edge of the drawer will not slide in the drawer a bit
     * to promote accidental discovery of the swipe gesture.
     * @default false
     */
    disableDiscovery: PropTypes.bool,
    /**
     * If `true`, swipe to open is disabled. This is useful in browsers where swiping triggers
     * navigation actions. Swipe to open is disabled on iOS browsers by default.
     * @default typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent)
     */
    disableSwipeToOpen: PropTypes.bool,
    /**
     * @ignore
     */
    hideBackdrop: PropTypes.bool,
    /**
     * Affects how far the drawer must be opened/closed to change its state.
     * Specified as percent (0-1) of the width of the drawer
     * @default 0.52
     */
    hysteresis: PropTypes.number,
    /**
     * Defines, from which (average) velocity on, the swipe is
     * defined as complete although hysteresis isn't reached.
     * Good threshold is between 250 - 1000 px/s
     * @default 450
     */
    minFlingVelocity: PropTypes.number,
    /**
     * @ignore
     */
    ModalProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({
      BackdropProps: PropTypes.shape({
        component: elementTypeAcceptingRef$1
      })
    }),
    /**
     * Callback fired when the component requests to be closed.
     *
     * @param {React.SyntheticEvent<{}>} event The event source of the callback.
     */
    onClose: PropTypes.func.isRequired,
    /**
     * Callback fired when the component requests to be opened.
     *
     * @param {React.SyntheticEvent<{}>} event The event source of the callback.
     */
    onOpen: PropTypes.func.isRequired,
    /**
     * If `true`, the component is shown.
     * @default false
     */
    open: PropTypes.bool,
    /**
     * @ignore
     */
    PaperProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({
      component: elementTypeAcceptingRef$1,
      style: PropTypes.object
    }),
    /**
     * The element is used to intercept the touch events on the edge.
     */
    SwipeAreaProps: PropTypes.object,
    /**
     * The width of the left most (or right most) area in `px` that
     * the drawer can be swiped open from.
     * @default 20
     */
    swipeAreaWidth: PropTypes.number,
    /**
     * The duration for the transition, in milliseconds.
     * You may specify a single timeout for all transitions, or individually with an object.
     * @default {
     *   enter: theme.transitions.duration.enteringScreen,
     *   exit: theme.transitions.duration.leavingScreen,
     * }
     */
    transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      appear: PropTypes.number,
      enter: PropTypes.number,
      exit: PropTypes.number
    })]),
    /**
     * @ignore
     */
    variant: PropTypes.oneOf(['permanent', 'persistent', 'temporary'])
  } ;
  var SwipeableDrawer$1 = SwipeableDrawer;

  function getSwitchUtilityClass(slot) {
    return generateUtilityClass('MuiSwitch', slot);
  }
  const switchClasses = generateUtilityClasses('MuiSwitch', ['root', 'edgeStart', 'edgeEnd', 'switchBase', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium', 'checked', 'disabled', 'input', 'thumb', 'track']);
  var switchClasses$1 = switchClasses;

  const _excluded$j = ["className", "color", "edge", "size", "sx"];
  const useUtilityClasses$g = ownerState => {
    const {
      classes,
      edge,
      size,
      color,
      checked,
      disabled
    } = ownerState;
    const slots = {
      root: ['root', edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],
      switchBase: ['switchBase', `color${capitalize(color)}`, checked && 'checked', disabled && 'disabled'],
      thumb: ['thumb'],
      track: ['track'],
      input: ['input']
    };
    const composedClasses = composeClasses(slots, getSwitchUtilityClass, classes);
    return _extends({}, classes, composedClasses);
  };
  const SwitchRoot = styled$1('span', {
    name: 'MuiSwitch',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'inline-flex',
    width: 34 + 12 * 2,
    height: 14 + 12 * 2,
    overflow: 'hidden',
    padding: 12,
    boxSizing: 'border-box',
    position: 'relative',
    flexShrink: 0,
    zIndex: 0,
    // Reset the stacking context.
    verticalAlign: 'middle',
    // For correct alignment with the text.
    '@media print': {
      colorAdjust: 'exact'
    }
  }, ownerState.edge === 'start' && {
    marginLeft: -8
  }, ownerState.edge === 'end' && {
    marginRight: -8
  }, ownerState.size === 'small' && {
    width: 40,
    height: 24,
    padding: 7,
    [`& .${switchClasses$1.thumb}`]: {
      width: 16,
      height: 16
    },
    [`& .${switchClasses$1.switchBase}`]: {
      padding: 4,
      [`&.${switchClasses$1.checked}`]: {
        transform: 'translateX(16px)'
      }
    }
  }));
  const SwitchSwitchBase = styled$1(SwitchBase$1, {
    name: 'MuiSwitch',
    slot: 'SwitchBase',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.switchBase, {
        [`& .${switchClasses$1.input}`]: styles.input
      }, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];
    }
  })(({
    theme
  }) => ({
    position: 'absolute',
    top: 0,
    left: 0,
    zIndex: 1,
    // Render above the focus ripple.
    color: theme.vars ? theme.vars.palette.Switch.defaultColor : `${theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.grey[300]}`,
    transition: theme.transitions.create(['left', 'transform'], {
      duration: theme.transitions.duration.shortest
    }),
    [`&.${switchClasses$1.checked}`]: {
      transform: 'translateX(20px)'
    },
    [`&.${switchClasses$1.disabled}`]: {
      color: theme.vars ? theme.vars.palette.Switch.defaultDisabledColor : `${theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[600]}`
    },
    [`&.${switchClasses$1.checked} + .${switchClasses$1.track}`]: {
      opacity: 0.5
    },
    [`&.${switchClasses$1.disabled} + .${switchClasses$1.track}`]: {
      opacity: theme.vars ? theme.vars.opacity.switchTrackDisabled : `${theme.palette.mode === 'light' ? 0.12 : 0.2}`
    },
    [`& .${switchClasses$1.input}`]: {
      left: '-100%',
      width: '300%'
    }
  }), ({
    theme,
    ownerState
  }) => _extends({
    '&:hover': {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent'
      }
    }
  }, ownerState.color !== 'default' && {
    [`&.${switchClasses$1.checked}`]: {
      color: (theme.vars || theme).palette[ownerState.color].main,
      '&:hover': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      },
      [`&.${switchClasses$1.disabled}`]: {
        color: theme.vars ? theme.vars.palette.Switch[`${ownerState.color}DisabledColor`] : `${theme.palette.mode === 'light' ? lighten(theme.palette[ownerState.color].main, 0.62) : darken(theme.palette[ownerState.color].main, 0.55)}`
      }
    },
    [`&.${switchClasses$1.checked} + .${switchClasses$1.track}`]: {
      backgroundColor: (theme.vars || theme).palette[ownerState.color].main
    }
  }));
  const SwitchTrack = styled$1('span', {
    name: 'MuiSwitch',
    slot: 'Track',
    overridesResolver: (props, styles) => styles.track
  })(({
    theme
  }) => ({
    height: '100%',
    width: '100%',
    borderRadius: 14 / 2,
    zIndex: -1,
    transition: theme.transitions.create(['opacity', 'background-color'], {
      duration: theme.transitions.duration.shortest
    }),
    backgroundColor: theme.vars ? theme.vars.palette.common.onBackground : `${theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white}`,
    opacity: theme.vars ? theme.vars.opacity.switchTrack : `${theme.palette.mode === 'light' ? 0.38 : 0.3}`
  }));
  const SwitchThumb = styled$1('span', {
    name: 'MuiSwitch',
    slot: 'Thumb',
    overridesResolver: (props, styles) => styles.thumb
  })(({
    theme
  }) => ({
    boxShadow: (theme.vars || theme).shadows[1],
    backgroundColor: 'currentColor',
    width: 20,
    height: 20,
    borderRadius: '50%'
  }));
  const Switch = /*#__PURE__*/React__namespace.forwardRef(function Switch(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiSwitch'
    });
    const {
        className,
        color = 'primary',
        edge = false,
        size = 'medium',
        sx
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$j);
    const ownerState = _extends({}, props, {
      color,
      edge,
      size
    });
    const classes = useUtilityClasses$g(ownerState);
    const icon = /*#__PURE__*/jsxRuntime_1(SwitchThumb, {
      className: classes.thumb,
      ownerState: ownerState
    });
    return /*#__PURE__*/jsxRuntime_2(SwitchRoot, {
      className: clsx(classes.root, className),
      sx: sx,
      ownerState: ownerState,
      children: [/*#__PURE__*/jsxRuntime_1(SwitchSwitchBase, _extends({
        type: "checkbox",
        icon: icon,
        checkedIcon: icon,
        ref: ref,
        ownerState: ownerState
      }, other, {
        classes: _extends({}, classes, {
          root: classes.switchBase
        })
      })), /*#__PURE__*/jsxRuntime_1(SwitchTrack, {
        className: classes.track,
        ownerState: ownerState
      })]
    });
  });
  Switch.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the component is checked.
     */
    checked: PropTypes.bool,
    /**
     * The icon to display when the component is checked.
     */
    checkedIcon: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The default checked state. Use when the component is not controlled.
     */
    defaultChecked: PropTypes.bool,
    /**
     * If `true`, the component is disabled.
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * If given, uses a negative margin to counteract the padding on one
     * side (this is often helpful for aligning the left or right
     * side of the icon with content above or below, without ruining the border
     * size and shape).
     * @default false
     */
    edge: PropTypes.oneOf(['end', 'start', false]),
    /**
     * The icon to display when the component is unchecked.
     */
    icon: PropTypes.node,
    /**
     * The id of the `input` element.
     */
    id: PropTypes.string,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     */
    inputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * Callback fired when the state is changed.
     *
     * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     * You can pull out the new checked state by accessing `event.target.checked` (boolean).
     */
    onChange: PropTypes.func,
    /**
     * If `true`, the `input` element is required.
     * @default false
     */
    required: PropTypes.bool,
    /**
     * The size of the component.
     * `small` is equivalent to the dense switch styling.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value of the component. The DOM API casts this to a string.
     * The browser uses "on" as the default value.
     */
    value: PropTypes.any
  } ;
  var Switch$1 = Switch;

  function getTabUtilityClass(slot) {
    return generateUtilityClass('MuiTab', slot);
  }
  const tabClasses = generateUtilityClasses('MuiTab', ['root', 'labelIcon', 'textColorInherit', 'textColorPrimary', 'textColorSecondary', 'selected', 'disabled', 'fullWidth', 'wrapped', 'iconWrapper']);
  var tabClasses$1 = tabClasses;

  const _excluded$i = ["className", "disabled", "disableFocusRipple", "fullWidth", "icon", "iconPosition", "indicator", "label", "onChange", "onClick", "onFocus", "selected", "selectionFollowsFocus", "textColor", "value", "wrapped"];
  const useUtilityClasses$f = ownerState => {
    const {
      classes,
      textColor,
      fullWidth,
      wrapped,
      icon,
      label,
      selected,
      disabled
    } = ownerState;
    const slots = {
      root: ['root', icon && label && 'labelIcon', `textColor${capitalize(textColor)}`, fullWidth && 'fullWidth', wrapped && 'wrapped', selected && 'selected', disabled && 'disabled'],
      iconWrapper: ['iconWrapper']
    };
    return composeClasses(slots, getTabUtilityClass, classes);
  };
  const TabRoot = styled$1(ButtonBase$1, {
    name: 'MuiTab',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.label && ownerState.icon && styles.labelIcon, styles[`textColor${capitalize(ownerState.textColor)}`], ownerState.fullWidth && styles.fullWidth, ownerState.wrapped && styles.wrapped];
    }
  })(({
    theme,
    ownerState
  }) => _extends({}, theme.typography.button, {
    maxWidth: 360,
    minWidth: 90,
    position: 'relative',
    minHeight: 48,
    flexShrink: 0,
    padding: '12px 16px',
    overflow: 'hidden',
    whiteSpace: 'normal',
    textAlign: 'center'
  }, ownerState.label && {
    flexDirection: ownerState.iconPosition === 'top' || ownerState.iconPosition === 'bottom' ? 'column' : 'row'
  }, {
    lineHeight: 1.25
  }, ownerState.icon && ownerState.label && {
    minHeight: 72,
    paddingTop: 9,
    paddingBottom: 9,
    [`& > .${tabClasses$1.iconWrapper}`]: _extends({}, ownerState.iconPosition === 'top' && {
      marginBottom: 6
    }, ownerState.iconPosition === 'bottom' && {
      marginTop: 6
    }, ownerState.iconPosition === 'start' && {
      marginRight: theme.spacing(1)
    }, ownerState.iconPosition === 'end' && {
      marginLeft: theme.spacing(1)
    })
  }, ownerState.textColor === 'inherit' && {
    color: 'inherit',
    opacity: 0.6,
    // same opacity as theme.palette.text.secondary
    [`&.${tabClasses$1.selected}`]: {
      opacity: 1
    },
    [`&.${tabClasses$1.disabled}`]: {
      opacity: (theme.vars || theme).palette.action.disabledOpacity
    }
  }, ownerState.textColor === 'primary' && {
    color: (theme.vars || theme).palette.text.secondary,
    [`&.${tabClasses$1.selected}`]: {
      color: (theme.vars || theme).palette.primary.main
    },
    [`&.${tabClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.text.disabled
    }
  }, ownerState.textColor === 'secondary' && {
    color: (theme.vars || theme).palette.text.secondary,
    [`&.${tabClasses$1.selected}`]: {
      color: (theme.vars || theme).palette.secondary.main
    },
    [`&.${tabClasses$1.disabled}`]: {
      color: (theme.vars || theme).palette.text.disabled
    }
  }, ownerState.fullWidth && {
    flexShrink: 1,
    flexGrow: 1,
    flexBasis: 0,
    maxWidth: 'none'
  }, ownerState.wrapped && {
    fontSize: theme.typography.pxToRem(12)
  }));
  const Tab = /*#__PURE__*/React__namespace.forwardRef(function Tab(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTab'
    });
    const {
        className,
        disabled = false,
        disableFocusRipple = false,
        // eslint-disable-next-line react/prop-types
        fullWidth,
        icon: iconProp,
        iconPosition = 'top',
        // eslint-disable-next-line react/prop-types
        indicator,
        label,
        onChange,
        onClick,
        onFocus,
        // eslint-disable-next-line react/prop-types
        selected,
        // eslint-disable-next-line react/prop-types
        selectionFollowsFocus,
        // eslint-disable-next-line react/prop-types
        textColor = 'inherit',
        value,
        wrapped = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$i);
    const ownerState = _extends({}, props, {
      disabled,
      disableFocusRipple,
      selected,
      icon: !!iconProp,
      iconPosition,
      label: !!label,
      fullWidth,
      textColor,
      wrapped
    });
    const classes = useUtilityClasses$f(ownerState);
    const icon = iconProp && label && /*#__PURE__*/React__namespace.isValidElement(iconProp) ? /*#__PURE__*/React__namespace.cloneElement(iconProp, {
      className: clsx(classes.iconWrapper, iconProp.props.className)
    }) : iconProp;
    const handleClick = event => {
      if (!selected && onChange) {
        onChange(event, value);
      }
      if (onClick) {
        onClick(event);
      }
    };
    const handleFocus = event => {
      if (selectionFollowsFocus && !selected && onChange) {
        onChange(event, value);
      }
      if (onFocus) {
        onFocus(event);
      }
    };
    return /*#__PURE__*/jsxRuntime_2(TabRoot, _extends({
      focusRipple: !disableFocusRipple,
      className: clsx(classes.root, className),
      ref: ref,
      role: "tab",
      "aria-selected": selected,
      disabled: disabled,
      onClick: handleClick,
      onFocus: handleFocus,
      ownerState: ownerState,
      tabIndex: selected ? 0 : -1
    }, other, {
      children: [iconPosition === 'top' || iconPosition === 'start' ? /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
        children: [icon, label]
      }) : /*#__PURE__*/jsxRuntime_2(React__namespace.Fragment, {
        children: [label, icon]
      }), indicator]
    }));
  });
  Tab.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * This prop isn't supported.
     * Use the `component` prop if you need to change the children structure.
     */
    children: unsupportedProp,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the  keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     *
     * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
     * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * The icon to display.
     */
    icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
    /**
     * The position of the icon relative to the label.
     * @default 'top'
     */
    iconPosition: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),
    /**
     * The label element.
     */
    label: PropTypes.node,
    /**
     * @ignore
     */
    onChange: PropTypes.func,
    /**
     * @ignore
     */
    onClick: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * You can provide your own value. Otherwise, we fallback to the child position index.
     */
    value: PropTypes.any,
    /**
     * Tab labels appear in a single row.
     * They can use a second line if needed.
     * @default false
     */
    wrapped: PropTypes.bool
  } ;
  var Tab$1 = Tab;

  /**
   * @ignore - internal component.
   */
  const TableContext = /*#__PURE__*/React__namespace.createContext();
  {
    TableContext.displayName = 'TableContext';
  }
  var TableContext$1 = TableContext;

  function getTableUtilityClass(slot) {
    return generateUtilityClass('MuiTable', slot);
  }
  const tableClasses = generateUtilityClasses('MuiTable', ['root', 'stickyHeader']);
  var tableClasses$1 = tableClasses;

  const _excluded$h = ["className", "component", "padding", "size", "stickyHeader"];
  const useUtilityClasses$e = ownerState => {
    const {
      classes,
      stickyHeader
    } = ownerState;
    const slots = {
      root: ['root', stickyHeader && 'stickyHeader']
    };
    return composeClasses(slots, getTableUtilityClass, classes);
  };
  const TableRoot = styled$1('table', {
    name: 'MuiTable',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.stickyHeader && styles.stickyHeader];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    display: 'table',
    width: '100%',
    borderCollapse: 'collapse',
    borderSpacing: 0,
    '& caption': _extends({}, theme.typography.body2, {
      padding: theme.spacing(2),
      color: (theme.vars || theme).palette.text.secondary,
      textAlign: 'left',
      captionSide: 'bottom'
    })
  }, ownerState.stickyHeader && {
    borderCollapse: 'separate'
  }));
  const defaultComponent$4 = 'table';
  const Table = /*#__PURE__*/React__namespace.forwardRef(function Table(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTable'
    });
    const {
        className,
        component = defaultComponent$4,
        padding = 'normal',
        size = 'medium',
        stickyHeader = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$h);
    const ownerState = _extends({}, props, {
      component,
      padding,
      size,
      stickyHeader
    });
    const classes = useUtilityClasses$e(ownerState);
    const table = React__namespace.useMemo(() => ({
      padding,
      size,
      stickyHeader
    }), [padding, size, stickyHeader]);
    return /*#__PURE__*/jsxRuntime_1(TableContext$1.Provider, {
      value: table,
      children: /*#__PURE__*/jsxRuntime_1(TableRoot, _extends({
        as: component,
        role: component === defaultComponent$4 ? null : 'table',
        ref: ref,
        className: clsx(classes.root, className),
        ownerState: ownerState
      }, other))
    });
  });
  Table.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the table, normally `TableHead` and `TableBody`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Allows TableCells to inherit padding of the Table.
     * @default 'normal'
     */
    padding: PropTypes.oneOf(['checkbox', 'none', 'normal']),
    /**
     * Allows TableCells to inherit size of the Table.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * Set the header sticky.
     *
     * ⚠️ It doesn't work with IE11.
     * @default false
     */
    stickyHeader: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var Table$1 = Table;

  /**
   * @ignore - internal component.
   */
  const Tablelvl2Context = /*#__PURE__*/React__namespace.createContext();
  {
    Tablelvl2Context.displayName = 'Tablelvl2Context';
  }
  var Tablelvl2Context$1 = Tablelvl2Context;

  function getTableBodyUtilityClass(slot) {
    return generateUtilityClass('MuiTableBody', slot);
  }
  const tableBodyClasses = generateUtilityClasses('MuiTableBody', ['root']);
  var tableBodyClasses$1 = tableBodyClasses;

  const _excluded$g = ["className", "component"];
  const useUtilityClasses$d = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getTableBodyUtilityClass, classes);
  };
  const TableBodyRoot = styled$1('tbody', {
    name: 'MuiTableBody',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    display: 'table-row-group'
  });
  const tablelvl2$2 = {
    variant: 'body'
  };
  const defaultComponent$3 = 'tbody';
  const TableBody = /*#__PURE__*/React__namespace.forwardRef(function TableBody(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableBody'
    });
    const {
        className,
        component = defaultComponent$3
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$g);
    const ownerState = _extends({}, props, {
      component
    });
    const classes = useUtilityClasses$d(ownerState);
    return /*#__PURE__*/jsxRuntime_1(Tablelvl2Context$1.Provider, {
      value: tablelvl2$2,
      children: /*#__PURE__*/jsxRuntime_1(TableBodyRoot, _extends({
        className: clsx(classes.root, className),
        as: component,
        ref: ref,
        role: component === defaultComponent$3 ? null : 'rowgroup',
        ownerState: ownerState
      }, other))
    });
  });
  TableBody.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally `TableRow`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TableBody$1 = TableBody;

  function getTableCellUtilityClass(slot) {
    return generateUtilityClass('MuiTableCell', slot);
  }
  const tableCellClasses = generateUtilityClasses('MuiTableCell', ['root', 'head', 'body', 'footer', 'sizeSmall', 'sizeMedium', 'paddingCheckbox', 'paddingNone', 'alignLeft', 'alignCenter', 'alignRight', 'alignJustify', 'stickyHeader']);
  var tableCellClasses$1 = tableCellClasses;

  const _excluded$f = ["align", "className", "component", "padding", "scope", "size", "sortDirection", "variant"];
  const useUtilityClasses$c = ownerState => {
    const {
      classes,
      variant,
      align,
      padding,
      size,
      stickyHeader
    } = ownerState;
    const slots = {
      root: ['root', variant, stickyHeader && 'stickyHeader', align !== 'inherit' && `align${capitalize(align)}`, padding !== 'normal' && `padding${capitalize(padding)}`, `size${capitalize(size)}`]
    };
    return composeClasses(slots, getTableCellUtilityClass, classes);
  };
  const TableCellRoot = styled$1('td', {
    name: 'MuiTableCell',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[ownerState.variant], styles[`size${capitalize(ownerState.size)}`], ownerState.padding !== 'normal' && styles[`padding${capitalize(ownerState.padding)}`], ownerState.align !== 'inherit' && styles[`align${capitalize(ownerState.align)}`], ownerState.stickyHeader && styles.stickyHeader];
    }
  })(({
    theme,
    ownerState
  }) => _extends({}, theme.typography.body2, {
    display: 'table-cell',
    verticalAlign: 'inherit',
    // Workaround for a rendering bug with spanned columns in Chrome 62.0.
    // Removes the alpha (sets it to 1), and lightens or darkens the theme color.
    borderBottom: theme.vars ? `1px solid ${theme.vars.palette.TableCell.border}` : `1px solid
    ${theme.palette.mode === 'light' ? lighten(alpha(theme.palette.divider, 1), 0.88) : darken(alpha(theme.palette.divider, 1), 0.68)}`,
    textAlign: 'left',
    padding: 16
  }, ownerState.variant === 'head' && {
    color: (theme.vars || theme).palette.text.primary,
    lineHeight: theme.typography.pxToRem(24),
    fontWeight: theme.typography.fontWeightMedium
  }, ownerState.variant === 'body' && {
    color: (theme.vars || theme).palette.text.primary
  }, ownerState.variant === 'footer' && {
    color: (theme.vars || theme).palette.text.secondary,
    lineHeight: theme.typography.pxToRem(21),
    fontSize: theme.typography.pxToRem(12)
  }, ownerState.size === 'small' && {
    padding: '6px 16px',
    [`&.${tableCellClasses$1.paddingCheckbox}`]: {
      width: 24,
      // prevent the checkbox column from growing
      padding: '0 12px 0 16px',
      '& > *': {
        padding: 0
      }
    }
  }, ownerState.padding === 'checkbox' && {
    width: 48,
    // prevent the checkbox column from growing
    padding: '0 0 0 4px'
  }, ownerState.padding === 'none' && {
    padding: 0
  }, ownerState.align === 'left' && {
    textAlign: 'left'
  }, ownerState.align === 'center' && {
    textAlign: 'center'
  }, ownerState.align === 'right' && {
    textAlign: 'right',
    flexDirection: 'row-reverse'
  }, ownerState.align === 'justify' && {
    textAlign: 'justify'
  }, ownerState.stickyHeader && {
    position: 'sticky',
    top: 0,
    zIndex: 2,
    backgroundColor: (theme.vars || theme).palette.background.default
  }));

  /**
   * The component renders a `<th>` element when the parent context is a header
   * or otherwise a `<td>` element.
   */
  const TableCell = /*#__PURE__*/React__namespace.forwardRef(function TableCell(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableCell'
    });
    const {
        align = 'inherit',
        className,
        component: componentProp,
        padding: paddingProp,
        scope: scopeProp,
        size: sizeProp,
        sortDirection,
        variant: variantProp
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$f);
    const table = React__namespace.useContext(TableContext$1);
    const tablelvl2 = React__namespace.useContext(Tablelvl2Context$1);
    const isHeadCell = tablelvl2 && tablelvl2.variant === 'head';
    let component;
    if (componentProp) {
      component = componentProp;
    } else {
      component = isHeadCell ? 'th' : 'td';
    }
    let scope = scopeProp;
    // scope is not a valid attribute for <td/> elements.
    // source: https://html.spec.whatwg.org/multipage/tables.html#the-td-element
    if (component === 'td') {
      scope = undefined;
    } else if (!scope && isHeadCell) {
      scope = 'col';
    }
    const variant = variantProp || tablelvl2 && tablelvl2.variant;
    const ownerState = _extends({}, props, {
      align,
      component,
      padding: paddingProp || (table && table.padding ? table.padding : 'normal'),
      size: sizeProp || (table && table.size ? table.size : 'medium'),
      sortDirection,
      stickyHeader: variant === 'head' && table && table.stickyHeader,
      variant
    });
    const classes = useUtilityClasses$c(ownerState);
    let ariaSort = null;
    if (sortDirection) {
      ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';
    }
    return /*#__PURE__*/jsxRuntime_1(TableCellRoot, _extends({
      as: component,
      ref: ref,
      className: clsx(classes.root, className),
      "aria-sort": ariaSort,
      scope: scope,
      ownerState: ownerState
    }, other));
  });
  TableCell.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Set the text-align on the table cell content.
     *
     * Monetary or generally number fields **should be right aligned** as that allows
     * you to add them up quickly in your head without having to worry about decimals.
     * @default 'inherit'
     */
    align: PropTypes.oneOf(['center', 'inherit', 'justify', 'left', 'right']),
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Sets the padding applied to the cell.
     * The prop defaults to the value (`'default'`) inherited from the parent Table component.
     */
    padding: PropTypes.oneOf(['checkbox', 'none', 'normal']),
    /**
     * Set scope attribute.
     */
    scope: PropTypes.string,
    /**
     * Specify the size of the cell.
     * The prop defaults to the value (`'medium'`) inherited from the parent Table component.
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * Set aria-sort direction.
     */
    sortDirection: PropTypes.oneOf(['asc', 'desc', false]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Specify the cell type.
     * The prop defaults to the value inherited from the parent TableHead, TableBody, or TableFooter components.
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['body', 'footer', 'head']), PropTypes.string])
  } ;
  var TableCell$1 = TableCell;

  function getTableContainerUtilityClass(slot) {
    return generateUtilityClass('MuiTableContainer', slot);
  }
  const tableContainerClasses = generateUtilityClasses('MuiTableContainer', ['root']);
  var tableContainerClasses$1 = tableContainerClasses;

  const _excluded$e = ["className", "component"];
  const useUtilityClasses$b = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getTableContainerUtilityClass, classes);
  };
  const TableContainerRoot = styled$1('div', {
    name: 'MuiTableContainer',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    width: '100%',
    overflowX: 'auto'
  });
  const TableContainer = /*#__PURE__*/React__namespace.forwardRef(function TableContainer(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableContainer'
    });
    const {
        className,
        component = 'div'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$e);
    const ownerState = _extends({}, props, {
      component
    });
    const classes = useUtilityClasses$b(ownerState);
    return /*#__PURE__*/jsxRuntime_1(TableContainerRoot, _extends({
      ref: ref,
      as: component,
      className: clsx(classes.root, className),
      ownerState: ownerState
    }, other));
  });
  TableContainer.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally `Table`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TableContainer$1 = TableContainer;

  function getTableFooterUtilityClass(slot) {
    return generateUtilityClass('MuiTableFooter', slot);
  }
  const tableFooterClasses = generateUtilityClasses('MuiTableFooter', ['root']);
  var tableFooterClasses$1 = tableFooterClasses;

  const _excluded$d = ["className", "component"];
  const useUtilityClasses$a = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getTableFooterUtilityClass, classes);
  };
  const TableFooterRoot = styled$1('tfoot', {
    name: 'MuiTableFooter',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    display: 'table-footer-group'
  });
  const tablelvl2$1 = {
    variant: 'footer'
  };
  const defaultComponent$2 = 'tfoot';
  const TableFooter = /*#__PURE__*/React__namespace.forwardRef(function TableFooter(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableFooter'
    });
    const {
        className,
        component = defaultComponent$2
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$d);
    const ownerState = _extends({}, props, {
      component
    });
    const classes = useUtilityClasses$a(ownerState);
    return /*#__PURE__*/jsxRuntime_1(Tablelvl2Context$1.Provider, {
      value: tablelvl2$1,
      children: /*#__PURE__*/jsxRuntime_1(TableFooterRoot, _extends({
        as: component,
        className: clsx(classes.root, className),
        ref: ref,
        role: component === defaultComponent$2 ? null : 'rowgroup',
        ownerState: ownerState
      }, other))
    });
  });
  TableFooter.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally `TableRow`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TableFooter$1 = TableFooter;

  function getTableHeadUtilityClass(slot) {
    return generateUtilityClass('MuiTableHead', slot);
  }
  const tableHeadClasses = generateUtilityClasses('MuiTableHead', ['root']);
  var tableHeadClasses$1 = tableHeadClasses;

  const _excluded$c = ["className", "component"];
  const useUtilityClasses$9 = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getTableHeadUtilityClass, classes);
  };
  const TableHeadRoot = styled$1('thead', {
    name: 'MuiTableHead',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({
    display: 'table-header-group'
  });
  const tablelvl2 = {
    variant: 'head'
  };
  const defaultComponent$1 = 'thead';
  const TableHead = /*#__PURE__*/React__namespace.forwardRef(function TableHead(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableHead'
    });
    const {
        className,
        component = defaultComponent$1
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$c);
    const ownerState = _extends({}, props, {
      component
    });
    const classes = useUtilityClasses$9(ownerState);
    return /*#__PURE__*/jsxRuntime_1(Tablelvl2Context$1.Provider, {
      value: tablelvl2,
      children: /*#__PURE__*/jsxRuntime_1(TableHeadRoot, _extends({
        as: component,
        className: clsx(classes.root, className),
        ref: ref,
        role: component === defaultComponent$1 ? null : 'rowgroup',
        ownerState: ownerState
      }, other))
    });
  });
  TableHead.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component, normally `TableRow`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TableHead$1 = TableHead;

  function getToolbarUtilityClass(slot) {
    return generateUtilityClass('MuiToolbar', slot);
  }
  const toolbarClasses = generateUtilityClasses('MuiToolbar', ['root', 'gutters', 'regular', 'dense']);
  var toolbarClasses$1 = toolbarClasses;

  const _excluded$b = ["className", "component", "disableGutters", "variant"];
  const useUtilityClasses$8 = ownerState => {
    const {
      classes,
      disableGutters,
      variant
    } = ownerState;
    const slots = {
      root: ['root', !disableGutters && 'gutters', variant]
    };
    return composeClasses(slots, getToolbarUtilityClass, classes);
  };
  const ToolbarRoot = styled$1('div', {
    name: 'MuiToolbar',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, !ownerState.disableGutters && styles.gutters, styles[ownerState.variant]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    position: 'relative',
    display: 'flex',
    alignItems: 'center'
  }, !ownerState.disableGutters && {
    paddingLeft: theme.spacing(2),
    paddingRight: theme.spacing(2),
    [theme.breakpoints.up('sm')]: {
      paddingLeft: theme.spacing(3),
      paddingRight: theme.spacing(3)
    }
  }, ownerState.variant === 'dense' && {
    minHeight: 48
  }), ({
    theme,
    ownerState
  }) => ownerState.variant === 'regular' && theme.mixins.toolbar);
  const Toolbar = /*#__PURE__*/React__namespace.forwardRef(function Toolbar(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiToolbar'
    });
    const {
        className,
        component = 'div',
        disableGutters = false,
        variant = 'regular'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$b);
    const ownerState = _extends({}, props, {
      component,
      disableGutters,
      variant
    });
    const classes = useUtilityClasses$8(ownerState);
    return /*#__PURE__*/jsxRuntime_1(ToolbarRoot, _extends({
      as: component,
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other));
  });
  Toolbar.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The Toolbar children, usually a mixture of `IconButton`, `Button` and `Typography`.
     * The Toolbar is a flex container, allowing flex item properties to be used to lay out the children.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, disables gutter padding.
     * @default false
     */
    disableGutters: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The variant to use.
     * @default 'regular'
     */
    variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['dense', 'regular']), PropTypes.string])
  } ;
  var Toolbar$1 = Toolbar;

  var KeyboardArrowLeft = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"
  }), 'KeyboardArrowLeft');

  var KeyboardArrowRight = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"
  }), 'KeyboardArrowRight');

  var _LastPageIcon, _FirstPageIcon, _KeyboardArrowRight, _KeyboardArrowLeft, _KeyboardArrowLeft2, _KeyboardArrowRight2, _FirstPageIcon2, _LastPageIcon2;
  const _excluded$a = ["backIconButtonProps", "count", "disabled", "getItemAriaLabel", "nextIconButtonProps", "onPageChange", "page", "rowsPerPage", "showFirstButton", "showLastButton", "slotProps"];
  const TablePaginationActions = /*#__PURE__*/React__namespace.forwardRef(function TablePaginationActions(props, ref) {
    var _slotProps$firstButto, _slotProps$previousBu, _slotProps$nextButton, _slotProps$lastButton;
    const {
        backIconButtonProps,
        count,
        disabled = false,
        getItemAriaLabel,
        nextIconButtonProps,
        onPageChange,
        page,
        rowsPerPage,
        showFirstButton,
        showLastButton,
        slotProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$a);
    const theme = useTheme();
    const handleFirstPageButtonClick = event => {
      onPageChange(event, 0);
    };
    const handleBackButtonClick = event => {
      onPageChange(event, page - 1);
    };
    const handleNextButtonClick = event => {
      onPageChange(event, page + 1);
    };
    const handleLastPageButtonClick = event => {
      onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
    };
    return /*#__PURE__*/jsxRuntime_2("div", _extends({
      ref: ref
    }, other, {
      children: [showFirstButton && /*#__PURE__*/jsxRuntime_1(IconButton$1, _extends({
        onClick: handleFirstPageButtonClick,
        disabled: disabled || page === 0,
        "aria-label": getItemAriaLabel('first', page),
        title: getItemAriaLabel('first', page)
      }, (_slotProps$firstButto = slotProps == null ? void 0 : slotProps.firstButton) != null ? _slotProps$firstButto : {}, {
        children: theme.direction === 'rtl' ? _LastPageIcon || (_LastPageIcon = /*#__PURE__*/jsxRuntime_1(LastPageIcon, {})) : _FirstPageIcon || (_FirstPageIcon = /*#__PURE__*/jsxRuntime_1(FirstPageIcon, {}))
      })), /*#__PURE__*/jsxRuntime_1(IconButton$1, _extends({
        onClick: handleBackButtonClick,
        disabled: disabled || page === 0,
        color: "inherit",
        "aria-label": getItemAriaLabel('previous', page),
        title: getItemAriaLabel('previous', page)
      }, (_slotProps$previousBu = slotProps == null ? void 0 : slotProps.previousButton) != null ? _slotProps$previousBu : backIconButtonProps, {
        children: theme.direction === 'rtl' ? _KeyboardArrowRight || (_KeyboardArrowRight = /*#__PURE__*/jsxRuntime_1(KeyboardArrowRight, {})) : _KeyboardArrowLeft || (_KeyboardArrowLeft = /*#__PURE__*/jsxRuntime_1(KeyboardArrowLeft, {}))
      })), /*#__PURE__*/jsxRuntime_1(IconButton$1, _extends({
        onClick: handleNextButtonClick,
        disabled: disabled || (count !== -1 ? page >= Math.ceil(count / rowsPerPage) - 1 : false),
        color: "inherit",
        "aria-label": getItemAriaLabel('next', page),
        title: getItemAriaLabel('next', page)
      }, (_slotProps$nextButton = slotProps == null ? void 0 : slotProps.nextButton) != null ? _slotProps$nextButton : nextIconButtonProps, {
        children: theme.direction === 'rtl' ? _KeyboardArrowLeft2 || (_KeyboardArrowLeft2 = /*#__PURE__*/jsxRuntime_1(KeyboardArrowLeft, {})) : _KeyboardArrowRight2 || (_KeyboardArrowRight2 = /*#__PURE__*/jsxRuntime_1(KeyboardArrowRight, {}))
      })), showLastButton && /*#__PURE__*/jsxRuntime_1(IconButton$1, _extends({
        onClick: handleLastPageButtonClick,
        disabled: disabled || page >= Math.ceil(count / rowsPerPage) - 1,
        "aria-label": getItemAriaLabel('last', page),
        title: getItemAriaLabel('last', page)
      }, (_slotProps$lastButton = slotProps == null ? void 0 : slotProps.lastButton) != null ? _slotProps$lastButton : {}, {
        children: theme.direction === 'rtl' ? _FirstPageIcon2 || (_FirstPageIcon2 = /*#__PURE__*/jsxRuntime_1(FirstPageIcon, {})) : _LastPageIcon2 || (_LastPageIcon2 = /*#__PURE__*/jsxRuntime_1(LastPageIcon, {}))
      }))]
    }));
  });
  TablePaginationActions.propTypes = {
    /**
     * Props applied to the back arrow [`IconButton`](/material-ui/api/icon-button/) element.
     */
    backIconButtonProps: PropTypes.object,
    /**
     * The total number of rows.
     */
    count: PropTypes.number.isRequired,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the current page.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     *
     * @param {string} type The link or button type to format ('page' | 'first' | 'last' | 'next' | 'previous'). Defaults to 'page'.
     * @param {number} page The page number to format.
     * @returns {string}
     */
    getItemAriaLabel: PropTypes.func.isRequired,
    /**
     * Props applied to the next arrow [`IconButton`](/material-ui/api/icon-button/) element.
     */
    nextIconButtonProps: PropTypes.object,
    /**
     * Callback fired when the page is changed.
     *
     * @param {object} event The event source of the callback.
     * @param {number} page The page selected.
     */
    onPageChange: PropTypes.func.isRequired,
    /**
     * The zero-based index of the current page.
     */
    page: PropTypes.number.isRequired,
    /**
     * The number of rows per page.
     */
    rowsPerPage: PropTypes.number.isRequired,
    /**
     * If `true`, show the first-page button.
     */
    showFirstButton: PropTypes.bool.isRequired,
    /**
     * If `true`, show the last-page button.
     */
    showLastButton: PropTypes.bool.isRequired,
    /**
     * The props used for each slot inside the TablePaginationActions.
     * @default {}
     */
    slotProps: PropTypes.shape({
      firstButton: PropTypes.object,
      lastButton: PropTypes.object,
      nextButton: PropTypes.object,
      previousButton: PropTypes.object
    })
  } ;
  var TablePaginationActions$1 = TablePaginationActions;

  function getTablePaginationUtilityClass(slot) {
    return generateUtilityClass('MuiTablePagination', slot);
  }
  const tablePaginationClasses = generateUtilityClasses('MuiTablePagination', ['root', 'toolbar', 'spacer', 'selectLabel', 'selectRoot', 'select', 'selectIcon', 'input', 'menuItem', 'displayedRows', 'actions']);
  var tablePaginationClasses$1 = tablePaginationClasses;

  var _InputBase;
  const _excluded$9 = ["ActionsComponent", "backIconButtonProps", "className", "colSpan", "component", "count", "disabled", "getItemAriaLabel", "labelDisplayedRows", "labelRowsPerPage", "nextIconButtonProps", "onPageChange", "onRowsPerPageChange", "page", "rowsPerPage", "rowsPerPageOptions", "SelectProps", "showFirstButton", "showLastButton", "slotProps"];
  const TablePaginationRoot = styled$1(TableCell$1, {
    name: 'MuiTablePagination',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })(({
    theme
  }) => ({
    overflow: 'auto',
    color: (theme.vars || theme).palette.text.primary,
    fontSize: theme.typography.pxToRem(14),
    // Increase the specificity to override TableCell.
    '&:last-child': {
      padding: 0
    }
  }));
  const TablePaginationToolbar = styled$1(Toolbar$1, {
    name: 'MuiTablePagination',
    slot: 'Toolbar',
    overridesResolver: (props, styles) => _extends({
      [`& .${tablePaginationClasses$1.actions}`]: styles.actions
    }, styles.toolbar)
  })(({
    theme
  }) => ({
    minHeight: 52,
    paddingRight: 2,
    [`${theme.breakpoints.up('xs')} and (orientation: landscape)`]: {
      minHeight: 52
    },
    [theme.breakpoints.up('sm')]: {
      minHeight: 52,
      paddingRight: 2
    },
    [`& .${tablePaginationClasses$1.actions}`]: {
      flexShrink: 0,
      marginLeft: 20
    }
  }));
  const TablePaginationSpacer = styled$1('div', {
    name: 'MuiTablePagination',
    slot: 'Spacer',
    overridesResolver: (props, styles) => styles.spacer
  })({
    flex: '1 1 100%'
  });
  const TablePaginationSelectLabel = styled$1('p', {
    name: 'MuiTablePagination',
    slot: 'SelectLabel',
    overridesResolver: (props, styles) => styles.selectLabel
  })(({
    theme
  }) => _extends({}, theme.typography.body2, {
    flexShrink: 0
  }));
  const TablePaginationSelect = styled$1(Select$1, {
    name: 'MuiTablePagination',
    slot: 'Select',
    overridesResolver: (props, styles) => _extends({
      [`& .${tablePaginationClasses$1.selectIcon}`]: styles.selectIcon,
      [`& .${tablePaginationClasses$1.select}`]: styles.select
    }, styles.input, styles.selectRoot)
  })({
    color: 'inherit',
    fontSize: 'inherit',
    flexShrink: 0,
    marginRight: 32,
    marginLeft: 8,
    [`& .${tablePaginationClasses$1.select}`]: {
      paddingLeft: 8,
      paddingRight: 24,
      textAlign: 'right',
      textAlignLast: 'right' // Align <select> on Chrome.
    }
  });
  const TablePaginationMenuItem = styled$1(MenuItem$1, {
    name: 'MuiTablePagination',
    slot: 'MenuItem',
    overridesResolver: (props, styles) => styles.menuItem
  })({});
  const TablePaginationDisplayedRows = styled$1('p', {
    name: 'MuiTablePagination',
    slot: 'DisplayedRows',
    overridesResolver: (props, styles) => styles.displayedRows
  })(({
    theme
  }) => _extends({}, theme.typography.body2, {
    flexShrink: 0
  }));
  function defaultLabelDisplayedRows({
    from,
    to,
    count
  }) {
    return `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}`;
  }
  function defaultGetAriaLabel(type) {
    return `Go to ${type} page`;
  }
  const useUtilityClasses$7 = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root'],
      toolbar: ['toolbar'],
      spacer: ['spacer'],
      selectLabel: ['selectLabel'],
      select: ['select'],
      input: ['input'],
      selectIcon: ['selectIcon'],
      menuItem: ['menuItem'],
      displayedRows: ['displayedRows'],
      actions: ['actions']
    };
    return composeClasses(slots, getTablePaginationUtilityClass, classes);
  };

  /**
   * A `TableCell` based component for placing inside `TableFooter` for pagination.
   */
  const TablePagination = /*#__PURE__*/React__namespace.forwardRef(function TablePagination(inProps, ref) {
    var _slotProps$select;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTablePagination'
    });
    const {
        ActionsComponent = TablePaginationActions$1,
        backIconButtonProps,
        className,
        colSpan: colSpanProp,
        component = TableCell$1,
        count,
        disabled = false,
        getItemAriaLabel = defaultGetAriaLabel,
        labelDisplayedRows = defaultLabelDisplayedRows,
        labelRowsPerPage = 'Rows per page:',
        nextIconButtonProps,
        onPageChange,
        onRowsPerPageChange,
        page,
        rowsPerPage,
        rowsPerPageOptions = [10, 25, 50, 100],
        SelectProps = {},
        showFirstButton = false,
        showLastButton = false,
        slotProps
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$9);
    const ownerState = props;
    const classes = useUtilityClasses$7(ownerState);
    const selectProps = (_slotProps$select = slotProps == null ? void 0 : slotProps.select) != null ? _slotProps$select : SelectProps;
    const MenuItemComponent = selectProps.native ? 'option' : TablePaginationMenuItem;
    let colSpan;
    if (component === TableCell$1 || component === 'td') {
      colSpan = colSpanProp || 1000; // col-span over everything
    }
    const selectId = useId(selectProps.id);
    const labelId = useId(selectProps.labelId);
    const getLabelDisplayedRowsTo = () => {
      if (count === -1) {
        return (page + 1) * rowsPerPage;
      }
      return rowsPerPage === -1 ? count : Math.min(count, (page + 1) * rowsPerPage);
    };
    return /*#__PURE__*/jsxRuntime_1(TablePaginationRoot, _extends({
      colSpan: colSpan,
      ref: ref,
      as: component,
      ownerState: ownerState,
      className: clsx(classes.root, className)
    }, other, {
      children: /*#__PURE__*/jsxRuntime_2(TablePaginationToolbar, {
        className: classes.toolbar,
        children: [/*#__PURE__*/jsxRuntime_1(TablePaginationSpacer, {
          className: classes.spacer
        }), rowsPerPageOptions.length > 1 && /*#__PURE__*/jsxRuntime_1(TablePaginationSelectLabel, {
          className: classes.selectLabel,
          id: labelId,
          children: labelRowsPerPage
        }), rowsPerPageOptions.length > 1 && /*#__PURE__*/jsxRuntime_1(TablePaginationSelect, _extends({
          variant: "standard"
        }, !selectProps.variant && {
          input: _InputBase || (_InputBase = /*#__PURE__*/jsxRuntime_1(InputBase$1, {}))
        }, {
          value: rowsPerPage,
          onChange: onRowsPerPageChange,
          id: selectId,
          labelId: labelId
        }, selectProps, {
          classes: _extends({}, selectProps.classes, {
            // TODO v5 remove `classes.input`
            root: clsx(classes.input, classes.selectRoot, (selectProps.classes || {}).root),
            select: clsx(classes.select, (selectProps.classes || {}).select),
            // TODO v5 remove `selectIcon`
            icon: clsx(classes.selectIcon, (selectProps.classes || {}).icon)
          }),
          disabled: disabled,
          children: rowsPerPageOptions.map(rowsPerPageOption => /*#__PURE__*/React.createElement(MenuItemComponent, _extends({}, !isHostComponent(MenuItemComponent) && {
            ownerState
          }, {
            className: classes.menuItem,
            key: rowsPerPageOption.label ? rowsPerPageOption.label : rowsPerPageOption,
            value: rowsPerPageOption.value ? rowsPerPageOption.value : rowsPerPageOption
          }), rowsPerPageOption.label ? rowsPerPageOption.label : rowsPerPageOption))
        })), /*#__PURE__*/jsxRuntime_1(TablePaginationDisplayedRows, {
          className: classes.displayedRows,
          children: labelDisplayedRows({
            from: count === 0 ? 0 : page * rowsPerPage + 1,
            to: getLabelDisplayedRowsTo(),
            count: count === -1 ? -1 : count,
            page
          })
        }), /*#__PURE__*/jsxRuntime_1(ActionsComponent, {
          className: classes.actions,
          backIconButtonProps: backIconButtonProps,
          count: count,
          nextIconButtonProps: nextIconButtonProps,
          onPageChange: onPageChange,
          page: page,
          rowsPerPage: rowsPerPage,
          showFirstButton: showFirstButton,
          showLastButton: showLastButton,
          slotProps: slotProps == null ? void 0 : slotProps.actions,
          getItemAriaLabel: getItemAriaLabel,
          disabled: disabled
        })]
      })
    }));
  });
  TablePagination.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The component used for displaying the actions.
     * Either a string to use a HTML element or a component.
     * @default TablePaginationActions
     */
    ActionsComponent: PropTypes.elementType,
    /**
     * Props applied to the back arrow [`IconButton`](/material-ui/api/icon-button/) component.
     *
     * This prop is an alias for `slotProps.actions.previousButton` and will be overriden by it if both are used.
     * @deprecated Use `slotProps.actions.previousButton` instead.
     */
    backIconButtonProps: PropTypes.object,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * @ignore
     */
    colSpan: PropTypes.number,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * The total number of rows.
     *
     * To enable server side pagination for an unknown number of items, provide -1.
     */
    count: integerPropType.isRequired,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the current page.
     * This is important for screen reader users.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @param {string} type The link or button type to format ('first' | 'last' | 'next' | 'previous').
     * @returns {string}
     * @default function defaultGetAriaLabel(type) {
     *   return `Go to ${type} page`;
     * }
     */
    getItemAriaLabel: PropTypes.func,
    /**
     * Customize the displayed rows label. Invoked with a `{ from, to, count, page }`
     * object.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default function defaultLabelDisplayedRows({ from, to, count }) {
     *   return `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}`;
     * }
     */
    labelDisplayedRows: PropTypes.func,
    /**
     * Customize the rows per page label.
     *
     * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).
     * @default 'Rows per page:'
     */
    labelRowsPerPage: PropTypes.node,
    /**
     * Props applied to the next arrow [`IconButton`](/material-ui/api/icon-button/) element.
     *
     * This prop is an alias for `slotProps.actions.nextButton` and will be overriden by it if both are used.
     * @deprecated Use `slotProps.actions.nextButton` instead.
     */
    nextIconButtonProps: PropTypes.object,
    /**
     * Callback fired when the page is changed.
     *
     * @param {React.MouseEvent<HTMLButtonElement> | null} event The event source of the callback.
     * @param {number} page The page selected.
     */
    onPageChange: PropTypes.func.isRequired,
    /**
     * Callback fired when the number of rows per page is changed.
     *
     * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.
     */
    onRowsPerPageChange: PropTypes.func,
    /**
     * The zero-based index of the current page.
     */
    page: chainPropTypes(integerPropType.isRequired, props => {
      const {
        count,
        page,
        rowsPerPage
      } = props;
      if (count === -1) {
        return null;
      }
      const newLastPage = Math.max(0, Math.ceil(count / rowsPerPage) - 1);
      if (page < 0 || page > newLastPage) {
        return new Error('MUI: The page prop of a TablePagination is out of range ' + `(0 to ${newLastPage}, but page is ${page}).`);
      }
      return null;
    }),
    /**
     * The number of rows per page.
     *
     * Set -1 to display all the rows.
     */
    rowsPerPage: integerPropType.isRequired,
    /**
     * Customizes the options of the rows per page select field. If less than two options are
     * available, no select field will be displayed.
     * Use -1 for the value with a custom label to show all the rows.
     * @default [10, 25, 50, 100]
     */
    rowsPerPageOptions: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
      label: PropTypes.string.isRequired,
      value: PropTypes.number.isRequired
    })]).isRequired),
    /**
     * Props applied to the rows per page [`Select`](/material-ui/api/select/) element.
     *
     * This prop is an alias for `slotProps.select` and will be overriden by it if both are used.
     * @deprecated Use `slotProps.select` instead.
     *
     * @default {}
     */
    SelectProps: PropTypes.object,
    /**
     * If `true`, show the first-page button.
     * @default false
     */
    showFirstButton: PropTypes.bool,
    /**
     * If `true`, show the last-page button.
     * @default false
     */
    showLastButton: PropTypes.bool,
    /**
     * The props used for each slot inside the TablePagination.
     * @default {}
     */
    slotProps: PropTypes.shape({
      actions: PropTypes.shape({
        firstButton: PropTypes.object,
        lastButton: PropTypes.object,
        nextButton: PropTypes.object,
        previousButton: PropTypes.object
      }),
      select: PropTypes.object
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TablePagination$1 = TablePagination;

  function getTableRowUtilityClass(slot) {
    return generateUtilityClass('MuiTableRow', slot);
  }
  const tableRowClasses = generateUtilityClasses('MuiTableRow', ['root', 'selected', 'hover', 'head', 'footer']);
  var tableRowClasses$1 = tableRowClasses;

  const _excluded$8 = ["className", "component", "hover", "selected"];
  const useUtilityClasses$6 = ownerState => {
    const {
      classes,
      selected,
      hover,
      head,
      footer
    } = ownerState;
    const slots = {
      root: ['root', selected && 'selected', hover && 'hover', head && 'head', footer && 'footer']
    };
    return composeClasses(slots, getTableRowUtilityClass, classes);
  };
  const TableRowRoot = styled$1('tr', {
    name: 'MuiTableRow',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.head && styles.head, ownerState.footer && styles.footer];
    }
  })(({
    theme
  }) => ({
    color: 'inherit',
    display: 'table-row',
    verticalAlign: 'middle',
    // We disable the focus ring for mouse, touch and keyboard users.
    outline: 0,
    [`&.${tableRowClasses$1.hover}:hover`]: {
      backgroundColor: (theme.vars || theme).palette.action.hover
    },
    [`&.${tableRowClasses$1.selected}`]: {
      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
      '&:hover': {
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity)
      }
    }
  }));
  const defaultComponent = 'tr';
  /**
   * Will automatically set dynamic row height
   * based on the material table element parent (head, body, etc).
   */
  const TableRow = /*#__PURE__*/React__namespace.forwardRef(function TableRow(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableRow'
    });
    const {
        className,
        component = defaultComponent,
        hover = false,
        selected = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$8);
    const tablelvl2 = React__namespace.useContext(Tablelvl2Context$1);
    const ownerState = _extends({}, props, {
      component,
      hover,
      selected,
      head: tablelvl2 && tablelvl2.variant === 'head',
      footer: tablelvl2 && tablelvl2.variant === 'footer'
    });
    const classes = useUtilityClasses$6(ownerState);
    return /*#__PURE__*/jsxRuntime_1(TableRowRoot, _extends({
      as: component,
      ref: ref,
      className: clsx(classes.root, className),
      role: component === defaultComponent ? null : 'row',
      ownerState: ownerState
    }, other));
  });
  TableRow.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Should be valid <tr> children such as `TableCell`.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * If `true`, the table row will shade on hover.
     * @default false
     */
    hover: PropTypes.bool,
    /**
     * If `true`, the table row will have the selected shading.
     * @default false
     */
    selected: PropTypes.bool,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TableRow$1 = TableRow;

  var ArrowDownwardIcon = createSvgIcon( /*#__PURE__*/jsxRuntime_1("path", {
    d: "M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"
  }), 'ArrowDownward');

  function getTableSortLabelUtilityClass(slot) {
    return generateUtilityClass('MuiTableSortLabel', slot);
  }
  const tableSortLabelClasses = generateUtilityClasses('MuiTableSortLabel', ['root', 'active', 'icon', 'iconDirectionDesc', 'iconDirectionAsc']);
  var tableSortLabelClasses$1 = tableSortLabelClasses;

  const _excluded$7 = ["active", "children", "className", "direction", "hideSortIcon", "IconComponent"];
  const useUtilityClasses$5 = ownerState => {
    const {
      classes,
      direction,
      active
    } = ownerState;
    const slots = {
      root: ['root', active && 'active'],
      icon: ['icon', `iconDirection${capitalize(direction)}`]
    };
    return composeClasses(slots, getTableSortLabelUtilityClass, classes);
  };
  const TableSortLabelRoot = styled$1(ButtonBase$1, {
    name: 'MuiTableSortLabel',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.active && styles.active];
    }
  })(({
    theme
  }) => ({
    cursor: 'pointer',
    display: 'inline-flex',
    justifyContent: 'flex-start',
    flexDirection: 'inherit',
    alignItems: 'center',
    '&:focus': {
      color: (theme.vars || theme).palette.text.secondary
    },
    '&:hover': {
      color: (theme.vars || theme).palette.text.secondary,
      [`& .${tableSortLabelClasses$1.icon}`]: {
        opacity: 0.5
      }
    },
    [`&.${tableSortLabelClasses$1.active}`]: {
      color: (theme.vars || theme).palette.text.primary,
      [`& .${tableSortLabelClasses$1.icon}`]: {
        opacity: 1,
        color: (theme.vars || theme).palette.text.secondary
      }
    }
  }));
  const TableSortLabelIcon = styled$1('span', {
    name: 'MuiTableSortLabel',
    slot: 'Icon',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.icon, styles[`iconDirection${capitalize(ownerState.direction)}`]];
    }
  })(({
    theme,
    ownerState
  }) => _extends({
    fontSize: 18,
    marginRight: 4,
    marginLeft: 4,
    opacity: 0,
    transition: theme.transitions.create(['opacity', 'transform'], {
      duration: theme.transitions.duration.shorter
    }),
    userSelect: 'none'
  }, ownerState.direction === 'desc' && {
    transform: 'rotate(0deg)'
  }, ownerState.direction === 'asc' && {
    transform: 'rotate(180deg)'
  }));

  /**
   * A button based label for placing inside `TableCell` for column sorting.
   */
  const TableSortLabel = /*#__PURE__*/React__namespace.forwardRef(function TableSortLabel(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTableSortLabel'
    });
    const {
        active = false,
        children,
        className,
        direction = 'asc',
        hideSortIcon = false,
        IconComponent = ArrowDownwardIcon
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$7);
    const ownerState = _extends({}, props, {
      active,
      direction,
      hideSortIcon,
      IconComponent
    });
    const classes = useUtilityClasses$5(ownerState);
    return /*#__PURE__*/jsxRuntime_2(TableSortLabelRoot, _extends({
      className: clsx(classes.root, className),
      component: "span",
      disableRipple: true,
      ownerState: ownerState,
      ref: ref
    }, other, {
      children: [children, hideSortIcon && !active ? null : /*#__PURE__*/jsxRuntime_1(TableSortLabelIcon, {
        as: IconComponent,
        className: clsx(classes.icon),
        ownerState: ownerState
      })]
    }));
  });
  TableSortLabel.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * If `true`, the label will have the active styling (should be true for the sorted column).
     * @default false
     */
    active: PropTypes.bool,
    /**
     * Label contents, the arrow will be appended automatically.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The current sort direction.
     * @default 'asc'
     */
    direction: PropTypes.oneOf(['asc', 'desc']),
    /**
     * Hide sort icon when active is false.
     * @default false
     */
    hideSortIcon: PropTypes.bool,
    /**
     * Sort icon to use.
     * @default ArrowDownwardIcon
     */
    IconComponent: PropTypes.elementType,
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TableSortLabel$1 = TableSortLabel;

  function easeInOutSin(time) {
    return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;
  }
  function animate(property, element, to, options = {}, cb = () => {}) {
    const {
      ease = easeInOutSin,
      duration = 300 // standard
    } = options;
    let start = null;
    const from = element[property];
    let cancelled = false;
    const cancel = () => {
      cancelled = true;
    };
    const step = timestamp => {
      if (cancelled) {
        cb(new Error('Animation cancelled'));
        return;
      }
      if (start === null) {
        start = timestamp;
      }
      const time = Math.min(1, (timestamp - start) / duration);
      element[property] = ease(time) * (to - from) + from;
      if (time >= 1) {
        requestAnimationFrame(() => {
          cb(null);
        });
        return;
      }
      requestAnimationFrame(step);
    };
    if (from === to) {
      cb(new Error('Element already at target position'));
      return cancel;
    }
    requestAnimationFrame(step);
    return cancel;
  }

  const _excluded$6 = ["onChange"];
  const styles = {
    width: 99,
    height: 99,
    position: 'absolute',
    top: -9999,
    overflow: 'scroll'
  };

  /**
   * @ignore - internal component.
   * The component originates from https://github.com/STORIS/react-scrollbar-size.
   * It has been moved into the core in order to minimize the bundle size.
   */
  function ScrollbarSize(props) {
    const {
        onChange
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$6);
    const scrollbarHeight = React__namespace.useRef();
    const nodeRef = React__namespace.useRef(null);
    const setMeasurements = () => {
      scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;
    };
    useEnhancedEffect$1(() => {
      const handleResize = debounce$1(() => {
        const prevHeight = scrollbarHeight.current;
        setMeasurements();
        if (prevHeight !== scrollbarHeight.current) {
          onChange(scrollbarHeight.current);
        }
      });
      const containerWindow = ownerWindow(nodeRef.current);
      containerWindow.addEventListener('resize', handleResize);
      return () => {
        handleResize.clear();
        containerWindow.removeEventListener('resize', handleResize);
      };
    }, [onChange]);
    React__namespace.useEffect(() => {
      setMeasurements();
      onChange(scrollbarHeight.current);
    }, [onChange]);
    return /*#__PURE__*/jsxRuntime_1("div", _extends({
      style: styles,
      ref: nodeRef
    }, other));
  }
  ScrollbarSize.propTypes = {
    onChange: PropTypes.func.isRequired
  } ;

  function getTabScrollButtonUtilityClass(slot) {
    return generateUtilityClass('MuiTabScrollButton', slot);
  }
  const tabScrollButtonClasses = generateUtilityClasses('MuiTabScrollButton', ['root', 'vertical', 'horizontal', 'disabled']);
  var tabScrollButtonClasses$1 = tabScrollButtonClasses;

  const _excluded$5 = ["className", "slots", "slotProps", "direction", "orientation", "disabled"];
  const useUtilityClasses$4 = ownerState => {
    const {
      classes,
      orientation,
      disabled
    } = ownerState;
    const slots = {
      root: ['root', orientation, disabled && 'disabled']
    };
    return composeClasses(slots, getTabScrollButtonUtilityClass, classes);
  };
  const TabScrollButtonRoot = styled$1(ButtonBase$1, {
    name: 'MuiTabScrollButton',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, ownerState.orientation && styles[ownerState.orientation]];
    }
  })(({
    ownerState
  }) => _extends({
    width: 40,
    flexShrink: 0,
    opacity: 0.8,
    [`&.${tabScrollButtonClasses$1.disabled}`]: {
      opacity: 0
    }
  }, ownerState.orientation === 'vertical' && {
    width: '100%',
    height: 40,
    '& svg': {
      transform: `rotate(${ownerState.isRtl ? -90 : 90}deg)`
    }
  }));
  const TabScrollButton = /*#__PURE__*/React__namespace.forwardRef(function TabScrollButton(inProps, ref) {
    var _slots$StartScrollBut, _slots$EndScrollButto;
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTabScrollButton'
    });
    const {
        className,
        slots = {},
        slotProps = {},
        direction
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$5);
    const theme = useTheme();
    const isRtl = theme.direction === 'rtl';
    const ownerState = _extends({
      isRtl
    }, props);
    const classes = useUtilityClasses$4(ownerState);
    const StartButtonIcon = (_slots$StartScrollBut = slots.StartScrollButtonIcon) != null ? _slots$StartScrollBut : KeyboardArrowLeft;
    const EndButtonIcon = (_slots$EndScrollButto = slots.EndScrollButtonIcon) != null ? _slots$EndScrollButto : KeyboardArrowRight;
    const startButtonIconProps = useSlotProps({
      elementType: StartButtonIcon,
      externalSlotProps: slotProps.startScrollButtonIcon,
      additionalProps: {
        fontSize: 'small'
      },
      ownerState
    });
    const endButtonIconProps = useSlotProps({
      elementType: EndButtonIcon,
      externalSlotProps: slotProps.endScrollButtonIcon,
      additionalProps: {
        fontSize: 'small'
      },
      ownerState
    });
    return /*#__PURE__*/jsxRuntime_1(TabScrollButtonRoot, _extends({
      component: "div",
      className: clsx(classes.root, className),
      ref: ref,
      role: null,
      ownerState: ownerState,
      tabIndex: null
    }, other, {
      children: direction === 'left' ? /*#__PURE__*/jsxRuntime_1(StartButtonIcon, _extends({}, startButtonIconProps)) : /*#__PURE__*/jsxRuntime_1(EndButtonIcon, _extends({}, endButtonIconProps))
    }));
  });
  TabScrollButton.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The direction the button should indicate.
     */
    direction: PropTypes.oneOf(['left', 'right']).isRequired,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * The component orientation (layout flow direction).
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     * @default {}
     */
    slotProps: PropTypes.shape({
      endScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      startScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside.
     * @default {}
     */
    slots: PropTypes.shape({
      EndScrollButtonIcon: PropTypes.elementType,
      StartScrollButtonIcon: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
  } ;
  var TabScrollButton$1 = TabScrollButton;

  function getTabsUtilityClass(slot) {
    return generateUtilityClass('MuiTabs', slot);
  }
  const tabsClasses = generateUtilityClasses('MuiTabs', ['root', 'vertical', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);
  var tabsClasses$1 = tabsClasses;

  const _excluded$4 = ["aria-label", "aria-labelledby", "action", "centered", "children", "className", "component", "allowScrollButtonsMobile", "indicatorColor", "onChange", "orientation", "ScrollButtonComponent", "scrollButtons", "selectionFollowsFocus", "slots", "slotProps", "TabIndicatorProps", "TabScrollButtonProps", "textColor", "value", "variant", "visibleScrollbar"];
  const nextItem = (list, item) => {
    if (list === item) {
      return list.firstChild;
    }
    if (item && item.nextElementSibling) {
      return item.nextElementSibling;
    }
    return list.firstChild;
  };
  const previousItem = (list, item) => {
    if (list === item) {
      return list.lastChild;
    }
    if (item && item.previousElementSibling) {
      return item.previousElementSibling;
    }
    return list.lastChild;
  };
  const moveFocus = (list, currentFocus, traversalFunction) => {
    let wrappedOnce = false;
    let nextFocus = traversalFunction(list, currentFocus);
    while (nextFocus) {
      // Prevent infinite loop.
      if (nextFocus === list.firstChild) {
        if (wrappedOnce) {
          return;
        }
        wrappedOnce = true;
      }

      // Same logic as useAutocomplete.js
      const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';
      if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {
        // Move to the next element.
        nextFocus = traversalFunction(list, nextFocus);
      } else {
        nextFocus.focus();
        return;
      }
    }
  };
  const useUtilityClasses$3 = ownerState => {
    const {
      vertical,
      fixed,
      hideScrollbar,
      scrollableX,
      scrollableY,
      centered,
      scrollButtonsHideMobile,
      classes
    } = ownerState;
    const slots = {
      root: ['root', vertical && 'vertical'],
      scroller: ['scroller', fixed && 'fixed', hideScrollbar && 'hideScrollbar', scrollableX && 'scrollableX', scrollableY && 'scrollableY'],
      flexContainer: ['flexContainer', vertical && 'flexContainerVertical', centered && 'centered'],
      indicator: ['indicator'],
      scrollButtons: ['scrollButtons', scrollButtonsHideMobile && 'scrollButtonsHideMobile'],
      scrollableX: [scrollableX && 'scrollableX'],
      hideScrollbar: [hideScrollbar && 'hideScrollbar']
    };
    return composeClasses(slots, getTabsUtilityClass, classes);
  };
  const TabsRoot = styled$1('div', {
    name: 'MuiTabs',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${tabsClasses$1.scrollButtons}`]: styles.scrollButtons
      }, {
        [`& .${tabsClasses$1.scrollButtons}`]: ownerState.scrollButtonsHideMobile && styles.scrollButtonsHideMobile
      }, styles.root, ownerState.vertical && styles.vertical];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    overflow: 'hidden',
    minHeight: 48,
    // Add iOS momentum scrolling for iOS < 13.0
    WebkitOverflowScrolling: 'touch',
    display: 'flex'
  }, ownerState.vertical && {
    flexDirection: 'column'
  }, ownerState.scrollButtonsHideMobile && {
    [`& .${tabsClasses$1.scrollButtons}`]: {
      [theme.breakpoints.down('sm')]: {
        display: 'none'
      }
    }
  }));
  const TabsScroller = styled$1('div', {
    name: 'MuiTabs',
    slot: 'Scroller',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.scroller, ownerState.fixed && styles.fixed, ownerState.hideScrollbar && styles.hideScrollbar, ownerState.scrollableX && styles.scrollableX, ownerState.scrollableY && styles.scrollableY];
    }
  })(({
    ownerState
  }) => _extends({
    position: 'relative',
    display: 'inline-block',
    flex: '1 1 auto',
    whiteSpace: 'nowrap'
  }, ownerState.fixed && {
    overflowX: 'hidden',
    width: '100%'
  }, ownerState.hideScrollbar && {
    // Hide dimensionless scrollbar on macOS
    scrollbarWidth: 'none',
    // Firefox
    '&::-webkit-scrollbar': {
      display: 'none' // Safari + Chrome
    }
  }, ownerState.scrollableX && {
    overflowX: 'auto',
    overflowY: 'hidden'
  }, ownerState.scrollableY && {
    overflowY: 'auto',
    overflowX: 'hidden'
  }));
  const FlexContainer = styled$1('div', {
    name: 'MuiTabs',
    slot: 'FlexContainer',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];
    }
  })(({
    ownerState
  }) => _extends({
    display: 'flex'
  }, ownerState.vertical && {
    flexDirection: 'column'
  }, ownerState.centered && {
    justifyContent: 'center'
  }));
  const TabsIndicator = styled$1('span', {
    name: 'MuiTabs',
    slot: 'Indicator',
    overridesResolver: (props, styles) => styles.indicator
  })(({
    ownerState,
    theme
  }) => _extends({
    position: 'absolute',
    height: 2,
    bottom: 0,
    width: '100%',
    transition: theme.transitions.create()
  }, ownerState.indicatorColor === 'primary' && {
    backgroundColor: (theme.vars || theme).palette.primary.main
  }, ownerState.indicatorColor === 'secondary' && {
    backgroundColor: (theme.vars || theme).palette.secondary.main
  }, ownerState.vertical && {
    height: '100%',
    width: 2,
    right: 0
  }));
  const TabsScrollbarSize = styled$1(ScrollbarSize)({
    overflowX: 'auto',
    overflowY: 'hidden',
    // Hide dimensionless scrollbar on macOS
    scrollbarWidth: 'none',
    // Firefox
    '&::-webkit-scrollbar': {
      display: 'none' // Safari + Chrome
    }
  });
  const defaultIndicatorStyle = {};
  let warnedOnceTabPresent = false;
  const Tabs = /*#__PURE__*/React__namespace.forwardRef(function Tabs(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTabs'
    });
    const theme = useTheme();
    const isRtl = theme.direction === 'rtl';
    const {
        'aria-label': ariaLabel,
        'aria-labelledby': ariaLabelledBy,
        action,
        centered = false,
        children: childrenProp,
        className,
        component = 'div',
        allowScrollButtonsMobile = false,
        indicatorColor = 'primary',
        onChange,
        orientation = 'horizontal',
        ScrollButtonComponent = TabScrollButton$1,
        scrollButtons = 'auto',
        selectionFollowsFocus,
        slots = {},
        slotProps = {},
        TabIndicatorProps = {},
        TabScrollButtonProps = {},
        textColor = 'primary',
        value,
        variant = 'standard',
        visibleScrollbar = false
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$4);
    const scrollable = variant === 'scrollable';
    const vertical = orientation === 'vertical';
    const scrollStart = vertical ? 'scrollTop' : 'scrollLeft';
    const start = vertical ? 'top' : 'left';
    const end = vertical ? 'bottom' : 'right';
    const clientSize = vertical ? 'clientHeight' : 'clientWidth';
    const size = vertical ? 'height' : 'width';
    const ownerState = _extends({}, props, {
      component,
      allowScrollButtonsMobile,
      indicatorColor,
      orientation,
      vertical,
      scrollButtons,
      textColor,
      variant,
      visibleScrollbar,
      fixed: !scrollable,
      hideScrollbar: scrollable && !visibleScrollbar,
      scrollableX: scrollable && !vertical,
      scrollableY: scrollable && vertical,
      centered: centered && !scrollable,
      scrollButtonsHideMobile: !allowScrollButtonsMobile
    });
    const classes = useUtilityClasses$3(ownerState);
    const startScrollButtonIconProps = useSlotProps({
      elementType: slots.StartScrollButtonIcon,
      externalSlotProps: slotProps.startScrollButtonIcon,
      ownerState
    });
    const endScrollButtonIconProps = useSlotProps({
      elementType: slots.EndScrollButtonIcon,
      externalSlotProps: slotProps.endScrollButtonIcon,
      ownerState
    });
    {
      if (centered && scrollable) {
        console.error('MUI: You can not use the `centered={true}` and `variant="scrollable"` properties ' + 'at the same time on a `Tabs` component.');
      }
    }
    const [mounted, setMounted] = React__namespace.useState(false);
    const [indicatorStyle, setIndicatorStyle] = React__namespace.useState(defaultIndicatorStyle);
    const [displayStartScroll, setDisplayStartScroll] = React__namespace.useState(false);
    const [displayEndScroll, setDisplayEndScroll] = React__namespace.useState(false);
    const [updateScrollObserver, setUpdateScrollObserver] = React__namespace.useState(false);
    const [scrollerStyle, setScrollerStyle] = React__namespace.useState({
      overflow: 'hidden',
      scrollbarWidth: 0
    });
    const valueToIndex = new Map();
    const tabsRef = React__namespace.useRef(null);
    const tabListRef = React__namespace.useRef(null);
    const getTabsMeta = () => {
      const tabsNode = tabsRef.current;
      let tabsMeta;
      if (tabsNode) {
        const rect = tabsNode.getBoundingClientRect();
        // create a new object with ClientRect class props + scrollLeft
        tabsMeta = {
          clientWidth: tabsNode.clientWidth,
          scrollLeft: tabsNode.scrollLeft,
          scrollTop: tabsNode.scrollTop,
          scrollLeftNormalized: getNormalizedScrollLeft(tabsNode, theme.direction),
          scrollWidth: tabsNode.scrollWidth,
          top: rect.top,
          bottom: rect.bottom,
          left: rect.left,
          right: rect.right
        };
      }
      let tabMeta;
      if (tabsNode && value !== false) {
        const children = tabListRef.current.children;
        if (children.length > 0) {
          const tab = children[valueToIndex.get(value)];
          {
            if (!tab) {
              console.error([`MUI: The \`value\` provided to the Tabs component is invalid.`, `None of the Tabs' children match with "${value}".`, valueToIndex.keys ? `You can provide one of the following values: ${Array.from(valueToIndex.keys()).join(', ')}.` : null].join('\n'));
            }
          }
          tabMeta = tab ? tab.getBoundingClientRect() : null;
          {
            if (!warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&
            // if the whole Tabs component is hidden, don't warn
            tabsMeta.clientWidth !== 0) {
              tabsMeta = null;
              console.error(['MUI: The `value` provided to the Tabs component is invalid.', `The Tab with this \`value\` ("${value}") is not part of the document layout.`, "Make sure the tab item is present in the document or that it's not `display: none`."].join('\n'));
              warnedOnceTabPresent = true;
            }
          }
        }
      }
      return {
        tabsMeta,
        tabMeta
      };
    };
    const updateIndicatorState = useEventCallback(() => {
      const {
        tabsMeta,
        tabMeta
      } = getTabsMeta();
      let startValue = 0;
      let startIndicator;
      if (vertical) {
        startIndicator = 'top';
        if (tabMeta && tabsMeta) {
          startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;
        }
      } else {
        startIndicator = isRtl ? 'right' : 'left';
        if (tabMeta && tabsMeta) {
          const correction = isRtl ? tabsMeta.scrollLeftNormalized + tabsMeta.clientWidth - tabsMeta.scrollWidth : tabsMeta.scrollLeft;
          startValue = (isRtl ? -1 : 1) * (tabMeta[startIndicator] - tabsMeta[startIndicator] + correction);
        }
      }
      const newIndicatorStyle = {
        [startIndicator]: startValue,
        // May be wrong until the font is loaded.
        [size]: tabMeta ? tabMeta[size] : 0
      };

      // IE11 support, replace with Number.isNaN
      // eslint-disable-next-line no-restricted-globals
      if (isNaN(indicatorStyle[startIndicator]) || isNaN(indicatorStyle[size])) {
        setIndicatorStyle(newIndicatorStyle);
      } else {
        const dStart = Math.abs(indicatorStyle[startIndicator] - newIndicatorStyle[startIndicator]);
        const dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);
        if (dStart >= 1 || dSize >= 1) {
          setIndicatorStyle(newIndicatorStyle);
        }
      }
    });
    const scroll = (scrollValue, {
      animation = true
    } = {}) => {
      if (animation) {
        animate(scrollStart, tabsRef.current, scrollValue, {
          duration: theme.transitions.duration.standard
        });
      } else {
        tabsRef.current[scrollStart] = scrollValue;
      }
    };
    const moveTabsScroll = delta => {
      let scrollValue = tabsRef.current[scrollStart];
      if (vertical) {
        scrollValue += delta;
      } else {
        scrollValue += delta * (isRtl ? -1 : 1);
        // Fix for Edge
        scrollValue *= isRtl && detectScrollType() === 'reverse' ? -1 : 1;
      }
      scroll(scrollValue);
    };
    const getScrollSize = () => {
      const containerSize = tabsRef.current[clientSize];
      let totalSize = 0;
      const children = Array.from(tabListRef.current.children);
      for (let i = 0; i < children.length; i += 1) {
        const tab = children[i];
        if (totalSize + tab[clientSize] > containerSize) {
          // If the first item is longer than the container size, then only scroll
          // by the container size.
          if (i === 0) {
            totalSize = containerSize;
          }
          break;
        }
        totalSize += tab[clientSize];
      }
      return totalSize;
    };
    const handleStartScrollClick = () => {
      moveTabsScroll(-1 * getScrollSize());
    };
    const handleEndScrollClick = () => {
      moveTabsScroll(getScrollSize());
    };

    // TODO Remove <ScrollbarSize /> as browser support for hiding the scrollbar
    // with CSS improves.
    const handleScrollbarSizeChange = React__namespace.useCallback(scrollbarWidth => {
      setScrollerStyle({
        overflow: null,
        scrollbarWidth
      });
    }, []);
    const getConditionalElements = () => {
      const conditionalElements = {};
      conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/jsxRuntime_1(TabsScrollbarSize, {
        onChange: handleScrollbarSizeChange,
        className: clsx(classes.scrollableX, classes.hideScrollbar)
      }) : null;
      const scrollButtonsActive = displayStartScroll || displayEndScroll;
      const showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === true);
      conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/jsxRuntime_1(ScrollButtonComponent, _extends({
        slots: {
          StartScrollButtonIcon: slots.StartScrollButtonIcon
        },
        slotProps: {
          startScrollButtonIcon: startScrollButtonIconProps
        },
        orientation: orientation,
        direction: isRtl ? 'right' : 'left',
        onClick: handleStartScrollClick,
        disabled: !displayStartScroll
      }, TabScrollButtonProps, {
        className: clsx(classes.scrollButtons, TabScrollButtonProps.className)
      })) : null;
      conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/jsxRuntime_1(ScrollButtonComponent, _extends({
        slots: {
          EndScrollButtonIcon: slots.EndScrollButtonIcon
        },
        slotProps: {
          endScrollButtonIcon: endScrollButtonIconProps
        },
        orientation: orientation,
        direction: isRtl ? 'left' : 'right',
        onClick: handleEndScrollClick,
        disabled: !displayEndScroll
      }, TabScrollButtonProps, {
        className: clsx(classes.scrollButtons, TabScrollButtonProps.className)
      })) : null;
      return conditionalElements;
    };
    const scrollSelectedIntoView = useEventCallback(animation => {
      const {
        tabsMeta,
        tabMeta
      } = getTabsMeta();
      if (!tabMeta || !tabsMeta) {
        return;
      }
      if (tabMeta[start] < tabsMeta[start]) {
        // left side of button is out of view
        const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);
        scroll(nextScrollStart, {
          animation
        });
      } else if (tabMeta[end] > tabsMeta[end]) {
        // right side of button is out of view
        const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);
        scroll(nextScrollStart, {
          animation
        });
      }
    });
    const updateScrollButtonState = useEventCallback(() => {
      if (scrollable && scrollButtons !== false) {
        setUpdateScrollObserver(!updateScrollObserver);
      }
    });
    React__namespace.useEffect(() => {
      const handleResize = debounce$1(() => {
        // If the Tabs component is replaced by Suspense with a fallback, the last
        // ResizeObserver's handler that runs because of the change in the layout is trying to
        // access a dom node that is no longer there (as the fallback component is being shown instead).
        // See https://github.com/mui/material-ui/issues/33276
        // TODO: Add tests that will ensure the component is not failing when
        // replaced by Suspense with a fallback, once React is updated to version 18
        if (tabsRef.current) {
          updateIndicatorState();
        }
      });
      let resizeObserver;

      /**
       * @type {MutationCallback}
       */
      const handleMutation = records => {
        records.forEach(record => {
          record.removedNodes.forEach(item => {
            var _resizeObserver;
            (_resizeObserver = resizeObserver) == null || _resizeObserver.unobserve(item);
          });
          record.addedNodes.forEach(item => {
            var _resizeObserver2;
            (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.observe(item);
          });
        });
        handleResize();
        updateScrollButtonState();
      };
      const win = ownerWindow(tabsRef.current);
      win.addEventListener('resize', handleResize);
      let mutationObserver;
      if (typeof ResizeObserver !== 'undefined') {
        resizeObserver = new ResizeObserver(handleResize);
        Array.from(tabListRef.current.children).forEach(child => {
          resizeObserver.observe(child);
        });
      }
      if (typeof MutationObserver !== 'undefined') {
        mutationObserver = new MutationObserver(handleMutation);
        mutationObserver.observe(tabListRef.current, {
          childList: true
        });
      }
      return () => {
        var _mutationObserver, _resizeObserver3;
        handleResize.clear();
        win.removeEventListener('resize', handleResize);
        (_mutationObserver = mutationObserver) == null || _mutationObserver.disconnect();
        (_resizeObserver3 = resizeObserver) == null || _resizeObserver3.disconnect();
      };
    }, [updateIndicatorState, updateScrollButtonState]);

    /**
     * Toggle visibility of start and end scroll buttons
     * Using IntersectionObserver on first and last Tabs.
     */
    React__namespace.useEffect(() => {
      const tabListChildren = Array.from(tabListRef.current.children);
      const length = tabListChildren.length;
      if (typeof IntersectionObserver !== 'undefined' && length > 0 && scrollable && scrollButtons !== false) {
        const firstTab = tabListChildren[0];
        const lastTab = tabListChildren[length - 1];
        const observerOptions = {
          root: tabsRef.current,
          threshold: 0.99
        };
        const handleScrollButtonStart = entries => {
          setDisplayStartScroll(!entries[0].isIntersecting);
        };
        const firstObserver = new IntersectionObserver(handleScrollButtonStart, observerOptions);
        firstObserver.observe(firstTab);
        const handleScrollButtonEnd = entries => {
          setDisplayEndScroll(!entries[0].isIntersecting);
        };
        const lastObserver = new IntersectionObserver(handleScrollButtonEnd, observerOptions);
        lastObserver.observe(lastTab);
        return () => {
          firstObserver.disconnect();
          lastObserver.disconnect();
        };
      }
      return undefined;
    }, [scrollable, scrollButtons, updateScrollObserver, childrenProp == null ? void 0 : childrenProp.length]);
    React__namespace.useEffect(() => {
      setMounted(true);
    }, []);
    React__namespace.useEffect(() => {
      updateIndicatorState();
    });
    React__namespace.useEffect(() => {
      // Don't animate on the first render.
      scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);
    }, [scrollSelectedIntoView, indicatorStyle]);
    React__namespace.useImperativeHandle(action, () => ({
      updateIndicator: updateIndicatorState,
      updateScrollButtons: updateScrollButtonState
    }), [updateIndicatorState, updateScrollButtonState]);
    const indicator = /*#__PURE__*/jsxRuntime_1(TabsIndicator, _extends({}, TabIndicatorProps, {
      className: clsx(classes.indicator, TabIndicatorProps.className),
      ownerState: ownerState,
      style: _extends({}, indicatorStyle, TabIndicatorProps.style)
    }));
    let childIndex = 0;
    const children = React__namespace.Children.map(childrenProp, child => {
      if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
        return null;
      }
      {
        if (reactIs_2(child)) {
          console.error(["MUI: The Tabs component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
        }
      }
      const childValue = child.props.value === undefined ? childIndex : child.props.value;
      valueToIndex.set(childValue, childIndex);
      const selected = childValue === value;
      childIndex += 1;
      return /*#__PURE__*/React__namespace.cloneElement(child, _extends({
        fullWidth: variant === 'fullWidth',
        indicator: selected && !mounted && indicator,
        selected,
        selectionFollowsFocus,
        onChange,
        textColor,
        value: childValue
      }, childIndex === 1 && value === false && !child.props.tabIndex ? {
        tabIndex: 0
      } : {}));
    });
    const handleKeyDown = event => {
      const list = tabListRef.current;
      const currentFocus = ownerDocument(list).activeElement;
      // Keyboard navigation assumes that [role="tab"] are siblings
      // though we might warn in the future about nested, interactive elements
      // as a a11y violation
      const role = currentFocus.getAttribute('role');
      if (role !== 'tab') {
        return;
      }
      let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';
      let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';
      if (orientation === 'horizontal' && isRtl) {
        // swap previousItemKey with nextItemKey
        previousItemKey = 'ArrowRight';
        nextItemKey = 'ArrowLeft';
      }
      switch (event.key) {
        case previousItemKey:
          event.preventDefault();
          moveFocus(list, currentFocus, previousItem);
          break;
        case nextItemKey:
          event.preventDefault();
          moveFocus(list, currentFocus, nextItem);
          break;
        case 'Home':
          event.preventDefault();
          moveFocus(list, null, nextItem);
          break;
        case 'End':
          event.preventDefault();
          moveFocus(list, null, previousItem);
          break;
      }
    };
    const conditionalElements = getConditionalElements();
    return /*#__PURE__*/jsxRuntime_2(TabsRoot, _extends({
      className: clsx(classes.root, className),
      ownerState: ownerState,
      ref: ref,
      as: component
    }, other, {
      children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/jsxRuntime_2(TabsScroller, {
        className: classes.scroller,
        ownerState: ownerState,
        style: {
          overflow: scrollerStyle.overflow,
          [vertical ? `margin${isRtl ? 'Left' : 'Right'}` : 'marginBottom']: visibleScrollbar ? undefined : -scrollerStyle.scrollbarWidth
        },
        ref: tabsRef,
        children: [/*#__PURE__*/jsxRuntime_1(FlexContainer, {
          "aria-label": ariaLabel,
          "aria-labelledby": ariaLabelledBy,
          "aria-orientation": orientation === 'vertical' ? 'vertical' : null,
          className: classes.flexContainer,
          ownerState: ownerState,
          onKeyDown: handleKeyDown,
          ref: tabListRef,
          role: "tablist",
          children: children
        }), mounted && indicator]
      }), conditionalElements.scrollButtonEnd]
    }));
  });
  Tabs.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * Callback fired when the component mounts.
     * This is useful when you want to trigger an action programmatically.
     * It supports two actions: `updateIndicator()` and `updateScrollButtons()`
     *
     * @param {object} actions This object contains all possible actions
     * that can be triggered programmatically.
     */
    action: refType$1,
    /**
     * If `true`, the scroll buttons aren't forced hidden on mobile.
     * By default the scroll buttons are hidden on mobile and takes precedence over `scrollButtons`.
     * @default false
     */
    allowScrollButtonsMobile: PropTypes.bool,
    /**
     * The label for the Tabs as a string.
     */
    'aria-label': PropTypes.string,
    /**
     * An id or list of ids separated by a space that label the Tabs.
     */
    'aria-labelledby': PropTypes.string,
    /**
     * If `true`, the tabs are centered.
     * This prop is intended for large views.
     * @default false
     */
    centered: PropTypes.bool,
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The component used for the root node.
     * Either a string to use a HTML element or a component.
     */
    component: PropTypes.elementType,
    /**
     * Determines the color of the indicator.
     * @default 'primary'
     */
    indicatorColor: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),
    /**
     * Callback fired when the value changes.
     *
     * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.
     * @param {any} value We default to the index of the child (number)
     */
    onChange: PropTypes.func,
    /**
     * The component orientation (layout flow direction).
     * @default 'horizontal'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * The component used to render the scroll buttons.
     * @default TabScrollButton
     */
    ScrollButtonComponent: PropTypes.elementType,
    /**
     * Determine behavior of scroll buttons when tabs are set to scroll:
     *
     * - `auto` will only present them when not all the items are visible.
     * - `true` will always present them.
     * - `false` will never present them.
     *
     * By default the scroll buttons are hidden on mobile.
     * This behavior can be disabled with `allowScrollButtonsMobile`.
     * @default 'auto'
     */
    scrollButtons: PropTypes /* @typescript-to-proptypes-ignore */.oneOf(['auto', false, true]),
    /**
     * If `true` the selected tab changes on focus. Otherwise it only
     * changes on activation.
     */
    selectionFollowsFocus: PropTypes.bool,
    /**
     * The extra props for the slot components.
     * You can override the existing props or add new ones.
     * @default {}
     */
    slotProps: PropTypes.shape({
      endScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
      startScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    }),
    /**
     * The components used for each slot inside.
     * @default {}
     */
    slots: PropTypes.shape({
      EndScrollButtonIcon: PropTypes.elementType,
      StartScrollButtonIcon: PropTypes.elementType
    }),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Props applied to the tab indicator element.
     * @default  {}
     */
    TabIndicatorProps: PropTypes.object,
    /**
     * Props applied to the [`TabScrollButton`](/material-ui/api/tab-scroll-button/) element.
     * @default {}
     */
    TabScrollButtonProps: PropTypes.object,
    /**
     * Determines the color of the `Tab`.
     * @default 'primary'
     */
    textColor: PropTypes.oneOf(['inherit', 'primary', 'secondary']),
    /**
     * The value of the currently selected `Tab`.
     * If you don't want any selected `Tab`, you can set this prop to `false`.
     */
    value: PropTypes.any,
    /**
     * Determines additional display behavior of the tabs:
     *
     *  - `scrollable` will invoke scrolling properties and allow for horizontally
     *  scrolling (or swiping) of the tab bar.
     *  - `fullWidth` will make the tabs grow to use all the available space,
     *  which should be used for small views, like on mobile.
     *  - `standard` will render the default state.
     * @default 'standard'
     */
    variant: PropTypes.oneOf(['fullWidth', 'scrollable', 'standard']),
    /**
     * If `true`, the scrollbar is visible. It can be useful when displaying
     * a long vertical list of tabs.
     * @default false
     */
    visibleScrollbar: PropTypes.bool
  } ;
  var Tabs$1 = Tabs;

  function getTextFieldUtilityClass(slot) {
    return generateUtilityClass('MuiTextField', slot);
  }
  const textFieldClasses = generateUtilityClasses('MuiTextField', ['root']);
  var textFieldClasses$1 = textFieldClasses;

  const _excluded$3 = ["autoComplete", "autoFocus", "children", "className", "color", "defaultValue", "disabled", "error", "FormHelperTextProps", "fullWidth", "helperText", "id", "InputLabelProps", "inputProps", "InputProps", "inputRef", "label", "maxRows", "minRows", "multiline", "name", "onBlur", "onChange", "onFocus", "placeholder", "required", "rows", "select", "SelectProps", "type", "value", "variant"];
  const variantComponent = {
    standard: Input$1,
    filled: FilledInput$1,
    outlined: OutlinedInput$1
  };
  const useUtilityClasses$2 = ownerState => {
    const {
      classes
    } = ownerState;
    const slots = {
      root: ['root']
    };
    return composeClasses(slots, getTextFieldUtilityClass, classes);
  };
  const TextFieldRoot = styled$1(FormControl$1, {
    name: 'MuiTextField',
    slot: 'Root',
    overridesResolver: (props, styles) => styles.root
  })({});

  /**
   * The `TextField` is a convenience wrapper for the most common cases (80%).
   * It cannot be all things to all people, otherwise the API would grow out of control.
   *
   * ## Advanced Configuration
   *
   * It's important to understand that the text field is a simple abstraction
   * on top of the following components:
   *
   * - [FormControl](/material-ui/api/form-control/)
   * - [InputLabel](/material-ui/api/input-label/)
   * - [FilledInput](/material-ui/api/filled-input/)
   * - [OutlinedInput](/material-ui/api/outlined-input/)
   * - [Input](/material-ui/api/input/)
   * - [FormHelperText](/material-ui/api/form-helper-text/)
   *
   * If you wish to alter the props applied to the `input` element, you can do so as follows:
   *
   * ```jsx
   * const inputProps = {
   *   step: 300,
   * };
   *
   * return <TextField id="time" type="time" inputProps={inputProps} />;
   * ```
   *
   * For advanced cases, please look at the source of TextField by clicking on the
   * "Edit this page" button above. Consider either:
   *
   * - using the upper case props for passing values directly to the components
   * - using the underlying components directly as shown in the demos
   */
  const TextField = /*#__PURE__*/React__namespace.forwardRef(function TextField(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiTextField'
    });
    const {
        autoComplete,
        autoFocus = false,
        children,
        className,
        color = 'primary',
        defaultValue,
        disabled = false,
        error = false,
        FormHelperTextProps,
        fullWidth = false,
        helperText,
        id: idOverride,
        InputLabelProps,
        inputProps,
        InputProps,
        inputRef,
        label,
        maxRows,
        minRows,
        multiline = false,
        name,
        onBlur,
        onChange,
        onFocus,
        placeholder,
        required = false,
        rows,
        select = false,
        SelectProps,
        type,
        value,
        variant = 'outlined'
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$3);
    const ownerState = _extends({}, props, {
      autoFocus,
      color,
      disabled,
      error,
      fullWidth,
      multiline,
      required,
      select,
      variant
    });
    const classes = useUtilityClasses$2(ownerState);
    {
      if (select && !children) {
        console.error('MUI: `children` must be passed when using the `TextField` component with `select`.');
      }
    }
    const InputMore = {};
    if (variant === 'outlined') {
      if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') {
        InputMore.notched = InputLabelProps.shrink;
      }
      InputMore.label = label;
    }
    if (select) {
      // unset defaults from textbox inputs
      if (!SelectProps || !SelectProps.native) {
        InputMore.id = undefined;
      }
      InputMore['aria-describedby'] = undefined;
    }
    const id = useId(idOverride);
    const helperTextId = helperText && id ? `${id}-helper-text` : undefined;
    const inputLabelId = label && id ? `${id}-label` : undefined;
    const InputComponent = variantComponent[variant];
    const InputElement = /*#__PURE__*/jsxRuntime_1(InputComponent, _extends({
      "aria-describedby": helperTextId,
      autoComplete: autoComplete,
      autoFocus: autoFocus,
      defaultValue: defaultValue,
      fullWidth: fullWidth,
      multiline: multiline,
      name: name,
      rows: rows,
      maxRows: maxRows,
      minRows: minRows,
      type: type,
      value: value,
      id: id,
      inputRef: inputRef,
      onBlur: onBlur,
      onChange: onChange,
      onFocus: onFocus,
      placeholder: placeholder,
      inputProps: inputProps
    }, InputMore, InputProps));
    return /*#__PURE__*/jsxRuntime_2(TextFieldRoot, _extends({
      className: clsx(classes.root, className),
      disabled: disabled,
      error: error,
      fullWidth: fullWidth,
      ref: ref,
      required: required,
      color: color,
      variant: variant,
      ownerState: ownerState
    }, other, {
      children: [label != null && label !== '' && /*#__PURE__*/jsxRuntime_1(InputLabel$1, _extends({
        htmlFor: id,
        id: inputLabelId
      }, InputLabelProps, {
        children: label
      })), select ? /*#__PURE__*/jsxRuntime_1(Select$1, _extends({
        "aria-describedby": helperTextId,
        id: id,
        labelId: inputLabelId,
        value: value,
        input: InputElement
      }, SelectProps, {
        children: children
      })) : InputElement, helperText && /*#__PURE__*/jsxRuntime_1(FormHelperText$1, _extends({
        id: helperTextId
      }, FormHelperTextProps, {
        children: helperText
      }))]
    }));
  });
  TextField.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * This prop helps users to fill forms faster, especially on mobile devices.
     * The name can be confusing, as it's more like an autofill.
     * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
     */
    autoComplete: PropTypes.string,
    /**
     * If `true`, the `input` element is focused during the first mount.
     * @default false
     */
    autoFocus: PropTypes.bool,
    /**
     * @ignore
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the component.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'primary'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * The default value. Use when the component is not controlled.
     */
    defaultValue: PropTypes.any,
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the label is displayed in an error state.
     * @default false
     */
    error: PropTypes.bool,
    /**
     * Props applied to the [`FormHelperText`](/material-ui/api/form-helper-text/) element.
     */
    FormHelperTextProps: PropTypes.object,
    /**
     * If `true`, the input will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * The helper text content.
     */
    helperText: PropTypes.node,
    /**
     * The id of the `input` element.
     * Use this prop to make `label` and `helperText` accessible for screen readers.
     */
    id: PropTypes.string,
    /**
     * Props applied to the [`InputLabel`](/material-ui/api/input-label/) element.
     * Pointer events like `onClick` are enabled if and only if `shrink` is `true`.
     */
    InputLabelProps: PropTypes.object,
    /**
     * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
     */
    inputProps: PropTypes.object,
    /**
     * Props applied to the Input element.
     * It will be a [`FilledInput`](/material-ui/api/filled-input/),
     * [`OutlinedInput`](/material-ui/api/outlined-input/) or [`Input`](/material-ui/api/input/)
     * component depending on the `variant` prop value.
     */
    InputProps: PropTypes.object,
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: refType$1,
    /**
     * The label content.
     */
    label: PropTypes.node,
    /**
     * If `dense` or `normal`, will adjust vertical spacing of this and contained components.
     * @default 'none'
     */
    margin: PropTypes.oneOf(['dense', 'none', 'normal']),
    /**
     * Maximum number of rows to display when multiline option is set to true.
     */
    maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Minimum number of rows to display when multiline option is set to true.
     */
    minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * If `true`, a `textarea` element is rendered instead of an input.
     * @default false
     */
    multiline: PropTypes.bool,
    /**
     * Name attribute of the `input` element.
     */
    name: PropTypes.string,
    /**
     * @ignore
     */
    onBlur: PropTypes.func,
    /**
     * Callback fired when the value is changed.
     *
     * @param {object} event The event source of the callback.
     * You can pull out the new value by accessing `event.target.value` (string).
     */
    onChange: PropTypes.func,
    /**
     * @ignore
     */
    onFocus: PropTypes.func,
    /**
     * The short hint displayed in the `input` before the user enters a value.
     */
    placeholder: PropTypes.string,
    /**
     * If `true`, the label is displayed as required and the `input` element is required.
     * @default false
     */
    required: PropTypes.bool,
    /**
     * Number of rows to display when multiline option is set to true.
     */
    rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    /**
     * Render a [`Select`](/material-ui/api/select/) element while passing the Input element to `Select` as `input` parameter.
     * If this option is set you must pass the options of the select as children.
     * @default false
     */
    select: PropTypes.bool,
    /**
     * Props applied to the [`Select`](/material-ui/api/select/) element.
     */
    SelectProps: PropTypes.object,
    /**
     * The size of the component.
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
     */
    type: PropTypes /* @typescript-to-proptypes-ignore */.string,
    /**
     * The value of the `input` element, required for a controlled component.
     */
    value: PropTypes.any,
    /**
     * The variant to use.
     * @default 'outlined'
     */
    variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
  } ;
  var TextField$1 = TextField;

  function getToggleButtonUtilityClass(slot) {
    return generateUtilityClass('MuiToggleButton', slot);
  }
  const toggleButtonClasses = generateUtilityClasses('MuiToggleButton', ['root', 'disabled', 'selected', 'standard', 'primary', 'secondary', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'fullWidth']);
  var toggleButtonClasses$1 = toggleButtonClasses;

  const _excluded$2 = ["children", "className", "color", "disabled", "disableFocusRipple", "fullWidth", "onChange", "onClick", "selected", "size", "value"];
  const useUtilityClasses$1 = ownerState => {
    const {
      classes,
      fullWidth,
      selected,
      disabled,
      size,
      color
    } = ownerState;
    const slots = {
      root: ['root', selected && 'selected', disabled && 'disabled', fullWidth && 'fullWidth', `size${capitalize(size)}`, color]
    };
    return composeClasses(slots, getToggleButtonUtilityClass, classes);
  };
  const ToggleButtonRoot = styled$1(ButtonBase$1, {
    name: 'MuiToggleButton',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [styles.root, styles[`size${capitalize(ownerState.size)}`]];
    }
  })(({
    theme,
    ownerState
  }) => {
    let selectedColor = ownerState.color === 'standard' ? theme.palette.text.primary : theme.palette[ownerState.color].main;
    let selectedColorChannel;
    if (theme.vars) {
      selectedColor = ownerState.color === 'standard' ? theme.vars.palette.text.primary : theme.vars.palette[ownerState.color].main;
      selectedColorChannel = ownerState.color === 'standard' ? theme.vars.palette.text.primaryChannel : theme.vars.palette[ownerState.color].mainChannel;
    }
    return _extends({}, theme.typography.button, {
      borderRadius: (theme.vars || theme).shape.borderRadius,
      padding: 11,
      border: `1px solid ${(theme.vars || theme).palette.divider}`,
      color: (theme.vars || theme).palette.action.active
    }, ownerState.fullWidth && {
      width: '100%'
    }, {
      [`&.${toggleButtonClasses$1.disabled}`]: {
        color: (theme.vars || theme).palette.action.disabled,
        border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`
      },
      '&:hover': {
        textDecoration: 'none',
        // Reset on mouse devices
        backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.text.primary, theme.palette.action.hoverOpacity),
        '@media (hover: none)': {
          backgroundColor: 'transparent'
        }
      },
      [`&.${toggleButtonClasses$1.selected}`]: {
        color: selectedColor,
        backgroundColor: theme.vars ? `rgba(${selectedColorChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(selectedColor, theme.palette.action.selectedOpacity),
        '&:hover': {
          backgroundColor: theme.vars ? `rgba(${selectedColorChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(selectedColor, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
          // Reset on touch devices, it doesn't add specificity
          '@media (hover: none)': {
            backgroundColor: theme.vars ? `rgba(${selectedColorChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(selectedColor, theme.palette.action.selectedOpacity)
          }
        }
      }
    }, ownerState.size === 'small' && {
      padding: 7,
      fontSize: theme.typography.pxToRem(13)
    }, ownerState.size === 'large' && {
      padding: 15,
      fontSize: theme.typography.pxToRem(15)
    });
  });
  const ToggleButton = /*#__PURE__*/React__namespace.forwardRef(function ToggleButton(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiToggleButton'
    });
    const {
        children,
        className,
        color = 'standard',
        disabled = false,
        disableFocusRipple = false,
        fullWidth = false,
        onChange,
        onClick,
        selected,
        size = 'medium',
        value
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$2);
    const ownerState = _extends({}, props, {
      color,
      disabled,
      disableFocusRipple,
      fullWidth,
      size
    });
    const classes = useUtilityClasses$1(ownerState);
    const handleChange = event => {
      if (onClick) {
        onClick(event, value);
        if (event.defaultPrevented) {
          return;
        }
      }
      if (onChange) {
        onChange(event, value);
      }
    };
    return /*#__PURE__*/jsxRuntime_1(ToggleButtonRoot, _extends({
      className: clsx(classes.root, className),
      disabled: disabled,
      focusRipple: !disableFocusRipple,
      ref: ref,
      onClick: handleChange,
      onChange: onChange,
      value: value,
      ownerState: ownerState,
      "aria-pressed": selected
    }, other, {
      children: children
    }));
  });
  ToggleButton.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the button when it is in an active state.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'standard'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['standard', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * If `true`, the component is disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, the  keyboard focus ripple is disabled.
     * @default false
     */
    disableFocusRipple: PropTypes.bool,
    /**
     * If `true`, the ripple effect is disabled.
     *
     * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
     * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
     * @default false
     */
    disableRipple: PropTypes.bool,
    /**
     * If `true`, the button will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * Callback fired when the state changes.
     *
     * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.
     * @param {any} value of the selected button.
     */
    onChange: PropTypes.func,
    /**
     * Callback fired when the button is clicked.
     *
     * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.
     * @param {any} value of the selected button.
     */
    onClick: PropTypes.func,
    /**
     * If `true`, the button is rendered in an active state.
     */
    selected: PropTypes.bool,
    /**
     * The size of the component.
     * The prop defaults to the value inherited from the parent ToggleButtonGroup component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The value to associate with the button when selected in a
     * ToggleButtonGroup.
     */
    value: PropTypes /* @typescript-to-proptypes-ignore */.any.isRequired
  } ;
  var ToggleButton$1 = ToggleButton;

  // Determine if the toggle button value matches, or is contained in, the
  // candidate group value.
  function isValueSelected(value, candidate) {
    if (candidate === undefined || value === undefined) {
      return false;
    }
    if (Array.isArray(candidate)) {
      return candidate.indexOf(value) >= 0;
    }
    return value === candidate;
  }

  function getToggleButtonGroupUtilityClass(slot) {
    return generateUtilityClass('MuiToggleButtonGroup', slot);
  }
  const toggleButtonGroupClasses = generateUtilityClasses('MuiToggleButtonGroup', ['root', 'selected', 'vertical', 'disabled', 'grouped', 'groupedHorizontal', 'groupedVertical', 'fullWidth']);
  var toggleButtonGroupClasses$1 = toggleButtonGroupClasses;

  const _excluded$1 = ["children", "className", "color", "disabled", "exclusive", "fullWidth", "onChange", "orientation", "size", "value"];
  const useUtilityClasses = ownerState => {
    const {
      classes,
      orientation,
      fullWidth,
      disabled
    } = ownerState;
    const slots = {
      root: ['root', orientation === 'vertical' && 'vertical', fullWidth && 'fullWidth'],
      grouped: ['grouped', `grouped${capitalize(orientation)}`, disabled && 'disabled']
    };
    return composeClasses(slots, getToggleButtonGroupUtilityClass, classes);
  };
  const ToggleButtonGroupRoot = styled$1('div', {
    name: 'MuiToggleButtonGroup',
    slot: 'Root',
    overridesResolver: (props, styles) => {
      const {
        ownerState
      } = props;
      return [{
        [`& .${toggleButtonGroupClasses$1.grouped}`]: styles.grouped
      }, {
        [`& .${toggleButtonGroupClasses$1.grouped}`]: styles[`grouped${capitalize(ownerState.orientation)}`]
      }, styles.root, ownerState.orientation === 'vertical' && styles.vertical, ownerState.fullWidth && styles.fullWidth];
    }
  })(({
    ownerState,
    theme
  }) => _extends({
    display: 'inline-flex',
    borderRadius: (theme.vars || theme).shape.borderRadius
  }, ownerState.orientation === 'vertical' && {
    flexDirection: 'column'
  }, ownerState.fullWidth && {
    width: '100%'
  }, {
    [`& .${toggleButtonGroupClasses$1.grouped}`]: _extends({}, ownerState.orientation === 'horizontal' ? {
      '&:not(:first-of-type)': {
        marginLeft: -1,
        borderLeft: '1px solid transparent',
        borderTopLeftRadius: 0,
        borderBottomLeftRadius: 0
      },
      '&:not(:last-of-type)': {
        borderTopRightRadius: 0,
        borderBottomRightRadius: 0
      },
      [`&.${toggleButtonGroupClasses$1.selected} + .${toggleButtonGroupClasses$1.grouped}.${toggleButtonGroupClasses$1.selected}`]: {
        borderLeft: 0,
        marginLeft: 0
      }
    } : {
      '&:not(:first-of-type)': {
        marginTop: -1,
        borderTop: '1px solid transparent',
        borderTopLeftRadius: 0,
        borderTopRightRadius: 0
      },
      '&:not(:last-of-type)': {
        borderBottomLeftRadius: 0,
        borderBottomRightRadius: 0
      },
      [`&.${toggleButtonGroupClasses$1.selected} + .${toggleButtonGroupClasses$1.grouped}.${toggleButtonGroupClasses$1.selected}`]: {
        borderTop: 0,
        marginTop: 0
      }
    })
  }));
  const ToggleButtonGroup = /*#__PURE__*/React__namespace.forwardRef(function ToggleButtonGroup(inProps, ref) {
    const props = useThemeProps({
      props: inProps,
      name: 'MuiToggleButtonGroup'
    });
    const {
        children,
        className,
        color = 'standard',
        disabled = false,
        exclusive = false,
        fullWidth = false,
        onChange,
        orientation = 'horizontal',
        size = 'medium',
        value
      } = props,
      other = _objectWithoutPropertiesLoose(props, _excluded$1);
    const ownerState = _extends({}, props, {
      disabled,
      fullWidth,
      orientation,
      size
    });
    const classes = useUtilityClasses(ownerState);
    const handleChange = (event, buttonValue) => {
      if (!onChange) {
        return;
      }
      const index = value && value.indexOf(buttonValue);
      let newValue;
      if (value && index >= 0) {
        newValue = value.slice();
        newValue.splice(index, 1);
      } else {
        newValue = value ? value.concat(buttonValue) : [buttonValue];
      }
      onChange(event, newValue);
    };
    const handleExclusiveChange = (event, buttonValue) => {
      if (!onChange) {
        return;
      }
      onChange(event, value === buttonValue ? null : buttonValue);
    };
    return /*#__PURE__*/jsxRuntime_1(ToggleButtonGroupRoot, _extends({
      role: "group",
      className: clsx(classes.root, className),
      ref: ref,
      ownerState: ownerState
    }, other, {
      children: React__namespace.Children.map(children, child => {
        if (! /*#__PURE__*/React__namespace.isValidElement(child)) {
          return null;
        }
        {
          if (reactIs_2(child)) {
            console.error(["MUI: The ToggleButtonGroup component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
          }
        }
        return /*#__PURE__*/React__namespace.cloneElement(child, {
          className: clsx(classes.grouped, child.props.className),
          onChange: exclusive ? handleExclusiveChange : handleChange,
          selected: child.props.selected === undefined ? isValueSelected(child.props.value, value) : child.props.selected,
          size: child.props.size || size,
          fullWidth,
          color: child.props.color || color,
          disabled: child.props.disabled || disabled
        });
      })
    }));
  });
  ToggleButtonGroup.propTypes /* remove-proptypes */ = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit the d.ts file and run "yarn proptypes"     |
    // ----------------------------------------------------------------------
    /**
     * The content of the component.
     */
    children: PropTypes.node,
    /**
     * Override or extend the styles applied to the component.
     */
    classes: PropTypes.object,
    /**
     * @ignore
     */
    className: PropTypes.string,
    /**
     * The color of the button when it is selected.
     * It supports both default and custom theme colors, which can be added as shown in the
     * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
     * @default 'standard'
     */
    color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['standard', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
    /**
     * If `true`, the component is disabled. This implies that all ToggleButton children will be disabled.
     * @default false
     */
    disabled: PropTypes.bool,
    /**
     * If `true`, only allow one of the child ToggleButton values to be selected.
     * @default false
     */
    exclusive: PropTypes.bool,
    /**
     * If `true`, the button group will take up the full width of its container.
     * @default false
     */
    fullWidth: PropTypes.bool,
    /**
     * Callback fired when the value changes.
     *
     * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.
     * @param {any} value of the selected buttons. When `exclusive` is true
     * this is a single value; when false an array of selected values. If no value
     * is selected and `exclusive` is true the value is null; when false an empty array.
     */
    onChange: PropTypes.func,
    /**
     * The component orientation (layout flow direction).
     * @default 'horizontal'
     */
    orientation: PropTypes.oneOf(['horizontal', 'vertical']),
    /**
     * The size of the component.
     * @default 'medium'
     */
    size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),
    /**
     * The system prop that allows defining system overrides as well as additional CSS styles.
     */
    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
    /**
     * The currently selected value within the group or an array of selected
     * values when `exclusive` is false.
     *
     * The value must have reference equality with the option in order to be selected.
     */
    value: PropTypes.any
  } ;
  var ToggleButtonGroup$1 = ToggleButtonGroup;

  const _excluded = ["getTrigger", "target"];
  function defaultTrigger(store, options) {
    const {
      disableHysteresis = false,
      threshold = 100,
      target
    } = options;
    const previous = store.current;
    if (target) {
      // Get vertical scroll
      store.current = target.pageYOffset !== undefined ? target.pageYOffset : target.scrollTop;
    }
    if (!disableHysteresis && previous !== undefined) {
      if (store.current < previous) {
        return false;
      }
    }
    return store.current > threshold;
  }
  const defaultTarget = typeof window !== 'undefined' ? window : null;
  function useScrollTrigger(options = {}) {
    const {
        getTrigger = defaultTrigger,
        target = defaultTarget
      } = options,
      other = _objectWithoutPropertiesLoose(options, _excluded);
    const store = React__namespace.useRef();
    const [trigger, setTrigger] = React__namespace.useState(() => getTrigger(store, other));
    React__namespace.useEffect(() => {
      const handleScroll = () => {
        setTrigger(getTrigger(store, _extends({
          target
        }, other)));
      };
      handleScroll(); // Re-evaluate trigger when dependencies change
      target.addEventListener('scroll', handleScroll, {
        passive: true
      });
      return () => {
        target.removeEventListener('scroll', handleScroll, {
          passive: true
        });
      };
      // See Option 3. https://github.com/facebook/react/issues/14476#issuecomment-471199055
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [target, getTrigger, JSON.stringify(other)]);
    return trigger;
  }

  exports.Accordion = Accordion$1;
  exports.AccordionActions = AccordionActions$1;
  exports.AccordionDetails = AccordionDetails$1;
  exports.AccordionSummary = AccordionSummary$1;
  exports.Alert = Alert$1;
  exports.AlertTitle = AlertTitle$1;
  exports.AppBar = AppBar$1;
  exports.Autocomplete = Autocomplete$1;
  exports.Avatar = Avatar$1;
  exports.AvatarGroup = AvatarGroup$1;
  exports.Backdrop = Backdrop$1;
  exports.Badge = Badge$1;
  exports.BottomNavigation = BottomNavigation$1;
  exports.BottomNavigationAction = BottomNavigationAction$1;
  exports.Box = Box$1;
  exports.Breadcrumbs = Breadcrumbs$1;
  exports.Button = Button$1;
  exports.ButtonBase = ButtonBase$1;
  exports.ButtonGroup = ButtonGroup$1;
  exports.ButtonGroupButtonContext = ButtonGroupButtonContext$1;
  exports.ButtonGroupContext = ButtonGroupContext$1;
  exports.Card = Card$1;
  exports.CardActionArea = CardActionArea$1;
  exports.CardActions = CardActions$1;
  exports.CardContent = CardContent$1;
  exports.CardHeader = CardHeader$1;
  exports.CardMedia = CardMedia$1;
  exports.Checkbox = Checkbox$1;
  exports.Chip = Chip$1;
  exports.CircularProgress = CircularProgress$1;
  exports.ClickAwayListener = ClickAwayListener;
  exports.Collapse = Collapse$1;
  exports.Container = Container$1;
  exports.CssBaseline = CssBaseline;
  exports.Dialog = Dialog$1;
  exports.DialogActions = DialogActions$1;
  exports.DialogContent = DialogContent$1;
  exports.DialogContentText = DialogContentText$1;
  exports.DialogTitle = DialogTitle$1;
  exports.Divider = Divider$1;
  exports.Drawer = Drawer$1;
  exports.Experimental_CssVarsProvider = CssVarsProvider;
  exports.Fab = Fab$1;
  exports.Fade = Fade$1;
  exports.FilledInput = FilledInput$1;
  exports.FormControl = FormControl$1;
  exports.FormControlLabel = FormControlLabel$1;
  exports.FormGroup = FormGroup$1;
  exports.FormHelperText = FormHelperText$1;
  exports.FormLabel = FormLabel$1;
  exports.FormLabelRoot = FormLabelRoot;
  exports.GlobalStyles = GlobalStyles;
  exports.Grid = Grid$1;
  exports.Grow = Grow$1;
  exports.Hidden = Hidden;
  exports.Icon = Icon$1;
  exports.IconButton = IconButton$1;
  exports.ImageList = ImageList$1;
  exports.ImageListItem = ImageListItem$1;
  exports.ImageListItemBar = ImageListItemBar$1;
  exports.Input = Input$1;
  exports.InputAdornment = InputAdornment$1;
  exports.InputBase = InputBase$1;
  exports.InputLabel = InputLabel$1;
  exports.LinearProgress = LinearProgress$1;
  exports.Link = Link$1;
  exports.List = List$1;
  exports.ListItem = ListItem$1;
  exports.ListItemAvatar = ListItemAvatar$1;
  exports.ListItemButton = ListItemButton$1;
  exports.ListItemIcon = ListItemIcon$1;
  exports.ListItemSecondaryAction = ListItemSecondaryAction$1;
  exports.ListItemText = ListItemText$1;
  exports.ListSubheader = ListSubheader$1;
  exports.Menu = Menu$1;
  exports.MenuItem = MenuItem$1;
  exports.MenuList = MenuList$1;
  exports.MobileStepper = MobileStepper$1;
  exports.Modal = Modal$1;
  exports.ModalManager = ModalManager;
  exports.NativeSelect = NativeSelect$1;
  exports.NoSsr = NoSsr;
  exports.OutlinedInput = OutlinedInput$1;
  exports.Pagination = Pagination$1;
  exports.PaginationItem = PaginationItem$1;
  exports.Paper = Paper$1;
  exports.Popover = Popover$1;
  exports.PopoverPaper = PopoverPaper;
  exports.PopoverRoot = PopoverRoot;
  exports.Popper = Popper$1;
  exports.Portal = Portal;
  exports.Radio = Radio$1;
  exports.RadioGroup = RadioGroup$1;
  exports.Rating = Rating$1;
  exports.ScopedCssBaseline = ScopedCssBaseline$1;
  exports.Select = Select$1;
  exports.Skeleton = Skeleton$1;
  exports.Slide = Slide$1;
  exports.Slider = Slider$1;
  exports.SliderMark = SliderMark;
  exports.SliderMarkLabel = SliderMarkLabel;
  exports.SliderRail = SliderRail;
  exports.SliderRoot = SliderRoot;
  exports.SliderThumb = SliderThumb;
  exports.SliderTrack = SliderTrack;
  exports.SliderValueLabel = SliderValueLabel;
  exports.Snackbar = Snackbar$1;
  exports.SnackbarContent = SnackbarContent$1;
  exports.SpeedDial = SpeedDial$1;
  exports.SpeedDialAction = SpeedDialAction$1;
  exports.SpeedDialIcon = SpeedDialIcon$1;
  exports.Stack = Stack$1;
  exports.Step = Step$1;
  exports.StepButton = StepButton$1;
  exports.StepConnector = StepConnector$1;
  exports.StepContent = StepContent$1;
  exports.StepContext = StepContext$1;
  exports.StepIcon = StepIcon$1;
  exports.StepLabel = StepLabel$1;
  exports.Stepper = Stepper$1;
  exports.StepperContext = StepperContext$1;
  exports.StyledEngineProvider = StyledEngineProvider;
  exports.SvgIcon = SvgIcon$1;
  exports.SwipeableDrawer = SwipeableDrawer$1;
  exports.Switch = Switch$1;
  exports.THEME_ID = THEME_ID;
  exports.Tab = Tab$1;
  exports.TabScrollButton = TabScrollButton$1;
  exports.Table = Table$1;
  exports.TableBody = TableBody$1;
  exports.TableCell = TableCell$1;
  exports.TableContainer = TableContainer$1;
  exports.TableFooter = TableFooter$1;
  exports.TableHead = TableHead$1;
  exports.TablePagination = TablePagination$1;
  exports.TableRow = TableRow$1;
  exports.TableSortLabel = TableSortLabel$1;
  exports.Tabs = Tabs$1;
  exports.TextField = TextField$1;
  exports.TextareaAutosize = TextareaAutosize;
  exports.ThemeProvider = ThemeProvider;
  exports.ToggleButton = ToggleButton$1;
  exports.ToggleButtonGroup = ToggleButtonGroup$1;
  exports.Toolbar = Toolbar$1;
  exports.Tooltip = Tooltip$1;
  exports.Typography = Typography$1;
  exports.Unstable_Grid2 = Grid2$1;
  exports.Unstable_TrapFocus = FocusTrap;
  exports.Zoom = Zoom$1;
  exports.accordionActionsClasses = accordionActionsClasses$1;
  exports.accordionClasses = accordionClasses$1;
  exports.accordionDetailsClasses = accordionDetailsClasses$1;
  exports.accordionSummaryClasses = accordionSummaryClasses$1;
  exports.adaptV4Theme = adaptV4Theme;
  exports.alertClasses = alertClasses$1;
  exports.alertTitleClasses = alertTitleClasses$1;
  exports.alpha = alpha;
  exports.appBarClasses = appBarClasses$1;
  exports.autocompleteClasses = autocompleteClasses$1;
  exports.avatarClasses = avatarClasses$1;
  exports.avatarGroupClasses = avatarGroupClasses$1;
  exports.backdropClasses = backdropClasses$1;
  exports.badgeClasses = badgeClasses$1;
  exports.bottomNavigationActionClasses = bottomNavigationActionClasses$1;
  exports.bottomNavigationClasses = bottomNavigationClasses$1;
  exports.boxClasses = boxClasses$1;
  exports.breadcrumbsClasses = breadcrumbsClasses$1;
  exports.buttonBaseClasses = buttonBaseClasses$1;
  exports.buttonClasses = buttonClasses$1;
  exports.buttonGroupClasses = buttonGroupClasses$1;
  exports.capitalize = capitalize;
  exports.cardActionAreaClasses = cardActionAreaClasses$1;
  exports.cardActionsClasses = cardActionsClasses$1;
  exports.cardClasses = cardClasses$1;
  exports.cardContentClasses = cardContentClasses$1;
  exports.cardHeaderClasses = cardHeaderClasses$1;
  exports.cardMediaClasses = cardMediaClasses$1;
  exports.checkboxClasses = checkboxClasses$1;
  exports.chipClasses = chipClasses$1;
  exports.circularProgressClasses = circularProgressClasses$1;
  exports.collapseClasses = collapseClasses$1;
  exports.colors = index;
  exports.containerClasses = containerClasses$1;
  exports.createChainedFunction = createChainedFunction;
  exports.createFilterOptions = createFilterOptions;
  exports.createMuiTheme = createMuiTheme;
  exports.createStyles = createStyles;
  exports.createSvgIcon = createSvgIcon;
  exports.createTheme = createTheme;
  exports.css = css;
  exports.darkScrollbar = darkScrollbar;
  exports.darken = darken;
  exports.debounce = debounce$1;
  exports.decomposeColor = decomposeColor;
  exports.deprecatedPropType = deprecatedPropType;
  exports.dialogActionsClasses = dialogActionsClasses$1;
  exports.dialogClasses = dialogClasses$1;
  exports.dialogContentClasses = dialogContentClasses$1;
  exports.dialogContentTextClasses = dialogContentTextClasses$1;
  exports.dialogTitleClasses = dialogTitleClasses$1;
  exports.dividerClasses = dividerClasses$1;
  exports.drawerClasses = drawerClasses$1;
  exports.duration = duration;
  exports.easing = easing;
  exports.emphasize = emphasize;
  exports.experimentalStyled = styled$1;
  exports.experimental_extendTheme = extendTheme;
  exports.experimental_sx = experimental_sx;
  exports.fabClasses = fabClasses$1;
  exports.filledInputClasses = filledInputClasses$1;
  exports.formControlClasses = formControlClasses$1;
  exports.formControlLabelClasses = formControlLabelClasses$1;
  exports.formGroupClasses = formGroupClasses$1;
  exports.formHelperTextClasses = formHelperTextClasses$1;
  exports.formLabelClasses = formLabelClasses$1;
  exports.generateUtilityClass = generateUtilityClass;
  exports.generateUtilityClasses = generateUtilityClasses;
  exports.getAccordionActionsUtilityClass = getAccordionActionsUtilityClass;
  exports.getAccordionDetailsUtilityClass = getAccordionDetailsUtilityClass;
  exports.getAccordionSummaryUtilityClass = getAccordionSummaryUtilityClass;
  exports.getAccordionUtilityClass = getAccordionUtilityClass;
  exports.getAlertTitleUtilityClass = getAlertTitleUtilityClass;
  exports.getAlertUtilityClass = getAlertUtilityClass;
  exports.getAppBarUtilityClass = getAppBarUtilityClass;
  exports.getAutocompleteUtilityClass = getAutocompleteUtilityClass;
  exports.getAvatarGroupUtilityClass = getAvatarGroupUtilityClass;
  exports.getAvatarUtilityClass = getAvatarUtilityClass;
  exports.getBackdropUtilityClass = getBackdropUtilityClass;
  exports.getBadgeUtilityClass = getBadgeUtilityClass;
  exports.getBottomNavigationActionUtilityClass = getBottomNavigationActionUtilityClass;
  exports.getBottomNavigationUtilityClass = getBottomNavigationUtilityClass;
  exports.getBreadcrumbsUtilityClass = getBreadcrumbsUtilityClass;
  exports.getButtonBaseUtilityClass = getButtonBaseUtilityClass;
  exports.getButtonGroupUtilityClass = getButtonGroupUtilityClass;
  exports.getButtonUtilityClass = getButtonUtilityClass;
  exports.getCardActionAreaUtilityClass = getCardActionAreaUtilityClass;
  exports.getCardActionsUtilityClass = getCardActionsUtilityClass;
  exports.getCardContentUtilityClass = getCardContentUtilityClass;
  exports.getCardHeaderUtilityClass = getCardHeaderUtilityClass;
  exports.getCardMediaUtilityClass = getCardMediaUtilityClass;
  exports.getCardUtilityClass = getCardUtilityClass;
  exports.getCheckboxUtilityClass = getCheckboxUtilityClass;
  exports.getChipUtilityClass = getChipUtilityClass;
  exports.getCircularProgressUtilityClass = getCircularProgressUtilityClass;
  exports.getCollapseUtilityClass = getCollapseUtilityClass;
  exports.getContainerUtilityClass = getContainerUtilityClass;
  exports.getContrastRatio = getContrastRatio;
  exports.getDialogActionsUtilityClass = getDialogActionsUtilityClass;
  exports.getDialogContentTextUtilityClass = getDialogContentTextUtilityClass;
  exports.getDialogContentUtilityClass = getDialogContentUtilityClass;
  exports.getDialogTitleUtilityClass = getDialogTitleUtilityClass;
  exports.getDialogUtilityClass = getDialogUtilityClass;
  exports.getDividerUtilityClass = getDividerUtilityClass;
  exports.getDrawerUtilityClass = getDrawerUtilityClass;
  exports.getFabUtilityClass = getFabUtilityClass;
  exports.getFilledInputUtilityClass = getFilledInputUtilityClass;
  exports.getFormControlLabelUtilityClasses = getFormControlLabelUtilityClasses;
  exports.getFormControlUtilityClasses = getFormControlUtilityClasses;
  exports.getFormGroupUtilityClass = getFormGroupUtilityClass;
  exports.getFormHelperTextUtilityClasses = getFormHelperTextUtilityClasses;
  exports.getFormLabelUtilityClasses = getFormLabelUtilityClasses;
  exports.getGrid2UtilityClass = getGrid2UtilityClass;
  exports.getGridUtilityClass = getGridUtilityClass;
  exports.getIconButtonUtilityClass = getIconButtonUtilityClass;
  exports.getIconUtilityClass = getIconUtilityClass;
  exports.getImageListItemBarUtilityClass = getImageListItemBarUtilityClass;
  exports.getImageListItemUtilityClass = getImageListItemUtilityClass;
  exports.getImageListUtilityClass = getImageListUtilityClass;
  exports.getInitColorSchemeScript = getInitColorSchemeScript;
  exports.getInputAdornmentUtilityClass = getInputAdornmentUtilityClass;
  exports.getInputBaseUtilityClass = getInputBaseUtilityClass;
  exports.getInputLabelUtilityClasses = getInputLabelUtilityClasses;
  exports.getInputUtilityClass = getInputUtilityClass;
  exports.getLinearProgressUtilityClass = getLinearProgressUtilityClass;
  exports.getLinkUtilityClass = getLinkUtilityClass;
  exports.getListItemAvatarUtilityClass = getListItemAvatarUtilityClass;
  exports.getListItemButtonUtilityClass = getListItemButtonUtilityClass;
  exports.getListItemIconUtilityClass = getListItemIconUtilityClass;
  exports.getListItemSecondaryActionClassesUtilityClass = getListItemSecondaryActionClassesUtilityClass;
  exports.getListItemTextUtilityClass = getListItemTextUtilityClass;
  exports.getListItemUtilityClass = getListItemUtilityClass;
  exports.getListSubheaderUtilityClass = getListSubheaderUtilityClass;
  exports.getListUtilityClass = getListUtilityClass;
  exports.getLuminance = getLuminance;
  exports.getMenuItemUtilityClass = getMenuItemUtilityClass;
  exports.getMenuUtilityClass = getMenuUtilityClass;
  exports.getMobileStepperUtilityClass = getMobileStepperUtilityClass;
  exports.getModalUtilityClass = getModalUtilityClass;
  exports.getNativeSelectUtilityClasses = getNativeSelectUtilityClasses;
  exports.getOffsetLeft = getOffsetLeft;
  exports.getOffsetTop = getOffsetTop;
  exports.getOutlinedInputUtilityClass = getOutlinedInputUtilityClass;
  exports.getOverlayAlpha = getOverlayAlpha$1;
  exports.getPaginationItemUtilityClass = getPaginationItemUtilityClass;
  exports.getPaginationUtilityClass = getPaginationUtilityClass;
  exports.getPaperUtilityClass = getPaperUtilityClass;
  exports.getPopoverUtilityClass = getPopoverUtilityClass;
  exports.getRadioUtilityClass = getRadioUtilityClass;
  exports.getRatingUtilityClass = getRatingUtilityClass;
  exports.getScopedCssBaselineUtilityClass = getScopedCssBaselineUtilityClass;
  exports.getSelectUtilityClasses = getSelectUtilityClasses;
  exports.getSkeletonUtilityClass = getSkeletonUtilityClass;
  exports.getSliderUtilityClass = getSliderUtilityClass;
  exports.getSnackbarContentUtilityClass = getSnackbarContentUtilityClass;
  exports.getSnackbarUtilityClass = getSnackbarUtilityClass;
  exports.getSpeedDialActionUtilityClass = getSpeedDialActionUtilityClass;
  exports.getSpeedDialIconUtilityClass = getSpeedDialIconUtilityClass;
  exports.getSpeedDialUtilityClass = getSpeedDialUtilityClass;
  exports.getStepButtonUtilityClass = getStepButtonUtilityClass;
  exports.getStepConnectorUtilityClass = getStepConnectorUtilityClass;
  exports.getStepContentUtilityClass = getStepContentUtilityClass;
  exports.getStepIconUtilityClass = getStepIconUtilityClass;
  exports.getStepLabelUtilityClass = getStepLabelUtilityClass;
  exports.getStepUtilityClass = getStepUtilityClass;
  exports.getStepperUtilityClass = getStepperUtilityClass;
  exports.getSvgIconUtilityClass = getSvgIconUtilityClass;
  exports.getSwitchUtilityClass = getSwitchUtilityClass;
  exports.getTabScrollButtonUtilityClass = getTabScrollButtonUtilityClass;
  exports.getTabUtilityClass = getTabUtilityClass;
  exports.getTableBodyUtilityClass = getTableBodyUtilityClass;
  exports.getTableCellUtilityClass = getTableCellUtilityClass;
  exports.getTableContainerUtilityClass = getTableContainerUtilityClass;
  exports.getTableFooterUtilityClass = getTableFooterUtilityClass;
  exports.getTableHeadUtilityClass = getTableHeadUtilityClass;
  exports.getTablePaginationUtilityClass = getTablePaginationUtilityClass;
  exports.getTableRowUtilityClass = getTableRowUtilityClass;
  exports.getTableSortLabelUtilityClass = getTableSortLabelUtilityClass;
  exports.getTableUtilityClass = getTableUtilityClass;
  exports.getTabsUtilityClass = getTabsUtilityClass;
  exports.getTextFieldUtilityClass = getTextFieldUtilityClass;
  exports.getToggleButtonGroupUtilityClass = getToggleButtonGroupUtilityClass;
  exports.getToggleButtonUtilityClass = getToggleButtonUtilityClass;
  exports.getToolbarUtilityClass = getToolbarUtilityClass;
  exports.getTooltipUtilityClass = getTooltipUtilityClass;
  exports.getTouchRippleUtilityClass = getTouchRippleUtilityClass;
  exports.getTypographyUtilityClass = getTypographyUtilityClass;
  exports.grid2Classes = grid2Classes$1;
  exports.gridClasses = gridClasses$1;
  exports.hexToRgb = hexToRgb;
  exports.hslToRgb = hslToRgb;
  exports.iconButtonClasses = iconButtonClasses$1;
  exports.iconClasses = iconClasses$1;
  exports.imageListClasses = imageListClasses$1;
  exports.imageListItemBarClasses = imageListItemBarClasses$1;
  exports.imageListItemClasses = imageListItemClasses$1;
  exports.inputAdornmentClasses = inputAdornmentClasses$1;
  exports.inputBaseClasses = inputBaseClasses$1;
  exports.inputClasses = inputClasses$1;
  exports.inputLabelClasses = inputLabelClasses$1;
  exports.isMuiElement = isMuiElement;
  exports.keyframes = keyframes;
  exports.lighten = lighten;
  exports.linearProgressClasses = linearProgressClasses$1;
  exports.linkClasses = linkClasses$1;
  exports.listClasses = listClasses$1;
  exports.listItemAvatarClasses = listItemAvatarClasses$1;
  exports.listItemButtonClasses = listItemButtonClasses$1;
  exports.listItemClasses = listItemClasses$1;
  exports.listItemIconClasses = listItemIconClasses$1;
  exports.listItemSecondaryActionClasses = listItemSecondaryActionClasses$1;
  exports.listItemTextClasses = listItemTextClasses$1;
  exports.listSubheaderClasses = listSubheaderClasses$1;
  exports.makeStyles = makeStyles;
  exports.menuClasses = menuClasses$1;
  exports.menuItemClasses = menuItemClasses$1;
  exports.mobileStepperClasses = mobileStepperClasses$1;
  exports.modalClasses = modalClasses$1;
  exports.nativeSelectClasses = nativeSelectClasses$1;
  exports.outlinedInputClasses = outlinedInputClasses$1;
  exports.ownerDocument = ownerDocument;
  exports.ownerWindow = ownerWindow;
  exports.paginationClasses = paginationClasses$1;
  exports.paginationItemClasses = paginationItemClasses$1;
  exports.paperClasses = paperClasses$1;
  exports.popoverClasses = popoverClasses$1;
  exports.private_createTypography = createTypography;
  exports.private_excludeVariablesFromRoot = excludeVariablesFromRoot$1;
  exports.radioClasses = radioClasses$1;
  exports.ratingClasses = ratingClasses$1;
  exports.recomposeColor = recomposeColor;
  exports.requirePropFactory = requirePropFactory;
  exports.responsiveFontSizes = responsiveFontSizes;
  exports.rgbToHex = rgbToHex;
  exports.scopedCssBaselineClasses = scopedCssBaselineClasses$1;
  exports.selectClasses = selectClasses$1;
  exports.setRef = setRef;
  exports.shouldSkipGeneratingVar = shouldSkipGeneratingVar;
  exports.skeletonClasses = skeletonClasses$1;
  exports.sliderClasses = sliderClasses$1;
  exports.snackbarClasses = snackbarClasses$1;
  exports.snackbarContentClasses = snackbarContentClasses$1;
  exports.speedDialActionClasses = speedDialActionClasses$1;
  exports.speedDialClasses = speedDialClasses$1;
  exports.speedDialIconClasses = speedDialIconClasses$1;
  exports.stackClasses = stackClasses$1;
  exports.stepButtonClasses = stepButtonClasses$1;
  exports.stepClasses = stepClasses$1;
  exports.stepConnectorClasses = stepConnectorClasses$1;
  exports.stepContentClasses = stepContentClasses$1;
  exports.stepIconClasses = stepIconClasses$1;
  exports.stepLabelClasses = stepLabelClasses$1;
  exports.stepperClasses = stepperClasses$1;
  exports.styled = styled$1;
  exports.svgIconClasses = svgIconClasses$1;
  exports.switchClasses = switchClasses$1;
  exports.tabClasses = tabClasses$1;
  exports.tabScrollButtonClasses = tabScrollButtonClasses$1;
  exports.tableBodyClasses = tableBodyClasses$1;
  exports.tableCellClasses = tableCellClasses$1;
  exports.tableClasses = tableClasses$1;
  exports.tableContainerClasses = tableContainerClasses$1;
  exports.tableFooterClasses = tableFooterClasses$1;
  exports.tableHeadClasses = tableHeadClasses$1;
  exports.tablePaginationClasses = tablePaginationClasses$1;
  exports.tableRowClasses = tableRowClasses$1;
  exports.tableSortLabelClasses = tableSortLabelClasses$1;
  exports.tabsClasses = tabsClasses$1;
  exports.textFieldClasses = textFieldClasses$1;
  exports.toggleButtonClasses = toggleButtonClasses$1;
  exports.toggleButtonGroupClasses = toggleButtonGroupClasses$1;
  exports.toolbarClasses = toolbarClasses$1;
  exports.tooltipClasses = tooltipClasses$1;
  exports.touchRippleClasses = touchRippleClasses$1;
  exports.typographyClasses = typographyClasses$1;
  exports.unstable_ClassNameGenerator = unstable_ClassNameGenerator;
  exports.unstable_composeClasses = composeClasses;
  exports.unstable_createMuiStrictModeTheme = createMuiStrictModeTheme;
  exports.unstable_getUnit = getUnit;
  exports.unstable_toUnitless = toUnitless;
  exports.unstable_useEnhancedEffect = useEnhancedEffect$1;
  exports.unstable_useId = useId;
  exports.unsupportedProp = unsupportedProp;
  exports.useAutocomplete = useAutocomplete;
  exports.useColorScheme = useColorScheme;
  exports.useControlled = useControlled;
  exports.useEventCallback = useEventCallback;
  exports.useForkRef = useForkRef;
  exports.useFormControl = useFormControl;
  exports.useIsFocusVisible = useIsFocusVisible;
  exports.useMediaQuery = useMediaQuery;
  exports.usePagination = usePagination;
  exports.useRadioGroup = useRadioGroup;
  exports.useScrollTrigger = useScrollTrigger;
  exports.useStepContext = useStepContext;
  exports.useStepperContext = useStepperContext;
  exports.useTheme = useTheme;
  exports.useThemeProps = useThemeProps;
  exports.withStyles = withStyles;
  exports.withTheme = withTheme;

}));
