You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					2038 lines
				
				73 KiB
			
		
		
			
		
	
	
					2038 lines
				
				73 KiB
			| 
											3 years ago
										 | (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.ReactRedux = {}, global.React, global.ReactDOM)); | ||
|  | }(this, (function (exports, React, reactDom) { 'use strict'; | ||
|  | 
 | ||
|  | 	function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
|  | 
 | ||
|  | 	var React__default = /*#__PURE__*/_interopDefaultLegacy(React); | ||
|  | 
 | ||
|  | 	function createCommonjsModule(fn, basedir, module) { | ||
|  | 		return module = { | ||
|  | 			path: basedir, | ||
|  | 			exports: {}, | ||
|  | 			require: function (path, base) { | ||
|  | 				return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); | ||
|  | 			} | ||
|  | 		}, fn(module, module.exports), module.exports; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function commonjsRequire () { | ||
|  | 		throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var useSyncExternalStoreShim_development = createCommonjsModule(function (module, exports) { | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  (function() { | ||
|  | 
 | ||
|  | 	/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ | ||
|  | 	if ( | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === | ||
|  | 	    'function' | ||
|  | 	) { | ||
|  | 	  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); | ||
|  | 	} | ||
|  | 	          var React = React__default['default']; | ||
|  | 
 | ||
|  | 	var ReactSharedInternals = React.__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); | ||
|  | 	  } | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * 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
 | ||
|  | 	 */ | ||
|  | 	function is(x, y) { | ||
|  | 	  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
 | ||
|  | 	  ; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var objectIs = typeof Object.is === 'function' ? Object.is : is; | ||
|  | 
 | ||
|  | 	// dispatch for CommonJS interop named imports.
 | ||
|  | 
 | ||
|  | 	var useState = React.useState, | ||
|  | 	    useEffect = React.useEffect, | ||
|  | 	    useLayoutEffect = React.useLayoutEffect, | ||
|  | 	    useDebugValue = React.useDebugValue; | ||
|  | 	var didWarnOld18Alpha = false; | ||
|  | 	var didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works
 | ||
|  | 	// because of a very particular set of implementation details and assumptions
 | ||
|  | 	// -- change any one of them and it will break. The most important assumption
 | ||
|  | 	// is that updates are always synchronous, because concurrent rendering is
 | ||
|  | 	// only available in versions of React that also have a built-in
 | ||
|  | 	// useSyncExternalStore API. And we only use this shim when the built-in API
 | ||
|  | 	// does not exist.
 | ||
|  | 	//
 | ||
|  | 	// Do not assume that the clever hacks used by this hook also work in general.
 | ||
|  | 	// The point of this shim is to replace the need for hacks by other libraries.
 | ||
|  | 
 | ||
|  | 	function useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of
 | ||
|  | 	// React do not expose a way to check if we're hydrating. So users of the shim
 | ||
|  | 	// will need to track that themselves and return the correct value
 | ||
|  | 	// from `getSnapshot`.
 | ||
|  | 	getServerSnapshot) { | ||
|  | 	  { | ||
|  | 	    if (!didWarnOld18Alpha) { | ||
|  | 	      if (React.startTransition !== undefined) { | ||
|  | 	        didWarnOld18Alpha = true; | ||
|  | 
 | ||
|  | 	        error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.'); | ||
|  | 	      } | ||
|  | 	    } | ||
|  | 	  } // Read the current snapshot from the store on every render. Again, this
 | ||
|  | 	  // breaks the rules of React, and only works here because of specific
 | ||
|  | 	  // implementation details, most importantly that updates are
 | ||
|  | 	  // always synchronous.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	  var value = getSnapshot(); | ||
|  | 
 | ||
|  | 	  { | ||
|  | 	    if (!didWarnUncachedGetSnapshot) { | ||
|  | 	      var cachedValue = getSnapshot(); | ||
|  | 
 | ||
|  | 	      if (!objectIs(value, cachedValue)) { | ||
|  | 	        error('The result of getSnapshot should be cached to avoid an infinite loop'); | ||
|  | 
 | ||
|  | 	        didWarnUncachedGetSnapshot = true; | ||
|  | 	      } | ||
|  | 	    } | ||
|  | 	  } // Because updates are synchronous, we don't queue them. Instead we force a
 | ||
|  | 	  // re-render whenever the subscribed state changes by updating an some
 | ||
|  | 	  // arbitrary useState hook. Then, during render, we call getSnapshot to read
 | ||
|  | 	  // the current value.
 | ||
|  | 	  //
 | ||
|  | 	  // Because we don't actually use the state returned by the useState hook, we
 | ||
|  | 	  // can save a bit of memory by storing other stuff in that slot.
 | ||
|  | 	  //
 | ||
|  | 	  // To implement the early bailout, we need to track some things on a mutable
 | ||
|  | 	  // object. Usually, we would put that in a useRef hook, but we can stash it in
 | ||
|  | 	  // our useState hook instead.
 | ||
|  | 	  //
 | ||
|  | 	  // To force a re-render, we call forceUpdate({inst}). That works because the
 | ||
|  | 	  // new object always fails an equality check.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	  var _useState = useState({ | ||
|  | 	    inst: { | ||
|  | 	      value: value, | ||
|  | 	      getSnapshot: getSnapshot | ||
|  | 	    } | ||
|  | 	  }), | ||
|  | 	      inst = _useState[0].inst, | ||
|  | 	      forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated
 | ||
|  | 	  // in the layout phase so we can access it during the tearing check that
 | ||
|  | 	  // happens on subscribe.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	  useLayoutEffect(function () { | ||
|  | 	    inst.value = value; | ||
|  | 	    inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the
 | ||
|  | 	    // commit phase if there was an interleaved mutation. In concurrent mode
 | ||
|  | 	    // this can happen all the time, but even in synchronous mode, an earlier
 | ||
|  | 	    // effect may have mutated the store.
 | ||
|  | 
 | ||
|  | 	    if (checkIfSnapshotChanged(inst)) { | ||
|  | 	      // Force a re-render.
 | ||
|  | 	      forceUpdate({ | ||
|  | 	        inst: inst | ||
|  | 	      }); | ||
|  | 	    } | ||
|  | 	  }, [subscribe, value, getSnapshot]); | ||
|  | 	  useEffect(function () { | ||
|  | 	    // Check for changes right before subscribing. Subsequent changes will be
 | ||
|  | 	    // detected in the subscription handler.
 | ||
|  | 	    if (checkIfSnapshotChanged(inst)) { | ||
|  | 	      // Force a re-render.
 | ||
|  | 	      forceUpdate({ | ||
|  | 	        inst: inst | ||
|  | 	      }); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    var handleStoreChange = function () { | ||
|  | 	      // TODO: Because there is no cross-renderer API for batching updates, it's
 | ||
|  | 	      // up to the consumer of this library to wrap their subscription event
 | ||
|  | 	      // with unstable_batchedUpdates. Should we try to detect when this isn't
 | ||
|  | 	      // the case and print a warning in development?
 | ||
|  | 	      // The store changed. Check if the snapshot changed since the last time we
 | ||
|  | 	      // read from the store.
 | ||
|  | 	      if (checkIfSnapshotChanged(inst)) { | ||
|  | 	        // Force a re-render.
 | ||
|  | 	        forceUpdate({ | ||
|  | 	          inst: inst | ||
|  | 	        }); | ||
|  | 	      } | ||
|  | 	    }; // Subscribe to the store and return a clean-up function.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	    return subscribe(handleStoreChange); | ||
|  | 	  }, [subscribe]); | ||
|  | 	  useDebugValue(value); | ||
|  | 	  return value; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function checkIfSnapshotChanged(inst) { | ||
|  | 	  var latestGetSnapshot = inst.getSnapshot; | ||
|  | 	  var prevValue = inst.value; | ||
|  | 
 | ||
|  | 	  try { | ||
|  | 	    var nextValue = latestGetSnapshot(); | ||
|  | 	    return !objectIs(prevValue, nextValue); | ||
|  | 	  } catch (error) { | ||
|  | 	    return true; | ||
|  | 	  } | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) { | ||
|  | 	  // Note: The shim does not use getServerSnapshot, because pre-18 versions of
 | ||
|  | 	  // React do not expose a way to check if we're hydrating. So users of the shim
 | ||
|  | 	  // will need to track that themselves and return the correct value
 | ||
|  | 	  // from `getSnapshot`.
 | ||
|  | 	  return getSnapshot(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'); | ||
|  | 
 | ||
|  | 	var isServerEnvironment = !canUseDOM; | ||
|  | 
 | ||
|  | 	var shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore; | ||
|  | 	var useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim; | ||
|  | 
 | ||
|  | 	exports.useSyncExternalStore = useSyncExternalStore$2; | ||
|  | 	          /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ | ||
|  | 	if ( | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === | ||
|  | 	    'function' | ||
|  | 	) { | ||
|  | 	  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); | ||
|  | 	} | ||
|  | 	         | ||
|  | 	  })(); | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	var shim = createCommonjsModule(function (module) { | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  module.exports = useSyncExternalStoreShim_development; | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	var withSelector_development = createCommonjsModule(function (module, exports) { | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  (function() { | ||
|  | 
 | ||
|  | 	/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ | ||
|  | 	if ( | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === | ||
|  | 	    'function' | ||
|  | 	) { | ||
|  | 	  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); | ||
|  | 	} | ||
|  | 	          var React = React__default['default']; | ||
|  | 	var shim$1 = shim; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * 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
 | ||
|  | 	 */ | ||
|  | 	function is(x, y) { | ||
|  | 	  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
 | ||
|  | 	  ; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var objectIs = typeof Object.is === 'function' ? Object.is : is; | ||
|  | 
 | ||
|  | 	var useSyncExternalStore = shim$1.useSyncExternalStore; | ||
|  | 
 | ||
|  | 	// for CommonJS interop.
 | ||
|  | 
 | ||
|  | 	var useRef = React.useRef, | ||
|  | 	    useEffect = React.useEffect, | ||
|  | 	    useMemo = React.useMemo, | ||
|  | 	    useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.
 | ||
|  | 
 | ||
|  | 	function useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) { | ||
|  | 	  // Use this to track the rendered snapshot.
 | ||
|  | 	  var instRef = useRef(null); | ||
|  | 	  var inst; | ||
|  | 
 | ||
|  | 	  if (instRef.current === null) { | ||
|  | 	    inst = { | ||
|  | 	      hasValue: false, | ||
|  | 	      value: null | ||
|  | 	    }; | ||
|  | 	    instRef.current = inst; | ||
|  | 	  } else { | ||
|  | 	    inst = instRef.current; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  var _useMemo = useMemo(function () { | ||
|  | 	    // Track the memoized state using closure variables that are local to this
 | ||
|  | 	    // memoized instance of a getSnapshot function. Intentionally not using a
 | ||
|  | 	    // useRef hook, because that state would be shared across all concurrent
 | ||
|  | 	    // copies of the hook/component.
 | ||
|  | 	    var hasMemo = false; | ||
|  | 	    var memoizedSnapshot; | ||
|  | 	    var memoizedSelection; | ||
|  | 
 | ||
|  | 	    var memoizedSelector = function (nextSnapshot) { | ||
|  | 	      if (!hasMemo) { | ||
|  | 	        // The first time the hook is called, there is no memoized result.
 | ||
|  | 	        hasMemo = true; | ||
|  | 	        memoizedSnapshot = nextSnapshot; | ||
|  | 
 | ||
|  | 	        var _nextSelection = selector(nextSnapshot); | ||
|  | 
 | ||
|  | 	        if (isEqual !== undefined) { | ||
|  | 	          // Even if the selector has changed, the currently rendered selection
 | ||
|  | 	          // may be equal to the new selection. We should attempt to reuse the
 | ||
|  | 	          // current value if possible, to preserve downstream memoizations.
 | ||
|  | 	          if (inst.hasValue) { | ||
|  | 	            var currentSelection = inst.value; | ||
|  | 
 | ||
|  | 	            if (isEqual(currentSelection, _nextSelection)) { | ||
|  | 	              memoizedSelection = currentSelection; | ||
|  | 	              return currentSelection; | ||
|  | 	            } | ||
|  | 	          } | ||
|  | 	        } | ||
|  | 
 | ||
|  | 	        memoizedSelection = _nextSelection; | ||
|  | 	        return _nextSelection; | ||
|  | 	      } // We may be able to reuse the previous invocation's result.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	      // We may be able to reuse the previous invocation's result.
 | ||
|  | 	      var prevSnapshot = memoizedSnapshot; | ||
|  | 	      var prevSelection = memoizedSelection; | ||
|  | 
 | ||
|  | 	      if (objectIs(prevSnapshot, nextSnapshot)) { | ||
|  | 	        // The snapshot is the same as last time. Reuse the previous selection.
 | ||
|  | 	        return prevSelection; | ||
|  | 	      } // The snapshot has changed, so we need to compute a new selection.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	      // The snapshot has changed, so we need to compute a new selection.
 | ||
|  | 	      var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data
 | ||
|  | 	      // has changed. If it hasn't, return the previous selection. That signals
 | ||
|  | 	      // to React that the selections are conceptually equal, and we can bail
 | ||
|  | 	      // out of rendering.
 | ||
|  | 
 | ||
|  | 	      // If a custom isEqual function is provided, use that to check if the data
 | ||
|  | 	      // has changed. If it hasn't, return the previous selection. That signals
 | ||
|  | 	      // to React that the selections are conceptually equal, and we can bail
 | ||
|  | 	      // out of rendering.
 | ||
|  | 	      if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) { | ||
|  | 	        return prevSelection; | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      memoizedSnapshot = nextSnapshot; | ||
|  | 	      memoizedSelection = nextSelection; | ||
|  | 	      return nextSelection; | ||
|  | 	    }; // Assigning this to a constant so that Flow knows it can't change.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	    // Assigning this to a constant so that Flow knows it can't change.
 | ||
|  | 	    var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot; | ||
|  | 
 | ||
|  | 	    var getSnapshotWithSelector = function () { | ||
|  | 	      return memoizedSelector(getSnapshot()); | ||
|  | 	    }; | ||
|  | 
 | ||
|  | 	    var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () { | ||
|  | 	      return memoizedSelector(maybeGetServerSnapshot()); | ||
|  | 	    }; | ||
|  | 	    return [getSnapshotWithSelector, getServerSnapshotWithSelector]; | ||
|  | 	  }, [getSnapshot, getServerSnapshot, selector, isEqual]), | ||
|  | 	      getSelection = _useMemo[0], | ||
|  | 	      getServerSelection = _useMemo[1]; | ||
|  | 
 | ||
|  | 	  var value = useSyncExternalStore(subscribe, getSelection, getServerSelection); | ||
|  | 	  useEffect(function () { | ||
|  | 	    inst.hasValue = true; | ||
|  | 	    inst.value = value; | ||
|  | 	  }, [value]); | ||
|  | 	  useDebugValue(value); | ||
|  | 	  return value; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	exports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector; | ||
|  | 	          /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ | ||
|  | 	if ( | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && | ||
|  | 	  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === | ||
|  | 	    'function' | ||
|  | 	) { | ||
|  | 	  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); | ||
|  | 	} | ||
|  | 	         | ||
|  | 	  })(); | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	var withSelector = createCommonjsModule(function (module) { | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  module.exports = withSelector_development; | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	// Default to a dummy "batch" implementation that just runs the callback
 | ||
|  | 	function defaultNoopBatch(callback) { | ||
|  | 	  callback(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	let batch = defaultNoopBatch; // Allow injecting another batching function later
 | ||
|  | 
 | ||
|  | 	const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings
 | ||
|  | 
 | ||
|  | 	const getBatch = () => batch; | ||
|  | 
 | ||
|  | 	const ReactReduxContext = /*#__PURE__*/React.createContext(null); | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  ReactReduxContext.displayName = 'ReactRedux'; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * A hook to access the value of the `ReactReduxContext`. This is a low-level | ||
|  | 	 * hook that you should usually not need to call directly. | ||
|  | 	 * | ||
|  | 	 * @returns {any} the value of the `ReactReduxContext` | ||
|  | 	 * | ||
|  | 	 * @example | ||
|  | 	 * | ||
|  | 	 * import React from 'react' | ||
|  | 	 * import { useReduxContext } from 'react-redux' | ||
|  | 	 * | ||
|  | 	 * export const CounterComponent = () => { | ||
|  | 	 *   const { store } = useReduxContext() | ||
|  | 	 *   return <div>{store.getState()}</div> | ||
|  | 	 * } | ||
|  | 	 */ | ||
|  | 	function useReduxContext() { | ||
|  | 	  const contextValue = React.useContext(ReactReduxContext); | ||
|  | 
 | ||
|  | 	  if (!contextValue) { | ||
|  | 	    throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>'); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return contextValue; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	const notInitialized = () => { | ||
|  | 	  throw new Error('uSES not initialized!'); | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	let useSyncExternalStoreWithSelector = notInitialized; | ||
|  | 	const initializeUseSelector = fn => { | ||
|  | 	  useSyncExternalStoreWithSelector = fn; | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	const refEquality = (a, b) => a === b; | ||
|  | 	/** | ||
|  | 	 * Hook factory, which creates a `useSelector` hook bound to a given context. | ||
|  | 	 * | ||
|  | 	 * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. | ||
|  | 	 * @returns {Function} A `useSelector` hook bound to the specified context. | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 
 | ||
|  | 	function createSelectorHook(context = ReactReduxContext) { | ||
|  | 	  const useReduxContext$1 = context === ReactReduxContext ? useReduxContext : () => React.useContext(context); | ||
|  | 	  return function useSelector(selector, equalityFn = refEquality) { | ||
|  | 	    { | ||
|  | 	      if (!selector) { | ||
|  | 	        throw new Error(`You must pass a selector to useSelector`); | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      if (typeof selector !== 'function') { | ||
|  | 	        throw new Error(`You must pass a function as a selector to useSelector`); | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      if (typeof equalityFn !== 'function') { | ||
|  | 	        throw new Error(`You must pass a function as an equality function to useSelector`); | ||
|  | 	      } | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    const { | ||
|  | 	      store, | ||
|  | 	      subscription, | ||
|  | 	      getServerState | ||
|  | 	    } = useReduxContext$1(); | ||
|  | 	    const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, selector, equalityFn); | ||
|  | 	    React.useDebugValue(selectedState); | ||
|  | 	    return selectedState; | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 	/** | ||
|  | 	 * A hook to access the redux store's state. This hook takes a selector function | ||
|  | 	 * as an argument. The selector is called with the store state. | ||
|  | 	 * | ||
|  | 	 * This hook takes an optional equality comparison function as the second parameter | ||
|  | 	 * that allows you to customize the way the selected state is compared to determine | ||
|  | 	 * whether the component needs to be re-rendered. | ||
|  | 	 * | ||
|  | 	 * @param {Function} selector the selector function | ||
|  | 	 * @param {Function=} equalityFn the function that will be used to determine equality | ||
|  | 	 * | ||
|  | 	 * @returns {any} the selected state | ||
|  | 	 * | ||
|  | 	 * @example | ||
|  | 	 * | ||
|  | 	 * import React from 'react' | ||
|  | 	 * import { useSelector } from 'react-redux' | ||
|  | 	 * | ||
|  | 	 * export const CounterComponent = () => { | ||
|  | 	 *   const counter = useSelector(state => state.counter) | ||
|  | 	 *   return <div>{counter}</div> | ||
|  | 	 * } | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 	const useSelector = /*#__PURE__*/createSelectorHook(); | ||
|  | 
 | ||
|  | 	function _extends() { | ||
|  | 	  _extends = Object.assign || 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 _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; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var reactIs_development$1 = 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; | ||
|  | 	  })(); | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	var reactIs$1 = createCommonjsModule(function (module) { | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  module.exports = reactIs_development$1; | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Copyright 2015, Yahoo! Inc. | ||
|  | 	 * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. | ||
|  | 	 */ | ||
|  | 	var REACT_STATICS = { | ||
|  | 	  childContextTypes: true, | ||
|  | 	  contextType: true, | ||
|  | 	  contextTypes: true, | ||
|  | 	  defaultProps: true, | ||
|  | 	  displayName: true, | ||
|  | 	  getDefaultProps: true, | ||
|  | 	  getDerivedStateFromError: true, | ||
|  | 	  getDerivedStateFromProps: true, | ||
|  | 	  mixins: true, | ||
|  | 	  propTypes: true, | ||
|  | 	  type: true | ||
|  | 	}; | ||
|  | 	var KNOWN_STATICS = { | ||
|  | 	  name: true, | ||
|  | 	  length: true, | ||
|  | 	  prototype: true, | ||
|  | 	  caller: true, | ||
|  | 	  callee: true, | ||
|  | 	  arguments: true, | ||
|  | 	  arity: true | ||
|  | 	}; | ||
|  | 	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$1.ForwardRef] = FORWARD_REF_STATICS; | ||
|  | 	TYPE_STATICS[reactIs$1.Memo] = MEMO_STATICS; | ||
|  | 
 | ||
|  | 	function getStatics(component) { | ||
|  | 	  // React v16.11 and below
 | ||
|  | 	  if (reactIs$1.isMemo(component)) { | ||
|  | 	    return MEMO_STATICS; | ||
|  | 	  } // React v16.12 and above
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var defineProperty = Object.defineProperty; | ||
|  | 	var getOwnPropertyNames = Object.getOwnPropertyNames; | ||
|  | 	var getOwnPropertySymbols = Object.getOwnPropertySymbols; | ||
|  | 	var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; | ||
|  | 	var getPrototypeOf = Object.getPrototypeOf; | ||
|  | 	var objectPrototype = Object.prototype; | ||
|  | 	function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { | ||
|  | 	  if (typeof sourceComponent !== 'string') { | ||
|  | 	    // don't hoist over string (html) components
 | ||
|  | 	    if (objectPrototype) { | ||
|  | 	      var inheritedComponent = getPrototypeOf(sourceComponent); | ||
|  | 
 | ||
|  | 	      if (inheritedComponent && inheritedComponent !== objectPrototype) { | ||
|  | 	        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); | ||
|  | 	      } | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    var keys = getOwnPropertyNames(sourceComponent); | ||
|  | 
 | ||
|  | 	    if (getOwnPropertySymbols) { | ||
|  | 	      keys = keys.concat(getOwnPropertySymbols(sourceComponent)); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    var targetStatics = getStatics(targetComponent); | ||
|  | 	    var sourceStatics = getStatics(sourceComponent); | ||
|  | 
 | ||
|  | 	    for (var i = 0; i < keys.length; ++i) { | ||
|  | 	      var key = keys[i]; | ||
|  | 
 | ||
|  | 	      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { | ||
|  | 	        var descriptor = getOwnPropertyDescriptor(sourceComponent, key); | ||
|  | 
 | ||
|  | 	        try { | ||
|  | 	          // Avoid failures from read-only properties
 | ||
|  | 	          defineProperty(targetComponent, key, descriptor); | ||
|  | 	        } catch (e) {} | ||
|  | 	      } | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return targetComponent; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	var hoistNonReactStatics_cjs = hoistNonReactStatics; | ||
|  | 
 | ||
|  | 	var reactIs_development = 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 = 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; | ||
|  | 	  })(); | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	var reactIs = createCommonjsModule(function (module) { | ||
|  | 
 | ||
|  | 	{ | ||
|  | 	  module.exports = reactIs_development; | ||
|  | 	} | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Prints a warning in the console if it exists. | ||
|  | 	 * | ||
|  | 	 * @param {String} message The warning message. | ||
|  | 	 * @returns {void} | ||
|  | 	 */ | ||
|  | 	function warning(message) { | ||
|  | 	  /* eslint-disable no-console */ | ||
|  | 	  if (typeof console !== 'undefined' && typeof console.error === 'function') { | ||
|  | 	    console.error(message); | ||
|  | 	  } | ||
|  | 	  /* eslint-enable no-console */ | ||
|  | 
 | ||
|  | 
 | ||
|  | 	  try { | ||
|  | 	    // This error was thrown as a convenience so that if you enable
 | ||
|  | 	    // "break on all exceptions" in your console,
 | ||
|  | 	    // it would pause the execution at this line.
 | ||
|  | 	    throw new Error(message); | ||
|  | 	    /* eslint-disable no-empty */ | ||
|  | 	  } catch (e) {} | ||
|  | 	  /* eslint-enable no-empty */ | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function verify(selector, methodName) { | ||
|  | 	  if (!selector) { | ||
|  | 	    throw new Error(`Unexpected value for ${methodName} in connect.`); | ||
|  | 	  } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') { | ||
|  | 	    if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) { | ||
|  | 	      warning(`The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`); | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) { | ||
|  | 	  verify(mapStateToProps, 'mapStateToProps'); | ||
|  | 	  verify(mapDispatchToProps, 'mapDispatchToProps'); | ||
|  | 	  verify(mergeProps, 'mergeProps'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	const _excluded$1 = ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"]; | ||
|  | 	function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, { | ||
|  | 	  areStatesEqual, | ||
|  | 	  areOwnPropsEqual, | ||
|  | 	  areStatePropsEqual | ||
|  | 	}) { | ||
|  | 	  let hasRunAtLeastOnce = false; | ||
|  | 	  let state; | ||
|  | 	  let ownProps; | ||
|  | 	  let stateProps; | ||
|  | 	  let dispatchProps; | ||
|  | 	  let mergedProps; | ||
|  | 
 | ||
|  | 	  function handleFirstCall(firstState, firstOwnProps) { | ||
|  | 	    state = firstState; | ||
|  | 	    ownProps = firstOwnProps; | ||
|  | 	    stateProps = mapStateToProps(state, ownProps); | ||
|  | 	    dispatchProps = mapDispatchToProps(dispatch, ownProps); | ||
|  | 	    mergedProps = mergeProps(stateProps, dispatchProps, ownProps); | ||
|  | 	    hasRunAtLeastOnce = true; | ||
|  | 	    return mergedProps; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function handleNewPropsAndNewState() { | ||
|  | 	    stateProps = mapStateToProps(state, ownProps); | ||
|  | 	    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps); | ||
|  | 	    mergedProps = mergeProps(stateProps, dispatchProps, ownProps); | ||
|  | 	    return mergedProps; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function handleNewProps() { | ||
|  | 	    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps); | ||
|  | 	    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps); | ||
|  | 	    mergedProps = mergeProps(stateProps, dispatchProps, ownProps); | ||
|  | 	    return mergedProps; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function handleNewState() { | ||
|  | 	    const nextStateProps = mapStateToProps(state, ownProps); | ||
|  | 	    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps); | ||
|  | 	    stateProps = nextStateProps; | ||
|  | 	    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps); | ||
|  | 	    return mergedProps; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function handleSubsequentCalls(nextState, nextOwnProps) { | ||
|  | 	    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps); | ||
|  | 	    const stateChanged = !areStatesEqual(nextState, state, nextOwnProps, ownProps); | ||
|  | 	    state = nextState; | ||
|  | 	    ownProps = nextOwnProps; | ||
|  | 	    if (propsChanged && stateChanged) return handleNewPropsAndNewState(); | ||
|  | 	    if (propsChanged) return handleNewProps(); | ||
|  | 	    if (stateChanged) return handleNewState(); | ||
|  | 	    return mergedProps; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return function pureFinalPropsSelector(nextState, nextOwnProps) { | ||
|  | 	    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps); | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 	// TODO: Add more comments
 | ||
|  | 	// The selector returned by selectorFactory will memoize its results,
 | ||
|  | 	// allowing connect's shouldComponentUpdate to return false if final
 | ||
|  | 	// props have not changed.
 | ||
|  | 	function finalPropsSelectorFactory(dispatch, _ref) { | ||
|  | 	  let { | ||
|  | 	    initMapStateToProps, | ||
|  | 	    initMapDispatchToProps, | ||
|  | 	    initMergeProps | ||
|  | 	  } = _ref, | ||
|  | 	      options = _objectWithoutPropertiesLoose(_ref, _excluded$1); | ||
|  | 
 | ||
|  | 	  const mapStateToProps = initMapStateToProps(dispatch, options); | ||
|  | 	  const mapDispatchToProps = initMapDispatchToProps(dispatch, options); | ||
|  | 	  const mergeProps = initMergeProps(dispatch, options); | ||
|  | 
 | ||
|  | 	  { | ||
|  | 	    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function bindActionCreators(actionCreators, dispatch) { | ||
|  | 	  const boundActionCreators = {}; | ||
|  | 
 | ||
|  | 	  for (const key in actionCreators) { | ||
|  | 	    const actionCreator = actionCreators[key]; | ||
|  | 
 | ||
|  | 	    if (typeof actionCreator === 'function') { | ||
|  | 	      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args)); | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return boundActionCreators; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * @param {any} obj The object to inspect. | ||
|  | 	 * @returns {boolean} True if the argument appears to be a plain object. | ||
|  | 	 */ | ||
|  | 	function isPlainObject(obj) { | ||
|  | 	  if (typeof obj !== 'object' || obj === null) return false; | ||
|  | 	  let proto = Object.getPrototypeOf(obj); | ||
|  | 	  if (proto === null) return true; | ||
|  | 	  let baseProto = proto; | ||
|  | 
 | ||
|  | 	  while (Object.getPrototypeOf(baseProto) !== null) { | ||
|  | 	    baseProto = Object.getPrototypeOf(baseProto); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return proto === baseProto; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function verifyPlainObject(value, displayName, methodName) { | ||
|  | 	  if (!isPlainObject(value)) { | ||
|  | 	    warning(`${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`); | ||
|  | 	  } | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function wrapMapToPropsConstant( // * Note:
 | ||
|  | 	//  It seems that the dispatch argument
 | ||
|  | 	//  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)
 | ||
|  | 	//  and a state object in some others (ex: whenMapStateToPropsIsMissing)
 | ||
|  | 	// eslint-disable-next-line no-unused-vars
 | ||
|  | 	getConstant) { | ||
|  | 	  return function initConstantSelector(dispatch) { | ||
|  | 	    const constant = getConstant(dispatch); | ||
|  | 
 | ||
|  | 	    function constantSelector() { | ||
|  | 	      return constant; | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    constantSelector.dependsOnOwnProps = false; | ||
|  | 	    return constantSelector; | ||
|  | 	  }; | ||
|  | 	} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args
 | ||
|  | 	// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine
 | ||
|  | 	// whether mapToProps needs to be invoked when props have changed.
 | ||
|  | 	//
 | ||
|  | 	// A length of one signals that mapToProps does not depend on props from the parent component.
 | ||
|  | 	// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and
 | ||
|  | 	// therefore not reporting its length accurately..
 | ||
|  | 	// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?
 | ||
|  | 
 | ||
|  | 	function getDependsOnOwnProps(mapToProps) { | ||
|  | 	  return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; | ||
|  | 	} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,
 | ||
|  | 	// this function wraps mapToProps in a proxy function which does several things:
 | ||
|  | 	//
 | ||
|  | 	//  * Detects whether the mapToProps function being called depends on props, which
 | ||
|  | 	//    is used by selectorFactory to decide if it should reinvoke on props changes.
 | ||
|  | 	//
 | ||
|  | 	//  * On first call, handles mapToProps if returns another function, and treats that
 | ||
|  | 	//    new function as the true mapToProps for subsequent calls.
 | ||
|  | 	//
 | ||
|  | 	//  * On first call, verifies the first result is a plain object, in order to warn
 | ||
|  | 	//    the developer that their mapToProps function is not returning a valid result.
 | ||
|  | 	//
 | ||
|  | 
 | ||
|  | 	function wrapMapToPropsFunc(mapToProps, methodName) { | ||
|  | 	  return function initProxySelector(dispatch, { | ||
|  | 	    displayName | ||
|  | 	  }) { | ||
|  | 	    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { | ||
|  | 	      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, undefined); | ||
|  | 	    }; // allow detectFactoryAndVerify to get ownProps
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	    proxy.dependsOnOwnProps = true; | ||
|  | 
 | ||
|  | 	    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) { | ||
|  | 	      proxy.mapToProps = mapToProps; | ||
|  | 	      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps); | ||
|  | 	      let props = proxy(stateOrDispatch, ownProps); | ||
|  | 
 | ||
|  | 	      if (typeof props === 'function') { | ||
|  | 	        proxy.mapToProps = props; | ||
|  | 	        proxy.dependsOnOwnProps = getDependsOnOwnProps(props); | ||
|  | 	        props = proxy(stateOrDispatch, ownProps); | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      verifyPlainObject(props, displayName, methodName); | ||
|  | 	      return props; | ||
|  | 	    }; | ||
|  | 
 | ||
|  | 	    return proxy; | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function createInvalidArgFactory(arg, name) { | ||
|  | 	  return (dispatch, options) => { | ||
|  | 	    throw new Error(`Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`); | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function mapDispatchToPropsFactory(mapDispatchToProps) { | ||
|  | 	  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(dispatch => // @ts-ignore
 | ||
|  | 	  bindActionCreators(mapDispatchToProps, dispatch)) : !mapDispatchToProps ? wrapMapToPropsConstant(dispatch => ({ | ||
|  | 	    dispatch | ||
|  | 	  })) : typeof mapDispatchToProps === 'function' ? // @ts-ignore
 | ||
|  | 	  wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function mapStateToPropsFactory(mapStateToProps) { | ||
|  | 	  return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === 'function' ? // @ts-ignore
 | ||
|  | 	  wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : createInvalidArgFactory(mapStateToProps, 'mapStateToProps'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function defaultMergeProps(stateProps, dispatchProps, ownProps) { | ||
|  | 	  // @ts-ignore
 | ||
|  | 	  return _extends({}, ownProps, stateProps, dispatchProps); | ||
|  | 	} | ||
|  | 	function wrapMergePropsFunc(mergeProps) { | ||
|  | 	  return function initMergePropsProxy(dispatch, { | ||
|  | 	    displayName, | ||
|  | 	    areMergedPropsEqual | ||
|  | 	  }) { | ||
|  | 	    let hasRunOnce = false; | ||
|  | 	    let mergedProps; | ||
|  | 	    return function mergePropsProxy(stateProps, dispatchProps, ownProps) { | ||
|  | 	      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps); | ||
|  | 
 | ||
|  | 	      if (hasRunOnce) { | ||
|  | 	        if (!areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps; | ||
|  | 	      } else { | ||
|  | 	        hasRunOnce = true; | ||
|  | 	        mergedProps = nextMergedProps; | ||
|  | 	        verifyPlainObject(mergedProps, displayName, 'mergeProps'); | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      return mergedProps; | ||
|  | 	    }; | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 	function mergePropsFactory(mergeProps) { | ||
|  | 	  return !mergeProps ? () => defaultMergeProps : typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, 'mergeProps'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// well as nesting subscriptions of descendant components, so that we can ensure the
 | ||
|  | 	// ancestor components re-render before descendants
 | ||
|  | 
 | ||
|  | 	function createListenerCollection() { | ||
|  | 	  const batch = getBatch(); | ||
|  | 	  let first = null; | ||
|  | 	  let last = null; | ||
|  | 	  return { | ||
|  | 	    clear() { | ||
|  | 	      first = null; | ||
|  | 	      last = null; | ||
|  | 	    }, | ||
|  | 
 | ||
|  | 	    notify() { | ||
|  | 	      batch(() => { | ||
|  | 	        let listener = first; | ||
|  | 
 | ||
|  | 	        while (listener) { | ||
|  | 	          listener.callback(); | ||
|  | 	          listener = listener.next; | ||
|  | 	        } | ||
|  | 	      }); | ||
|  | 	    }, | ||
|  | 
 | ||
|  | 	    get() { | ||
|  | 	      let listeners = []; | ||
|  | 	      let listener = first; | ||
|  | 
 | ||
|  | 	      while (listener) { | ||
|  | 	        listeners.push(listener); | ||
|  | 	        listener = listener.next; | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      return listeners; | ||
|  | 	    }, | ||
|  | 
 | ||
|  | 	    subscribe(callback) { | ||
|  | 	      let isSubscribed = true; | ||
|  | 	      let listener = last = { | ||
|  | 	        callback, | ||
|  | 	        next: null, | ||
|  | 	        prev: last | ||
|  | 	      }; | ||
|  | 
 | ||
|  | 	      if (listener.prev) { | ||
|  | 	        listener.prev.next = listener; | ||
|  | 	      } else { | ||
|  | 	        first = listener; | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      return function unsubscribe() { | ||
|  | 	        if (!isSubscribed || first === null) return; | ||
|  | 	        isSubscribed = false; | ||
|  | 
 | ||
|  | 	        if (listener.next) { | ||
|  | 	          listener.next.prev = listener.prev; | ||
|  | 	        } else { | ||
|  | 	          last = listener.prev; | ||
|  | 	        } | ||
|  | 
 | ||
|  | 	        if (listener.prev) { | ||
|  | 	          listener.prev.next = listener.next; | ||
|  | 	        } else { | ||
|  | 	          first = listener.next; | ||
|  | 	        } | ||
|  | 	      }; | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	const nullListeners = { | ||
|  | 	  notify() {}, | ||
|  | 
 | ||
|  | 	  get: () => [] | ||
|  | 	}; | ||
|  | 	function createSubscription(store, parentSub) { | ||
|  | 	  let unsubscribe; | ||
|  | 	  let listeners = nullListeners; | ||
|  | 
 | ||
|  | 	  function addNestedSub(listener) { | ||
|  | 	    trySubscribe(); | ||
|  | 	    return listeners.subscribe(listener); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function notifyNestedSubs() { | ||
|  | 	    listeners.notify(); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function handleChangeWrapper() { | ||
|  | 	    if (subscription.onStateChange) { | ||
|  | 	      subscription.onStateChange(); | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function isSubscribed() { | ||
|  | 	    return Boolean(unsubscribe); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function trySubscribe() { | ||
|  | 	    if (!unsubscribe) { | ||
|  | 	      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper); | ||
|  | 	      listeners = createListenerCollection(); | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  function tryUnsubscribe() { | ||
|  | 	    if (unsubscribe) { | ||
|  | 	      unsubscribe(); | ||
|  | 	      unsubscribe = undefined; | ||
|  | 	      listeners.clear(); | ||
|  | 	      listeners = nullListeners; | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  const subscription = { | ||
|  | 	    addNestedSub, | ||
|  | 	    notifyNestedSubs, | ||
|  | 	    handleChangeWrapper, | ||
|  | 	    isSubscribed, | ||
|  | 	    trySubscribe, | ||
|  | 	    tryUnsubscribe, | ||
|  | 	    getListeners: () => listeners | ||
|  | 	  }; | ||
|  | 	  return subscription; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// To get around it, we can conditionally useEffect on the server (no-op) and
 | ||
|  | 	// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store
 | ||
|  | 	// subscription callback always has the selector from the latest render commit
 | ||
|  | 	// available, otherwise a store update may happen between render and the effect,
 | ||
|  | 	// which may cause missed updates; we also must ensure the store subscription
 | ||
|  | 	// is created synchronously, otherwise a store update may occur before the
 | ||
|  | 	// subscription is created and an inconsistent state may be observed
 | ||
|  | 	// Matches logic in React's `shared/ExecutionEnvironment` file
 | ||
|  | 
 | ||
|  | 	const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'); | ||
|  | 	const useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect; | ||
|  | 
 | ||
|  | 	function is(x, y) { | ||
|  | 	  if (x === y) { | ||
|  | 	    return x !== 0 || y !== 0 || 1 / x === 1 / y; | ||
|  | 	  } else { | ||
|  | 	    return x !== x && y !== y; | ||
|  | 	  } | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function shallowEqual(objA, objB) { | ||
|  | 	  if (is(objA, objB)) return true; | ||
|  | 
 | ||
|  | 	  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { | ||
|  | 	    return false; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  const keysA = Object.keys(objA); | ||
|  | 	  const keysB = Object.keys(objB); | ||
|  | 	  if (keysA.length !== keysB.length) return false; | ||
|  | 
 | ||
|  | 	  for (let i = 0; i < keysA.length; i++) { | ||
|  | 	    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { | ||
|  | 	      return false; | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return true; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	const _excluded = ["reactReduxForwardedRef"]; | ||
|  | 	let useSyncExternalStore = notInitialized; | ||
|  | 	const initializeConnect = fn => { | ||
|  | 	  useSyncExternalStore = fn; | ||
|  | 	}; // Define some constant arrays just to avoid re-creating these
 | ||
|  | 	const NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given
 | ||
|  | 	// for logging in an error message
 | ||
|  | 
 | ||
|  | 	const stringifyComponent = Comp => { | ||
|  | 	  try { | ||
|  | 	    return JSON.stringify(Comp); | ||
|  | 	  } catch (err) { | ||
|  | 	    return String(Comp); | ||
|  | 	  } | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	// This is "just" a `useLayoutEffect`, but with two modifications:
 | ||
|  | 	// - we need to fall back to `useEffect` in SSR to avoid annoying warnings
 | ||
|  | 	// - we extract this to a separate function to avoid closing over values
 | ||
|  | 	//   and causing memory leaks
 | ||
|  | 	function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) { | ||
|  | 	  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies); | ||
|  | 	} // Effect callback, extracted: assign the latest props values to refs for later usage
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown,
 | ||
|  | 	childPropsFromStoreUpdate, notifyNestedSubs) { | ||
|  | 	  // We want to capture the wrapper props and child props we used for later comparisons
 | ||
|  | 	  lastWrapperProps.current = wrapperProps; | ||
|  | 	  renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update
 | ||
|  | 
 | ||
|  | 	  if (childPropsFromStoreUpdate.current) { | ||
|  | 	    childPropsFromStoreUpdate.current = null; | ||
|  | 	    notifyNestedSubs(); | ||
|  | 	  } | ||
|  | 	} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,
 | ||
|  | 	// check for updates after dispatched actions, and trigger re-renders.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch<any>,
 | ||
|  | 	additionalSubscribeListener) { | ||
|  | 	  // If we're not subscribed to the store, nothing to do here
 | ||
|  | 	  if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts
 | ||
|  | 
 | ||
|  | 	  let didUnsubscribe = false; | ||
|  | 	  let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component
 | ||
|  | 
 | ||
|  | 	  const checkForUpdates = () => { | ||
|  | 	    if (didUnsubscribe || !isMounted.current) { | ||
|  | 	      // Don't run stale listeners.
 | ||
|  | 	      // Redux doesn't guarantee unsubscriptions happen until next dispatch.
 | ||
|  | 	      return; | ||
|  | 	    } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	    const latestStoreState = store.getState(); | ||
|  | 	    let newChildProps, error; | ||
|  | 
 | ||
|  | 	    try { | ||
|  | 	      // Actually run the selector with the most recent store state and wrapper props
 | ||
|  | 	      // to determine what the child props should be
 | ||
|  | 	      newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current); | ||
|  | 	    } catch (e) { | ||
|  | 	      error = e; | ||
|  | 	      lastThrownError = e; | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if (!error) { | ||
|  | 	      lastThrownError = null; | ||
|  | 	    } // If the child props haven't changed, nothing to do here - cascade the subscription update
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	    if (newChildProps === lastChildProps.current) { | ||
|  | 	      if (!renderIsScheduled.current) { | ||
|  | 	        notifyNestedSubs(); | ||
|  | 	      } | ||
|  | 	    } else { | ||
|  | 	      // Save references to the new child props.  Note that we track the "child props from store update"
 | ||
|  | 	      // as a ref instead of a useState/useReducer because we need a way to determine if that value has
 | ||
|  | 	      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without
 | ||
|  | 	      // forcing another re-render, which we don't want.
 | ||
|  | 	      lastChildProps.current = newChildProps; | ||
|  | 	      childPropsFromStoreUpdate.current = newChildProps; | ||
|  | 	      renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used
 | ||
|  | 	      // Trigger the React `useSyncExternalStore` subscriber
 | ||
|  | 
 | ||
|  | 	      additionalSubscribeListener(); | ||
|  | 	    } | ||
|  | 	  }; // Actually subscribe to the nearest connected ancestor (or store)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	  subscription.onStateChange = checkForUpdates; | ||
|  | 	  subscription.trySubscribe(); // Pull data from the store after first render in case the store has
 | ||
|  | 	  // changed since we began.
 | ||
|  | 
 | ||
|  | 	  checkForUpdates(); | ||
|  | 
 | ||
|  | 	  const unsubscribeWrapper = () => { | ||
|  | 	    didUnsubscribe = true; | ||
|  | 	    subscription.tryUnsubscribe(); | ||
|  | 	    subscription.onStateChange = null; | ||
|  | 
 | ||
|  | 	    if (lastThrownError) { | ||
|  | 	      // It's possible that we caught an error due to a bad mapState function, but the
 | ||
|  | 	      // parent re-rendered without this component and we're about to unmount.
 | ||
|  | 	      // This shouldn't happen as long as we do top-down subscriptions correctly, but
 | ||
|  | 	      // if we ever do those wrong, this throw will surface the error in our tests.
 | ||
|  | 	      // In that case, throw the error from here so it doesn't get lost.
 | ||
|  | 	      throw lastThrownError; | ||
|  | 	    } | ||
|  | 	  }; | ||
|  | 
 | ||
|  | 	  return unsubscribeWrapper; | ||
|  | 	} // Reducer initial state creation for our update reducer
 | ||
|  | 
 | ||
|  | 	function strictEqual(a, b) { | ||
|  | 	  return a === b; | ||
|  | 	} | ||
|  | 	/** | ||
|  | 	 * Infers the type of props that a connector will inject into a component. | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 
 | ||
|  | 	let hasWarnedAboutDeprecatedPureOption = false; | ||
|  | 	/** | ||
|  | 	 * Connects a React component to a Redux store. | ||
|  | 	 * | ||
|  | 	 * - Without arguments, just wraps the component, without changing the behavior / props | ||
|  | 	 * | ||
|  | 	 * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior | ||
|  | 	 * is to override ownProps (as stated in the docs), so what remains is everything that's | ||
|  | 	 * not a state or dispatch prop | ||
|  | 	 * | ||
|  | 	 * - When 3rd param is passed, we don't know if ownProps propagate and whether they | ||
|  | 	 * should be valid component props, because it depends on mergeProps implementation. | ||
|  | 	 * As such, it is the user's responsibility to extend ownProps interface from state or | ||
|  | 	 * dispatch props or both when applicable | ||
|  | 	 * | ||
|  | 	 * @param mapStateToProps A function that extracts values from state | ||
|  | 	 * @param mapDispatchToProps Setup for dispatching actions | ||
|  | 	 * @param mergeProps Optional callback to merge state and dispatch props together | ||
|  | 	 * @param options Options for configuring the connection | ||
|  | 	 * | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 	function connect(mapStateToProps, mapDispatchToProps, mergeProps, { | ||
|  | 	  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.
 | ||
|  | 	  // @ts-ignore
 | ||
|  | 	  pure, | ||
|  | 	  areStatesEqual = strictEqual, | ||
|  | 	  areOwnPropsEqual = shallowEqual, | ||
|  | 	  areStatePropsEqual = shallowEqual, | ||
|  | 	  areMergedPropsEqual = shallowEqual, | ||
|  | 	  // use React's forwardRef to expose a ref of the wrapped component
 | ||
|  | 	  forwardRef = false, | ||
|  | 	  // the context consumer to use
 | ||
|  | 	  context = ReactReduxContext | ||
|  | 	} = {}) { | ||
|  | 	  { | ||
|  | 	    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) { | ||
|  | 	      hasWarnedAboutDeprecatedPureOption = true; | ||
|  | 	      warning('The `pure` option has been removed. `connect` is now always a "pure/memoized" component'); | ||
|  | 	    } | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  const Context = context; | ||
|  | 	  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps); | ||
|  | 	  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps); | ||
|  | 	  const initMergeProps = mergePropsFactory(mergeProps); | ||
|  | 	  const shouldHandleStateChanges = Boolean(mapStateToProps); | ||
|  | 
 | ||
|  | 	  const wrapWithConnect = WrappedComponent => { | ||
|  | 	    if (!reactIs.isValidElementType(WrappedComponent)) { | ||
|  | 	      throw new Error(`You must pass a component to the function returned by connect. Instead received ${stringifyComponent(WrappedComponent)}`); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; | ||
|  | 	    const displayName = `Connect(${wrappedComponentName})`; | ||
|  | 	    const selectorFactoryOptions = { | ||
|  | 	      shouldHandleStateChanges, | ||
|  | 	      displayName, | ||
|  | 	      wrappedComponentName, | ||
|  | 	      WrappedComponent, | ||
|  | 	      // @ts-ignore
 | ||
|  | 	      initMapStateToProps, | ||
|  | 	      // @ts-ignore
 | ||
|  | 	      initMapDispatchToProps, | ||
|  | 	      initMergeProps, | ||
|  | 	      areStatesEqual, | ||
|  | 	      areStatePropsEqual, | ||
|  | 	      areOwnPropsEqual, | ||
|  | 	      areMergedPropsEqual | ||
|  | 	    }; | ||
|  | 
 | ||
|  | 	    function ConnectFunction(props) { | ||
|  | 	      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => { | ||
|  | 	        // Distinguish between actual "data" props that were passed to the wrapper component,
 | ||
|  | 	        // and values needed to control behavior (forwarded refs, alternate context instances).
 | ||
|  | 	        // To maintain the wrapperProps object reference, memoize this destructuring.
 | ||
|  | 	        const { | ||
|  | 	          reactReduxForwardedRef | ||
|  | 	        } = props, | ||
|  | 	              wrapperProps = _objectWithoutPropertiesLoose(props, _excluded); | ||
|  | 
 | ||
|  | 	        return [props.context, reactReduxForwardedRef, wrapperProps]; | ||
|  | 	      }, [props]); | ||
|  | 	      const ContextToUse = React.useMemo(() => { | ||
|  | 	        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.
 | ||
|  | 	        // Memoize the check that determines which context instance we should use.
 | ||
|  | 	        return propsContext && propsContext.Consumer && // @ts-ignore
 | ||
|  | 	        reactIs.isContextConsumer( /*#__PURE__*/React__default['default'].createElement(propsContext.Consumer, null)) ? propsContext : Context; | ||
|  | 	      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available
 | ||
|  | 
 | ||
|  | 	      const contextValue = React.useContext(ContextToUse); // The store _must_ exist as either a prop or in context.
 | ||
|  | 	      // We'll check to see if it _looks_ like a Redux store first.
 | ||
|  | 	      // This allows us to pass through a `store` prop that is just a plain value.
 | ||
|  | 
 | ||
|  | 	      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch); | ||
|  | 	      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store); | ||
|  | 
 | ||
|  | 	      if (!didStoreComeFromProps && !didStoreComeFromContext) { | ||
|  | 	        throw new Error(`Could not find "store" in the context of ` + `"${displayName}". Either wrap the root component in a <Provider>, ` + `or pass a custom React context provider to <Provider> and the corresponding ` + `React context consumer to ${displayName} in connect options.`); | ||
|  | 	      } // Based on the previous check, one of these must be true
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	      const store = didStoreComeFromProps ? props.store : contextValue.store; | ||
|  | 	      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState; | ||
|  | 	      const childPropsSelector = React.useMemo(() => { | ||
|  | 	        // The child props selector needs the store reference as an input.
 | ||
|  | 	        // Re-create this selector whenever the store changes.
 | ||
|  | 	        return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions); | ||
|  | 	      }, [store]); | ||
|  | 	      const [subscription, notifyNestedSubs] = React.useMemo(() => { | ||
|  | 	        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component
 | ||
|  | 	        // connected to the store via props shouldn't use subscription from context, or vice versa.
 | ||
|  | 
 | ||
|  | 	        const subscription = createSubscription(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in
 | ||
|  | 	        // the middle of the notification loop, where `subscription` will then be null. This can
 | ||
|  | 	        // probably be avoided if Subscription's listeners logic is changed to not call listeners
 | ||
|  | 	        // that have been unsubscribed in the  middle of the notification loop.
 | ||
|  | 
 | ||
|  | 	        const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription); | ||
|  | 	        return [subscription, notifyNestedSubs]; | ||
|  | 	      }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary,
 | ||
|  | 	      // and memoize that value to avoid unnecessary context updates.
 | ||
|  | 
 | ||
|  | 	      const overriddenContextValue = React.useMemo(() => { | ||
|  | 	        if (didStoreComeFromProps) { | ||
|  | 	          // This component is directly subscribed to a store from props.
 | ||
|  | 	          // We don't want descendants reading from this store - pass down whatever
 | ||
|  | 	          // the existing context value is from the nearest connected ancestor.
 | ||
|  | 	          return contextValue; | ||
|  | 	        } // Otherwise, put this component's subscription instance into context, so that
 | ||
|  | 	        // connected descendants won't update until after this component is done
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	        return _extends({}, contextValue, { | ||
|  | 	          subscription | ||
|  | 	        }); | ||
|  | 	      }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic
 | ||
|  | 
 | ||
|  | 	      const lastChildProps = React.useRef(); | ||
|  | 	      const lastWrapperProps = React.useRef(wrapperProps); | ||
|  | 	      const childPropsFromStoreUpdate = React.useRef(); | ||
|  | 	      const renderIsScheduled = React.useRef(false); | ||
|  | 	      React.useRef(false); | ||
|  | 	      const isMounted = React.useRef(false); | ||
|  | 	      const latestSubscriptionCallbackError = React.useRef(); | ||
|  | 	      useIsomorphicLayoutEffect(() => { | ||
|  | 	        isMounted.current = true; | ||
|  | 	        return () => { | ||
|  | 	          isMounted.current = false; | ||
|  | 	        }; | ||
|  | 	      }, []); | ||
|  | 	      const actualChildPropsSelector = React.useMemo(() => { | ||
|  | 	        const selector = () => { | ||
|  | 	          // Tricky logic here:
 | ||
|  | 	          // - This render may have been triggered by a Redux store update that produced new child props
 | ||
|  | 	          // - However, we may have gotten new wrapper props after that
 | ||
|  | 	          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.
 | ||
|  | 	          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.
 | ||
|  | 	          // So, we'll use the child props from store update only if the wrapper props are the same as last time.
 | ||
|  | 	          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) { | ||
|  | 	            return childPropsFromStoreUpdate.current; | ||
|  | 	          } // TODO We're reading the store directly in render() here. Bad idea?
 | ||
|  | 	          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.
 | ||
|  | 	          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state
 | ||
|  | 	          // to determine what the child props should be.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	          return childPropsSelector(store.getState(), wrapperProps); | ||
|  | 	        }; | ||
|  | 
 | ||
|  | 	        return selector; | ||
|  | 	      }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns
 | ||
|  | 	      // about useLayoutEffect in SSR, so we try to detect environment and fall back to
 | ||
|  | 	      // just useEffect instead to avoid the warning, since neither will run anyway.
 | ||
|  | 
 | ||
|  | 	      const subscribeForReact = React.useMemo(() => { | ||
|  | 	        const subscribe = reactListener => { | ||
|  | 	          if (!subscription) { | ||
|  | 	            return () => {}; | ||
|  | 	          } | ||
|  | 
 | ||
|  | 	          return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore
 | ||
|  | 	          childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener); | ||
|  | 	        }; | ||
|  | 
 | ||
|  | 	        return subscribe; | ||
|  | 	      }, [subscription]); | ||
|  | 	      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]); | ||
|  | 	      let actualChildProps; | ||
|  | 
 | ||
|  | 	      try { | ||
|  | 	        actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing
 | ||
|  | 	        subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,
 | ||
|  | 	        // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.
 | ||
|  | 	        actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector); | ||
|  | 	      } catch (err) { | ||
|  | 	        if (latestSubscriptionCallbackError.current) { | ||
|  | 	          err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`; | ||
|  | 	        } | ||
|  | 
 | ||
|  | 	        throw err; | ||
|  | 	      } | ||
|  | 
 | ||
|  | 	      useIsomorphicLayoutEffect(() => { | ||
|  | 	        latestSubscriptionCallbackError.current = undefined; | ||
|  | 	        childPropsFromStoreUpdate.current = undefined; | ||
|  | 	        lastChildProps.current = actualChildProps; | ||
|  | 	      }); // Now that all that's done, we can finally try to actually render the child component.
 | ||
|  | 	      // We memoize the elements for the rendered child component as an optimization.
 | ||
|  | 
 | ||
|  | 	      const renderedWrappedComponent = React.useMemo(() => { | ||
|  | 	        return ( | ||
|  | 	          /*#__PURE__*/ | ||
|  | 	          // @ts-ignore
 | ||
|  | 	          React__default['default'].createElement(WrappedComponent, _extends({}, actualChildProps, { | ||
|  | 	            ref: reactReduxForwardedRef | ||
|  | 	          })) | ||
|  | 	        ); | ||
|  | 	      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering
 | ||
|  | 	      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.
 | ||
|  | 
 | ||
|  | 	      const renderedChild = React.useMemo(() => { | ||
|  | 	        if (shouldHandleStateChanges) { | ||
|  | 	          // If this component is subscribed to store updates, we need to pass its own
 | ||
|  | 	          // subscription instance down to our descendants. That means rendering the same
 | ||
|  | 	          // Context instance, and putting a different value into the context.
 | ||
|  | 	          return /*#__PURE__*/React__default['default'].createElement(ContextToUse.Provider, { | ||
|  | 	            value: overriddenContextValue | ||
|  | 	          }, renderedWrappedComponent); | ||
|  | 	        } | ||
|  | 
 | ||
|  | 	        return renderedWrappedComponent; | ||
|  | 	      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]); | ||
|  | 	      return renderedChild; | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    const _Connect = React__default['default'].memo(ConnectFunction); | ||
|  | 
 | ||
|  | 	    // Add a hacky cast to get the right output type
 | ||
|  | 	    const Connect = _Connect; | ||
|  | 	    Connect.WrappedComponent = WrappedComponent; | ||
|  | 	    Connect.displayName = ConnectFunction.displayName = displayName; | ||
|  | 
 | ||
|  | 	    if (forwardRef) { | ||
|  | 	      const _forwarded = React__default['default'].forwardRef(function forwardConnectRef(props, ref) { | ||
|  | 	        // @ts-ignore
 | ||
|  | 	        return /*#__PURE__*/React__default['default'].createElement(Connect, _extends({}, props, { | ||
|  | 	          reactReduxForwardedRef: ref | ||
|  | 	        })); | ||
|  | 	      }); | ||
|  | 
 | ||
|  | 	      const forwarded = _forwarded; | ||
|  | 	      forwarded.displayName = displayName; | ||
|  | 	      forwarded.WrappedComponent = WrappedComponent; | ||
|  | 	      return hoistNonReactStatics_cjs(forwarded, WrappedComponent); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    return hoistNonReactStatics_cjs(Connect, WrappedComponent); | ||
|  | 	  }; | ||
|  | 
 | ||
|  | 	  return wrapWithConnect; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function Provider({ | ||
|  | 	  store, | ||
|  | 	  context, | ||
|  | 	  children, | ||
|  | 	  serverState | ||
|  | 	}) { | ||
|  | 	  const contextValue = React.useMemo(() => { | ||
|  | 	    const subscription = createSubscription(store); | ||
|  | 	    return { | ||
|  | 	      store, | ||
|  | 	      subscription, | ||
|  | 	      getServerState: serverState ? () => serverState : undefined | ||
|  | 	    }; | ||
|  | 	  }, [store, serverState]); | ||
|  | 	  const previousState = React.useMemo(() => store.getState(), [store]); | ||
|  | 	  useIsomorphicLayoutEffect(() => { | ||
|  | 	    const { | ||
|  | 	      subscription | ||
|  | 	    } = contextValue; | ||
|  | 	    subscription.onStateChange = subscription.notifyNestedSubs; | ||
|  | 	    subscription.trySubscribe(); | ||
|  | 
 | ||
|  | 	    if (previousState !== store.getState()) { | ||
|  | 	      subscription.notifyNestedSubs(); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    return () => { | ||
|  | 	      subscription.tryUnsubscribe(); | ||
|  | 	      subscription.onStateChange = undefined; | ||
|  | 	    }; | ||
|  | 	  }, [contextValue, previousState]); | ||
|  | 	  const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype
 | ||
|  | 
 | ||
|  | 	  return /*#__PURE__*/React__default['default'].createElement(Context.Provider, { | ||
|  | 	    value: contextValue | ||
|  | 	  }, children); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Hook factory, which creates a `useStore` hook bound to a given context. | ||
|  | 	 * | ||
|  | 	 * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. | ||
|  | 	 * @returns {Function} A `useStore` hook bound to the specified context. | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 	function createStoreHook(context = ReactReduxContext) { | ||
|  | 	  const useReduxContext$1 = // @ts-ignore
 | ||
|  | 	  context === ReactReduxContext ? useReduxContext : () => React.useContext(context); | ||
|  | 	  return function useStore() { | ||
|  | 	    const { | ||
|  | 	      store | ||
|  | 	    } = useReduxContext$1(); // @ts-ignore
 | ||
|  | 
 | ||
|  | 	    return store; | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 	/** | ||
|  | 	 * A hook to access the redux store. | ||
|  | 	 * | ||
|  | 	 * @returns {any} the redux store | ||
|  | 	 * | ||
|  | 	 * @example | ||
|  | 	 * | ||
|  | 	 * import React from 'react' | ||
|  | 	 * import { useStore } from 'react-redux' | ||
|  | 	 * | ||
|  | 	 * export const ExampleComponent = () => { | ||
|  | 	 *   const store = useStore() | ||
|  | 	 *   return <div>{store.getState()}</div> | ||
|  | 	 * } | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 	const useStore = /*#__PURE__*/createStoreHook(); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Hook factory, which creates a `useDispatch` hook bound to a given context. | ||
|  | 	 * | ||
|  | 	 * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. | ||
|  | 	 * @returns {Function} A `useDispatch` hook bound to the specified context. | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 	function createDispatchHook(context = ReactReduxContext) { | ||
|  | 	  const useStore$1 = // @ts-ignore
 | ||
|  | 	  context === ReactReduxContext ? useStore : createStoreHook(context); | ||
|  | 	  return function useDispatch() { | ||
|  | 	    const store = useStore$1(); // @ts-ignore
 | ||
|  | 
 | ||
|  | 	    return store.dispatch; | ||
|  | 	  }; | ||
|  | 	} | ||
|  | 	/** | ||
|  | 	 * A hook to access the redux `dispatch` function. | ||
|  | 	 * | ||
|  | 	 * @returns {any|function} redux store's `dispatch` function | ||
|  | 	 * | ||
|  | 	 * @example | ||
|  | 	 * | ||
|  | 	 * import React, { useCallback } from 'react' | ||
|  | 	 * import { useDispatch } from 'react-redux' | ||
|  | 	 * | ||
|  | 	 * export const CounterComponent = ({ value }) => { | ||
|  | 	 *   const dispatch = useDispatch() | ||
|  | 	 *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), []) | ||
|  | 	 *   return ( | ||
|  | 	 *     <div> | ||
|  | 	 *       <span>{value}</span> | ||
|  | 	 *       <button onClick={increaseCounter}>Increase counter</button> | ||
|  | 	 *     </div> | ||
|  | 	 *   ) | ||
|  | 	 * } | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 	const useDispatch = /*#__PURE__*/createDispatchHook(); | ||
|  | 
 | ||
|  | 	// The primary entry point assumes we're working with standard ReactDOM/RN, but
 | ||
|  | 	initializeUseSelector(withSelector.useSyncExternalStoreWithSelector); | ||
|  | 	initializeConnect(shim.useSyncExternalStore); // Enable batched updates in our subscriptions for use
 | ||
|  | 	// with standard React renderers (ReactDOM, React Native)
 | ||
|  | 
 | ||
|  | 	setBatch(reactDom.unstable_batchedUpdates); | ||
|  | 
 | ||
|  | 	Object.defineProperty(exports, 'batch', { | ||
|  | 		enumerable: true, | ||
|  | 		get: function () { | ||
|  | 			return reactDom.unstable_batchedUpdates; | ||
|  | 		} | ||
|  | 	}); | ||
|  | 	exports.Provider = Provider; | ||
|  | 	exports.ReactReduxContext = ReactReduxContext; | ||
|  | 	exports.connect = connect; | ||
|  | 	exports.createDispatchHook = createDispatchHook; | ||
|  | 	exports.createSelectorHook = createSelectorHook; | ||
|  | 	exports.createStoreHook = createStoreHook; | ||
|  | 	exports.shallowEqual = shallowEqual; | ||
|  | 	exports.useDispatch = useDispatch; | ||
|  | 	exports.useSelector = useSelector; | ||
|  | 	exports.useStore = useStore; | ||
|  | 
 | ||
|  | 	Object.defineProperty(exports, '__esModule', { value: true }); | ||
|  | 
 | ||
|  | }))); |