{"version":3,"file":"useIsLoggedIn-5uSuMYPN.js","sources":["../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.min.js","../../../node_modules/use-sync-external-store/with-selector.js","../../../node_modules/react-redux/dist/react-redux.mjs","../../../node_modules/reselect/dist/reselect.mjs","../../../app/javascript/store/currentUser/currentUserSelector.ts","../../../app/javascript/hooks/user/useCurrentUserId.ts","../../../app/javascript/hooks/user/useIsLoggedIn.ts"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var g=require(\"react\");function n(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var p=\"function\"===typeof Object.is?Object.is:n,q=g.useSyncExternalStore,r=g.useRef,t=g.useEffect,u=g.useMemo,v=g.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,h){var c=r(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=u(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==h&&f.hasValue){var b=f.value;if(h(b,a))return k=b}return k=a}b=k;if(p(d,a))return b;var e=l(a);if(void 0!==h&&h(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,h]);var d=q(a,c[0],c[1]);\nt(function(){f.hasValue=!0;f.value=d},[d]);v(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-sync-external-store-with-selector.production.min.js');\n} else {\n module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","// src/index.ts\nimport * as React2 from \"react\";\nimport { useSyncExternalStoreWithSelector as useSyncExternalStoreWithSelector2 } from \"use-sync-external-store/with-selector.js\";\n\n// src/utils/react.ts\nimport * as ReactOriginal from \"react\";\nvar React = (\n // prettier-ignore\n // @ts-ignore\n \"default\" in ReactOriginal ? ReactOriginal[\"default\"] : ReactOriginal\n);\n\n// src/components/Context.ts\nvar ContextKey = Symbol.for(`react-redux-context`);\nvar gT = typeof globalThis !== \"undefined\" ? globalThis : (\n /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n {}\n);\nfunction getContext() {\n if (!React.createContext)\n return {};\n const contextMap = gT[ContextKey] ?? (gT[ContextKey] = /* @__PURE__ */ new Map());\n let realContext = contextMap.get(React.createContext);\n if (!realContext) {\n realContext = React.createContext(\n null\n );\n if (process.env.NODE_ENV !== \"production\") {\n realContext.displayName = \"ReactRedux\";\n }\n contextMap.set(React.createContext, realContext);\n }\n return realContext;\n}\nvar ReactReduxContext = /* @__PURE__ */ getContext();\n\n// src/utils/useSyncExternalStore.ts\nvar notInitialized = () => {\n throw new Error(\"uSES not initialized!\");\n};\n\n// src/hooks/useReduxContext.ts\nfunction createReduxContextHook(context = ReactReduxContext) {\n return function useReduxContext2() {\n const contextValue = React.useContext(context);\n if (process.env.NODE_ENV !== \"production\" && !contextValue) {\n throw new Error(\n \"could not find react-redux context value; please ensure the component is wrapped in a \"\n );\n }\n return contextValue;\n };\n}\nvar useReduxContext = /* @__PURE__ */ createReduxContextHook();\n\n// src/hooks/useSelector.ts\nvar useSyncExternalStoreWithSelector = notInitialized;\nvar initializeUseSelector = (fn) => {\n useSyncExternalStoreWithSelector = fn;\n};\nvar refEquality = (a, b) => a === b;\nfunction createSelectorHook(context = ReactReduxContext) {\n const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);\n const useSelector2 = (selector, equalityFnOrOptions = {}) => {\n const { equalityFn = refEquality, devModeChecks = {} } = typeof equalityFnOrOptions === \"function\" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;\n if (process.env.NODE_ENV !== \"production\") {\n if (!selector) {\n throw new Error(`You must pass a selector to useSelector`);\n }\n if (typeof selector !== \"function\") {\n throw new Error(`You must pass a function as a selector to useSelector`);\n }\n if (typeof equalityFn !== \"function\") {\n throw new Error(\n `You must pass a function as an equality function to useSelector`\n );\n }\n }\n const {\n store,\n subscription,\n getServerState,\n stabilityCheck,\n identityFunctionCheck\n } = useReduxContext2();\n const firstRun = React.useRef(true);\n const wrappedSelector = React.useCallback(\n {\n [selector.name](state) {\n const selected = selector(state);\n if (process.env.NODE_ENV !== \"production\") {\n const {\n identityFunctionCheck: finalIdentityFunctionCheck,\n stabilityCheck: finalStabilityCheck\n } = {\n stabilityCheck,\n identityFunctionCheck,\n ...devModeChecks\n };\n if (finalStabilityCheck === \"always\" || finalStabilityCheck === \"once\" && firstRun.current) {\n const toCompare = selector(state);\n if (!equalityFn(selected, toCompare)) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"Selector \" + (selector.name || \"unknown\") + \" returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization\",\n {\n state,\n selected,\n selected2: toCompare,\n stack\n }\n );\n }\n }\n if (finalIdentityFunctionCheck === \"always\" || finalIdentityFunctionCheck === \"once\" && firstRun.current) {\n if (selected === state) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"Selector \" + (selector.name || \"unknown\") + \" returned the root state when called. This can lead to unnecessary rerenders.\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.\",\n { stack }\n );\n }\n }\n if (firstRun.current)\n firstRun.current = false;\n }\n return selected;\n }\n }[selector.name],\n [selector, stabilityCheck, devModeChecks.stabilityCheck]\n );\n const selectedState = useSyncExternalStoreWithSelector(\n subscription.addNestedSub,\n store.getState,\n getServerState || store.getState,\n wrappedSelector,\n equalityFn\n );\n React.useDebugValue(selectedState);\n return selectedState;\n };\n Object.assign(useSelector2, {\n withTypes: () => useSelector2\n });\n return useSelector2;\n}\nvar useSelector = /* @__PURE__ */ createSelectorHook();\n\n// src/utils/react-is.ts\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.element\");\nvar REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nvar REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nvar REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\");\nvar REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\nvar REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\");\nvar REACT_CONTEXT_TYPE = Symbol.for(\"react.context\");\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for(\"react.server_context\");\nvar REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\");\nvar REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\");\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\");\nvar REACT_MEMO_TYPE = Symbol.for(\"react.memo\");\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\");\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nfunction isValidElementType(type) {\n if (typeof type === \"string\" || typeof type === \"function\") {\n return true;\n }\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE) {\n return true;\n }\n if (typeof type === \"object\" && type !== null) {\n 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\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) {\n return true;\n }\n }\n return false;\n}\nfunction typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n const $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE: {\n const type = object.type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n default: {\n const $$typeofType = type && type.$$typeof;\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n default:\n return $$typeof;\n }\n }\n }\n }\n case REACT_PORTAL_TYPE: {\n return $$typeof;\n }\n }\n }\n return void 0;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/connect/verifySubselectors.ts\nfunction verify(selector, methodName) {\n if (!selector) {\n throw new Error(`Unexpected value for ${methodName} in connect.`);\n } else if (methodName === \"mapStateToProps\" || methodName === \"mapDispatchToProps\") {\n if (!Object.prototype.hasOwnProperty.call(selector, \"dependsOnOwnProps\")) {\n warning(\n `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`\n );\n }\n }\n}\nfunction verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {\n verify(mapStateToProps, \"mapStateToProps\");\n verify(mapDispatchToProps, \"mapDispatchToProps\");\n verify(mergeProps, \"mergeProps\");\n}\n\n// src/connect/selectorFactory.ts\nfunction pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {\n areStatesEqual,\n areOwnPropsEqual,\n areStatePropsEqual\n}) {\n let hasRunAtLeastOnce = false;\n let state;\n let ownProps;\n let stateProps;\n let dispatchProps;\n let mergedProps;\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps)\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps)\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps)\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleNewState() {\n const nextStateProps = mapStateToProps(state, ownProps);\n const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged)\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n function handleSubsequentCalls(nextState, nextOwnProps) {\n const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n const stateChanged = !areStatesEqual(\n nextState,\n state,\n nextOwnProps,\n ownProps\n );\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged)\n return handleNewPropsAndNewState();\n if (propsChanged)\n return handleNewProps();\n if (stateChanged)\n return handleNewState();\n return mergedProps;\n }\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n}\nfunction finalPropsSelectorFactory(dispatch, {\n initMapStateToProps,\n initMapDispatchToProps,\n initMergeProps,\n ...options\n}) {\n const mapStateToProps = initMapStateToProps(dispatch, options);\n const mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n const mergeProps = initMergeProps(dispatch, options);\n if (process.env.NODE_ENV !== \"production\") {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);\n }\n return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}\n\n// src/utils/bindActionCreators.ts\nfunction bindActionCreators(actionCreators, dispatch) {\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));\n }\n }\n return boundActionCreators;\n}\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n const proto = Object.getPrototypeOf(obj);\n if (proto === null)\n return true;\n let baseProto = proto;\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n return proto === baseProto;\n}\n\n// src/utils/verifyPlainObject.ts\nfunction verifyPlainObject(value, displayName, methodName) {\n if (!isPlainObject(value)) {\n warning(\n `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`\n );\n }\n}\n\n// src/connect/wrapMapToProps.ts\nfunction wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch) {\n const constant = getConstant(dispatch);\n function constantSelector() {\n return constant;\n }\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n}\nfunction getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\nfunction wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, { displayName }) {\n const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);\n };\n proxy.dependsOnOwnProps = true;\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n let props = proxy(stateOrDispatch, ownProps);\n if (typeof props === \"function\") {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n if (process.env.NODE_ENV !== \"production\")\n verifyPlainObject(props, displayName, methodName);\n return props;\n };\n return proxy;\n };\n}\n\n// src/connect/invalidArgFactory.ts\nfunction createInvalidArgFactory(arg, name) {\n return (dispatch, options) => {\n throw new Error(\n `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`\n );\n };\n}\n\n// src/connect/mapDispatchToProps.ts\nfunction mapDispatchToPropsFactory(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === \"object\" ? wrapMapToPropsConstant(\n (dispatch) => (\n // @ts-ignore\n bindActionCreators(mapDispatchToProps, dispatch)\n )\n ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({\n dispatch\n })) : typeof mapDispatchToProps === \"function\" ? (\n // @ts-ignore\n wrapMapToPropsFunc(mapDispatchToProps, \"mapDispatchToProps\")\n ) : createInvalidArgFactory(mapDispatchToProps, \"mapDispatchToProps\");\n}\n\n// src/connect/mapStateToProps.ts\nfunction mapStateToPropsFactory(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === \"function\" ? (\n // @ts-ignore\n wrapMapToPropsFunc(mapStateToProps, \"mapStateToProps\")\n ) : createInvalidArgFactory(mapStateToProps, \"mapStateToProps\");\n}\n\n// src/connect/mergeProps.ts\nfunction defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return { ...ownProps, ...stateProps, ...dispatchProps };\n}\nfunction wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {\n let hasRunOnce = false;\n let mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n if (hasRunOnce) {\n if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== \"production\")\n verifyPlainObject(mergedProps, displayName, \"mergeProps\");\n }\n return mergedProps;\n };\n };\n}\nfunction mergePropsFactory(mergeProps) {\n return !mergeProps ? () => defaultMergeProps : typeof mergeProps === \"function\" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, \"mergeProps\");\n}\n\n// src/utils/batch.ts\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\n// src/utils/Subscription.ts\nfunction createListenerCollection() {\n let first = null;\n let last = null;\n return {\n clear() {\n first = null;\n last = null;\n },\n notify() {\n defaultNoopBatch(() => {\n let listener = first;\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get() {\n const listeners = [];\n let listener = first;\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n return listeners;\n },\n subscribe(callback) {\n let isSubscribed = true;\n const listener = last = {\n callback,\n next: null,\n prev: last\n };\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n return function unsubscribe() {\n if (!isSubscribed || first === null)\n return;\n isSubscribed = false;\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\nvar nullListeners = {\n notify() {\n },\n get: () => []\n};\nfunction createSubscription(store, parentSub) {\n let unsubscribe;\n let listeners = nullListeners;\n let subscriptionsAmount = 0;\n let selfSubscribed = false;\n function addNestedSub(listener) {\n trySubscribe();\n const cleanupListener = listeners.subscribe(listener);\n let removed = false;\n return () => {\n if (!removed) {\n removed = true;\n cleanupListener();\n tryUnsubscribe();\n }\n };\n }\n function notifyNestedSubs() {\n listeners.notify();\n }\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n function isSubscribed() {\n return selfSubscribed;\n }\n function trySubscribe() {\n subscriptionsAmount++;\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n function tryUnsubscribe() {\n subscriptionsAmount--;\n if (unsubscribe && subscriptionsAmount === 0) {\n unsubscribe();\n unsubscribe = void 0;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n function trySubscribeSelf() {\n if (!selfSubscribed) {\n selfSubscribed = true;\n trySubscribe();\n }\n }\n function tryUnsubscribeSelf() {\n if (selfSubscribed) {\n selfSubscribed = false;\n tryUnsubscribe();\n }\n }\n const subscription = {\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe: trySubscribeSelf,\n tryUnsubscribe: tryUnsubscribeSelf,\n getListeners: () => listeners\n };\n return subscription;\n}\n\n// src/utils/useIsomorphicLayoutEffect.ts\nvar canUseDOM = !!(typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\");\nvar isReactNative = typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\nvar useIsomorphicLayoutEffect = canUseDOM || isReactNative ? React.useLayoutEffect : React.useEffect;\n\n// src/utils/shallowEqual.ts\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB))\n return true;\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length)\n return false;\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n\n// src/utils/hoistStatics.ts\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n $$typeof: true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n $$typeof: true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {\n [ForwardRef]: FORWARD_REF_STATICS,\n [Memo]: MEMO_STATICS\n};\nfunction getStatics(component) {\n if (isMemo(component)) {\n return MEMO_STATICS;\n }\n return TYPE_STATICS[component[\"$$typeof\"]] || REACT_STATICS;\n}\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent) {\n if (typeof sourceComponent !== \"string\") {\n if (objectPrototype) {\n const inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent);\n }\n }\n let keys = getOwnPropertyNames(sourceComponent);\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n const targetStatics = getStatics(targetComponent);\n const sourceStatics = getStatics(sourceComponent);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n const descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try {\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {\n }\n }\n }\n }\n return targetComponent;\n}\n\n// src/components/connect.tsx\nvar useSyncExternalStore = notInitialized;\nvar initializeConnect = (fn) => {\n useSyncExternalStore = fn;\n};\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\nvar stringifyComponent = (Comp) => {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n}\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n lastWrapperProps.current = wrapperProps;\n renderIsScheduled.current = false;\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {\n if (!shouldHandleStateChanges)\n return () => {\n };\n let didUnsubscribe = false;\n let lastThrownError = null;\n const checkForUpdates = () => {\n if (didUnsubscribe || !isMounted.current) {\n return;\n }\n const latestStoreState = store.getState();\n let newChildProps, error;\n try {\n newChildProps = childPropsSelector(\n latestStoreState,\n lastWrapperProps.current\n );\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n if (!error) {\n lastThrownError = null;\n }\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true;\n additionalSubscribeListener();\n }\n };\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n const unsubscribeWrapper = () => {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n if (lastThrownError) {\n throw lastThrownError;\n }\n };\n return unsubscribeWrapper;\n}\nfunction strictEqual(a, b) {\n return a === b;\n}\nvar hasWarnedAboutDeprecatedPureOption = false;\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual = strictEqual,\n areOwnPropsEqual = shallowEqual,\n areStatePropsEqual = shallowEqual,\n areMergedPropsEqual = shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef = false,\n // the context consumer to use\n context = ReactReduxContext\n} = {}) {\n if (process.env.NODE_ENV !== \"production\") {\n if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {\n hasWarnedAboutDeprecatedPureOption = true;\n warning(\n 'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component'\n );\n }\n }\n const Context = context;\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps = mergePropsFactory(mergeProps);\n const shouldHandleStateChanges = Boolean(mapStateToProps);\n const wrapWithConnect = (WrappedComponent) => {\n if (process.env.NODE_ENV !== \"production\") {\n const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);\n if (!isValid)\n throw new Error(\n `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n WrappedComponent\n )}`\n );\n }\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n const displayName = `Connect(${wrappedComponentName})`;\n const selectorFactoryOptions = {\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n // @ts-ignore\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n };\n function ConnectFunction(props) {\n const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;\n return [props.context, reactReduxForwardedRef2, wrapperProps2];\n }, [props]);\n const ContextToUse = React.useMemo(() => {\n let ResultContext = Context;\n if (propsContext?.Consumer) {\n if (process.env.NODE_ENV !== \"production\") {\n const isValid = /* @__PURE__ */ isContextConsumer(\n // @ts-ignore\n /* @__PURE__ */ React.createElement(propsContext.Consumer, null)\n );\n if (!isValid) {\n throw new Error(\n \"You must pass a valid React context consumer as `props.context`\"\n );\n }\n ResultContext = propsContext;\n }\n }\n return ResultContext;\n }, [propsContext, Context]);\n const contextValue = React.useContext(ContextToUse);\n const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n if (process.env.NODE_ENV !== \"production\" && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\n `Could not find \"store\" in the context of \"${displayName}\". Either wrap the root component in a , or pass a custom React context provider to and the corresponding React context consumer to ${displayName} in connect options.`\n );\n }\n const store = didStoreComeFromProps ? props.store : contextValue.store;\n const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n const childPropsSelector = React.useMemo(() => {\n return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);\n }, [store]);\n const [subscription, notifyNestedSubs] = React.useMemo(() => {\n if (!shouldHandleStateChanges)\n return NO_SUBSCRIPTION_ARRAY;\n const subscription2 = createSubscription(\n store,\n didStoreComeFromProps ? void 0 : contextValue.subscription\n );\n const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);\n return [subscription2, notifyNestedSubs2];\n }, [store, didStoreComeFromProps, contextValue]);\n const overriddenContextValue = React.useMemo(() => {\n if (didStoreComeFromProps) {\n return contextValue;\n }\n return {\n ...contextValue,\n subscription\n };\n }, [didStoreComeFromProps, contextValue, subscription]);\n const lastChildProps = React.useRef(void 0);\n const lastWrapperProps = React.useRef(wrapperProps);\n const childPropsFromStoreUpdate = React.useRef(void 0);\n const renderIsScheduled = React.useRef(false);\n const isMounted = React.useRef(false);\n const latestSubscriptionCallbackError = React.useRef(\n void 0\n );\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n const actualChildPropsSelector = React.useMemo(() => {\n const selector = () => {\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n }\n return childPropsSelector(store.getState(), wrapperProps);\n };\n return selector;\n }, [store, wrapperProps]);\n const subscribeForReact = React.useMemo(() => {\n const subscribe = (reactListener) => {\n if (!subscription) {\n return () => {\n };\n }\n return subscribeUpdates(\n shouldHandleStateChanges,\n store,\n subscription,\n // @ts-ignore\n childPropsSelector,\n lastWrapperProps,\n lastChildProps,\n renderIsScheduled,\n isMounted,\n childPropsFromStoreUpdate,\n notifyNestedSubs,\n reactListener\n );\n };\n return subscribe;\n }, [subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n lastWrapperProps,\n lastChildProps,\n renderIsScheduled,\n wrapperProps,\n childPropsFromStoreUpdate,\n notifyNestedSubs\n ]);\n let actualChildProps;\n try {\n actualChildProps = useSyncExternalStore(\n // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact,\n // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector,\n getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector\n );\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n ;\n err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`;\n }\n throw err;\n }\n useIsomorphicLayoutEffect(() => {\n latestSubscriptionCallbackError.current = void 0;\n childPropsFromStoreUpdate.current = void 0;\n lastChildProps.current = actualChildProps;\n });\n const renderedWrappedComponent = React.useMemo(() => {\n return (\n // @ts-ignore\n /* @__PURE__ */ React.createElement(\n WrappedComponent,\n {\n ...actualChildProps,\n ref: reactReduxForwardedRef\n }\n )\n );\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);\n const renderedChild = React.useMemo(() => {\n if (shouldHandleStateChanges) {\n return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);\n }\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n }\n const _Connect = React.memo(ConnectFunction);\n const Connect = _Connect;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n if (forwardRef) {\n const _forwarded = React.forwardRef(\n function forwardConnectRef(props, ref) {\n return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });\n }\n );\n const forwarded = _forwarded;\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);\n }\n return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);\n };\n return wrapWithConnect;\n}\nvar connect_default = connect;\n\n// src/components/Provider.tsx\nfunction Provider({\n store,\n context,\n children,\n serverState,\n stabilityCheck = \"once\",\n identityFunctionCheck = \"once\"\n}) {\n const contextValue = React.useMemo(() => {\n const subscription = createSubscription(store);\n return {\n store,\n subscription,\n getServerState: serverState ? () => serverState : void 0,\n stabilityCheck,\n identityFunctionCheck\n };\n }, [store, serverState, stabilityCheck, identityFunctionCheck]);\n const previousState = React.useMemo(() => store.getState(), [store]);\n useIsomorphicLayoutEffect(() => {\n const { subscription } = contextValue;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n return () => {\n subscription.tryUnsubscribe();\n subscription.onStateChange = void 0;\n };\n }, [contextValue, previousState]);\n const Context = context || ReactReduxContext;\n return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);\n}\nvar Provider_default = Provider;\n\n// src/hooks/useStore.ts\nfunction createStoreHook(context = ReactReduxContext) {\n const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (\n // @ts-ignore\n createReduxContextHook(context)\n );\n const useStore2 = () => {\n const { store } = useReduxContext2();\n return store;\n };\n Object.assign(useStore2, {\n withTypes: () => useStore2\n });\n return useStore2;\n}\nvar useStore = /* @__PURE__ */ createStoreHook();\n\n// src/hooks/useDispatch.ts\nfunction createDispatchHook(context = ReactReduxContext) {\n const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);\n const useDispatch2 = () => {\n const store = useStore2();\n return store.dispatch;\n };\n Object.assign(useDispatch2, {\n withTypes: () => useDispatch2\n });\n return useDispatch2;\n}\nvar useDispatch = /* @__PURE__ */ createDispatchHook();\n\n// src/exports.ts\nvar batch = defaultNoopBatch;\n\n// src/index.ts\ninitializeUseSelector(useSyncExternalStoreWithSelector2);\ninitializeConnect(React2.useSyncExternalStore);\nexport {\n Provider_default as Provider,\n ReactReduxContext,\n batch,\n connect_default as connect,\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n shallowEqual,\n useDispatch,\n useSelector,\n useStore\n};\n//# sourceMappingURL=react-redux.mjs.map","// src/devModeChecks/identityFunctionCheck.ts\nvar runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {\n if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {\n let isInputSameAsOutput = false;\n try {\n const emptyObject = {};\n if (resultFunc(emptyObject) === emptyObject)\n isInputSameAsOutput = true;\n } catch {\n }\n if (isInputSameAsOutput) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"The result function returned its own inputs without modification. e.g\\n`createSelector([state => state.todos], todos => todos)`\\nThis could lead to inefficient memoization and unnecessary re-renders.\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.\",\n { stack }\n );\n }\n }\n};\n\n// src/devModeChecks/inputStabilityCheck.ts\nvar runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {\n const { memoize, memoizeOptions } = options;\n const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;\n const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);\n const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);\n if (!areInputSelectorResultsEqual) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"An input selector returned a different result when passed same arguments.\\nThis means your output selector will likely run more frequently than intended.\\nAvoid returning a new reference inside your input selector, e.g.\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`\",\n {\n arguments: inputSelectorArgs,\n firstInputs: inputSelectorResults,\n secondInputs: inputSelectorResultsCopy,\n stack\n }\n );\n }\n};\n\n// src/devModeChecks/setGlobalDevModeChecks.ts\nvar globalDevModeChecks = {\n inputStabilityCheck: \"once\",\n identityFunctionCheck: \"once\"\n};\nvar setGlobalDevModeChecks = (devModeChecks) => {\n Object.assign(globalDevModeChecks, devModeChecks);\n};\n\n// src/utils.ts\nvar NOT_FOUND = /* @__PURE__ */ Symbol(\"NOT_FOUND\");\nfunction assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {\n if (typeof func !== \"function\") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {\n if (typeof object !== \"object\") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {\n if (!array.every((item) => typeof item === \"function\")) {\n const itemTypes = array.map(\n (item) => typeof item === \"function\" ? `function ${item.name || \"unnamed\"}()` : typeof item\n ).join(\", \");\n throw new TypeError(`${errorMessage}[${itemTypes}]`);\n }\n}\nvar ensureIsArray = (item) => {\n return Array.isArray(item) ? item : [item];\n};\nfunction getDependencies(createSelectorArgs) {\n const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;\n assertIsArrayOfFunctions(\n dependencies,\n `createSelector expects all input-selectors to be functions, but received the following types: `\n );\n return dependencies;\n}\nfunction collectInputSelectorResults(dependencies, inputSelectorArgs) {\n const inputSelectorResults = [];\n const { length } = dependencies;\n for (let i = 0; i < length; i++) {\n inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));\n }\n return inputSelectorResults;\n}\nvar getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {\n const { identityFunctionCheck, inputStabilityCheck } = {\n ...globalDevModeChecks,\n ...devModeChecks\n };\n return {\n identityFunctionCheck: {\n shouldRun: identityFunctionCheck === \"always\" || identityFunctionCheck === \"once\" && firstRun,\n run: runIdentityFunctionCheck\n },\n inputStabilityCheck: {\n shouldRun: inputStabilityCheck === \"always\" || inputStabilityCheck === \"once\" && firstRun,\n run: runInputStabilityCheck\n }\n };\n};\n\n// src/autotrackMemoize/autotracking.ts\nvar $REVISION = 0;\nvar CURRENT_TRACKER = null;\nvar Cell = class {\n revision = $REVISION;\n _value;\n _lastValue;\n _isEqual = tripleEq;\n constructor(initialValue, isEqual = tripleEq) {\n this._value = this._lastValue = initialValue;\n this._isEqual = isEqual;\n }\n // Whenever a storage value is read, it'll add itself to the current tracker if\n // one exists, entangling its state with that cache.\n get value() {\n CURRENT_TRACKER?.add(this);\n return this._value;\n }\n // Whenever a storage value is updated, we bump the global revision clock,\n // assign the revision for this storage to the new value, _and_ we schedule a\n // rerender. This is important, and it's what makes autotracking _pull_\n // based. We don't actively tell the caches which depend on the storage that\n // anything has happened. Instead, we recompute the caches when needed.\n set value(newValue) {\n if (this.value === newValue)\n return;\n this._value = newValue;\n this.revision = ++$REVISION;\n }\n};\nfunction tripleEq(a, b) {\n return a === b;\n}\nvar TrackingCache = class {\n _cachedValue;\n _cachedRevision = -1;\n _deps = [];\n hits = 0;\n fn;\n constructor(fn) {\n this.fn = fn;\n }\n clear() {\n this._cachedValue = void 0;\n this._cachedRevision = -1;\n this._deps = [];\n this.hits = 0;\n }\n get value() {\n if (this.revision > this._cachedRevision) {\n const { fn } = this;\n const currentTracker = /* @__PURE__ */ new Set();\n const prevTracker = CURRENT_TRACKER;\n CURRENT_TRACKER = currentTracker;\n this._cachedValue = fn();\n CURRENT_TRACKER = prevTracker;\n this.hits++;\n this._deps = Array.from(currentTracker);\n this._cachedRevision = this.revision;\n }\n CURRENT_TRACKER?.add(this);\n return this._cachedValue;\n }\n get revision() {\n return Math.max(...this._deps.map((d) => d.revision), 0);\n }\n};\nfunction getValue(cell) {\n if (!(cell instanceof Cell)) {\n console.warn(\"Not a valid cell! \", cell);\n }\n return cell.value;\n}\nfunction setValue(storage, value) {\n if (!(storage instanceof Cell)) {\n throw new TypeError(\n \"setValue must be passed a tracked store created with `createStorage`.\"\n );\n }\n storage.value = storage._lastValue = value;\n}\nfunction createCell(initialValue, isEqual = tripleEq) {\n return new Cell(initialValue, isEqual);\n}\nfunction createCache(fn) {\n assertIsFunction(\n fn,\n \"the first parameter to `createCache` must be a function\"\n );\n return new TrackingCache(fn);\n}\n\n// src/autotrackMemoize/tracking.ts\nvar neverEq = (a, b) => false;\nfunction createTag() {\n return createCell(null, neverEq);\n}\nfunction dirtyTag(tag, value) {\n setValue(tag, value);\n}\nvar consumeCollection = (node) => {\n let tag = node.collectionTag;\n if (tag === null) {\n tag = node.collectionTag = createTag();\n }\n getValue(tag);\n};\nvar dirtyCollection = (node) => {\n const tag = node.collectionTag;\n if (tag !== null) {\n dirtyTag(tag, null);\n }\n};\n\n// src/autotrackMemoize/proxy.ts\nvar REDUX_PROXY_LABEL = Symbol();\nvar nextId = 0;\nvar proto = Object.getPrototypeOf({});\nvar ObjectTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy(this, objectProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar objectProxyHandler = {\n get(node, key) {\n function calculateResult() {\n const { value } = node;\n const childValue = Reflect.get(value, key);\n if (typeof key === \"symbol\") {\n return childValue;\n }\n if (key in proto) {\n return childValue;\n }\n if (typeof childValue === \"object\" && childValue !== null) {\n let childNode = node.children[key];\n if (childNode === void 0) {\n childNode = node.children[key] = createNode(childValue);\n }\n if (childNode.tag) {\n getValue(childNode.tag);\n }\n return childNode.proxy;\n } else {\n let tag = node.tags[key];\n if (tag === void 0) {\n tag = node.tags[key] = createTag();\n tag.value = childValue;\n }\n getValue(tag);\n return childValue;\n }\n }\n const res = calculateResult();\n return res;\n },\n ownKeys(node) {\n consumeCollection(node);\n return Reflect.ownKeys(node.value);\n },\n getOwnPropertyDescriptor(node, prop) {\n return Reflect.getOwnPropertyDescriptor(node.value, prop);\n },\n has(node, prop) {\n return Reflect.has(node.value, prop);\n }\n};\nvar ArrayTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy([this], arrayProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar arrayProxyHandler = {\n get([node], key) {\n if (key === \"length\") {\n consumeCollection(node);\n }\n return objectProxyHandler.get(node, key);\n },\n ownKeys([node]) {\n return objectProxyHandler.ownKeys(node);\n },\n getOwnPropertyDescriptor([node], prop) {\n return objectProxyHandler.getOwnPropertyDescriptor(node, prop);\n },\n has([node], prop) {\n return objectProxyHandler.has(node, prop);\n }\n};\nfunction createNode(value) {\n if (Array.isArray(value)) {\n return new ArrayTreeNode(value);\n }\n return new ObjectTreeNode(value);\n}\nfunction updateNode(node, newValue) {\n const { value, tags, children } = node;\n node.value = newValue;\n if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {\n dirtyCollection(node);\n } else {\n if (value !== newValue) {\n let oldKeysSize = 0;\n let newKeysSize = 0;\n let anyKeysAdded = false;\n for (const _key in value) {\n oldKeysSize++;\n }\n for (const key in newValue) {\n newKeysSize++;\n if (!(key in value)) {\n anyKeysAdded = true;\n break;\n }\n }\n const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;\n if (isDifferent) {\n dirtyCollection(node);\n }\n }\n }\n for (const key in tags) {\n const childValue = value[key];\n const newChildValue = newValue[key];\n if (childValue !== newChildValue) {\n dirtyCollection(node);\n dirtyTag(tags[key], newChildValue);\n }\n if (typeof newChildValue === \"object\" && newChildValue !== null) {\n delete tags[key];\n }\n }\n for (const key in children) {\n const childNode = children[key];\n const newChildValue = newValue[key];\n const childValue = childNode.value;\n if (childValue === newChildValue) {\n continue;\n } else if (typeof newChildValue === \"object\" && newChildValue !== null) {\n updateNode(childNode, newChildValue);\n } else {\n deleteNode(childNode);\n delete children[key];\n }\n }\n}\nfunction deleteNode(node) {\n if (node.tag) {\n dirtyTag(node.tag, null);\n }\n dirtyCollection(node);\n for (const key in node.tags) {\n dirtyTag(node.tags[key], null);\n }\n for (const key in node.children) {\n deleteNode(node.children[key]);\n }\n}\n\n// src/lruMemoize.ts\nfunction createSingletonCache(equals) {\n let entry;\n return {\n get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n return NOT_FOUND;\n },\n put(key, value) {\n entry = { key, value };\n },\n getEntries() {\n return entry ? [entry] : [];\n },\n clear() {\n entry = void 0;\n }\n };\n}\nfunction createLruCache(maxSize, equals) {\n let entries = [];\n function get(key) {\n const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));\n if (cacheIndex > -1) {\n const entry = entries[cacheIndex];\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n return entry.value;\n }\n return NOT_FOUND;\n }\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n entries.unshift({ key, value });\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n function getEntries() {\n return entries;\n }\n function clear() {\n entries = [];\n }\n return { get, put, getEntries, clear };\n}\nvar referenceEqualityCheck = (a, b) => a === b;\nfunction createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n const { length } = prev;\n for (let i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n return true;\n };\n}\nfunction lruMemoize(func, equalityCheckOrOptions) {\n const providedOptions = typeof equalityCheckOrOptions === \"object\" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };\n const {\n equalityCheck = referenceEqualityCheck,\n maxSize = 1,\n resultEqualityCheck\n } = providedOptions;\n const comparator = createCacheKeyComparator(equalityCheck);\n let resultsCount = 0;\n const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);\n function memoized() {\n let value = cache.get(arguments);\n if (value === NOT_FOUND) {\n value = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const entries = cache.getEntries();\n const matchingEntry = entries.find(\n (entry) => resultEqualityCheck(entry.value, value)\n );\n if (matchingEntry) {\n value = matchingEntry.value;\n resultsCount !== 0 && resultsCount--;\n }\n }\n cache.put(arguments, value);\n }\n return value;\n }\n memoized.clearCache = () => {\n cache.clear();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/autotrackMemoize/autotrackMemoize.ts\nfunction autotrackMemoize(func) {\n const node = createNode(\n []\n );\n let lastArgs = null;\n const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);\n const cache = createCache(() => {\n const res = func.apply(null, node.proxy);\n return res;\n });\n function memoized() {\n if (!shallowEqual(lastArgs, arguments)) {\n updateNode(node, arguments);\n lastArgs = arguments;\n }\n return cache.value;\n }\n memoized.clearCache = () => {\n return cache.clear();\n };\n return memoized;\n}\n\n// src/weakMapMemoize.ts\nvar StrongRef = class {\n constructor(value) {\n this.value = value;\n }\n deref() {\n return this.value;\n }\n};\nvar Ref = typeof WeakRef !== \"undefined\" ? WeakRef : StrongRef;\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nfunction createCacheNode() {\n return {\n s: UNTERMINATED,\n v: void 0,\n o: null,\n p: null\n };\n}\nfunction weakMapMemoize(func, options = {}) {\n let fnNode = createCacheNode();\n const { resultEqualityCheck } = options;\n let lastResult;\n let resultsCount = 0;\n function memoized() {\n let cacheNode = fnNode;\n const { length } = arguments;\n for (let i = 0, l = length; i < l; i++) {\n const arg = arguments[i];\n if (typeof arg === \"function\" || typeof arg === \"object\" && arg !== null) {\n let objectCache = cacheNode.o;\n if (objectCache === null) {\n cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();\n }\n const objectNode = objectCache.get(arg);\n if (objectNode === void 0) {\n cacheNode = createCacheNode();\n objectCache.set(arg, cacheNode);\n } else {\n cacheNode = objectNode;\n }\n } else {\n let primitiveCache = cacheNode.p;\n if (primitiveCache === null) {\n cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();\n }\n const primitiveNode = primitiveCache.get(arg);\n if (primitiveNode === void 0) {\n cacheNode = createCacheNode();\n primitiveCache.set(arg, cacheNode);\n } else {\n cacheNode = primitiveNode;\n }\n }\n }\n const terminatedNode = cacheNode;\n let result;\n if (cacheNode.s === TERMINATED) {\n result = cacheNode.v;\n } else {\n result = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const lastResultValue = lastResult?.deref?.() ?? lastResult;\n if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {\n result = lastResultValue;\n resultsCount !== 0 && resultsCount--;\n }\n const needsWeakRef = typeof result === \"object\" && result !== null || typeof result === \"function\";\n lastResult = needsWeakRef ? new Ref(result) : result;\n }\n }\n terminatedNode.s = TERMINATED;\n terminatedNode.v = result;\n return result;\n }\n memoized.clearCache = () => {\n fnNode = createCacheNode();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/createSelectorCreator.ts\nfunction createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {\n const createSelectorCreatorOptions = typeof memoizeOrOptions === \"function\" ? {\n memoize: memoizeOrOptions,\n memoizeOptions: memoizeOptionsFromArgs\n } : memoizeOrOptions;\n const createSelector2 = (...createSelectorArgs) => {\n let recomputations = 0;\n let dependencyRecomputations = 0;\n let lastResult;\n let directlyPassedOptions = {};\n let resultFunc = createSelectorArgs.pop();\n if (typeof resultFunc === \"object\") {\n directlyPassedOptions = resultFunc;\n resultFunc = createSelectorArgs.pop();\n }\n assertIsFunction(\n resultFunc,\n `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\n );\n const combinedOptions = {\n ...createSelectorCreatorOptions,\n ...directlyPassedOptions\n };\n const {\n memoize,\n memoizeOptions = [],\n argsMemoize = weakMapMemoize,\n argsMemoizeOptions = [],\n devModeChecks = {}\n } = combinedOptions;\n const finalMemoizeOptions = ensureIsArray(memoizeOptions);\n const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);\n const dependencies = getDependencies(createSelectorArgs);\n const memoizedResultFunc = memoize(function recomputationWrapper() {\n recomputations++;\n return resultFunc.apply(\n null,\n arguments\n );\n }, ...finalMemoizeOptions);\n let firstRun = true;\n const selector = argsMemoize(function dependenciesChecker() {\n dependencyRecomputations++;\n const inputSelectorResults = collectInputSelectorResults(\n dependencies,\n arguments\n );\n lastResult = memoizedResultFunc.apply(null, inputSelectorResults);\n if (process.env.NODE_ENV !== \"production\") {\n const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);\n if (identityFunctionCheck.shouldRun) {\n identityFunctionCheck.run(\n resultFunc,\n inputSelectorResults,\n lastResult\n );\n }\n if (inputStabilityCheck.shouldRun) {\n const inputSelectorResultsCopy = collectInputSelectorResults(\n dependencies,\n arguments\n );\n inputStabilityCheck.run(\n { inputSelectorResults, inputSelectorResultsCopy },\n { memoize, memoizeOptions: finalMemoizeOptions },\n arguments\n );\n }\n if (firstRun)\n firstRun = false;\n }\n return lastResult;\n }, ...finalArgsMemoizeOptions);\n return Object.assign(selector, {\n resultFunc,\n memoizedResultFunc,\n dependencies,\n dependencyRecomputations: () => dependencyRecomputations,\n resetDependencyRecomputations: () => {\n dependencyRecomputations = 0;\n },\n lastResult: () => lastResult,\n recomputations: () => recomputations,\n resetRecomputations: () => {\n recomputations = 0;\n },\n memoize,\n argsMemoize\n });\n };\n Object.assign(createSelector2, {\n withTypes: () => createSelector2\n });\n return createSelector2;\n}\nvar createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);\n\n// src/createStructuredSelector.ts\nvar createStructuredSelector = Object.assign(\n (inputSelectorsObject, selectorCreator = createSelector) => {\n assertIsObject(\n inputSelectorsObject,\n `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`\n );\n const inputSelectorKeys = Object.keys(inputSelectorsObject);\n const dependencies = inputSelectorKeys.map(\n (key) => inputSelectorsObject[key]\n );\n const structuredSelector = selectorCreator(\n dependencies,\n (...inputSelectorResults) => {\n return inputSelectorResults.reduce((composition, value, index) => {\n composition[inputSelectorKeys[index]] = value;\n return composition;\n }, {});\n }\n );\n return structuredSelector;\n },\n { withTypes: () => createStructuredSelector }\n);\nexport {\n createSelector,\n createSelectorCreator,\n createStructuredSelector,\n lruMemoize,\n referenceEqualityCheck,\n setGlobalDevModeChecks,\n autotrackMemoize as unstable_autotrackMemoize,\n weakMapMemoize\n};\n//# sourceMappingURL=reselect.mjs.map","import { useSelector } from \"react-redux\";\nimport { createSelector } from \"reselect\";\nimport { RootState } from \"store\";\nimport LikeableType from \"types/LikeableType\";\nimport { PromptSerializersPromptBook } from \"types/serializers\";\nimport UserType, { LibrarianType } from \"types/UserType\";\n\nconst getState = (state: RootState) => state;\n\nexport const getCurrentUserChannel = createSelector(\n getState,\n (state) => state.currentUser\n);\n\nexport const getSession = createSelector(\n getCurrentUserChannel,\n ({ session }) => {\n return session;\n }\n);\n\nexport const getUserId = createSelector(\n getCurrentUserChannel,\n ({ user }) => {\n return user?.id || null;\n }\n);\n\nexport type CurrentUserFilter = (user: UserType) => any;\nexport const getUserWithFilter: (state: any, filter: CurrentUserFilter) => any =\n createSelector(\n getCurrentUserChannel,\n (_, filter: CurrentUserFilter) => filter,\n ({ user }, filter: CurrentUserFilter) => {\n return filter(user || null);\n }\n );\n\n// Match Score\n// Get the currently logged in user's book\nexport const getMatchScore = (bookId: number) =>\n createSelector(getCurrentUserChannel, ({ matchScores }): number | null | undefined => {\n return matchScores ? matchScores[bookId] : null;\n });\nexport function useUserBookMatchScore(bookId: number): number | null | undefined {\n return useSelector(getMatchScore(bookId));\n}\n\n\n// Likes\nexport function likeableKey(likeable: LikeableType): string {\n return `${likeable.objectType.toLowerCase()}-${likeable.id}`;\n}\n// Get the currently logged in user's book\nexport const getLike = (key: string) =>\n createSelector(getCurrentUserChannel, ({ likes }): boolean => {\n return likes ? likes[key] || false : false;\n });\nexport function useIsLiked(likeable: LikeableType): boolean {\n return useSelector(getLike(likeableKey(likeable)));\n}\n\n// Owned Editions\n// Get the currently logged in user's book\nexport const getEditionOwnershipStatus = (editionId: number) =>\n createSelector(getCurrentUserChannel, ({ ownedEditions }): number | null => {\n return ownedEditions ? (ownedEditions[editionId] || null) : null;\n });\nexport function useIsEditionOwnedId(editionId: number): number {\n return useSelector(getEditionOwnershipStatus(editionId));\n}\n\n\n\n// Test if the current user has a specific role\nexport const getCurrentUserHasRole = (role: LibrarianType) =>\n createSelector(getCurrentUserChannel, ({ user }): boolean => {\n if(!user) {\n return false\n }\n return user.librarianRoles.includes(role);\n });\nexport function useCurrentUserRole(role: LibrarianType): boolean {\n return useSelector(getCurrentUserHasRole(role));\n}\n\n// Get all of the current users librarian roles\nexport const getCurrentUserRoles = () =>\n createSelector(getCurrentUserChannel, ({ user }): LibrarianType[] => {\n if(!user) {\n return []\n }\n return user.librarianRoles;\n });\nexport function useCurrentUserRoles(): LibrarianType[] {\n return useSelector(getCurrentUserRoles());\n}\n\n// Prompt Vote\nexport const getPromptAnswer = (promptId: number, bookId: number) =>\n createSelector(getCurrentUserChannel, ({ promptAnswers }): number | null => {\n return promptAnswers ? (promptAnswers[`Prompt-${promptId}-${bookId}`] || null) : null;\n });\nexport function usePromptAnswer(promptBook: PromptSerializersPromptBook): number {\n return useSelector(getPromptAnswer(promptBook.promptId, promptBook.bookId));\n}\n\n// Pinned Prompts\nexport const getPinnedPrompt = (promptId: number) =>\n createSelector(getCurrentUserChannel, ({ pinnedPromptIds }): boolean => {\n return pinnedPromptIds ? pinnedPromptIds.includes(promptId) : false;\n });\nexport function useIsPromptPinned(promptId: number): boolean {\n return useSelector(getPinnedPrompt(promptId));\n}\n\n// Followed Users\nexport const getFollowedUser = (userId: number) =>\n createSelector(getCurrentUserChannel, ({ followedUsers }): boolean => {\n const followingBit = followedUsers ? (followedUsers[userId] || 0) : 0;\n return followingBit === 1 || followingBit === 7; // Follows, or both follows\n });\nexport function useIsFollowing(userId: number): boolean {\n return useSelector(getFollowedUser(userId));\n}\n\nexport const getFollowingUser = (userId: number) =>\n createSelector(getCurrentUserChannel, ({ followedUsers }): boolean => {\n const followingBit = followedUsers ? (followedUsers[userId] || 0) : 0;\n return followingBit === 2 || followingBit === 7; // Follows, or both follows\n });\nexport function useIsFollowedBy(userId: number): boolean {\n return useSelector(getFollowingUser(userId));\n}","import { getUserId } from \"store/currentUser/currentUserSelector\";\nimport { useSelector } from \"react-redux\";\n\nexport default function useCurrentUserId(): number | null {\n return useSelector(getUserId);\n}\n","import useCurrentUserId from \"./useCurrentUserId\";\n\nexport default function useIsLoggedIn() {\n const userId = useCurrentUserId();\n return userId !== null;\n}\n"],"names":["g","require$$0","n","a","b","p","q","r","t","u","v","useSyncExternalStoreWithSelector_production_min","e","l","h","c","f","d","k","m","withSelectorModule","React","ReactOriginal","ReactOriginal[\"default\"]","ContextKey","gT","getContext","contextMap","realContext","ReactReduxContext","notInitialized","createReduxContextHook","context","useReduxContext","useSyncExternalStoreWithSelector","initializeUseSelector","fn","refEquality","createSelectorHook","useReduxContext2","useSelector2","selector","equalityFnOrOptions","equalityFn","devModeChecks","store","subscription","getServerState","stabilityCheck","identityFunctionCheck","wrappedSelector","state","selectedState","useSelector","defaultNoopBatch","callback","createListenerCollection","first","last","listener","listeners","isSubscribed","nullListeners","createSubscription","parentSub","unsubscribe","subscriptionsAmount","selfSubscribed","addNestedSub","trySubscribe","cleanupListener","removed","tryUnsubscribe","notifyNestedSubs","handleChangeWrapper","trySubscribeSelf","tryUnsubscribeSelf","canUseDOM","isReactNative","useIsomorphicLayoutEffect","Provider","children","serverState","contextValue","previousState","Context","Provider_default","createStoreHook","useStore2","useStore","createDispatchHook","useDispatch2","useDispatch","useSyncExternalStoreWithSelector2","assertIsFunction","func","errorMessage","assertIsObject","object","assertIsArrayOfFunctions","array","item","itemTypes","ensureIsArray","getDependencies","createSelectorArgs","dependencies","collectInputSelectorResults","inputSelectorArgs","inputSelectorResults","length","i","StrongRef","value","Ref","UNTERMINATED","TERMINATED","createCacheNode","weakMapMemoize","options","fnNode","resultEqualityCheck","lastResult","resultsCount","memoized","cacheNode","arg","objectCache","objectNode","primitiveCache","primitiveNode","terminatedNode","result","lastResultValue","_a","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","createSelector2","recomputations","dependencyRecomputations","directlyPassedOptions","resultFunc","combinedOptions","memoize","memoizeOptions","argsMemoize","argsMemoizeOptions","finalMemoizeOptions","finalArgsMemoizeOptions","memoizedResultFunc","createSelector","createStructuredSelector","inputSelectorsObject","selectorCreator","inputSelectorKeys","key","composition","index","getState","getCurrentUserChannel","getSession","session","getUserId","user","getUserWithFilter","_","filter","getMatchScore","bookId","matchScores","useUserBookMatchScore","likeableKey","likeable","getLike","likes","useIsLiked","getEditionOwnershipStatus","editionId","ownedEditions","useIsEditionOwnedId","getCurrentUserHasRole","role","useCurrentUserRole","getCurrentUserRoles","useCurrentUserRoles","getPromptAnswer","promptId","promptAnswers","usePromptAnswer","promptBook","getPinnedPrompt","pinnedPromptIds","useIsPromptPinned","getFollowedUser","userId","followedUsers","followingBit","useIsFollowing","getFollowingUser","useIsFollowedBy","useCurrentUserId","useIsLoggedIn"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}