{
  "version": 3,
  "sources": ["../../../node_modules/events/events.js", "../src/renderer/components/lib/utils/flush.tsx", "../src/renderer/app/game/save/gameSaveHooks.tsx", "../../shared/dist/index.mjs", "../src/shared/utils/object.ts", "../src/renderer/app/game/requestMain.ts", "../src/shared/types/save.ts", "../src/shared/utils/error.ts", "../src/renderer/components/BaseAppRoot.tsx", "../src/renderer/components/lib/App.tsx", "../src/renderer/app/app.ts", "../src/renderer/app/api.ts", "../src/renderer/app/utils/appState.ts", "../src/renderer/components/lib/providers/AppProvider.tsx", "../src/shared/utils/function.ts", "../src/shared/utils/array.ts", "../src/renderer/components/Announcers/Recovery.tsx", "../src/renderer/components/lib/AppPlayer.tsx", "../src/renderer/components/errorHandling/ErrorBoundary.tsx", "../src/renderer/components/errorHandling/CriticalErrorBoundary.tsx", "../src/renderer/components/errorHandling/RouterErrorFallback.tsx", "../src/renderer/components/errorHandling/RouterErrorBoundary.tsx", "../../../node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/index.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/context/LayoutGroupContext.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/utils/use-constant.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/context/PresenceContext.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/context/MotionConfigContext.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/components/AnimatePresence/utils.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs", "../../../node_modules/motion/dist/es/framer-motion/dist/es/utils/is-browser.mjs", "../src/renderer/components/lib/pages/Pages.tsx", ":src/renderer/components/errorHandling/base-app-error-fallback.module.css:injector.js", "../src/renderer/components/errorHandling/base-app-error-fallback.module.css", "../src/renderer/components/errorHandling/BaseAppErrorFallback.tsx", "../src/renderer/components/hooks/useAppState.tsx", "../src/renderer/components/hooks/useGamePlayback.tsx"],
  "sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n", "import React from \"react\";\r\n\r\nexport function useFlush(deps: React.DependencyList = []): [VoidFunction] {\r\n    const [, forceUpdate] = React.useReducer(x => x + 1, 0);\r\n\r\n    React.useEffect(() => {\r\n        forceUpdate();\r\n    }, deps);\r\n\r\n    return [forceUpdate];\r\n}\r\n", "import { useFlush } from \"@renderer/components/lib/utils/flush\";\r\nimport { LiveGame, SavedGame, useGame } from \"narraleaf-react\";\r\nimport React, { useEffect } from \"react\";\r\nimport { NarraLeaf, QuickSaveId } from \"@narraleaf/shared\";\r\nimport { safeClone } from \"@shared/utils/object\";\r\nimport { SavedGameMeta } from \"@shared/types/save\";\r\n\r\nexport type UseSaveActionResult = {\r\n    save: (id: string) => Promise<void>;\r\n    read: (id: string) => Promise<SavedGame | null>;\r\n    quickSave: () => Promise<void>;\r\n    quickRead: () => Promise<SavedGame | null>;\r\n};\r\n\r\nexport type UseSavedGameResult = {\r\n    results: SavedGameMeta[] | [],\r\n    error: Error | null,\r\n    isLoading: boolean,\r\n    refetch: () => void,\r\n};\r\n\r\nexport function useCurrentSaved(): SavedGame | null {\r\n    const [flush] = useFlush();\r\n    const game = useGame();\r\n\r\n    const liveGame = game.getLiveGame();\r\n\r\n    useEffect(() => {\r\n        return liveGame.events.depends([\r\n            liveGame.events.on(LiveGame.EventTypes[\"event:menu.choose\"], onStateChange),\r\n            liveGame.events.on(LiveGame.EventTypes[\"event:character.prompt\"], onStateChange),\r\n        ]).cancel;\r\n    }, [liveGame]);\r\n\r\n    function onStateChange() {\r\n        flush();\r\n    }\r\n\r\n    function getSavedGame(): SavedGame | null {\r\n        try {\r\n            return safeClone(liveGame.serialize());\r\n        } catch (e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    return getSavedGame();\r\n}\r\n\r\nexport function useCurrentSavedRef(): React.RefObject<SavedGame | null> {\r\n    const game = useGame();\r\n    const liveGame = game.getLiveGame();\r\n    const ref = React.useRef<SavedGame | null>(null);\r\n\r\n    useEffect(() => {\r\n        return liveGame.events.depends([\r\n            liveGame.events.on(LiveGame.EventTypes[\"event:menu.choose\"], onStateChange),\r\n            liveGame.events.on(LiveGame.EventTypes[\"event:character.prompt\"], onStateChange),\r\n        ]).cancel;\r\n    }, [liveGame]);\r\n\r\n    function onStateChange() {\r\n        ref.current = getSavedGame();\r\n    }\r\n\r\n    function getSavedGame(): SavedGame | null {\r\n        try {\r\n            return safeClone(liveGame.serialize());\r\n        } catch (e) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    return ref;\r\n}\r\n\r\nexport function useSaveAction(): UseSaveActionResult {\r\n    const game = useGame();\r\n\r\n    async function save(name: string): Promise<void> {\r\n        const data = game.getLiveGame().serialize();\r\n\r\n        let preview: undefined | string = undefined;\r\n        try {\r\n            preview = await game.getLiveGame().captureJpeg()\r\n        } catch (e) {\r\n            console.error(e);\r\n        }\r\n        await window[NarraLeaf].game.save.save(data, name, preview);\r\n    }\r\n\r\n    async function read(id: string): Promise<SavedGame | null> {\r\n        const res = await window[NarraLeaf].game.save.read(id);\r\n        if (!res.success) {\r\n            throw new Error(res.error);\r\n        }\r\n        if (!res.data || !(\"savedGame\" in res.data)) {\r\n            return null;\r\n        }\r\n        return res.data.savedGame;\r\n    }\r\n\r\n    async function quickSave(): Promise<void> {\r\n        const data = game.getLiveGame().serialize();\r\n        await window[NarraLeaf].game.save.quickSave(data);\r\n    }\r\n\r\n    async function quickRead(): Promise<SavedGame | null> {\r\n        const res = await window[NarraLeaf].game.save.read(QuickSaveId);\r\n        if (!res.success) {\r\n            return null;\r\n        }\r\n        if (!res.data || !(\"savedGame\" in res.data)) {\r\n            return null;\r\n        }\r\n        return res.data.savedGame;\r\n    }\r\n\r\n    return {\r\n        save,\r\n        read,\r\n        quickSave,\r\n        quickRead,\r\n    };\r\n}\r\n\r\nexport function useSavedGames(deps: React.DependencyList = []): UseSavedGameResult {\r\n    const [results, setResults] = React.useState<SavedGameMeta[]>([]);\r\n    const [error, setError] = React.useState<Error | null>(null);\r\n    const [isLoading, setLoading] = React.useState<boolean>(false);\r\n\r\n    const taskRef = React.useRef<Promise<void> | null>(null);\r\n\r\n    const load = async () => {\r\n        setLoading(true);\r\n        setError(null);\r\n\r\n        const res = await window[NarraLeaf].game.save.list()\r\n        if (!res.success) {\r\n            setLoading(false);\r\n            setError(new Error(res.error));\r\n            return;\r\n        }\r\n\r\n        setResults(res.data);\r\n        setLoading(false);\r\n    };\r\n\r\n    const refetch = () => {\r\n        const currentTask = taskRef.current ?? Promise.resolve();\r\n        const nextTask = currentTask.then(() => load());\r\n\r\n        taskRef.current = nextTask;\r\n        return nextTask;\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        refetch()\r\n    }, deps);\r\n\r\n    return {\r\n        results,\r\n        error,\r\n        isLoading,\r\n        refetch,\r\n    }\r\n}\r\n\r\nexport async function readGame(id: string): Promise<SavedGame | null> {\r\n    const res = await window[NarraLeaf].game.save.read(id);\r\n    if (!res.success) {\r\n        throw new Error(res.error);\r\n    }\r\n    if (!res.data || !(\"savedGame\" in res.data)) {\r\n        return null;\r\n    }\r\n    return res.data.savedGame;\r\n}\r\n", "// src/constants/app.ts\nvar AppProtocol = \"app\";\nvar AppPublicHostName = \"public\";\nvar RendererHomePage = \"home\";\nvar AppHost = /* @__PURE__ */ ((AppHost2) => {\n  AppHost2[\"Public\"] = \"public\";\n  AppHost2[\"Root\"] = \"root\";\n  AppHost2[\"Renderer\"] = \"renderer\";\n  AppHost2[\"DevServer\"] = \"__dev_server\";\n  return AppHost2;\n})(AppHost || {});\nvar QuickSaveId = \"quick-save\";\nvar NarraLeaf = \"NarraLeaf\";\n\n// src/constants/build.ts\nvar RendererOutputFileName = \"App.js\";\nvar RendererOutputHTMLFileName = \"index.html\";\nvar MainOutputFileName = \"main.js\";\nvar DefaultDevServerPort = 5050;\nvar DefaultDevHTTPServerPort = 5051;\nvar ENV_DEV_SERVER_PORT = \"NARRALEAF_DEV_SERVER_PORT\";\nvar PreloadFileName = \"preload.js\";\n\n// src/constants/tempNamespace.ts\nvar TempNamespace = /* @__PURE__ */ ((TempNamespace2) => {\n  TempNamespace2[\"RendererBuild\"] = \"app-build/renderer\";\n  TempNamespace2[\"MainBuild\"] = \"app-build/main\";\n  TempNamespace2[\"RendererBuildTemp\"] = \"app-build/.cache/renderer\";\n  TempNamespace2[\"License\"] = \"app-build/.cache/license\";\n  TempNamespace2[\"Public\"] = \"app-build/public\";\n  return TempNamespace2;\n})(TempNamespace || {});\nvar DevTempNamespace = /* @__PURE__ */ ((DevTempNamespace2) => {\n  DevTempNamespace2[\"MainBuild\"] = \"app-dev/main\";\n  DevTempNamespace2[\"RendererBuild\"] = \"app-dev/renderer\";\n  DevTempNamespace2[\"MainBuildCache\"] = \"app-dev/.cache/main-watch\";\n  DevTempNamespace2[\"RendererBuildCache\"] = \"app-dev/.cache/renderer-watch\";\n  DevTempNamespace2[\"RendererBuildTemp\"] = \"app-dev/.cache/renderer\";\n  return DevTempNamespace2;\n})(DevTempNamespace || {});\n\n// src/constants/platform.ts\nvar MainPlatform = /* @__PURE__ */ ((MainPlatform2) => {\n  MainPlatform2[\"Windows\"] = \"windows\";\n  MainPlatform2[\"Linux\"] = \"linux\";\n  MainPlatform2[\"Mac\"] = \"mac\";\n  return MainPlatform2;\n})(MainPlatform || {});\n\n// src/types/devServer.ts\nvar WSEventType = /* @__PURE__ */ ((WSEventType2) => {\n  WSEventType2[\"Message\"] = \"message\";\n  WSEventType2[\"Request\"] = \"request\";\n  return WSEventType2;\n})(WSEventType || {});\nvar DevServerEvent = /* @__PURE__ */ ((DevServerEvent2) => {\n  DevServerEvent2[\"RequestPageRefresh\"] = \"narraleaf_dev:request_page_refresh\";\n  DevServerEvent2[\"RequestMainQuit\"] = \"narraleaf_dev:request_main_quit\";\n  DevServerEvent2[\"FetchMetadata\"] = \"narraleaf_dev:fetch_metadata\";\n  return DevServerEvent2;\n})(DevServerEvent || {});\n\n// src/targets/base.ts\nvar PlatformBuildTarget = class {\n  constructor(config) {\n    this.config = config;\n  }\n  static isTarget(t) {\n    return t != null && t.__sig === \"BuildTarget\";\n  }\n  static createTarget(targets) {\n    const targetConfigs = [];\n    const buildTargets = Array.isArray(targets) ? targets : [targets];\n    for (const target of buildTargets) {\n      const config = target.toTargetConfiguration();\n      const existingConfig = targetConfigs.find(\n        (c) => c.arch === config.arch && c.target === config.target\n      );\n      if (!existingConfig) {\n        targetConfigs.push(config);\n      }\n    }\n    return targetConfigs;\n  }\n  static createCommonConfig(targets) {\n    const platforms = {};\n    const buildTargets = Array.isArray(targets) ? targets : [targets];\n    for (const target of buildTargets) {\n      const platform = target.getTargetFlag();\n      if (!platforms[platform]) {\n        platforms[platform] = [];\n      }\n      platforms[platform]?.push(target);\n    }\n    return {\n      win: platforms[\"windows\" /* Windows */]?.[0]?.toPlatformConfiguration(),\n      ...platforms[\"windows\" /* Windows */]?.reduce((acc, config) => ({\n        ...acc,\n        ...config.toTargetOptions()\n      }), {}),\n      mac: platforms[\"mac\" /* Mac */]?.[0]?.toPlatformConfiguration(),\n      ...platforms[\"mac\" /* Mac */]?.reduce((acc, config) => ({\n        ...acc,\n        ...config.toTargetOptions()\n      }), {}),\n      linux: platforms[\"linux\" /* Linux */]?.[0]?.toPlatformConfiguration(),\n      ...platforms[\"linux\" /* Linux */]?.reduce((acc, config) => ({\n        ...acc,\n        ...config.toTargetOptions()\n      }), {})\n    };\n  }\n  __sig = \"BuildTarget\";\n};\n\n// src/targets/windows.ts\nvar WindowsBuildTarget = /* @__PURE__ */ ((WindowsBuildTarget2) => {\n  WindowsBuildTarget2[\"nsis\"] = \"nsis\";\n  WindowsBuildTarget2[\"nsisWeb\"] = \"nsis-web\";\n  WindowsBuildTarget2[\"portable\"] = \"portable\";\n  WindowsBuildTarget2[\"appx\"] = \"appx\";\n  WindowsBuildTarget2[\"msi\"] = \"msi\";\n  WindowsBuildTarget2[\"msiWrapped\"] = \"msi-wrapped\";\n  WindowsBuildTarget2[\"squirrel\"] = \"squirrel\";\n  WindowsBuildTarget2[\"sevenZip\"] = \"7z\";\n  WindowsBuildTarget2[\"zip\"] = \"zip\";\n  WindowsBuildTarget2[\"tarXz\"] = \"tar.xz\";\n  WindowsBuildTarget2[\"tarLz\"] = \"tar.lz\";\n  WindowsBuildTarget2[\"tarGz\"] = \"tar.gz\";\n  WindowsBuildTarget2[\"tarBz2\"] = \"tar.bz2\";\n  WindowsBuildTarget2[\"dir\"] = \"dir\";\n  return WindowsBuildTarget2;\n})(WindowsBuildTarget || {});\nvar WindowsConfig = class extends PlatformBuildTarget {\n  constructor(config) {\n    super(config);\n    this.config = config;\n  }\n  static WindowsBuildTarget = WindowsBuildTarget;\n  toTargetConfiguration() {\n    return {\n      target: this.config.target,\n      arch: this.config.arch\n    };\n  }\n  toPlatformConfiguration() {\n    return {\n      signtoolOptions: {\n        sign: null\n      },\n      icon: this.config.icon\n    };\n  }\n  toTargetOptions() {\n    switch (this.config.target) {\n      case \"dir\" /* dir */:\n        return {\n          publish: null\n        };\n      case \"nsis\" /* nsis */:\n      case \"nsis-web\" /* nsisWeb */:\n        return {\n          artifactName: \"${productName}-Setup-${version}.${ext}\"\n        };\n      case \"portable\" /* portable */:\n        return {\n          artifactName: \"${productName}-Portable-${version}.${ext}\"\n        };\n      case \"appx\" /* appx */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"msi\" /* msi */:\n      case \"msi-wrapped\" /* msiWrapped */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"squirrel\" /* squirrel */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"7z\" /* sevenZip */:\n      case \"zip\" /* zip */:\n      case \"tar.xz\" /* tarXz */:\n      case \"tar.lz\" /* tarLz */:\n      case \"tar.gz\" /* tarGz */:\n      case \"tar.bz2\" /* tarBz2 */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      default:\n        throw new Error(`Unsupported Windows target: ${this.config.target}`);\n    }\n  }\n  getTargetFlag() {\n    return \"windows\" /* Windows */;\n  }\n};\n\n// src/targets/mac.ts\nvar MacBuildTarget = /* @__PURE__ */ ((MacBuildTarget2) => {\n  MacBuildTarget2[\"dmg\"] = \"dmg\";\n  MacBuildTarget2[\"zip\"] = \"zip\";\n  MacBuildTarget2[\"tarXz\"] = \"tar.xz\";\n  MacBuildTarget2[\"tarLz\"] = \"tar.lz\";\n  MacBuildTarget2[\"tarGz\"] = \"tar.gz\";\n  MacBuildTarget2[\"tarBz2\"] = \"tar.bz2\";\n  MacBuildTarget2[\"dir\"] = \"dir\";\n  MacBuildTarget2[\"pkg\"] = \"pkg\";\n  MacBuildTarget2[\"mas\"] = \"mas\";\n  MacBuildTarget2[\"masDev\"] = \"mas-dev\";\n  return MacBuildTarget2;\n})(MacBuildTarget || {});\nvar MacConfig = class extends PlatformBuildTarget {\n  constructor(config) {\n    super(config);\n    this.config = config;\n  }\n  toTargetConfiguration() {\n    return {\n      target: this.config.target,\n      arch: this.config.arch\n    };\n  }\n  toPlatformConfiguration() {\n    return {\n      icon: this.config.icon,\n      identity: this.config.identity,\n      hardenedRuntime: this.config.hardenedRuntime,\n      gatekeeperAssess: this.config.gatekeeperAssess,\n      entitlements: this.config.entitlements,\n      entitlementsInherit: this.config.entitlementsInherit,\n      bundleVersion: this.config.bundleVersion,\n      bundleShortVersion: this.config.bundleShortVersion,\n      darkModeSupport: this.config.darkModeSupport,\n      extendInfo: this.config.extendInfo\n    };\n  }\n  toTargetOptions() {\n    switch (this.config.target) {\n      case \"dmg\" /* dmg */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"pkg\" /* pkg */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"zip\" /* zip */:\n      case \"tar.xz\" /* tarXz */:\n      case \"tar.lz\" /* tarLz */:\n      case \"tar.gz\" /* tarGz */:\n      case \"tar.bz2\" /* tarBz2 */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"dir\" /* dir */:\n        return {\n          publish: null\n        };\n      case \"mas\" /* mas */:\n      case \"mas-dev\" /* masDev */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      default:\n        throw new Error(`Unsupported Mac target: ${this.config.target}`);\n    }\n  }\n  getTargetFlag() {\n    return \"mac\" /* Mac */;\n  }\n};\n\n// src/targets/linux.ts\nvar LinuxBuildTarget = /* @__PURE__ */ ((LinuxBuildTarget2) => {\n  LinuxBuildTarget2[\"AppImage\"] = \"AppImage\";\n  LinuxBuildTarget2[\"snap\"] = \"snap\";\n  LinuxBuildTarget2[\"deb\"] = \"deb\";\n  LinuxBuildTarget2[\"rpm\"] = \"rpm\";\n  LinuxBuildTarget2[\"pacman\"] = \"pacman\";\n  LinuxBuildTarget2[\"p5p\"] = \"p5p\";\n  LinuxBuildTarget2[\"apk\"] = \"apk\";\n  LinuxBuildTarget2[\"freebsd\"] = \"freebsd\";\n  LinuxBuildTarget2[\"pkg\"] = \"pkg\";\n  LinuxBuildTarget2[\"zip\"] = \"zip\";\n  LinuxBuildTarget2[\"tarXz\"] = \"tar.xz\";\n  LinuxBuildTarget2[\"tarLz\"] = \"tar.lz\";\n  LinuxBuildTarget2[\"tarGz\"] = \"tar.gz\";\n  LinuxBuildTarget2[\"tarBz2\"] = \"tar.bz2\";\n  LinuxBuildTarget2[\"dir\"] = \"dir\";\n  return LinuxBuildTarget2;\n})(LinuxBuildTarget || {});\nvar LinuxConfig = class extends PlatformBuildTarget {\n  constructor(config) {\n    super(config);\n    this.config = config;\n  }\n  toTargetConfiguration() {\n    return {\n      target: this.config.target,\n      arch: this.config.arch\n    };\n  }\n  toPlatformConfiguration() {\n    return {\n      icon: this.config.icon,\n      category: this.config.category,\n      maintainer: this.config.maintainer,\n      vendor: this.config.vendor,\n      synopsis: this.config.synopsis,\n      description: this.config.description,\n      mimeTypes: this.config.mimeTypes,\n      desktop: this.config.desktop,\n      executableName: this.config.executableName,\n      packageCategory: this.config.packageCategory,\n      compression: this.config.compression\n    };\n  }\n  toTargetOptions() {\n    switch (this.config.target) {\n      case \"AppImage\" /* AppImage */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\",\n          category: this.config.category || \"Development\",\n          license: this.config.license || \"MIT\"\n        };\n      case \"snap\" /* snap */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\",\n          confinement: \"strict\",\n          grade: \"stable\"\n        };\n      case \"deb\" /* deb */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\",\n          depends: this.config.depends || [],\n          recommends: this.config.recommends || [],\n          suggests: this.config.suggests || [],\n          conflicts: this.config.conflicts || [],\n          provides: this.config.provides || []\n        };\n      case \"rpm\" /* rpm */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\",\n          depends: this.config.depends || [],\n          recommends: this.config.recommends || [],\n          suggests: this.config.suggests || [],\n          conflicts: this.config.conflicts || [],\n          provides: this.config.provides || []\n        };\n      case \"pacman\" /* pacman */:\n      case \"p5p\" /* p5p */:\n      case \"apk\" /* apk */:\n      case \"freebsd\" /* freebsd */:\n      case \"pkg\" /* pkg */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"zip\" /* zip */:\n      case \"tar.xz\" /* tarXz */:\n      case \"tar.lz\" /* tarLz */:\n      case \"tar.gz\" /* tarGz */:\n      case \"tar.bz2\" /* tarBz2 */:\n        return {\n          artifactName: \"${productName}-${version}.${ext}\"\n        };\n      case \"dir\" /* dir */:\n        return {\n          publish: null\n        };\n      default:\n        throw new Error(`Unsupported Linux target: ${this.config.target}`);\n    }\n  }\n  getTargetFlag() {\n    return \"linux\" /* Linux */;\n  }\n};\n\n// src/targets/types.ts\nvar ArchType = /* @__PURE__ */ ((ArchType2) => {\n  ArchType2[\"x64\"] = \"x64\";\n  ArchType2[\"ia32\"] = \"ia32\";\n  ArchType2[\"armv7l\"] = \"armv7l\";\n  ArchType2[\"arm64\"] = \"arm64\";\n  ArchType2[\"universal\"] = \"universal\";\n  return ArchType2;\n})(ArchType || {});\n\n// src/targets/index.ts\nvar BuildTarget = class {\n  static Windows(config) {\n    return new WindowsConfig(config);\n  }\n  static Mac(config) {\n    return new MacConfig(config);\n  }\n  static Linux(config) {\n    return new LinuxConfig(config);\n  }\n};\nexport {\n  AppHost,\n  AppProtocol,\n  AppPublicHostName,\n  ArchType,\n  BuildTarget,\n  DefaultDevHTTPServerPort,\n  DefaultDevServerPort,\n  DevServerEvent,\n  DevTempNamespace,\n  ENV_DEV_SERVER_PORT,\n  LinuxBuildTarget,\n  LinuxConfig,\n  MacBuildTarget,\n  MacConfig,\n  MainOutputFileName,\n  MainPlatform,\n  NarraLeaf,\n  PlatformBuildTarget,\n  PreloadFileName,\n  QuickSaveId,\n  RendererHomePage,\n  RendererOutputFileName,\n  RendererOutputHTMLFileName,\n  TempNamespace,\n  WSEventType,\n  WindowsBuildTarget,\n  WindowsConfig\n};\n", "\r\n\r\nexport function safeClone<T>(obj: T): T {\r\n    return JSON.parse(JSON.stringify(obj));\r\n}\r\n", "import { NarraLeaf } from \"@narraleaf/shared\";\r\n\r\nconst api = window[NarraLeaf];\r\n\r\n/**\r\n * Request a main event from the main process.\r\n * @param event - The event to request.\r\n * @param payload - The payload to send to the main process.\r\n * @returns The response from the main process.\r\n * @throws An error if the request fails.\r\n */\r\nexport const requestMain = async <Request, Response>(event: string, ...args: Response extends void ? [payload?: Request] : [payload: Request]): Promise<Response> => {\r\n    const response = await api.app.requestMain<Request, Response>(event, ...args);\r\n    if (response.success) {\r\n        return response.data;\r\n    }\r\n    throw new Error(response.error);\r\n};\r\n", "import type { SavedGameMetaData } from \"narraleaf-react\";\r\nimport { SavedGame } from \"narraleaf-react\";\r\n\r\nexport type SavedGameResult = {\r\n    savedGame: SavedGame;\r\n    metadata: SavedGameMetaData;\r\n} | {\r\n    metadata: SavedGameMetaData;\r\n};\r\n\r\nexport interface SavedGameMeta extends SavedGameMetaData {\r\n    id: string;\r\n    type: SaveType;\r\n    capture?: string;\r\n}\r\n\r\nexport enum SaveType {\r\n    Save = 0,\r\n    QuickSave = 1,\r\n    Recovery = 2,\r\n}\r\n", "\r\nexport class CriticalError extends Error {\r\n    constructor(message: string) {\r\n        super(message);\r\n        this.name = \"CriticalError\";\r\n    }\r\n}\r\n\r\nexport class CriticalMainProcessError extends CriticalError {\r\n    constructor(message: string) {\r\n        super(message);\r\n        this.name = \"CriticalMainProcessError\";\r\n    }\r\n}\r\n\r\nexport class CriticalRendererProcessError extends CriticalError {\r\n    constructor(message: string) {\r\n        super(message);\r\n        this.name = \"CriticalRendererProcessError\";\r\n    }\r\n}\r\n\r\n", "import { NarraLeaf } from \"@narraleaf/shared\";\r\nimport { CriticalRendererProcessError } from \"@shared/utils/error\";\r\nimport React from \"react\";\r\nimport { RendererAppRootProps } from \"./components.types\";\r\nimport { AppInfo } from \"@shared/types/global\";\r\nimport { GameProviders } from \"narraleaf-react\";\r\nimport { App } from \"./lib/App\";\r\nimport { CriticalErrorBoundary } from \"./errorHandling/CriticalErrorBoundary\";\r\nimport { BaseAppErrorFallback } from \"./errorHandling/BaseAppErrorFallback\";\r\n\r\nfunction validateEnv(): void {\r\n    if (!window || !window[NarraLeaf] || !document) {\r\n        throw new CriticalRendererProcessError(\"Invalid environment\");\r\n    }\r\n\r\n    const reactMainVersion = React.version.split(\".\")[0];\r\n    if (reactMainVersion !== \"19\") {\r\n        throw new CriticalRendererProcessError(\"React 19 is required to run NarraLeaf, you are using React \" + reactMainVersion);\r\n    }\r\n}\r\n\r\nfunction validateConfig(config: RendererAppRootProps): void {\r\n    if (!config.metadata.story) {\r\n        throw new Error(\"Story not found in the meta object\");\r\n    }\r\n}\r\n\r\nasync function requestAppInfo(): Promise<{ok: boolean, data: AppInfo | null, error?: Error | null}> {\r\n    try {\r\n        const data = await window[NarraLeaf].getPlatform();\r\n        return {ok: true, data};\r\n    } catch (error) {\r\n        return {ok: false, data: null, error: error as Error};\r\n    }\r\n}\r\n\r\nexport async function render(config: RendererAppRootProps): Promise<void> {\r\n    const {\r\n        renderer,\r\n    } = config;\r\n    const initialTimestamp = Date.now();\r\n\r\n    // Validate environment and config\r\n    validateEnv();\r\n    validateConfig(config);\r\n\r\n    // Request app info\r\n    const {ok, data, error} = await requestAppInfo();\r\n    if (!ok || !data) {\r\n        window[NarraLeaf].app.terminate(error || null);\r\n    }\r\n\r\n    const ErrorFallbackComponent = config.appRouterData.errorHandler?.module?.default || BaseAppErrorFallback;\r\n\r\n    renderer.render(\r\n        <React.StrictMode>\r\n            <CriticalErrorBoundary appInfo={data!} initialTimestamp={initialTimestamp} fallback={ErrorFallbackComponent}>\r\n                <GameProviders>\r\n                    <App appInfo={data!} api={window[NarraLeaf]} config={config} />\r\n                </GameProviders>\r\n            </CriticalErrorBoundary>\r\n        </React.StrictMode>\r\n    );\r\n}\r\n", "import { AppInfo } from \"@shared/types/global\";\r\nimport { NarraLeaf } from \"@narraleaf/shared\";\r\nimport { useGame, useRouter } from \"narraleaf-react\";\r\nimport { App as Application } from \"@renderer/app/app\";\r\nimport { useState } from \"react\";\r\nimport { AppProvider } from \"./providers/AppProvider\";\r\nimport { RendererAppRootProps } from \"../components.types\";\r\nimport { AppPlayer } from \"./AppPlayer\";\r\n\r\ntype AppProps = {\r\n    appInfo: AppInfo;\r\n    config: RendererAppRootProps;\r\n    api: typeof window[typeof NarraLeaf];\r\n};\r\n\r\nexport function App({appInfo, api, config}: AppProps) {\r\n    const game = useGame();\r\n    const router = useRouter();\r\n    const [app] = useState<Application>(() => new Application({\r\n        appInfo,\r\n        game,\r\n        router,\r\n        api,\r\n    }));\r\n\r\n    const AppUserEntry = config.App;\r\n\r\n    return (\r\n        <AppProvider app={app}>\r\n            <AppUserEntry>\r\n                <AppPlayer config={config} />\r\n            </AppUserEntry>\r\n        </AppProvider>\r\n    );\r\n}\r\n\r\n", "import { NarraLeaf } from \"@narraleaf/shared\";\r\nimport { CrashReport } from \"@shared/types/managers\";\r\nimport { CriticalRendererProcessError } from \"@shared/utils/error\";\r\nimport { EventEmitter } from \"events\";\r\nimport { RootPath } from \"narraleaf-react\";\r\nimport { AppAPI } from \"./api\";\r\nimport { AppConfig } from \"./app.types\";\r\nimport { AppState } from \"./utils/appState\";\r\nimport { SaveType } from \"@shared/types/save\";\r\n\r\ntype AppEvents = {};\r\nexport type AppStates = {\r\n    isPlaying: boolean;\r\n};\r\n\r\n\r\nexport class App extends AppAPI {\r\n    static DefaultAppStates: AppStates = {\r\n        isPlaying: false,\r\n    };\r\n\r\n    public readonly events = new EventEmitter<AppEvents>();\r\n    public readonly state = new AppState<AppStates>(App.DefaultAppStates);\r\n    public readonly config: AppConfig;\r\n\r\n    constructor(config: AppConfig) {\r\n        super(config.api);\r\n        this.config = config;\r\n    }\r\n\r\n    public getCrashReport(): CrashReport | null {\r\n        return this.config.appInfo.crashReport;\r\n    }\r\n\r\n    public crash(error: Error | string | null | undefined = null): void {\r\n        window[NarraLeaf].app.terminate(error);\r\n    }\r\n\r\n    public async newGame(): Promise<void> {\r\n        const { game, router } = this.config;\r\n\r\n        router.clear().cleanHistory();\r\n        await game.getLiveGame()\r\n            .newGame()\r\n            .waitForRouterExit().promise;\r\n\r\n        this.state.set(\"isPlaying\", true);\r\n    }\r\n\r\n    public async loadGame(id: string): Promise<void> {\r\n        const { game, router } = this.config;\r\n\r\n        const savedGame = await window[NarraLeaf].game.save.read(id);\r\n        if (!savedGame.success) {\r\n            throw new CriticalRendererProcessError(\"Failed to load game: \" + savedGame.error);\r\n        }\r\n\r\n        if (!savedGame.data || !(\"savedGame\" in savedGame.data)) {\r\n            throw new Error(\"Failed to load game, saved game is corrupted\");\r\n        }\r\n        const data = savedGame.data;\r\n\r\n        router.clear().cleanHistory();\r\n        await game.getLiveGame()\r\n            .newGame()\r\n            .deserialize(data.savedGame);\r\n        await game.getLiveGame().waitForRouterExit().promise;\r\n\r\n        this.state.set(\"isPlaying\", true);\r\n\r\n        // game.getLiveGame().getGameStateForce().events.once(\"event:state.onRender\", () => {\r\n\r\n        // });\r\n    }\r\n\r\n    public async exitGame() {\r\n        const { game, router } = this.config;\r\n\r\n        game.getLiveGame().reset();\r\n        this.state.set(\"isPlaying\", false);\r\n\r\n        router\r\n            .clear()\r\n            .cleanHistory()\r\n            .navigate(RootPath);\r\n    }\r\n\r\n    public async continueGame(): Promise<true | null> {\r\n        const saves = await this.listSaves();\r\n        const latestSave = saves\r\n            .filter(save => save.type === SaveType.Save)\r\n            .sort((a, b) => b.updated - a.updated)[0];\r\n\r\n        if (!latestSave) {\r\n            return null;\r\n        }\r\n\r\n        this.loadGame(latestSave.id);\r\n        return true;\r\n    }\r\n}\r\n", "import { NarraLeaf } from \"@narraleaf/shared\";\r\nimport { SavedGame } from \"narraleaf-react\";\r\nimport { SavedGameMeta } from \"./app.types\";\r\n\r\nexport class GameAPI {\r\n    constructor(\r\n        protected readonly api: typeof window[typeof NarraLeaf],\r\n    ) {}\r\n\r\n    async listSaves(): Promise<SavedGameMeta[]> {\r\n        const res = await this.api.game.save.list();\r\n        if (!res.success) {\r\n            throw new Error(res.error);\r\n        }\r\n        return res.data;\r\n    }\r\n}\r\n\r\nexport class AppAPI extends GameAPI {\r\n    async createRecovery(savedGame: SavedGame) {\r\n        await this.api.game.save.createRecovery(savedGame);\r\n    }\r\n\r\n    public quit() {\r\n        this.api.app.terminate(null);\r\n    }\r\n}\r\n\r\n", "import { Preference } from \"narraleaf-react\";\r\nimport { StringKeyof } from \"@shared/utils/types\";\r\nimport { EventToken } from \"@renderer/app/app.types\";\r\n\r\nexport class AppState<T extends Record<string, any>> extends Preference<T> {\r\n    constructor(settings: T) {\r\n        super(settings);\r\n    }\r\n\r\n    public get<K extends StringKeyof<T>>(key: K): T[K] {\r\n        return this.getPreference(key);\r\n    }\r\n\r\n    public getAll(): T {\r\n        return this.getPreferences();\r\n    }\r\n\r\n    public set<K extends StringKeyof<T>>(key: K, value: T[K]): void {\r\n        this.setPreference(key, value);\r\n    }\r\n\r\n    public onChange<K extends StringKeyof<T>>(key: K, listener: (value: T[K]) => void): EventToken {\r\n        return this.onPreferenceChange(key, listener);\r\n    }\r\n}\r\n", "import React, {ReactNode, useContext} from \"react\";\r\nimport {App} from \"@renderer/app/app\";\r\n\r\ntype ContextType = App;\r\nconst context = React.createContext<ContextType | null>(null);\r\n\r\nexport function AppProvider({children, app}: { children?: ReactNode, app: App; }) {\r\n    return (\r\n        <context.Provider value={app}>\r\n            {children}\r\n        </context.Provider>\r\n    );\r\n}\r\n\r\nexport function useApp(): ContextType {\r\n    const ctx = useContext(context);\r\n    if (!ctx) throw new Error(\"useApp must be used within a Provider\");\r\n    return ctx;\r\n}\r\n", "type ThrottledFunction<T> = ((...args: T[]) => void) & {\r\n    cleanup: () => void;\r\n};\r\nexport function throttle<T>(func: (...args: T[]) => void, limit: number): ThrottledFunction<T> {\r\n    let inThrottle = false;\r\n    let timeoutId: NodeJS.Timeout | null = null;\r\n\r\n    const throttled = function (...args: T[]) {\r\n        if (!inThrottle) {\r\n            func(...args);\r\n            inThrottle = true;\r\n            timeoutId = setTimeout(() => {\r\n                inThrottle = false;\r\n            }, limit);\r\n        }\r\n    };\r\n\r\n    throttled.cleanup = function () {\r\n        if (timeoutId) {\r\n            clearTimeout(timeoutId);\r\n            timeoutId = null;\r\n        }\r\n        inThrottle = false;\r\n    };\r\n\r\n    return throttled;\r\n}", "\r\nexport function remove<T>(array: T[], value: T): void {\r\n    const index = array.indexOf(value);\r\n    if (index !== -1) {\r\n        array.splice(index, 1);\r\n    }\r\n}\r\n\r\nexport class AsyncTaskQueue {\r\n    private tasks: Array<() => Promise<void>> = [];\r\n    private isRunning: boolean = false;\r\n\r\n    public push(task: () => Promise<void>): this {\r\n        this.tasks.push(task);\r\n        this.processQueue();\r\n        return this;\r\n    }\r\n\r\n    public clear(): this {\r\n        this.tasks = [];\r\n        return this;\r\n    }\r\n\r\n    private async processQueue(): Promise<void> {\r\n        if (this.isRunning) return;\r\n\r\n        this.isRunning = true;\r\n        while (this.tasks.length > 0) {\r\n            const task = this.tasks.shift();\r\n            if (task) {\r\n                await task();\r\n            }\r\n        }\r\n        this.isRunning = false;\r\n    }\r\n}\r\n", "import { useCurrentSaved } from \"@renderer/app/game/save/gameSaveHooks\";\r\nimport { throttle } from \"@shared/utils/function\";\r\nimport { useApp } from \"@renderer/components/lib/providers/AppProvider\";\r\nimport { AsyncTaskQueue } from \"@shared/utils/array\";\r\nimport { SavedGame } from \"narraleaf-react\";\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nexport function RecoveryAnnouncer() {\r\n    const currentSaved = useCurrentSaved();\r\n    const queue = useRef(new AsyncTaskQueue());\r\n    const app = useApp();\r\n\r\n    const [throttledSaveHandler] = useState(() => \r\n        throttle(async (savedGame: SavedGame) => {\r\n            queue.current.clear().push(async () => {\r\n                await app.createRecovery(savedGame);\r\n            });\r\n        }, app.config.appInfo.config.recoveryCreationInterval)\r\n    );\r\n\r\n    const createRecovery = useCallback((savedGame: SavedGame) => {\r\n        throttledSaveHandler(savedGame);\r\n    }, [throttledSaveHandler]);\r\n\r\n    useEffect(() => {\r\n        if (currentSaved) {\r\n            createRecovery(currentSaved);\r\n        }\r\n    }, [currentSaved]);\r\n\r\n    return null;\r\n}\r\n", "import { RecoveryAnnouncer } from \"@renderer/components/Announcers/Recovery\";\r\nimport { ErrorInfo, useCallback, useEffect } from \"react\";\r\nimport { useApp } from \"./providers/AppProvider\";\r\nimport { RendererAppRootProps } from \"../components.types\";\r\nimport { Player, useGame } from \"narraleaf-react\";\r\nimport { RootPages } from \"./pages/Pages\";\r\n\r\nexport function AppPlayer({config}: {config: RendererAppRootProps}) {\r\n    const app = useApp();\r\n    const game = useGame();\r\n\r\n    useEffect(() => {\r\n        console.log(\"AppPlayer mounted\");\r\n        \r\n        app.state.set(\"isPlaying\", false);\r\n    }, []);\r\n\r\n    const handleReady = useCallback(() => {\r\n        console.log(\"AppPlayer ready\");\r\n    }, []);\r\n\r\n    const handleEnd = useCallback(() => {\r\n        console.log(\"AppPlayer end\");\r\n\r\n        app.state.set(\"isPlaying\", false);\r\n    }, []);\r\n\r\n    const handleError = (error: Error, errorInfo: ErrorInfo) => {\r\n        console.error(\"AppPlayer error handler\");\r\n        console.error(error, errorInfo);\r\n\r\n        // Throws the error again and bubbles up to the parent error boundary.\r\n        // Used to force NarraLeaf to take over error handling.\r\n        throw error;\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <RecoveryAnnouncer />\r\n            <Player\r\n                story={config.metadata.story}\r\n                onReady={handleReady}\r\n                onEnd={handleEnd}\r\n                onError={handleError}\r\n                width=\"100%\"\r\n                height=\"100%\"\r\n            >\r\n                <RootPages appRouterData={config.appRouterData} />\r\n            </Player>\r\n        </>\r\n    );\r\n}\r\n", "import * as React from \"react\";\r\nimport { ErrorFallbackProps } from \"./errorHandling\";\r\n\r\nexport type ErrorBoundaryProps = {\r\n    children: React.ReactNode;\r\n    fallback?: React.ComponentType<ErrorFallbackProps> | null;\r\n};\r\n\r\nexport class ErrorBoundary<TProps extends ErrorBoundaryProps = ErrorBoundaryProps> extends React.Component<TProps, {\r\n    hasError: boolean;\r\n}> {\r\n    constructor(props: TProps) {\r\n        super(props);\r\n        this.state = { hasError: false };\r\n    }\r\n\r\n    static getDerivedStateFromError(\r\n        error: Error,\r\n    ) {\r\n        return { hasError: true };\r\n    }\r\n\r\n    /**\r\n     * Handle error behavior. Can be overridden by subclasses to customize error handling.\r\n     * @param error - The error that was caught\r\n     * @param info - React error boundary info containing component stack\r\n     * @protected\r\n     */\r\n    protected handleError(\r\n        error: Error,\r\n        info: {\r\n            componentStack: string;\r\n        }\r\n    ): void {}\r\n\r\n    componentDidCatch(\r\n        error: Error,\r\n        info: {\r\n            componentStack: string;\r\n        }\r\n    ) {\r\n        this.handleError(error, info);\r\n    }\r\n\r\n    render() {\r\n        if (this.state.hasError) {\r\n            const FallbackComponent = this.props.fallback as React.ComponentType<ErrorFallbackProps>;\r\n            if (!FallbackComponent) {\r\n                return null;\r\n            }\r\n\r\n            return <FallbackComponent />;\r\n        }\r\n\r\n        return this.props.children;\r\n    }\r\n}\r\n\r\n", "import { AppInfo } from \"@shared/types/global\";\r\nimport { ErrorBoundary, ErrorBoundaryProps } from \"./ErrorBoundary\";\r\nimport { NarraLeaf } from \"@narraleaf/shared\";\r\n\r\nexport interface CriticalErrorBoundaryProps extends ErrorBoundaryProps {\r\n    appInfo: AppInfo;\r\n    children: React.ReactNode;\r\n    initialTimestamp?: number;\r\n};\r\n\r\nexport class CriticalErrorBoundary<T extends CriticalErrorBoundaryProps> extends ErrorBoundary<T> {\r\n    static MINIMUM_RESTART_DELAY = 10;\r\n\r\n    constructor(props: T) {\r\n        super(props);\r\n    }\r\n\r\n    protected handleError(error: Error, info: { componentStack: string; }): void {\r\n        const { appInfo } = this.props;\r\n\r\n        if (!appInfo.isPackaged && appInfo.config.appErrorHandling === \"terminate\") {\r\n            console.warn(\"App is not terminated due to dev mode. In production, the app will be terminated.\");\r\n        }\r\n\r\n        const isRawErrorHandling = \r\n            appInfo.config.appErrorHandling === \"raw\"\r\n            || !appInfo.isPackaged;\r\n        if (isRawErrorHandling) {\r\n            return;\r\n        }\r\n\r\n        const forceTerminate =\r\n            appInfo.config.appErrorHandling === \"terminate\"\r\n            // If the app is crashing too fast, that means the error is happening during the initialization\r\n            || (this.props.initialTimestamp && Date.now() - this.props.initialTimestamp < CriticalErrorBoundary.MINIMUM_RESTART_DELAY);\r\n        if (forceTerminate) {\r\n            window[NarraLeaf].app.terminate(error);\r\n        }\r\n\r\n        const shouldRestart = appInfo.config.appErrorHandling === \"restart\";\r\n        if (shouldRestart) {\r\n            window[NarraLeaf].app.reload();\r\n        }\r\n    }\r\n}\r\n", "\r\n\r\nexport function RouterErrorFallback({path}: {path?: string}) {\r\n    return (\r\n        <>\r\n            <h1>Router Error</h1>\r\n            <p>Something went wrong. Error details have been logged to the renderer console.</p>\r\n            <pre>{path && <p>Source File Path: {path}</p>}</pre>\r\n        </>\r\n    );\r\n}\r\n", "import { CriticalErrorBoundary, CriticalErrorBoundaryProps } from \"./CriticalErrorBoundary\";\r\nimport { RouterErrorFallback } from \"./RouterErrorFallback\";\r\n\r\ninterface RouterErrorBoundaryProps extends CriticalErrorBoundaryProps {\r\n    path?: string;\r\n};\r\n\r\nexport class RouterErrorBoundary extends CriticalErrorBoundary<RouterErrorBoundaryProps> {\r\n    static MINIMUM_RESTART_DELAY = 10;\r\n\r\n    constructor(props: RouterErrorBoundaryProps) {\r\n        super(props);\r\n    }\r\n\r\n    protected handleError(error: Error, info: { componentStack: string; }): void {\r\n        console.error(error);\r\n        console.error(info.componentStack);\r\n\r\n        super.handleError(error, info);\r\n    }\r\n\r\n    render() {\r\n        if (this.state.hasError) {\r\n            const FallbackComponent = this.props.fallback || RouterErrorFallback;\r\n            return <FallbackComponent path={this.props.path} />;\r\n        }\r\n\r\n        return this.props.children;\r\n    }\r\n}\r\n", "\"use client\";\nimport { jsx, Fragment } from 'react/jsx-runtime';\nimport { useMemo, useRef, useState, useContext } from 'react';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { usePresence } from './use-presence.mjs';\nimport { onlyElements, getChildKey } from './utils.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\n/**\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\n *\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\n *\n * Any `motion` components that have an `exit` property defined will animate out when removed from\n * the tree.\n *\n * ```jsx\n * import { motion, AnimatePresence } from 'framer-motion'\n *\n * export const Items = ({ items }) => (\n *   <AnimatePresence>\n *     {items.map(item => (\n *       <motion.div\n *         key={item.id}\n *         initial={{ opacity: 0 }}\n *         animate={{ opacity: 1 }}\n *         exit={{ opacity: 0 }}\n *       />\n *     ))}\n *   </AnimatePresence>\n * )\n * ```\n *\n * You can sequence exit animations throughout a tree using variants.\n *\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\n * once all `motion` components have finished animating out. Likewise, any components using\n * `usePresence` all need to call `safeToRemove`.\n *\n * @public\n */\nconst AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = \"sync\", propagate = false, }) => {\n    const [isParentPresent, safeToRemove] = usePresence(propagate);\n    /**\n     * Filter any children that aren't ReactElements. We can only track components\n     * between renders with a props.key.\n     */\n    const presentChildren = useMemo(() => onlyElements(children), [children]);\n    /**\n     * Track the keys of the currently rendered children. This is used to\n     * determine which children are exiting.\n     */\n    const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);\n    /**\n     * If `initial={false}` we only want to pass this to components in the first render.\n     */\n    const isInitialRender = useRef(true);\n    /**\n     * A ref containing the currently present children. When all exit animations\n     * are complete, we use this to re-render the component with the latest children\n     * *committed* rather than the latest children *rendered*.\n     */\n    const pendingPresentChildren = useRef(presentChildren);\n    /**\n     * Track which exiting children have finished animating out.\n     */\n    const exitComplete = useConstant(() => new Map());\n    /**\n     * Save children to render as React state. To ensure this component is concurrent-safe,\n     * we check for exiting children via an effect.\n     */\n    const [diffedChildren, setDiffedChildren] = useState(presentChildren);\n    const [renderedChildren, setRenderedChildren] = useState(presentChildren);\n    useIsomorphicLayoutEffect(() => {\n        isInitialRender.current = false;\n        pendingPresentChildren.current = presentChildren;\n        /**\n         * Update complete status of exiting children.\n         */\n        for (let i = 0; i < renderedChildren.length; i++) {\n            const key = getChildKey(renderedChildren[i]);\n            if (!presentKeys.includes(key)) {\n                if (exitComplete.get(key) !== true) {\n                    exitComplete.set(key, false);\n                }\n            }\n            else {\n                exitComplete.delete(key);\n            }\n        }\n    }, [renderedChildren, presentKeys.length, presentKeys.join(\"-\")]);\n    const exitingChildren = [];\n    if (presentChildren !== diffedChildren) {\n        let nextChildren = [...presentChildren];\n        /**\n         * Loop through all the currently rendered components and decide which\n         * are exiting.\n         */\n        for (let i = 0; i < renderedChildren.length; i++) {\n            const child = renderedChildren[i];\n            const key = getChildKey(child);\n            if (!presentKeys.includes(key)) {\n                nextChildren.splice(i, 0, child);\n                exitingChildren.push(child);\n            }\n        }\n        /**\n         * If we're in \"wait\" mode, and we have exiting children, we want to\n         * only render these until they've all exited.\n         */\n        if (mode === \"wait\" && exitingChildren.length) {\n            nextChildren = exitingChildren;\n        }\n        setRenderedChildren(onlyElements(nextChildren));\n        setDiffedChildren(presentChildren);\n        /**\n         * Early return to ensure once we've set state with the latest diffed\n         * children, we can immediately re-render.\n         */\n        return;\n    }\n    if (process.env.NODE_ENV !== \"production\" &&\n        mode === \"wait\" &&\n        renderedChildren.length > 1) {\n        console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to \"wait\". This will lead to odd visual behaviour.`);\n    }\n    /**\n     * If we've been provided a forceRender function by the LayoutGroupContext,\n     * we can use it to force a re-render amongst all surrounding components once\n     * all components have finished animating out.\n     */\n    const { forceRender } = useContext(LayoutGroupContext);\n    return (jsx(Fragment, { children: renderedChildren.map((child) => {\n            const key = getChildKey(child);\n            const isPresent = propagate && !isParentPresent\n                ? false\n                : presentChildren === renderedChildren ||\n                    presentKeys.includes(key);\n            const onExit = () => {\n                if (exitComplete.has(key)) {\n                    exitComplete.set(key, true);\n                }\n                else {\n                    return;\n                }\n                let isEveryExitComplete = true;\n                exitComplete.forEach((isExitComplete) => {\n                    if (!isExitComplete)\n                        isEveryExitComplete = false;\n                });\n                if (isEveryExitComplete) {\n                    forceRender === null || forceRender === void 0 ? void 0 : forceRender();\n                    setRenderedChildren(pendingPresentChildren.current);\n                    propagate && (safeToRemove === null || safeToRemove === void 0 ? void 0 : safeToRemove());\n                    onExitComplete && onExitComplete();\n                }\n            };\n            return (jsx(PresenceChild, { isPresent: isPresent, initial: !isInitialRender.current || initial\n                    ? undefined\n                    : false, custom: isPresent ? undefined : custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode, onExitComplete: isPresent ? undefined : onExit, children: child }, key));\n        }) }));\n};\n\nexport { AnimatePresence };\n", "\"use client\";\nimport { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n", "import { useRef } from 'react';\n\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nfunction useConstant(init) {\n    const ref = useRef(null);\n    if (ref.current === null) {\n        ref.current = init();\n    }\n    return ref.current;\n}\n\nexport { useConstant };\n", "\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useCallback, useMemo } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PopChild } from './PopChild.mjs';\n\nconst PresenceChild = ({ children, initial, isPresent, onExitComplete, custom, presenceAffectsLayout, mode, }) => {\n    const presenceChildren = useConstant(newChildrenMap);\n    const id = useId();\n    const memoizedOnExitComplete = useCallback((childId) => {\n        presenceChildren.set(childId, true);\n        for (const isComplete of presenceChildren.values()) {\n            if (!isComplete)\n                return; // can stop searching when any is incomplete\n        }\n        onExitComplete && onExitComplete();\n    }, [presenceChildren, onExitComplete]);\n    const context = useMemo(() => ({\n        id,\n        initial,\n        isPresent,\n        custom,\n        onExitComplete: memoizedOnExitComplete,\n        register: (childId) => {\n            presenceChildren.set(childId, false);\n            return () => presenceChildren.delete(childId);\n        },\n    }), \n    /**\n     * If the presence of a child affects the layout of the components around it,\n     * we want to make a new context value to ensure they get re-rendered\n     * so they can detect that layout change.\n     */\n    presenceAffectsLayout\n        ? [Math.random(), memoizedOnExitComplete]\n        : [isPresent, memoizedOnExitComplete]);\n    useMemo(() => {\n        presenceChildren.forEach((_, key) => presenceChildren.set(key, false));\n    }, [isPresent]);\n    /**\n     * If there's no `motion` components to fire exit animations, we want to remove this\n     * component immediately.\n     */\n    React.useEffect(() => {\n        !isPresent &&\n            !presenceChildren.size &&\n            onExitComplete &&\n            onExitComplete();\n    }, [isPresent]);\n    if (mode === \"popLayout\") {\n        children = jsx(PopChild, { isPresent: isPresent, children: children });\n    }\n    return (jsx(PresenceContext.Provider, { value: context, children: children }));\n};\nfunction newChildrenMap() {\n    return new Map();\n}\n\nexport { PresenceChild };\n", "\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = createContext(null);\n\nexport { PresenceContext };\n", "\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useRef, useContext, useInsertionEffect } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\n\n/**\n * Measurement functionality has to be within a separate component\n * to leverage snapshot lifecycle.\n */\nclass PopChildMeasure extends React.Component {\n    getSnapshotBeforeUpdate(prevProps) {\n        const element = this.props.childRef.current;\n        if (element && prevProps.isPresent && !this.props.isPresent) {\n            const size = this.props.sizeRef.current;\n            size.height = element.offsetHeight || 0;\n            size.width = element.offsetWidth || 0;\n            size.top = element.offsetTop;\n            size.left = element.offsetLeft;\n        }\n        return null;\n    }\n    /**\n     * Required with getSnapshotBeforeUpdate to stop React complaining.\n     */\n    componentDidUpdate() { }\n    render() {\n        return this.props.children;\n    }\n}\nfunction PopChild({ children, isPresent }) {\n    const id = useId();\n    const ref = useRef(null);\n    const size = useRef({\n        width: 0,\n        height: 0,\n        top: 0,\n        left: 0,\n    });\n    const { nonce } = useContext(MotionConfigContext);\n    /**\n     * We create and inject a style block so we can apply this explicit\n     * sizing in a non-destructive manner by just deleting the style block.\n     *\n     * We can't apply size via render as the measurement happens\n     * in getSnapshotBeforeUpdate (post-render), likewise if we apply the\n     * styles directly on the DOM node, we might be overwriting\n     * styles set via the style prop.\n     */\n    useInsertionEffect(() => {\n        const { width, height, top, left } = size.current;\n        if (isPresent || !ref.current || !width || !height)\n            return;\n        ref.current.dataset.motionPopId = id;\n        const style = document.createElement(\"style\");\n        if (nonce)\n            style.nonce = nonce;\n        document.head.appendChild(style);\n        if (style.sheet) {\n            style.sheet.insertRule(`\n          [data-motion-pop-id=\"${id}\"] {\n            position: absolute !important;\n            width: ${width}px !important;\n            height: ${height}px !important;\n            top: ${top}px !important;\n            left: ${left}px !important;\n          }\n        `);\n        }\n        return () => {\n            document.head.removeChild(style);\n        };\n    }, [isPresent]);\n    return (jsx(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size, children: React.cloneElement(children, { ref }) }));\n}\n\nexport { PopChild };\n", "\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n    transformPagePoint: (p) => p,\n    isStatic: false,\n    reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n", "import { useContext, useId, useEffect, useCallback } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const [isPresent, safeToRemove] = usePresence()\n *\n *   useEffect(() => {\n *     !isPresent && setTimeout(safeToRemove, 1000)\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence(subscribe = true) {\n    const context = useContext(PresenceContext);\n    if (context === null)\n        return [true, null];\n    const { isPresent, onExitComplete, register } = context;\n    // It's safe to call the following hooks conditionally (after an early return) because the context will always\n    // either be null or non-null for the lifespan of the component.\n    const id = useId();\n    useEffect(() => {\n        if (subscribe)\n            register(id);\n    }, [subscribe]);\n    const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id), [id, onExitComplete, subscribe]);\n    return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const isPresent = useIsPresent()\n *\n *   useEffect(() => {\n *     !isPresent && console.log(\"I've been removed!\")\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * @public\n */\nfunction useIsPresent() {\n    return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n    return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\n", "import { Children, isValidElement } from 'react';\n\nconst getChildKey = (child) => child.key || \"\";\nfunction onlyElements(children) {\n    const filtered = [];\n    // We use forEach here instead of map as map mutates the component key by preprending `.$`\n    Children.forEach(children, (child) => {\n        if (isValidElement(child))\n            filtered.push(child);\n    });\n    return filtered;\n}\n\nexport { getChildKey, onlyElements };\n", "import { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n", "const isBrowser = typeof window !== \"undefined\";\n\nexport { isBrowser };\n", "import {\r\n    AppRouterModuleData,\r\n    LayoutModule,\r\n    LayoutModuleDir,\r\n    PageModule,\r\n    PageModuleData,\r\n    ProductionAppRouterModuleData,\r\n    ProductionLayoutModuleDir,\r\n    ProductionPageModuleData,\r\n} from \"@renderer/app/app.types\";\r\nimport { RouterErrorBoundary } from \"@renderer/components/errorHandling/RouterErrorBoundary\";\r\nimport { useApp } from \"@renderer/components/lib/providers/AppProvider\";\r\nimport { CriticalRendererProcessError } from \"@shared/utils/error\";\r\nimport { AnimatePresence } from \"motion/react\";\r\nimport { Layout, LayoutRouterProvider, Page } from \"narraleaf-react\";\r\nimport React from \"react\";\r\nimport { RouterErrorFallback } from \"../../errorHandling/RouterErrorFallback\";\r\n\r\nconst ignorePageNames = [\"index\", \"layout\"];\r\n\r\nexport function RootPages({ appRouterData }: { appRouterData: ProductionAppRouterModuleData | AppRouterModuleData }) {\r\n    const app = useApp();\r\n    const { root, errorHandler } = appRouterData;\r\n    const ErrorFallbackComponent = errorHandler?.module?.default || RouterErrorFallback;\r\n\r\n    const assertComponent = (module: LayoutModule | PageModule, path?: string): React.ComponentType<any> => {\r\n        if (typeof module.default !== \"function\") {\r\n            throw new CriticalRendererProcessError(\r\n                \"Error when tring to render a page or layout: LayoutModule or PageModule must be a function. \"\r\n                + \"This is likely caused by a missing default export in the module.\"\r\n                + (path ? `\\nSource Path: ${path}` : \"\")\r\n            );\r\n        }\r\n        return module.default;\r\n    };\r\n\r\n    const createLayout = (layout: ProductionLayoutModuleDir | LayoutModuleDir, parentPath: string, key?: string): React.ReactNode => {\r\n        const { name, isSlug, layout: page, indexHandler, children } = layout;\r\n        const sourcePath = \"path\" in layout ? layout.path : null;\r\n        const layoutName = isSlug ? `:${name}` : name;\r\n\r\n        const LayoutWrapper = page ? assertComponent(page.module, sourcePath ?? undefined) : undefined;\r\n        const joinParentPath = (path: string) => {\r\n            if (parentPath === \"/\") {\r\n                return path;\r\n            }\r\n            return parentPath + \"/\" + path;\r\n        };\r\n\r\n        const childrenNodes = children.map((v, i) => {\r\n            if (\"module\" in v) {\r\n                if (ignorePageNames.includes(v.name)) return null;\r\n                if (!LayoutWrapper) {\r\n                    return (\r\n                        <LayoutRouterProvider path={joinParentPath(layoutName)} key={`${layoutName}-${v.name}`}>\r\n                            {createPage(v, undefined, i.toString())}\r\n                        </LayoutRouterProvider>\r\n                    );\r\n                }\r\n                return createPage(v, undefined, i.toString());\r\n            } else {\r\n                return createLayout(v, joinParentPath(layoutName), i.toString());\r\n            }\r\n        }).filter(Boolean);\r\n\r\n        if (LayoutWrapper) {\r\n            return (\r\n                <RouterErrorBoundary path={sourcePath ?? undefined} appInfo={app.config.appInfo} key={key ?? layoutName} fallback={ErrorFallbackComponent}>\r\n                    <Layout name={layoutName}>\r\n                        <LayoutWrapper>\r\n                            {indexHandler && createPage(indexHandler, null, \"@index\")}\r\n                            {childrenNodes}\r\n                        </LayoutWrapper>\r\n                    </Layout>\r\n                </RouterErrorBoundary>\r\n            );\r\n        }\r\n\r\n        const allNodes = [\r\n            ...(indexHandler ? [(\r\n                <LayoutRouterProvider path={joinParentPath(layoutName)} key={`${layoutName}-index`}>\r\n                    {createPage(indexHandler, null, \"@index\")}\r\n                </LayoutRouterProvider>\r\n            )] : []),\r\n            ...childrenNodes\r\n        ];\r\n\r\n        return allNodes;\r\n    };\r\n\r\n    const createPage = (page: ProductionPageModuleData | PageModuleData, pageName?: string | null, key?: string): React.ReactNode => {\r\n        const { name, module } = page;\r\n        const sourcePath = \"path\" in page ? page.path : null;\r\n\r\n        const configName = pageName !== undefined ? pageName : name;\r\n\r\n        if (configName && ignorePageNames.includes(configName)) {\r\n            throw new Error(`Page Ignoration Violation: Page name ${configName} is ignored. `);\r\n        };\r\n\r\n        const PageNode = assertComponent(module, sourcePath ?? undefined);\r\n\r\n        return (\r\n            <RouterErrorBoundary path={sourcePath ?? undefined} appInfo={app.config.appInfo} key={key ?? name} fallback={ErrorFallbackComponent}>\r\n                <AnimatePresence mode=\"wait\">\r\n                    <Page name={configName} key={configName}>\r\n                        <PageNode key={configName ?? \"index\"} />\r\n                    </Page>\r\n                </AnimatePresence>\r\n            </RouterErrorBoundary>\r\n        );\r\n    };\r\n\r\n    const { layout, indexHandler, children } = root;\r\n    const rootNodes = children.map((v, i) => {\r\n        if (\"module\" in v) {\r\n            if (ignorePageNames.includes(v.name)) return null;\r\n            return createPage(v, undefined, i.toString());\r\n        } else {\r\n            return createLayout(v, \"/\", i.toString());\r\n        }\r\n    }).filter(Boolean);\r\n\r\n    if (indexHandler) {\r\n        const PageNode = assertComponent(indexHandler.module, \"path\" in indexHandler ? indexHandler.path : undefined);\r\n        rootNodes.push(\r\n            <RouterErrorBoundary appInfo={app.config.appInfo} key={\"/\"} fallback={ErrorFallbackComponent}>\r\n                <Page name={null}>\r\n                    <PageNode key={\"/\"} />\r\n                </Page>\r\n            </RouterErrorBoundary>\r\n        );\r\n    }\r\n\r\n    if (layout) {\r\n        const RootLayout = assertComponent(layout.module, \"path\" in layout ? layout.path : undefined);\r\n        return (\r\n            <RootLayout>\r\n                {rootNodes}\r\n            </RootLayout>\r\n        );\r\n    }\r\n    return rootNodes;\r\n}\r\n", "\nconst content = __content_placeholder__;\nconst digest = __digest_placeholder__;  \nconst inject = () => {\n  setTimeout(() => {\n    if (!globalThis.document) {\n      return;\n    }\n    let root = globalThis.document.querySelector(\"head\");\n    if (root && root.shadowRoot) {\n      root = root.shadowRoot;\n    }\n    if (!root) {\n      root = globalThis.document.head;\n    }\n    let container = root.querySelector(\"#_\" + digest);\n    if (!container) {\n      container = globalThis.document.createElement(\"style\");\n      container.id = \"_\" + digest;\n      const text = globalThis.document.createTextNode(content);\n      container.appendChild(text);\n      root.appendChild(container);\n    }\n  }, 0);\n};\n\nexport { inject };\n    ", "import \"esbuild-css-modules-plugin-ns-css:src/renderer/components/errorHandling/base-app-error-fallback.module.css\";\n\nimport { inject } from \"esbuild-css-modules-plugin-ns-js:src/renderer/components/errorHandling/base-app-error-fallback.module.css:injector.js\";\nexport default new Proxy({\n  \"card\": \"base-app-error-fallback-module__card_xO64uW__011\",\n  \"container\": \"base-app-error-fallback-module__container_xO64uW__011\",\n  \"icon\": \"base-app-error-fallback-module__icon_xO64uW__011\",\n  \"message\": \"base-app-error-fallback-module__message_xO64uW__011\",\n  \"reloadButton\": \"base-app-error-fallback-module__reloadButton_xO64uW__011\",\n  \"title\": \"base-app-error-fallback-module__title_xO64uW__011\"\n}, {\n  get: function(source, key) {\n    inject();\n    return source[key];\n  }\n});\n      ", "import styles from \"@renderer/components/errorHandling/base-app-error-fallback.module.css\";\r\nimport { NarraLeaf } from \"@narraleaf/shared\";\r\n\r\nexport function BaseAppErrorFallback() {\r\n    const handleReload = () => {\r\n        window[NarraLeaf].app.reload();\r\n    };\r\n\r\n    return (\r\n        <div className={styles.container}>\r\n            <div className={styles.card}>\r\n                {/* Cross icon */}\r\n                <svg\r\n                    className={styles.icon}\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                >\r\n                    <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                    <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\r\n                    <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\r\n                </svg>\r\n                <h1 className={styles.title}>App Error</h1>\r\n                <p className={styles.message}>\r\n                    Something went wrong. Error details have been logged to the renderer console.\r\n                </p>\r\n                <button className={styles.reloadButton} onClick={handleReload}>\r\n                    Reload\r\n                </button>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n", "import { useApp } from \"@renderer/components/lib/providers/AppProvider\";\r\nimport { useEffect } from \"react\";\r\nimport { useFlush } from \"../lib/utils/flush\";\r\nimport { AppStates } from \"@renderer/app/app\";\r\nimport { StringKeyof } from \"@shared/utils/types\";\r\n\r\nexport function useAppState<K extends StringKeyof<AppStates>>(key: K): [\r\n    AppStates[K],\r\n    ((value: AppStates[K]) => void) | ((handler: (prev: AppStates[K]) => AppStates[K]) => void)\r\n] {\r\n    const app = useApp();\r\n    const [flush] = useFlush()\r\n\r\n    useEffect(() => {\r\n        app.state.onChange(key, () => {\r\n            flush();\r\n        });\r\n    }, [app, key, flush]);\r\n\r\n    return [app.state.get(key), (value: AppStates[K] | ((prev: AppStates[K]) => AppStates[K])) => {\r\n        if (typeof value === \"function\") {\r\n            app.state.set<K>(key, value(app.state.get(key)));\r\n        } else {\r\n            app.state.set<K>(key, value);\r\n        }\r\n    }];\r\n}\r\n", "import { useEffect, useState } from \"react\";\r\nimport { useApp } from \"../lib/providers/AppProvider\";\r\nimport { useAppState } from \"./useAppState\";\r\n\r\n\r\nexport interface GamePlaybackState {\r\n    isPlaying: boolean;\r\n}\r\n\r\nexport function useGamePlayback(): GamePlaybackState {\r\n    const app = useApp();\r\n    const [isPlaying] = useAppState(\"isPlaying\");\r\n\r\n    return {\r\n        isPlaying,\r\n    };\r\n} "],
  "mappings": "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",
  "names": ["require_events", "__commonJSMin", "exports", "module", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "React", "useFlush", "deps", "forceUpdate", "x", "LiveGame", "useGame", "React", "useEffect", "QuickSaveId", "NarraLeaf", "safeClone", "obj", "useCurrentSaved", "flush", "useFlush", "liveGame", "useGame", "useEffect", "LiveGame", "onStateChange", "getSavedGame", "safeClone", "useCurrentSavedRef", "ref", "React", "useSaveAction", "game", "save", "name", "data", "preview", "e", "NarraLeaf", "read", "id", "res", "quickSave", "quickRead", "QuickSaveId", "useSavedGames", "deps", "results", "setResults", "error", "setError", "isLoading", "setLoading", "taskRef", "load", "refetch", "nextTask", "readGame", "api", "NarraLeaf", "requestMain", "event", "args", "response", "SaveType", "CriticalError", "message", "CriticalRendererProcessError", "CriticalError", "message", "React", "GameProviders", "useGame", "useRouter", "import_events", "RootPath", "GameAPI", "api", "res", "AppAPI", "savedGame", "Preference", "AppState", "settings", "key", "value", "listener", "App", "_App", "AppAPI", "AppState", "config", "error", "NarraLeaf", "game", "router", "id", "savedGame", "CriticalRendererProcessError", "data", "RootPath", "latestSave", "save", "a", "b", "useState", "React", "useContext", "jsx", "context", "AppProvider", "children", "app", "useApp", "ctx", "throttle", "func", "limit", "inThrottle", "timeoutId", "throttled", "args", "AsyncTaskQueue", "task", "useCallback", "useEffect", "useRef", "useState", "RecoveryAnnouncer", "currentSaved", "useCurrentSaved", "queue", "AsyncTaskQueue", "app", "useApp", "throttledSaveHandler", "throttle", "savedGame", "createRecovery", "useCallback", "useEffect", "Player", "useGame", "React", "jsx", "ErrorBoundary", "props", "error", "info", "FallbackComponent", "CriticalErrorBoundary", "_CriticalErrorBoundary", "ErrorBoundary", "props", "error", "info", "appInfo", "NarraLeaf", "Fragment", "jsx", "jsxs", "RouterErrorFallback", "path", "jsx", "RouterErrorBoundary", "CriticalErrorBoundary", "props", "error", "info", "FallbackComponent", "RouterErrorFallback", "jsx", "Fragment", "useMemo", "useRef", "useState", "useContext", "createContext", "LayoutGroupContext", "useRef", "useConstant", "init", "ref", "jsx", "React", "useId", "useCallback", "useMemo", "createContext", "PresenceContext", "jsx", "React", "useId", "useRef", "useContext", "useInsertionEffect", "createContext", "MotionConfigContext", "p", "PopChildMeasure", "prevProps", "element", "size", "PopChild", "children", "isPresent", "id", "useId", "ref", "useRef", "nonce", "useContext", "MotionConfigContext", "useInsertionEffect", "width", "height", "top", "left", "style", "jsx", "PresenceChild", "children", "initial", "isPresent", "onExitComplete", "custom", "presenceAffectsLayout", "mode", "presenceChildren", "useConstant", "newChildrenMap", "id", "useId", "memoizedOnExitComplete", "useCallback", "childId", "isComplete", "context", "useMemo", "_", "key", "jsx", "PopChild", "PresenceContext", "useContext", "useId", "useEffect", "useCallback", "usePresence", "subscribe", "context", "useContext", "PresenceContext", "isPresent", "onExitComplete", "register", "id", "useId", "useEffect", "safeToRemove", "useCallback", "Children", "isValidElement", "getChildKey", "child", "onlyElements", "children", "filtered", "useLayoutEffect", "useEffect", "isBrowser", "useIsomorphicLayoutEffect", "isBrowser", "useLayoutEffect", "useEffect", "AnimatePresence", "children", "custom", "initial", "onExitComplete", "presenceAffectsLayout", "mode", "propagate", "isParentPresent", "safeToRemove", "usePresence", "presentChildren", "useMemo", "onlyElements", "presentKeys", "getChildKey", "isInitialRender", "useRef", "pendingPresentChildren", "exitComplete", "useConstant", "diffedChildren", "setDiffedChildren", "useState", "renderedChildren", "setRenderedChildren", "useIsomorphicLayoutEffect", "i", "key", "exitingChildren", "nextChildren", "child", "forceRender", "useContext", "LayoutGroupContext", "jsx", "Fragment", "isPresent", "onExit", "isEveryExitComplete", "isExitComplete", "PresenceChild", "Layout", "LayoutRouterProvider", "Page", "jsx", "jsxs", "ignorePageNames", "RootPages", "appRouterData", "app", "useApp", "root", "errorHandler", "ErrorFallbackComponent", "RouterErrorFallback", "assertComponent", "module", "path", "CriticalRendererProcessError", "createLayout", "layout", "parentPath", "key", "name", "isSlug", "page", "indexHandler", "children", "sourcePath", "layoutName", "LayoutWrapper", "joinParentPath", "childrenNodes", "v", "i", "createPage", "LayoutRouterProvider", "RouterErrorBoundary", "Layout", "pageName", "configName", "PageNode", "AnimatePresence", "Page", "rootNodes", "RootLayout", "Fragment", "jsx", "jsxs", "AppPlayer", "config", "app", "useApp", "game", "useGame", "useEffect", "handleReady", "useCallback", "handleEnd", "handleError", "error", "errorInfo", "RecoveryAnnouncer", "Player", "RootPages", "jsx", "App", "appInfo", "api", "config", "game", "useGame", "router", "useRouter", "app", "useState", "AppUserEntry", "AppProvider", "AppPlayer", "content", "digest", "inject", "root", "container", "text", "base_app_error_fallback_default", "source", "key", "inject", "jsx", "jsxs", "BaseAppErrorFallback", "handleReload", "NarraLeaf", "base_app_error_fallback_default", "jsx", "validateEnv", "NarraLeaf", "CriticalRendererProcessError", "reactMainVersion", "React", "validateConfig", "config", "requestAppInfo", "error", "render", "renderer", "initialTimestamp", "ok", "data", "ErrorFallbackComponent", "BaseAppErrorFallback", "CriticalErrorBoundary", "GameProviders", "App", "useEffect", "useAppState", "key", "app", "useApp", "flush", "useFlush", "useEffect", "value", "useGamePlayback", "app", "useApp", "isPlaying", "useAppState"]
}
