{
  "version": 3,
  "sources": ["../src/components/Callout.tsx", "../../../node_modules/.pnpm/clsx@2.0.0/node_modules/clsx/dist/clsx.mjs", "../src/components/Description.tsx", "../src/components/Explanation.tsx", "../src/components/GdExercise.tsx", "../src/components/GdLearnToCode.tsx", "../src/components/GdSnippet.tsx", "../../../node_modules/.pnpm/react@18.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js", "../../../node_modules/.pnpm/react@18.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js", "../../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-dev-runtime.js", "../../../node_modules/.pnpm/usehooks-ts@2.9.1_react-dom@18.2.0_react@18.2.0/node_modules/usehooks-ts/dist/esm/useCopyToClipboard/useCopyToClipboard.js", "../../../node_modules/.pnpm/usehooks-ts@2.9.1_react-dom@18.2.0_react@18.2.0/node_modules/usehooks-ts/dist/esm/useFetch/useFetch.js", "../../../node_modules/.pnpm/usehooks-ts@2.9.1_react-dom@18.2.0_react@18.2.0/node_modules/usehooks-ts/dist/esm/useIntersectionObserver/useIntersectionObserver.js", "../../gd-exercise-wrapper/src/components/GdExerciseWrapper.tsx", "../src/components/Glossary.tsx", "../src/components/Goal.tsx", "../src/components/Hints.tsx", "../src/components/Item.tsx", "../src/components/Option.tsx", "../src/components/Question.tsx", "../../../node_modules/.pnpm/@react-hooks-library+core@0.5.1_react@18.2.0/node_modules/@react-hooks-library/core/index.esm.js", "../src/components/Button.tsx", "../src/components/Small.tsx", "../src/components/Title.tsx", "../src/components/WithPoints.tsx"],
  "sourcesContent": ["import { useState, type ReactNode, useEffect } from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\nimport { clsx } from \"clsx\";\nimport { css } from \"@emotion/react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport \"./Callout.module.scss\";\n\ninterface CalloutState {\n  isReady: boolean;\n}\n\nexport function Callout({\n  type,\n  hidden,\n  title,\n  description,\n}: InferProps<typeof Callout.propTypes>): JSX.Element {\n  const [state, setState] = useState<CalloutState>({\n    isReady: false,\n  });\n\n  useEffect(() => {\n    const localState = { ...state };\n    localState.isReady = true;\n    setState(localState);\n  }, []);\n\n  return (\n    <div\n      className={clsx([\n        \"gd-school-mdx-component-callout\",\n        {\n          \"gd-school-mdx-component-callout--note\": type === \"note\",\n          \"gd-school-mdx-component-callout--info\": type === \"info\",\n          \"gd-school-mdx-component-callout--error\": type === \"error\",\n          \"gd-school-mdx-component-callout--question\": type === \"question\",\n          \"gd-school-mdx-component-callout--see-also\": type === \"see-also\",\n        },\n      ])}\n      css={css`\n        & {\n          display: grid;\n          grid-template-areas:\n            \"icon title\"\n            \"icon description\";\n          grid-template-columns: 50px minmax(0, 1fr);\n          margin: var(--size-8) 0;\n          padding: var(--size-4);\n          border-radius: var(--radius-lg);\n          background: linear-gradient(\n            0.123turn,\n            var(--callout-background-color-start),\n            var(--callout-background-color-end)\n          );\n          gap: var(--size-4);\n          color: var(--callout-content-color);\n          box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.05);\n        }\n\n        &[hidden] {\n          display: none;\n        }\n      `}\n      hidden={hidden === true}\n    >\n      <div\n        css={css`\n          & {\n            grid-area: icon;\n            display: flex;\n            align-items: start;\n            justify-content: center;\n            color: var(--callout-background-color);\n          }\n        `}\n      >\n        {\n          // Hack: \"isReady\" fixes some weird issue\n          // https://github.com/FortAwesome/Font-Awesome/issues/19348\n          state.isReady &&\n            (type === \"info\" ? (\n              <FontAwesomeIcon icon={[\"fas\", \"lightbulb\"]} size=\"2x\" />\n            ) : type === \"question\" ? (\n              <FontAwesomeIcon icon={[\"fas\", \"question\"]} size=\"2x\" />\n            ) : type === \"error\" ? (\n              <FontAwesomeIcon icon={[\"fas\", \"bug\"]} size=\"2x\" />\n            ) : type === \"see-also\" ? (\n              <FontAwesomeIcon icon={[\"fas\", \"eye\"]} size=\"2x\" />\n            ) : (\n              <FontAwesomeIcon icon={[\"fas\", \"note-sticky\"]} size=\"2x\" />\n            ))\n        }\n      </div>\n      <p\n        css={css`\n          && {\n            grid-area: title;\n            display: flex;\n            align-items: center;\n            justify-content: start;\n            font-weight: bold;\n            font-size: var(--size-4);\n            margin: 0;\n          }\n\n          && code {\n            display: inline-block;\n          }\n        `}\n      >\n        <span>{(title != null ? title : \"NO TITLE GIVEN\") as ReactNode}</span>\n      </p>\n\n      {description !== \"\" && (\n        <div\n          css={css`\n            & {\n              grid-area: description;\n            }\n\n            & p:first-of-type {\n              margin-top: 0;\n            }\n          `}\n        >\n          {description as ReactNode}\n        </div>\n      )}\n    </div>\n  );\n}\nCallout.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n  type: PropTypes.string,\n  hidden: PropTypes.bool,\n  title: PropTypes.node,\n  description: PropTypes.node,\n};\n", "function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Description({\n  children,\n}: InferProps<typeof Description.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nDescription.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Explanation({\n  children,\n}: InferProps<typeof Explanation.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nExplanation.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function GdExercise({\n  children,\n}: InferProps<typeof GdExercise.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nGdExercise.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import { type ReactNode } from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\nimport { css } from \"@emotion/react\";\n\n// import GdExerciseWrapper from \"@gdquest/gd-exercise-wrapper\";\n\nexport function GdLearnToCode({\n  children,\n  scene,\n  type,\n  title,\n  description,\n  goal,\n  hints,\n}: InferProps<typeof GdLearnToCode.propTypes>): JSX.Element {\n  return (\n    <section\n      css={css`\n        background-color: yellow;\n        padding: 1em;\n      `}\n    >\n      <p>{title as ReactNode}</p>\n      <div>{description as ReactNode}</div>\n      {goal != null && <div>{goal as ReactNode}</div>}\n      <div>{children as ReactNode}</div>\n      <div>\n        TODO: show the gdExercise here with the scene {scene} and the type{\" \"}\n        {type}\n      </div>\n      {/* <GdExerciseWrapper\n        loader={(() => {\n          const url = new URL(\"/gdexercise/loader.html\", window.location.href);\n          return url.href;\n        })()}\n        dataPath={(() => {\n          const url = new URL(\n            \"/gdexercise/exercises/godot-practice-framework.zip\",\n            window.location.href\n          );\n          return url.href;\n        })()}\n        mainScene=\"main.tscn\"\n        height=\"500px\"\n        hidePlayer\n        openFiles={[\n          {\n            path: \"main.gd\",\n            focus: true,\n            override: code,\n          },\n        ]}\n      /> */}\n      {hints != null && (\n        <div>\n          {hints.map((hint) => {\n            return (\n              <>\n                <div>{hint as ReactNode}</div>\n              </>\n            );\n          })}\n        </div>\n      )}\n    </section>\n  );\n}\nGdLearnToCode.propTypes = {\n  children: PropTypes.node,\n  scene: PropTypes.string.isRequired,\n  type: PropTypes.string, // TODO: limit the types of types that can be set instead of \"string\",\n  title: PropTypes.node.isRequired,\n  description: PropTypes.node.isRequired,\n  goal: PropTypes.node,\n  hints: PropTypes.arrayOf(PropTypes.node),\n};\n", "import { useState, useEffect } from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\nimport { css } from \"@emotion/react\";\n\nimport GdExerciseWrapper from \"@gdquest/gd-exercise-wrapper\";\n\ninterface GdSnippetState {\n  hasSharedArrayBufferSupport: boolean;\n}\n\nexport function GdSnippet({\n  title,\n  code,\n  hidePlayer = true,\n}: InferProps<typeof GdSnippet.propTypes>): JSX.Element {\n  const [state, setState] = useState<GdSnippetState>({\n    hasSharedArrayBufferSupport: false,\n  });\n\n  useEffect(() => {\n    const localState = { ...state };\n\n    localState.hasSharedArrayBufferSupport =\n      typeof window.SharedArrayBuffer !== \"undefined\";\n\n    setState(localState);\n  }, []);\n\n  // TODO: use GDExercise here\n  return (\n    <div\n      css={css`\n        & {\n          margin: var(--size-8) 0;\n        }\n      `}\n    >\n      {title != null && <h3>{title}</h3>}\n      {state.hasSharedArrayBufferSupport ? (\n        <GdExerciseWrapper\n          loader={(() => {\n            const url = new URL(\n              \"/gdexercise/loader.html\",\n              window.location.href\n            );\n            return url.href;\n          })()}\n          dataPath={(() => {\n            const url = new URL(\n              \"/gdexercise/projects/snippet.zip\",\n              window.location.href\n            );\n            return url.href;\n          })()}\n          mainScene=\"main.tscn\"\n          height=\"500px\"\n          hidePlayer={hidePlayer ?? false}\n          snippet={code}\n        />\n      ) : (\n        <pre>\n          <code>{code}</code>\n        </pre>\n      )}\n    </div>\n  );\n}\nGdSnippet.propTypes = {\n  title: PropTypes.string,\n  code: PropTypes.string.isRequired,\n  hidePlayer: PropTypes.bool,\n};\n", "/**\n * @license React\n * react-jsx-dev-runtime.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 a=Symbol.for(\"react.fragment\");exports.Fragment=a;exports.jsxDEV=void 0;\n", "/**\n * @license React\n * react-jsx-dev-runtime.development.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\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\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_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 MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  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 ) {\n    return true;\n  }\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_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n\nvar jsxDEV$1 =  jsxWithValidation ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV$1;\n  })();\n}\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-dev-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { useState } from 'react';\nfunction useCopyToClipboard() {\n    const [copiedText, setCopiedText] = useState(null);\n    const copy = (text) => __awaiter(this, void 0, void 0, function* () {\n        if (!(navigator === null || navigator === void 0 ? void 0 : navigator.clipboard)) {\n            console.warn('Clipboard not supported');\n            return false;\n        }\n        try {\n            yield navigator.clipboard.writeText(text);\n            setCopiedText(text);\n            return true;\n        }\n        catch (error) {\n            console.warn('Copy failed', error);\n            setCopiedText(null);\n            return false;\n        }\n    });\n    return [copiedText, copy];\n}\nexport default useCopyToClipboard;\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { useEffect, useReducer, useRef } from 'react';\nfunction useFetch(url, options) {\n    const cache = useRef({});\n    const cancelRequest = useRef(false);\n    const initialState = {\n        error: undefined,\n        data: undefined,\n    };\n    const fetchReducer = (state, action) => {\n        switch (action.type) {\n            case 'loading':\n                return Object.assign({}, initialState);\n            case 'fetched':\n                return Object.assign(Object.assign({}, initialState), { data: action.payload });\n            case 'error':\n                return Object.assign(Object.assign({}, initialState), { error: action.payload });\n            default:\n                return state;\n        }\n    };\n    const [state, dispatch] = useReducer(fetchReducer, initialState);\n    useEffect(() => {\n        if (!url)\n            return;\n        cancelRequest.current = false;\n        const fetchData = () => __awaiter(this, void 0, void 0, function* () {\n            dispatch({ type: 'loading' });\n            if (cache.current[url]) {\n                dispatch({ type: 'fetched', payload: cache.current[url] });\n                return;\n            }\n            try {\n                const response = yield fetch(url, options);\n                if (!response.ok) {\n                    throw new Error(response.statusText);\n                }\n                const data = (yield response.json());\n                cache.current[url] = data;\n                if (cancelRequest.current)\n                    return;\n                dispatch({ type: 'fetched', payload: data });\n            }\n            catch (error) {\n                if (cancelRequest.current)\n                    return;\n                dispatch({ type: 'error', payload: error });\n            }\n        });\n        void fetchData();\n        return () => {\n            cancelRequest.current = true;\n        };\n    }, [url]);\n    return state;\n}\nexport default useFetch;\n", "import { useEffect, useState } from 'react';\nfunction useIntersectionObserver(elementRef, { threshold = 0, root = null, rootMargin = '0%', freezeOnceVisible = false, }) {\n    const [entry, setEntry] = useState();\n    const frozen = (entry === null || entry === void 0 ? void 0 : entry.isIntersecting) && freezeOnceVisible;\n    const updateEntry = ([entry]) => {\n        setEntry(entry);\n    };\n    useEffect(() => {\n        const node = elementRef === null || elementRef === void 0 ? void 0 : elementRef.current;\n        const hasIOSupport = !!window.IntersectionObserver;\n        if (!hasIOSupport || frozen || !node)\n            return;\n        const observerParams = { threshold, root, rootMargin };\n        const observer = new IntersectionObserver(updateEntry, observerParams);\n        observer.observe(node);\n        return () => observer.disconnect();\n    }, [elementRef === null || elementRef === void 0 ? void 0 : elementRef.current, JSON.stringify(threshold), root, rootMargin, frozen]);\n    return entry;\n}\nexport default useIntersectionObserver;\n", "import { useEffect, useRef, type JSX } from \"react\";\nimport { useIntersectionObserver } from \"usehooks-ts\";\n\nimport \"./GdExerciseWrapper.scss\";\n\nconst DEFAULT_PATHNAME = \"/loader.html\";\n\nexport interface GdExerciseWrapperOpenFile {\n  path: string;\n  focus?: boolean;\n  override?: string;\n}\n\nexport interface GdExerciseWrapperProps {\n  loader?: string;\n  dataPath: string;\n  mainScene: string;\n  openFiles?: GdExerciseWrapperOpenFile[];\n  height: string | number;\n  hideCode?: boolean;\n  hideConsole?: boolean;\n  hidePlayer?: boolean;\n  hideTest?: boolean;\n  snippet?: string;\n}\n\nexport default function GdExerciseWrapper(\n  props: GdExerciseWrapperProps\n): JSX.Element {\n  const {\n    loader = new URL(DEFAULT_PATHNAME, window.location.origin).href,\n    dataPath,\n    mainScene,\n    openFiles = [],\n    height,\n    hideCode = false,\n    hideConsole = false,\n    hidePlayer = false,\n    hideTest = false,\n    snippet = \"\",\n  } = props;\n\n  const iframeRef = useRef<HTMLIFrameElement | null>(null);\n  const wrapperRef = useRef<HTMLDivElement | null>(null);\n  const entry = useIntersectionObserver(wrapperRef, {});\n  const isVisible = entry?.isIntersecting === true;\n\n  const loaderUrl = new URL(loader);\n  loaderUrl.searchParams.append(\"dataPath\", dataPath);\n  loaderUrl.searchParams.append(\"mainScene\", mainScene);\n\n  for (const openFile of openFiles) {\n    const getFocus = (): \"focus\" | \"nofocus\" => {\n      if (openFile.focus === true) {\n        return \"focus\";\n      }\n      return \"nofocus\";\n    };\n\n    loaderUrl.searchParams.append(\n      \"open\",\n      [openFile.path, getFocus(), openFile.override]\n        .filter((element) => element != null)\n        .join(\":\")\n    );\n  }\n\n  if (hideCode) {\n    loaderUrl.searchParams.append(\"hide\", \"code\");\n  }\n  if (hideConsole) {\n    loaderUrl.searchParams.append(\"hide\", \"console\");\n  }\n  if (hidePlayer) {\n    loaderUrl.searchParams.append(\"hide\", \"player\");\n  }\n  if (hideTest) {\n    loaderUrl.searchParams.append(\"hide\", \"test\");\n  }\n\n  if (snippet.length > 0) {\n    loaderUrl.searchParams.append(\"snippet\", snippet);\n  }\n\n  useEffect(() => {\n    if (iframeRef.current == null) return;\n    iframeRef.current.contentWindow?.postMessage({\n      from: \"gd-exercise\",\n      type: \"low-processor-usage-mode\",\n      value: !isVisible,\n    });\n  }, [isVisible, iframeRef.current]);\n\n  return (\n    <>\n      <div className=\"gdexercise-wrapper\" ref={wrapperRef}>\n        <iframe\n          allow=\"fullscreen\"\n          src={loaderUrl.href}\n          style={{\n            height,\n          }}\n          ref={iframeRef}\n        ></iframe>\n      </div>\n    </>\n  );\n}\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Glossary({\n  children,\n}: InferProps<typeof Glossary.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nGlossary.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Goal({\n  children,\n}: InferProps<typeof Goal.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nGoal.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Hints({\n  children,\n}: InferProps<typeof Hints.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nHints.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Item({\n  children,\n}: InferProps<typeof Item.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nItem.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Option({\n  children,\n  correct = false,\n}: InferProps<typeof Option.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nOption.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n  correct: PropTypes.bool,\n};\n", "import {\n  type ReactElement,\n  type ReactNode,\n  type FormEvent,\n  useRef,\n  useState,\n  useEffect,\n} from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\nimport { clsx } from \"clsx\";\nimport { css } from \"@emotion/react\";\nimport { useEventListener } from \"@react-hooks-library/core\";\n\nimport { Button } from \"@/components/Button.tsx\";\n\nimport \"./Question.module.scss\";\n\nlet sequentialId = 0;\nfunction getSequentialId(): number {\n  const returnValue = sequentialId;\n  sequentialId += 1;\n  return returnValue;\n}\n\ninterface QuestionOption {\n  index?: number;\n  label: ReactElement | string;\n  correct?: boolean | null;\n}\n\ninterface QuestionState {\n  title: ReactElement;\n  explanation: ReactElement;\n  options: QuestionOption[];\n  correctAnswer: boolean | null;\n  submitted: boolean;\n  skip: boolean;\n  isReady: boolean;\n}\n\nexport function Question({\n  hidden,\n  randomize,\n  multipleChoice,\n  skip,\n  onSubmit,\n  title,\n  explanation,\n  options,\n  onRightAnswer,\n  onWrongAnswer,\n}: InferProps<typeof Question.propTypes>): JSX.Element {\n  randomize = randomize ?? false;\n  skip = skip ?? false;\n\n  const rootRef = useRef<HTMLDivElement | null>(null);\n  const optionsName = `gd-school-mdx-component-question-options-${getSequentialId().toString()}`;\n  const [state, setState] = useState<QuestionState>({\n    title: (title as ReactElement) ?? \"NO TITLE GIVEN\",\n    explanation: (explanation as ReactElement) ?? \"NO EXPLANATION GIVEN\",\n    options: ((options as QuestionOption[]) ?? []).map((option, index) => {\n      return {\n        index: option.index ?? index,\n        label: option.label,\n        correct: option.correct ?? false,\n      } satisfies QuestionOption;\n    }),\n    correctAnswer: null,\n    submitted: false,\n    skip: skip ?? false,\n    isReady: false,\n  });\n\n  useEventListener(rootRef, \"questionupdate\", () => {\n    // implement\n  });\n\n  useEffect(() => {\n    if (rootRef.current == null) {\n      return;\n    }\n\n    const localState = { ...state };\n\n    if (randomize === true) {\n      localState.options = localState.options\n        .map((option) => {\n          return {\n            option,\n            sort: Math.random(),\n          };\n        })\n        .sort((a, b) => a.sort - b.sort)\n        .map(({ option }) => option);\n    }\n\n    localState.isReady = true;\n\n    setState(localState);\n  }, []);\n\n  const onQuestionChange = (event: FormEvent<HTMLFieldSetElement>): void => {\n    const localState = { ...state };\n    if (localState.submitted) {\n      return;\n    }\n\n    const correctOption = localState.options?.find(\n      (option) => option?.correct === true\n    );\n\n    if (correctOption == null) {\n      return;\n    }\n\n    if (multipleChoice === true) {\n      validateForm(localState);\n    } else {\n      localState.correctAnswer =\n        // @ts-expect-error value doesn't exist on event.target\n        event.target.value === correctOption.index.toString();\n    }\n\n    setState(localState);\n  };\n\n  const validateForm = (state: QuestionState): void => {\n    let hasError = false;\n    const htmlOptions = document.getElementsByName(\n      optionsName\n    ) as NodeListOf<HTMLInputElement>;\n\n    for (const htmlOption of Array.from(htmlOptions)) {\n      for (const option of state.options) {\n        if (option.index?.toString() !== htmlOption.value) {\n          continue;\n        }\n\n        if (htmlOption.checked && option.correct === true) {\n          hasError = true;\n          break;\n        }\n      }\n\n      if (hasError) {\n        break;\n      }\n    }\n\n    state.correctAnswer = !hasError;\n  };\n\n  const onSubmitButtonClick = (): void => {\n    if (rootRef.current == null) {\n      return;\n    }\n\n    setState({\n      ...state,\n      submitted: true,\n    });\n    onSubmit?.(state.correctAnswer);\n    if (state.correctAnswer === true) {\n      onRightAnswer?.();\n    } else if (state.correctAnswer === false) {\n      onWrongAnswer?.();\n    }\n  };\n\n  return (\n    <>\n      <div\n        className={clsx(\"gd-school-mdx-component-question\")}\n        css={css`\n          & {\n            border: 1px solid var(--border);\n            border-radius: var(--radius);\n            margin: var(--size-16) 0;\n            padding: var(--size-4);\n          }\n\n          &[hidden] {\n            display: none;\n          }\n        `}\n        ref={rootRef}\n        hidden={hidden ?? false}\n      >\n        <p\n          css={css`\n            && {\n              font-size: var(--font-size-2);\n              line-height: var(--font-lineheight-4);\n              margin-top: 0;\n            }\n          `}\n        >\n          <span>Question</span>\n        </p>\n        <p css={css``}>\n          {\n            // Title\n            state.title as ReactNode\n          }\n        </p>\n        <fieldset\n          css={css`\n            display: grid;\n            grid-template-areas:\n              \"entries\"\n              \"submit\";\n            grid-template-columns: auto;\n          `}\n          onChangeCapture={onQuestionChange}\n        >\n          <div\n            css={css`\n              grid-area: entries;\n            `}\n          >\n            {state.isReady &&\n              state.options.map((option) => {\n                if (option == null) {\n                  return <></>;\n                }\n\n                return (\n                  <label\n                    key={option.index}\n                    css={css`\n                      display: grid;\n                      grid-template-areas: \"input content\";\n                      grid-template-columns: 50px 1fr;\n                    `}\n                  >\n                    <div\n                      css={css`\n                        grid-area: \"input\";\n                      `}\n                    >\n                      <input\n                        type={multipleChoice === true ? \"checkbox\" : \"radio\"}\n                        name={optionsName}\n                        value={option.index}\n                        disabled={state.submitted || state.skip}\n                      />\n                    </div>\n                    <span\n                      css={css`\n                        grid-area: content;\n                      `}\n                    >\n                      <span>{option.label as ReactElement}</span>\n                    </span>\n                  </label>\n                );\n              })}\n          </div>\n          <div\n            css={css`\n              grid-area: submit;\n              display: flex;\n              align-items: center;\n              justify-content: center;\n              margin-top: var(--size-4);\n            `}\n          >\n            {!state.submitted && !state.skip && state.isReady && (\n              <Button\n                onClick={onSubmitButtonClick}\n                disabled={state.correctAnswer === null}\n              >\n                <span>Submit</span>\n              </Button>\n            )}\n          </div>\n        </fieldset>\n        {(state.submitted || state.skip) && (\n          <div\n            className={clsx([\n              \"gd-school-mdx-component-question-answer\",\n              {\n                \"gd-school-mdx-component-question-answer--correct\":\n                  state.correctAnswer === true,\n                \"gd-school-mdx-component-question-answer--incorrect\":\n                  state.correctAnswer === false,\n              },\n            ])}\n            css={css`\n              border-radius: var(--radius-lg);\n              padding: var(--size-4);\n              margin-top: var(--size-2);\n              background: linear-gradient(\n                0.123turn,\n                var(--question-answer-background-color-start),\n                var(--question-answer-background-color-end)\n              );\n            `}\n          >\n            {!state.skip && (\n              <p\n                css={css`\n                  && {\n                    margin: 0;\n                    font-weight: bold;\n                  }\n                `}\n              >\n                {state.correctAnswer === true ? \"Correct\" : \"Incorrect\"}\n              </p>\n            )}\n            <p>{state.explanation as ReactNode}</p>\n          </div>\n        )}\n      </div>\n    </>\n  );\n}\nQuestion.propTypes = {\n  children: PropTypes.node,\n  randomize: PropTypes.bool,\n  multipleChoice: PropTypes.bool,\n  skip: PropTypes.bool,\n  hidden: PropTypes.bool,\n  title: PropTypes.node,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      index: PropTypes.number,\n      label: PropTypes.node.isRequired,\n      correct: PropTypes.bool,\n    })\n  ),\n  explanation: PropTypes.node,\n  onSubmit: PropTypes.func,\n  onRightAnswer: PropTypes.func,\n  onWrongAnswer: PropTypes.func,\n};\n", "import { useEffect, useState, useRef, useCallback, useLayoutEffect } from 'react';\n\n/**\r\n * Run a function when a component is mounted.\r\n *\r\n * @deprecated This hook breaks in React 18's strict mode, since it's not idempotent\r\n *\r\n * @param callback function to be executed\r\n */\r\nfunction useMount(callback) {\r\n    useEffect(callback, []);\r\n}\n\n/**\r\n * Reactive media query hook that returns the truthy value of the media query.\r\n *\r\n * @param {string} query\r\n * @returns {boolean} boolean value of the query\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useMediaQuery\r\n */\r\nfunction useMediaQuery(query) {\r\n    const [matches, setMatches] = useState(false);\r\n    useMount(() => {\r\n        setMatches(window.matchMedia(query).matches);\r\n    });\r\n    useEffect(() => {\r\n        const mediaQuery = window.matchMedia(query);\r\n        const handler = (event) => {\r\n            setMatches(event.matches);\r\n        };\r\n        // Add event listener for old safari browsers\r\n        'addEventListener' in mediaQuery\r\n            ? mediaQuery.addEventListener('change', handler)\r\n            : mediaQuery.addListener(handler);\r\n        return () => {\r\n            'addEventListener' in mediaQuery\r\n                ? mediaQuery.removeEventListener('change', handler)\r\n                : mediaQuery.removeListener(handler);\r\n        };\r\n    }, [query]);\r\n    return matches;\r\n}\n\n/**\r\n * Breakpoints from Tailwind V2\r\n *\r\n * @see https://tailwindcss.com/docs/breakpoints\r\n */\r\nconst breakpointsTailwind = {\r\n    sm: 640,\r\n    md: 768,\r\n    lg: 1024,\r\n    xl: 1280,\r\n    '2xl': 1536\r\n};\r\n/**\r\n * Breakpoints from Bootstrap V5\r\n *\r\n * @see https://getbootstrap.com/docs/5.0/layout/breakpoints\r\n */\r\nconst breakpointsBootstrapV5 = {\r\n    sm: 576,\r\n    md: 768,\r\n    lg: 992,\r\n    xl: 1200,\r\n    xxl: 1400\r\n};\r\n/**\r\n * Breakpoints from Vuetify V2\r\n *\r\n * @see https://vuetifyjs.com/en/features/breakpoints\r\n */\r\nconst breakpointsVuetify = {\r\n    xs: 600,\r\n    sm: 960,\r\n    md: 1264,\r\n    lg: 1904\r\n};\r\n/**\r\n * Breakpoints from Ant Design\r\n *\r\n * @see https://ant.design/components/layout/#breakpoint-width\r\n */\r\nconst breakpointsAntDesign = {\r\n    xs: 480,\r\n    sm: 576,\r\n    md: 768,\r\n    lg: 992,\r\n    xl: 1200,\r\n    xxl: 1600\r\n};\r\n/**\r\n * Sematic Breakpoints\r\n */\r\nconst breakpointsSematic = {\r\n    mobileS: 320,\r\n    mobileM: 375,\r\n    mobileL: 425,\r\n    tablet: 768,\r\n    laptop: 1024,\r\n    laptopL: 1440,\r\n    desktop4K: 2560\r\n};\n\n/* eslint-disable @typescript-eslint/ban-types */\r\n/**\r\n * Check if we're on the server or client side\r\n */\r\nconst isClient = typeof window !== 'undefined';\r\n/**\r\n * Check if object is a react ref\r\n */\r\nconst isRef = (obj) => obj !== null &&\r\n    typeof obj === 'object' &&\r\n    Object.prototype.hasOwnProperty.call(obj, 'current');\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\n// eslint-disable-next-line @typescript-eslint/no-empty-function\r\nconst noop = () => { };\r\nconst round = (num) => Math.round(num * 1e2) / 1e2;\n\n/**\r\n * Accepts either a ref object or a dom node and returns a dom node\r\n *\r\n * @param target - ref or a dom node\r\n * @returns dom noe\r\n */\r\nfunction unRef(target) {\r\n    const element = isRef(target)\r\n        ? target.current\r\n        : target;\r\n    return element;\r\n}\n\nconst _window =  isClient ? window : undefined;\r\nconst _document =  isClient ? window.document : undefined;\r\nconst _navigator =  isClient\r\n    ? window.navigator\r\n    : undefined;\n\nfunction match(query) {\r\n    if (!_window)\r\n        return false;\r\n    return _window.matchMedia(query).matches;\r\n}\r\n/**\r\n * Reactive hooks and utilities to be used with user provided breakpoints.\r\n *\r\n * @param {string} breakpoints\r\n * @returns functions to be used as hooks\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n */\r\nfunction BreakPointHooks(breakpoints) {\r\n    return {\r\n        /**\r\n         * Hook that returns a boolean if screen width is greater than given breakpoint.\r\n         *\r\n         * @param k {string} breakpoint\r\n         * @returns boolean\r\n         *\r\n         * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n         **/\r\n        useGreater: (k) => {\r\n            return useMediaQuery(`(min-width: ${breakpoints[k]}px)`);\r\n        },\r\n        /**\r\n         * Hook that returns a boolean if screen width is smaller than given breakpoint.\r\n         *\r\n         * @param k {string} breakpoint\r\n         * @param k {string} breakpoint\r\n         *\r\n         * @returns boolean\r\n         *\r\n         * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n         **/\r\n        useSmaller: (k) => {\r\n            return useMediaQuery(`(max-width: ${breakpoints[k]}px)`);\r\n        },\r\n        /**\r\n         * Hook that returns a boolean if screen width is between two given breakpoint.\r\n         *\r\n         * @param a {string} breakpoint\r\n         * @param b {string} breakpoint\r\n         *\r\n         * @returns boolean\r\n         *\r\n         * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n         **/\r\n        useBetween: (a, b) => {\r\n            return useMediaQuery(`(min-width: ${breakpoints[a]}px) and (max-width: ${breakpoints[b]}px)`);\r\n        },\r\n        /**\r\n         * Utility function that returns a boolean if screen width is greater than given breakpoint.\r\n         *\r\n         * @param k {string} breakpoint\r\n         *\r\n         * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n         **/\r\n        isGreater(k) {\r\n            return match(`(min-width: ${breakpoints[k]}px)`);\r\n        },\r\n        /**\r\n         * Utility function that returns a boolean if screen width is smaller than given breakpoint.\r\n         *\r\n         * @param k {string} breakpoint\r\n         *\r\n         * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n         **/\r\n        isSmaller(k) {\r\n            return match(`(max-width: ${breakpoints[k]}px)`);\r\n        },\r\n        /**\r\n         * Utility function that returns a boolean if screen width is between two given breakpoint.\r\n         *\r\n         * @param k {string} breakpoint\r\n         *\r\n         * @see https://react-hooks-library.vercel.app/core/BreakPointHooks\r\n         **/\r\n        isInBetween(a, b) {\r\n            return match(`(min-width: ${breakpoints[a]}px) and (max-width: ${breakpoints[b]}px)`);\r\n        }\r\n    };\r\n}\n\nfunction useEventListener(...args) {\r\n    let target = _window;\r\n    let event;\r\n    let listener;\r\n    let options;\r\n    isString(args[0])\r\n        ? ([event, listener, options] = args)\r\n        : ([target, event, listener, options] = args);\r\n    const savedListener = useRef(listener);\r\n    const cleanup = useRef(noop);\r\n    useEffect(() => {\r\n        savedListener.current = listener;\r\n    }, [listener]);\r\n    useEffect(() => {\r\n        const el = unRef(target);\r\n        if (!isClient || !el)\r\n            return;\r\n        el.addEventListener(event, savedListener.current, options);\r\n        cleanup.current = () => {\r\n            el.removeEventListener(event, savedListener.current, options);\r\n        };\r\n        return cleanup.current;\r\n    }, [event, target, options]);\r\n    return cleanup.current;\r\n}\n\n/**\r\n * Reactive document.activeElement, returns a reference to current active element\r\n *\r\n * @returns current active element (DOM node)\r\n **/\r\nfunction useActiveElement() {\r\n    const [activeElement, setActiveElement] = useState(() => _document === null || _document === void 0 ? void 0 : _document.activeElement);\r\n    useEventListener('focus', () => setActiveElement(_document === null || _document === void 0 ? void 0 : _document.activeElement), true);\r\n    useEventListener('blur', () => setActiveElement(null), true);\r\n    return { activeElement };\r\n}\n\n/**\r\n * Returns a current execution state of an async function.\r\n * Use it to orchestrate async actions in UI.\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useAsyncCallback\r\n */\r\nfunction useAsyncCallback(callback) {\r\n    const [isLoading, setIsLoading] = useState(false);\r\n    const [isSuccess, setIsSuccess] = useState(false);\r\n    const [error, setError] = useState(false);\r\n    const [data, setData] = useState();\r\n    const _callback = useCallback(async (...args) => {\r\n        try {\r\n            setIsLoading(true);\r\n            const results = await callback(...args);\r\n            setData(results);\r\n            setIsSuccess(true);\r\n            return results;\r\n        }\r\n        catch (e) {\r\n            setError(true);\r\n            throw e;\r\n        }\r\n        finally {\r\n            setIsLoading(false);\r\n        }\r\n    }, [callback]);\r\n    return [{ data, error, isLoading, isSuccess }, _callback];\r\n}\n\n/**\r\n * Listen for clicks outside of an element.\r\n *\r\n * @param target\r\n * @param handler\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/onClickOutside\r\n */\r\nfunction useClickOutside(target, handler, options = {}) {\r\n    const { event = 'pointerdown' } = options;\r\n    const listener = useCallback((event) => {\r\n        const el = unRef(target);\r\n        if (!el)\r\n            return;\r\n        if (el === event.target || event.composedPath().includes(el))\r\n            return;\r\n        handler(event);\r\n    }, [handler, target]);\r\n    return useEventListener(_window, event, listener, { passive: true });\r\n}\n\n/**\r\n * Used to debounce a quickly changing value.\r\n * Will return the latest value after a specified amount of time.\r\n *\r\n * @param {T} value\r\n * @param timeout\r\n * @returns {Readonly<T>} latest value\r\n * @see https://react-hooks-library.vercel.app/core/useDebounce\r\n */\r\nfunction useDebounce(value, timeout) {\r\n    const [state, setState] = useState(value);\r\n    useEffect(() => {\r\n        const tick = setTimeout(() => setState(value), timeout);\r\n        return () => clearTimeout(tick);\r\n    }, [value, timeout]);\r\n    if (timeout <= 0)\r\n        return value;\r\n    return state;\r\n}\n\n/**\r\n * A useEffect hook does that not run on mount, but only on subsequent updates.\r\n *\r\n * @deprecated This hook breaks in React 18's strict mode, since it's not idempotent\r\n *\r\n * @param effect\r\n * @param deps\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useEffectAfterMount\r\n */\r\nfunction useEffectAfterMount(effect, deps) {\r\n    const isMounted = useRef(false);\r\n    useEffect(() => {\r\n        let cleanup = undefined;\r\n        if (isMounted.current) {\r\n            cleanup = effect();\r\n        }\r\n        isMounted.current = true;\r\n        return cleanup;\r\n    }, deps);\r\n}\n\n/**\r\n * React FontFace, a hook to load fonts asynchronously\r\n *\r\n * @param family\r\n * @param source\r\n * @param descriptors\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useFont\r\n */\r\nfunction useFont(family, source, descriptors) {\r\n    const [loaded, setLoaded] = useState(true);\r\n    const [error, setError] = useState(false);\r\n    const [font, setFont] = useState(null);\r\n    useEffect(() => {\r\n        const font = new FontFace(family, `url(${source})`, descriptors);\r\n        setFont(font);\r\n        setLoaded(false);\r\n        font\r\n            .load()\r\n            .then(() => document.fonts.add(font))\r\n            .catch(() => setError(true))\r\n            .finally(() => setLoaded(true));\r\n    }, [descriptors, family, source]);\r\n    return { loaded, error, font };\r\n}\n\n/**\r\n * Hook that returns whether or not the component has mounted.\r\n * Useful in SSR frameworks like Next or Gatsby.\r\n *\r\n * @returns hasMounted\r\n */\r\nfunction useHasMounted() {\r\n    const [hasMounted, setHasMounted] = useState(false);\r\n    useMount(() => {\r\n        setHasMounted(true);\r\n    });\r\n    return hasMounted;\r\n}\n\n/**\r\n *\r\n * Detect if a dom element is hovered\r\n *\r\n * @param target - The element to listen to\r\n * @returns\r\n */\r\nfunction useHover(target) {\r\n    const [isHovered, setIsHovered] = useState(false);\r\n    useEffect(() => {\r\n        const el = unRef(target);\r\n        if (!el)\r\n            return;\r\n        const onMouseEnter = () => setIsHovered(true);\r\n        const onMouseLeave = () => setIsHovered(false);\r\n        el.addEventListener('mouseenter', onMouseEnter);\r\n        el.addEventListener('mouseleave', onMouseLeave);\r\n        return () => {\r\n            el.removeEventListener('mouseenter', onMouseEnter);\r\n            el.removeEventListener('mouseleave', onMouseLeave);\r\n        };\r\n    }, [target]);\r\n    return isHovered;\r\n}\n\n/**\r\n * Is a feature supported in the browser or not\r\n *\r\n * @param predicate - predicate to check if the feature is supported\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useIsSupported\r\n */\r\nfunction useIsSupported(predicate) {\r\n    const [isSupported, setIsSupported] = useState(false);\r\n    useMount(() => {\r\n        setIsSupported(predicate());\r\n    });\r\n    return isSupported;\r\n}\n\n/**\r\n * Run a function when component is unmounted.\r\n *\r\n * @deprecated This hook breaks in React 18's strict mode, since it's not idempotent\r\n *\r\n * @param callback function to be executed\r\n */\r\nfunction useUnMount(func) {\r\n    useEffect(() => {\r\n        return func;\r\n    }, [func]);\r\n}\n\n/**\r\n * Reactive intersection observer.\r\n *\r\n * @param target - React ref or DOM node\r\n * @param options - Options passed to mutation observer\r\n * @param callback - callback to execute when mutations are observed\r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver IntersectionObserver MDN\r\n * @see https://react-hooks-library.vercel.app/core/useIntersectionObserver\r\n */\r\nfunction useIntersectionObserver(target, options = {}, callback = noop) {\r\n    const { root = _document, rootMargin = '0px', threshold = 0 } = options;\r\n    const [inView, setInView] = useState(false);\r\n    const [entry, setEntry] = useState(null);\r\n    const isSupported = useIsSupported(() => 'IntersectionObserver' in window);\r\n    const observer = useRef(null);\r\n    const stop = useCallback(() => {\r\n        if (!observer.current)\r\n            return;\r\n        observer.current.disconnect();\r\n        observer.current = null;\r\n    }, []);\r\n    useUnMount(stop);\r\n    useEffect(() => {\r\n        var _a;\r\n        const el = unRef(target);\r\n        const rootEl = unRef(root);\r\n        if (!(isSupported && el && rootEl))\r\n            return;\r\n        observer.current = new window.IntersectionObserver((entries, observer) => {\r\n            const thresholds = Array.isArray(threshold) ? threshold : [threshold];\r\n            entries.forEach((entry) => {\r\n                const inView = entry.isIntersecting &&\r\n                    thresholds.some((threshold) => entry.intersectionRatio >= threshold);\r\n                setInView(inView);\r\n                setEntry(entry);\r\n            });\r\n            callback(entries, observer);\r\n        }, {\r\n            root: rootEl,\r\n            rootMargin,\r\n            threshold\r\n        });\r\n        (_a = observer.current) === null || _a === void 0 ? void 0 : _a.observe(el);\r\n        return stop;\r\n    }, [callback, isSupported, root, rootMargin, stop, target, threshold]);\r\n    return {\r\n        isSupported,\r\n        stop,\r\n        inView,\r\n        entry\r\n    };\r\n}\n\n/**\r\n * Run a function repeatedly at a specified interval.\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useInterval\r\n */\r\nfunction useInterval(callback, delay, options) {\r\n    const { immediate = false, paused = false } = options || {};\r\n    const savedCallback = useRef(callback);\r\n    const tickId = useRef();\r\n    useEffect(() => {\r\n        savedCallback.current = callback;\r\n        if (!paused && immediate) {\r\n            callback();\r\n        }\r\n    }, [callback, immediate, paused]);\r\n    useEffect(() => {\r\n        if (tickId.current && paused) {\r\n            clearInterval(tickId.current);\r\n            return;\r\n        }\r\n        tickId.current = setInterval(() => savedCallback.current(), delay);\r\n        return () => tickId.current && clearInterval(tickId.current);\r\n    }, [delay, paused]);\r\n}\n\n/**\r\n * Listen for keyboard keys being stroked.\r\n *\r\n * @param keys\r\n * @param handler\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useKeyStroke\r\n */\r\nfunction useKeyStroke(keys, handler, options = {}) {\r\n    const { target = _window, eventName = 'keydown', passive = false, code = false } = options;\r\n    const listener = useCallback((e) => {\r\n        const eventKey = code ? e.code : e.key;\r\n        keys.includes(eventKey) && handler(e);\r\n    }, [code, handler, keys]);\r\n    return useEventListener(target, eventName, listener, { passive });\r\n}\r\n/**\r\n * Listen for keyboard keys on keydown.\r\n *\r\n * @param keys\r\n * @param handler\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useKeyStroke\r\n */\r\nfunction useKeyDown(keys, handler, options = {}) {\r\n    return useKeyStroke(keys, handler, Object.assign(Object.assign({}, options), { eventName: 'keydown' }));\r\n}\r\n/**\r\n * Listen for keyboard keys on keypress.\r\n *\r\n * @param keys\r\n * @param handler\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/onKeyStroke\r\n */\r\nfunction useKeyPressed(keys, handler, options = {}) {\r\n    return useKeyStroke(keys, handler, Object.assign(Object.assign({}, options), { eventName: 'keypress' }));\r\n}\r\n/**\r\n * Listen for keyboard keys on keyup.\r\n *\r\n * @param keys\r\n * @param handler\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/onKeyStroke\r\n */\r\nfunction useKeyUp(keys, handler, options = {}) {\r\n    return useKeyStroke(keys, handler, Object.assign(Object.assign({}, options), { eventName: 'keyup' }));\r\n}\n\n/**\r\n * Modified `useState` hook that syncs with localStorage.\r\n *\r\n * @param key\r\n * @param initialValue\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useLocalStorage\r\n */\r\nfunction useLocalStorage(key, initialValue, options) {\r\n    const [storedValue, setStoredValue] = useState(initialValue);\r\n    const { deserialize = JSON.parse, serialize = JSON.stringify } = options || {};\r\n    useMount(() => {\r\n        try {\r\n            const item = localStorage.getItem(key);\r\n            item && setStoredValue(deserialize(item));\r\n        }\r\n        catch (error) {\r\n            console.error(error);\r\n        }\r\n    });\r\n    const setValue = useCallback((value) => {\r\n        try {\r\n            localStorage.setItem(key, serialize(value));\r\n            setStoredValue(value);\r\n        }\r\n        catch (error) {\r\n            console.error(error);\r\n        }\r\n    }, [key, serialize]);\r\n    return [storedValue, setValue];\r\n}\n\nconst buildState = (trigger) => {\r\n    const { state, length } = (_window === null || _window === void 0 ? void 0 : _window.history) || {};\r\n    const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (_window === null || _window === void 0 ? void 0 : _window.location) || {};\r\n    return {\r\n        trigger,\r\n        state,\r\n        length,\r\n        hash,\r\n        host,\r\n        hostname,\r\n        href,\r\n        origin,\r\n        pathname,\r\n        port,\r\n        protocol,\r\n        search\r\n    };\r\n};\r\n/**\r\n * Reactive browser location.\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useLocation\r\n *\r\n */\r\nfunction useLocation() {\r\n    const [state, setState] = useState(null);\r\n    useMount(() => {\r\n        setState(buildState('load'));\r\n    });\r\n    useEventListener('popstate', () => setState(buildState('popstate')), {\r\n        passive: true\r\n    });\r\n    useEventListener('hashchange', () => setState(buildState('hashchange')), {\r\n        passive: true\r\n    });\r\n    return state;\r\n}\n\n/**\r\n * Reactive `mediaDevices.getUserMedia` streaming\r\n *\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useMediaStream\r\n */\r\nfunction useMediaStream(options = {}) {\r\n    const { audioDeviceId, videoDeviceId, autoSwitch } = options;\r\n    const isSupported = useIsSupported(() => { var _a; return !!((_a = _navigator === null || _navigator === void 0 ? void 0 : _navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia); });\r\n    const stream = useRef(null);\r\n    const ref = useRef(null);\r\n    const [isPlaying, setPlaying] = useState(false);\r\n    const [isAudioMuted, setAudioMuted] = useState(false);\r\n    const [isVideoMuted, setVideoMuted] = useState(false);\r\n    const getDeviceOptions = useCallback((device) => {\r\n        if (device === 'none' || device === false)\r\n            return false;\r\n        if (device === null)\r\n            return true;\r\n        return {\r\n            deviceId: device\r\n        };\r\n    }, []);\r\n    const play = useCallback(async () => {\r\n        var _a;\r\n        if (!isSupported || stream.current)\r\n            return;\r\n        stream.current =\r\n            (_a = (await (_navigator === null || _navigator === void 0 ? void 0 : _navigator.mediaDevices.getUserMedia({\r\n                video: getDeviceOptions(videoDeviceId),\r\n                audio: getDeviceOptions(audioDeviceId)\r\n            })))) !== null && _a !== void 0 ? _a : null;\r\n        setPlaying(true);\r\n        return stream.current;\r\n    }, [audioDeviceId, getDeviceOptions, isSupported, videoDeviceId]);\r\n    const stop = useCallback(() => {\r\n        var _a;\r\n        setPlaying(false);\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getTracks().forEach((t) => t.stop());\r\n        stream.current = null;\r\n    }, []);\r\n    const restart = useCallback(async () => {\r\n        stop();\r\n        return await play();\r\n    }, [play, stop]);\r\n    const muteAudio = useCallback(() => {\r\n        var _a;\r\n        setAudioMuted(true);\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((t) => (t.enabled = false));\r\n    }, []);\r\n    const unMuteAudio = useCallback(() => {\r\n        var _a;\r\n        setAudioMuted(false);\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((t) => (t.enabled = true));\r\n    }, []);\r\n    const muteVideo = useCallback(() => {\r\n        var _a;\r\n        setVideoMuted(true);\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getVideoTracks().forEach((t) => (t.enabled = false));\r\n    }, []);\r\n    const unMuteVideo = useCallback(() => {\r\n        var _a;\r\n        setVideoMuted(false);\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getVideoTracks().forEach((t) => (t.enabled = true));\r\n    }, []);\r\n    const pause = useCallback(() => {\r\n        muteAudio();\r\n        muteVideo();\r\n    }, [muteAudio, muteVideo]);\r\n    const resume = useCallback(() => {\r\n        unMuteAudio();\r\n        unMuteVideo();\r\n    }, [unMuteAudio, unMuteVideo]);\r\n    useEffect(() => {\r\n        if (!ref.current)\r\n            return;\r\n        ref.current.srcObject = stream.current;\r\n    }, [isPlaying]);\r\n    useEffect(() => {\r\n        if (autoSwitch && stream.current)\r\n            restart();\r\n    }, [videoDeviceId, audioDeviceId, autoSwitch, restart]);\r\n    return {\r\n        isSupported,\r\n        ref,\r\n        stream,\r\n        isPlaying,\r\n        play,\r\n        stop,\r\n        restart,\r\n        isAudioMuted,\r\n        muteAudio,\r\n        unMuteAudio,\r\n        isVideoMuted,\r\n        muteVideo,\r\n        unMuteVideo,\r\n        pause,\r\n        resume,\r\n        isPaused: isAudioMuted && isVideoMuted\r\n    };\r\n}\n\n/**\r\n * Run a function synchronously when a component is mounted and after DOM is painted.\r\n *\r\n * @deprecated This hook breaks in React 18's strict mode, since it's not idempotent\r\n *\r\n * @param callback function to be executed\r\n */\r\nfunction useMountSync(callback) {\r\n    useLayoutEffect(callback, []);\r\n}\n\n/**\r\n *\r\n * Reactive mouse position based by page or client\r\n *\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useMouse\r\n */\r\nfunction useMouse(options = {}) {\r\n    const { touch = true, type = 'client', resetOnTouchEnds = false, initialValue = { x: 0, y: 0 } } = options;\r\n    const [x, setX] = useState(initialValue.x);\r\n    const [y, setY] = useState(initialValue.y);\r\n    const [source, setSource] = useState(null);\r\n    useEffect(() => {\r\n        const mouseHandler = (event) => {\r\n            setSource('mouse');\r\n            if (type === 'page') {\r\n                setX(event.pageX);\r\n                setY(event.pageY);\r\n            }\r\n            else if (type === 'client') {\r\n                setX(event.clientX);\r\n                setY(event.clientY);\r\n            }\r\n        };\r\n        const reset = () => {\r\n            setX(initialValue.x);\r\n            setY(initialValue.y);\r\n        };\r\n        const touchHandler = (event) => {\r\n            if (event.touches.length > 0) {\r\n                setSource('touch');\r\n                if (type === 'page') {\r\n                    setX(event.touches[0].pageX);\r\n                    setY(event.touches[0].pageY);\r\n                }\r\n                else if (type === 'client') {\r\n                    setX(event.touches[0].clientX);\r\n                    setY(event.touches[0].clientY);\r\n                }\r\n            }\r\n        };\r\n        window.addEventListener('mousemove', mouseHandler, { passive: true });\r\n        window.addEventListener('dragover', mouseHandler, { passive: true });\r\n        if (touch) {\r\n            window.addEventListener('touchstart', touchHandler, { passive: true });\r\n            window.addEventListener('touchmove', touchHandler, { passive: true });\r\n            if (resetOnTouchEnds)\r\n                window.addEventListener('touchend', reset, { passive: true });\r\n        }\r\n        return () => {\r\n            window.removeEventListener('mousemove', mouseHandler);\r\n            window.removeEventListener('dragover', mouseHandler);\r\n            if (touch) {\r\n                window.removeEventListener('touchstart', touchHandler);\r\n                window.removeEventListener('touchmove', touchHandler);\r\n                if (resetOnTouchEnds)\r\n                    window.removeEventListener('touchend', reset);\r\n            }\r\n        };\r\n    }, [initialValue.x, initialValue.y, resetOnTouchEnds, touch, type]);\r\n    return { x, y, source };\r\n}\n\n/**\r\n * Watch for changes being made to the DOM tree.\r\n *\r\n * @param target - React ref or DOM node\r\n * @param callback - callback to execute when mutations are observed\r\n * @param options - Options passed to mutation observer\r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\r\n * @see https://react-hooks-library.vercel.app/core/useMutationObserver\r\n */\r\nfunction useMutationObserver(target, callback, options = {}) {\r\n    const observer = useRef(null);\r\n    const isSupported = useIsSupported(() => !!(_window === null || _window === void 0 ? void 0 : _window.IntersectionObserver));\r\n    const stop = useCallback(() => {\r\n        if (!observer.current)\r\n            return;\r\n        observer.current.disconnect();\r\n        observer.current = null;\r\n    }, []);\r\n    useUnMount(stop);\r\n    useEffect(() => {\r\n        var _a;\r\n        const el = unRef(target);\r\n        if (!(isSupported && el && _window))\r\n            return;\r\n        observer.current = new _window.MutationObserver(callback);\r\n        (_a = observer.current) === null || _a === void 0 ? void 0 : _a.observe(el, options);\r\n        return stop;\r\n    }, [callback, stop, options, target, isSupported]);\r\n    return {\r\n        isSupported,\r\n        stop\r\n    };\r\n}\n\n/**\r\n * Reactive Network status.\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useNetwork\r\n */\r\nfunction useNetwork() {\r\n    var _a, _b, _c, _d, _e, _f;\r\n    const isSupported = useIsSupported(() => !!(_navigator === null || _navigator === void 0 ? void 0 : _navigator.connection));\r\n    const [isOnline, setIsOnline] = useState(true);\r\n    const [offlineAt, setOfflineAt] = useState(undefined);\r\n    const connection = useRef(undefined);\r\n    const rerender = useState({})[1];\r\n    useMount(() => {\r\n        if (!_navigator)\r\n            return;\r\n        setIsOnline(_navigator.onLine);\r\n        setOfflineAt(isOnline ? undefined : Date.now());\r\n        const _connection = _navigator === null || _navigator === void 0 ? void 0 : _navigator.connection;\r\n        if (!_connection)\r\n            return;\r\n        connection.current = _connection;\r\n        connection.current.onchange = () => rerender({});\r\n    });\r\n    useEventListener('offline', () => {\r\n        setIsOnline(false);\r\n        setOfflineAt(Date.now());\r\n    });\r\n    useEventListener('online', () => {\r\n        setIsOnline(true);\r\n    });\r\n    return {\r\n        isSupported,\r\n        isOnline,\r\n        offlineAt,\r\n        saveData: (_a = connection.current) === null || _a === void 0 ? void 0 : _a.saveData,\r\n        rtt: (_b = connection.current) === null || _b === void 0 ? void 0 : _b.rtt,\r\n        downlink: (_c = connection.current) === null || _c === void 0 ? void 0 : _c.downlink,\r\n        downlinkMax: (_d = connection.current) === null || _d === void 0 ? void 0 : _d.downlinkMax,\r\n        effectiveType: (_e = connection.current) === null || _e === void 0 ? void 0 : _e.effectiveType,\r\n        type: (_f = connection.current) === null || _f === void 0 ? void 0 : _f.type\r\n    };\r\n}\n\n/**\r\n * Reactive online status\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useOnline\r\n */\r\nfunction useOnline() {\r\n    const [online, setOnline] = useState(false);\r\n    useMount(() => {\r\n        setOnline(navigator.onLine);\r\n    });\r\n    useEventListener('offline', () => {\r\n        setOnline(false);\r\n    });\r\n    useEventListener('online', () => {\r\n        setOnline(true);\r\n    });\r\n    return online;\r\n}\n\n/**\r\n * Reactive prefers-color-scheme media query.\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/usePreferredColorScheme\r\n */\r\nfunction usePreferredColorScheme() {\r\n    const isDark = useMediaQuery('(prefers-color-scheme: dark)');\r\n    return isDark ? 'dark' : 'light';\r\n}\n\n/**\r\n * Returns the value of the argument from the previous render\r\n * @param {T} value\r\n * @returns {T | undefined} previous value\r\n * @see https://react-hooks-library.vercel.app/core/usePrevious\r\n */\r\nfunction usePrevious(value) {\r\n    const ref = useRef();\r\n    useEffect(() => {\r\n        ref.current = value;\r\n    }, [value]);\r\n    return ref.current;\r\n}\n\n/**\r\n * Reactive screen sharing\r\n *\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useScreenShare\r\n */\r\nfunction useScreenShare(options = {}) {\r\n    const { audio = true, video = true } = options;\r\n    const isSupported = useIsSupported(() => { var _a; return !!((_a = _navigator === null || _navigator === void 0 ? void 0 : _navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getDisplayMedia); });\r\n    const stream = useRef(null);\r\n    const ref = useRef(null);\r\n    const [isPlaying, setPlaying] = useState(false);\r\n    const play = useCallback(async () => {\r\n        var _a;\r\n        if (!isSupported || !ref.current)\r\n            return;\r\n        stream.current =\r\n            (_a = (await (_navigator === null || _navigator === void 0 ? void 0 : _navigator.mediaDevices.getDisplayMedia({\r\n                audio,\r\n                video\r\n            })))) !== null && _a !== void 0 ? _a : null;\r\n        setPlaying(true);\r\n        return stream.current;\r\n    }, [audio, isSupported, video]);\r\n    const stop = useCallback(() => {\r\n        var _a;\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getTracks().forEach((t) => t.stop());\r\n        stream.current = null;\r\n        setPlaying(false);\r\n    }, []);\r\n    useEffect(() => {\r\n        var _a;\r\n        if (!ref.current)\r\n            return;\r\n        ref.current.srcObject = stream.current;\r\n        // Handle os native stop screen sharing buttons\r\n        (_a = stream.current) === null || _a === void 0 ? void 0 : _a.getVideoTracks()[0].addEventListener('ended', stop);\r\n    }, [isPlaying, stop]);\r\n    return {\r\n        isSupported,\r\n        isPlaying,\r\n        ref,\r\n        stream,\r\n        play,\r\n        stop\r\n    };\r\n}\n\n/**\r\n * Reactive scroll values for a react ref or a dom node\r\n *\r\n * @param target - dom node or react ref\r\n * @param callback - callback to run on scroll\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useScroll\r\n */\r\nfunction useScroll(target = _document === null || _document === void 0 ? void 0 : _document.documentElement, callback) {\r\n    const getPositions = () => {\r\n        const el = unRef(target);\r\n        if (!el)\r\n            return;\r\n        return {\r\n            x: round(el.scrollLeft / (el.scrollWidth - el.clientWidth)),\r\n            y: round(el.scrollTop / (el.scrollHeight - el.clientHeight))\r\n        };\r\n    };\r\n    useEventListener(target, 'scroll', () => {\r\n        const newScrollValues = getPositions();\r\n        if (!newScrollValues)\r\n            return;\r\n        const { x, y } = newScrollValues;\r\n        callback({ scrollX: x, scrollY: y });\r\n    }, {\r\n        capture: false,\r\n        passive: true\r\n    });\r\n}\n\n/**\r\n *\r\n * A hook to scroll an element into view on mounting.\r\n *\r\n * @param options {UseScrollIntoViewOptions}\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useScrollIntoView\r\n */\r\nfunction useScrollIntoView(target, options = {}) {\r\n    const { behavior = 'auto', block = 'start', inline = 'nearest', scrollMargin = '0px', predicate = true } = options;\r\n    useMount(() => {\r\n        const el = unRef(target);\r\n        if (!(el && (isFunction(predicate) ? predicate() : predicate))) {\r\n            return;\r\n        }\r\n        el.style.scrollMargin = scrollMargin;\r\n        el.scrollIntoView({\r\n            behavior,\r\n            block,\r\n            inline\r\n        });\r\n    });\r\n}\n\n/**\r\n * Modified `useState` hook that syncs with useSessionStorage.\r\n *\r\n * @param key\r\n * @param initialValue\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useSessionStorage\r\n */\r\nfunction useSessionStorage(key, initialValue, options) {\r\n    const [storedValue, setStoredValue] = useState(initialValue);\r\n    const { deserialize = JSON.parse, serialize = JSON.stringify } = options || {};\r\n    useMount(() => {\r\n        try {\r\n            const item = sessionStorage.getItem(key);\r\n            item && setStoredValue(deserialize(item));\r\n        }\r\n        catch (error) {\r\n            console.error(error);\r\n        }\r\n    });\r\n    const setValue = useCallback((value) => {\r\n        try {\r\n            setStoredValue(value);\r\n            sessionStorage.setItem(key, serialize(value));\r\n        }\r\n        catch (error) {\r\n            console.error(error);\r\n        }\r\n    }, [key, serialize]);\r\n    return [storedValue, setValue];\r\n}\n\n/**\r\n * useState hook with custom compare function to avoid re-rendering\r\n * when state is the same, compares with previous state\r\n *\r\n *\r\n * Note: create a custom compare function, outside of the hook to keep\r\n * a stable reference, otherwise it will be recreated on every render\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useStateCompare\r\n */\r\nfunction useStateCompare({ initialValue, compare }) {\r\n    const [state, _setState] = useState(initialValue);\r\n    const setState = useCallback((value) => {\r\n        typeof value === 'function'\r\n            ? _setState(value)\r\n            : _setState((oldValue) => compare(oldValue, value));\r\n    }, [compare]);\r\n    return [state, setState];\r\n}\n\n/**\r\n *\r\n * useState with built in undo and redo history control\r\n *\r\n * @param defaultValue\r\n * @param options\r\n * @returns\r\n */\r\nfunction useStateHistory(defaultValue, options = {}) {\r\n    const { maxHistory = 10 } = options;\r\n    const [state, setState] = useState(defaultValue);\r\n    const lastSaved = useRef(isFunction(defaultValue) ? defaultValue() : defaultValue);\r\n    const rerender = useState({})[1];\r\n    const actionHistory = useRef([]);\r\n    const redoHistory = useRef([]);\r\n    const redoAllowed = useRef(false);\r\n    const push = useCallback((value) => {\r\n        if (actionHistory.current.length < maxHistory) {\r\n            actionHistory.current.push(value);\r\n        }\r\n        else {\r\n            actionHistory.current = [...actionHistory.current.slice(1), value];\r\n            lastSaved.current = actionHistory.current[0];\r\n        }\r\n        redoAllowed.current = false;\r\n        setState(value);\r\n    }, [maxHistory]);\r\n    const redo = useCallback(() => {\r\n        if (!(redoHistory.current.length && redoAllowed.current))\r\n            return;\r\n        const lastUndoState = redoHistory.current.pop();\r\n        lastUndoState && push(lastUndoState);\r\n        redoAllowed.current = true;\r\n    }, [push]);\r\n    const undo = useCallback(() => {\r\n        if (actionHistory.current.length < 1)\r\n            return;\r\n        const lastState = actionHistory.current.pop();\r\n        lastState && redoHistory.current.push(lastState);\r\n        const prev = actionHistory.current[actionHistory.current.length - 1];\r\n        prev ? setState(prev) : setState(lastSaved.current);\r\n        rerender({});\r\n        redoAllowed.current = true;\r\n    }, [rerender]);\r\n    const reset = useCallback(() => {\r\n        var _a;\r\n        if (!((_a = actionHistory.current) === null || _a === void 0 ? void 0 : _a.length))\r\n            return;\r\n        setState(actionHistory.current[0]);\r\n        actionHistory.current = [actionHistory.current[0]];\r\n    }, []);\r\n    return {\r\n        state,\r\n        push,\r\n        undo,\r\n        redo,\r\n        reset,\r\n        history: actionHistory.current,\r\n        redoAllowed: redoAllowed.current\r\n    };\r\n}\n\n/**\r\n * Reactive document title hook\r\n *\r\n * Set title or observe dom mutation reactively\r\n *\r\n * @param newTitle optional\r\n * @see https://react-hooks-library.vercel.app/core/useTitle\r\n */\r\nfunction useTitle(newTitle) {\r\n    const [title, setTitle] = useState(newTitle !== null && newTitle !== void 0 ? newTitle : '');\r\n    useMount(() => {\r\n        var _a;\r\n        setTitle((_a = (newTitle || (_document === null || _document === void 0 ? void 0 : _document.title))) !== null && _a !== void 0 ? _a : '');\r\n    });\r\n    useEffect(() => {\r\n        document.title = title;\r\n    }, [title]);\r\n    useMutationObserver(_document === null || _document === void 0 ? void 0 : _document.head.querySelector('title'), () => {\r\n        if (document.title !== title)\r\n            setTitle(document.title);\r\n    }, { childList: true });\r\n    return { title, setTitle };\r\n}\n\n/**\r\n * A state toggle hook\r\n *\r\n * @param defaultValue\r\n * @default false\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useToggle\r\n */\r\nfunction useToggle(defaultValue = false) {\r\n    const [bool, setBool] = useState(defaultValue);\r\n    const toggle = useCallback(() => setBool((s) => !s), []);\r\n    const setTrue = useCallback(() => setBool(true), []);\r\n    const setFalse = useCallback(() => setBool(false), []);\r\n    return { bool, toggle, setTrue, setFalse };\r\n}\n\n/**\r\n * Reactive window size.\r\n *\r\n * @param options\r\n *\r\n * @see https://react-hooks-library.vercel.app/core/useWindowSize\r\n */\r\nfunction useWindowSize({ initialWidth = Infinity, initialHeight = Infinity } = {}) {\r\n    const [width, setWidth] = useState(initialWidth);\r\n    const [height, setHeight] = useState(initialHeight);\r\n    useMount(() => {\r\n        setWidth(window.innerWidth);\r\n        setHeight(window.innerHeight);\r\n    });\r\n    useEventListener('resize', () => {\r\n        setWidth(window.innerWidth);\r\n        setHeight(window.innerHeight);\r\n    }, { passive: true });\r\n    return { width, height };\r\n}\n\nexport { BreakPointHooks, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, useActiveElement, useAsyncCallback, useClickOutside, useDebounce, useEffectAfterMount, useEventListener, useFont, useHasMounted, useHover, useIntersectionObserver, useInterval, useIsSupported, useKeyDown, useKeyPressed, useKeyStroke, useKeyUp, useLocalStorage, useLocation, useMediaQuery, useMediaStream, useMount, useMountSync, useMouse, useMutationObserver, useNetwork, useOnline, usePreferredColorScheme, usePrevious, useScreenShare, useScroll, useScrollIntoView, useSessionStorage, useStateCompare, useStateHistory, useTitle, useToggle, useUnMount, useWindowSize };\n", "import { type ReactNode } from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\nimport \"./Button.module.scss\";\n\nexport function Button({\n  children,\n  onClick,\n  disabled,\n}: InferProps<typeof Button.propTypes>): JSX.Element {\n  return (\n    <>\n      <button\n        className=\"gd-school-mdx-component-button\"\n        onClick={(event) => onClick?.(event)}\n        disabled={disabled ?? false}\n      >\n        {children as ReactNode}\n      </button>\n    </>\n  );\n}\nButton.propTypes = {\n  children: PropTypes.node,\n  onClick: PropTypes.func,\n  disabled: PropTypes.bool,\n};\n", "import { type ReactNode } from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Small({\n  children,\n}: InferProps<typeof Small.propTypes>): JSX.Element {\n  return <small>{children as ReactNode}</small>;\n}\nSmall.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import PropTypes, { type InferProps } from \"prop-types\";\n\nexport function Title({\n  children,\n}: InferProps<typeof Title.propTypes>): JSX.Element {\n  return <>{children}</>;\n}\nTitle.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.node,\n    PropTypes.arrayOf(PropTypes.node),\n  ]),\n};\n", "import {\n  Children,\n  isValidElement,\n  cloneElement,\n  useState,\n  useEffect,\n  type ReactNode,\n  useRef,\n} from \"react\";\nimport PropTypes, { type InferProps } from \"prop-types\";\n\ninterface WithPointsState {\n  submitted: boolean;\n}\n\nconst DEFAULT_RIGHT_ANSWER_POINTS = 1;\n\nexport function WithPoints({\n  children,\n  id,\n  points,\n  hidden,\n  usePoints,\n}: InferProps<typeof WithPoints.propTypes>): JSX.Element {\n  if (id == null || id.length === 0) {\n    throw new Error(\"WithPoints id is null or empty\");\n  }\n\n  if (id.match(/^\\s$/g) != null) {\n    throw new Error(\"WithPoints id has whitespace in it\");\n  }\n\n  const rightAnswerPoints = points ?? DEFAULT_RIGHT_ANSWER_POINTS;\n\n  const rootRef = useRef<HTMLDivElement | null>(null);\n  const [state, setState] = useState<WithPointsState>({\n    submitted: false,\n  });\n\n  let registerAnswer: ((id: string, points: number) => void) | null = null;\n  if (usePoints != null) {\n    ({ registerAnswer } = usePoints());\n  }\n\n  useEffect(() => {\n    if (rootRef.current == null) {\n      return;\n    }\n\n    let foundPrevious = false;\n    let previousSibling = rootRef.current.previousElementSibling;\n    while (previousSibling != null) {\n      if (\n        previousSibling instanceof HTMLElement &&\n        previousSibling.dataset.exercise != null\n      ) {\n        foundPrevious = true;\n        break;\n      }\n      // Continue the loop.\n      previousSibling = previousSibling.previousElementSibling;\n    }\n\n    if (!foundPrevious) {\n      let nextSibling = rootRef.current.nextElementSibling;\n      while (nextSibling != null) {\n        if (nextSibling instanceof HTMLElement) {\n          nextSibling.hidden = true;\n        }\n        // Continue the loop.\n        nextSibling = nextSibling.nextElementSibling;\n      }\n    }\n  }, []);\n\n  useEffect(() => {\n    if (rootRef.current == null) {\n      return;\n    }\n\n    rootRef.current.dataset.exercise = \"\";\n\n    if (state.submitted) {\n      rootRef.current.dataset.exerciseSubmitted = \"\";\n    } else {\n      delete rootRef.current.dataset.exerciseSubmitted;\n    }\n  }, [state, rootRef.current]);\n\n  const onSubmit = (): void => {\n    const localState = { ...state };\n    localState.submitted = true;\n    setState(localState);\n\n    if (rootRef.current == null) {\n      return;\n    }\n\n    let nextSibling = rootRef.current.nextElementSibling;\n    while (nextSibling != null) {\n      if (nextSibling instanceof HTMLElement) {\n        nextSibling.hidden = false;\n        if (nextSibling.dataset.exercise != null) {\n          nextSibling.dispatchEvent(new CustomEvent(\"exerciseupdate\"));\n          break;\n        }\n      }\n      // Continue the loop.\n      nextSibling = nextSibling.nextElementSibling;\n    }\n  };\n\n  const onRightAnswer = (): void => {\n    registerAnswer?.(id, rightAnswerPoints);\n  };\n  const onWrongAnswer = (): void => {\n    registerAnswer?.(id, 0);\n  };\n\n  const childrenWithProps = Children.map(children, (child) => {\n    if (isValidElement(child)) {\n      return cloneElement<any>(child, {\n        onSubmit,\n        onRightAnswer,\n        onWrongAnswer,\n      });\n    }\n    return child;\n  });\n\n  return (\n    <div ref={rootRef} data-exercise-id={id} hidden={hidden ?? false}>\n      <>{childrenWithProps as ReactNode}</>\n    </div>\n  );\n}\n\nWithPoints.propTypes = {\n  children: PropTypes.node.isRequired,\n  id: PropTypes.string.isRequired,\n  points: PropTypes.number,\n  hidden: PropTypes.bool,\n  usePoints: PropTypes.func,\n};\n"],
  "mappings": "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",
  "names": ["PropTypes", "jsx", "PropTypes", "Fragment", "jsx", "PropTypes", "Fragment", "jsx", "PropTypes", "css", "Fragment", "jsx", "jsxs", "useState", "useEffect", "PropTypes", "css", "MAYBE_ITERATOR_SYMBOL", "maybeIterator", "maybeIterable", "FAUX_ITERATOR_SYMBOL", "r", "ReactSharedInternals", "React", "_len2", "args", "_key2", "printWarning", "level", "format", "ReactDebugCurrentFrame", "stack", "item", "argsWithFormat", "REACT_MODULE_REFERENCE", "type", "REACT_FRAGMENT_TYPE", "REACT_PROFILER_TYPE", "enableDebugTracing", "REACT_STRICT_MODE_TYPE", "REACT_SUSPENSE_TYPE", "REACT_SUSPENSE_LIST_TYPE", "enableLegacyHidden", "REACT_OFFSCREEN_TYPE", "enableScopeAPI", "enableCacheElement", "enableTransitionTracing", "REACT_LAZY_TYPE", "REACT_MEMO_TYPE", "REACT_PROVIDER_TYPE", "REACT_CONTEXT_TYPE", "REACT_FORWARD_REF_TYPE", "getWrappedName", "outerType", "innerType", "wrapperName", "displayName", "functionName", "error", "REACT_PORTAL_TYPE", "context", "getContextName", "provider", "outerName", "lazyComponent", "payload", "init", "assign", "prevLog", "prevInfo", "prevWarn", "prevError", "prevGroup", "prevGroupCollapsed", "prevGroupEnd", "disabledLog", "disableLogs", "disabledDepth", "reenableLogs", "props", "ReactCurrentDispatcher", "prefix", "describeBuiltInComponentFrame", "name", "source", "ownerFn", "match", "x", "componentFrameCache", "PossiblyWeakMap", "describeNativeComponentFrame", "fn", "construct", "reentry", "frame", "previousPrepareStackTrace", "previousDispatcher", "Fake", "s", "c", "sampleLines", "controlLines", "_frame", "describeFunctionComponentFrame", "prototype", "Component", "describeUnknownElementTypeFrameInDEV", "hasOwnProperty", "owner", "element", "typeSpecName", "typeSpecs", "has", "error$1", "err", "componentName", "location", "values", "setCurrentlyValidatingElement", "loggedTypeFailures", "isArrayImpl", "a", "hasToStringTag", "value", "testStringCoercion", "willCoercionThrow", "ReactCurrentOwner", "RESERVED_PROPS", "specialPropKeyWarningShown", "specialPropRefWarningShown", "didWarnAboutStringRefs", "getter", "config", "warnIfStringRefCannotBeAutoConverted", "self", "defineKeyPropWarningGetter", "warnAboutAccessingKey", "defineRefPropWarningGetter", "warnAboutAccessingRef", "ReactElement", "key", "ref", "maybeKey", "checkKeyStringCoercion", "hasValidKey", "hasValidRef", "propName", "defaultProps", "ReactCurrentOwner$1", "ReactDebugCurrentFrame$1", "propTypesMisspellWarningShown", "object", "REACT_ELEMENT_TYPE", "getDeclarationErrorAddendum", "fileName", "lineNumber", "info", "parentName", "parentType", "validateExplicitKey", "currentComponentErrorInfo", "getCurrentComponentErrorInfo", "ownerHasKeyUseWarning", "childOwner", "getComponentNameFromType", "setCurrentlyValidatingElement$1", "validateChildKeys", "node", "isArray", "i", "child", "isValidElement", "iteratorFn", "getIteratorFn", "step", "propTypes", "checkPropTypes", "_name", "keys", "fragment", "jsxWithValidation", "isStaticChildren", "validType", "isValidElementType", "sourceInfo", "getSourceInfoErrorAddendum", "typeString", "jsxDEV", "children", "validateFragmentProps", "validatePropTypes", "reactJsxDevRuntime_development", "jsxDEV$1", "jsxDevRuntime", "requireReactJsxDevRuntime_production_min", "requireReactJsxDevRuntime_development", "useIntersectionObserver", "elementRef", "threshold", "root", "rootMargin", "freezeOnceVisible", "entry", "setEntry", "useState", "frozen", "updateEntry", "useEffect", "observerParams", "observer", "DEFAULT_PATHNAME", "GdExerciseWrapper", "loader", "dataPath", "mainScene", "openFiles", "height", "hideCode", "hideConsole", "hidePlayer", "hideTest", "snippet", "iframeRef", "useRef", "wrapperRef", "isVisible", "loaderUrl", "openFile", "getFocus", "_a", "jsxDevRuntimeExports", "jsx", "jsxs", "useState", "useEffect", "css", "PropTypes", "PropTypes", "Fragment", "jsx", "PropTypes", "Fragment", "jsx", "PropTypes", "Fragment", "jsx", "PropTypes", "Fragment", "jsx", "PropTypes", "Fragment", "jsx", "useRef", "useState", "useEffect", "PropTypes", "css", "useEffect", "useState", "useEffect", "PropTypes", "Fragment", "jsx", "PropTypes", "Fragment", "jsx", "jsxs", "useRef", "useState", "useEffect", "state", "css", "PropTypes", "PropTypes", "jsx", "PropTypes", "Fragment", "jsx", "useState", "useEffect", "useRef", "PropTypes", "Fragment", "jsx"]
}
