@noya-app/noya-api-client-react 0.1.44 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7509,7 +7509,7 @@ var import_noya_utils6 = require("@noya-app/noya-utils");
7509
7509
  var import_observable8 = require("@noya-app/observable");
7510
7510
 
7511
7511
  // ../state-manager/src/multiplayer.ts
7512
- var import_noya_utils8 = require("@noya-app/noya-utils");
7512
+ var import_noya_utils9 = require("@noya-app/noya-utils");
7513
7513
  var import_observable10 = require("@noya-app/observable");
7514
7514
 
7515
7515
  // ../../node_modules/@marcbachmann/cel-js/lib/errors.js
@@ -10526,21 +10526,24 @@ celEnvironment.registerFunction("random(): double", () => Math.random()).registe
10526
10526
  ).registerFunction("uuid(): string", () => (0, import_noya_utils7.uuid)());
10527
10527
  var READ_DENIED = Symbol("readDenied");
10528
10528
 
10529
+ // ../state-manager/src/serverScripts.ts
10530
+ var import_noya_utils8 = require("@noya-app/noya-utils");
10531
+
10529
10532
  // ../state-manager/src/stateManager.ts
10530
10533
  var import_observable9 = require("@noya-app/observable");
10531
10534
 
10532
10535
  // ../state-manager/src/multiplayer.ts
10533
- var createHash = (value, options) => (0, import_noya_utils8.hash)(value, { ...options, ignoreUndefinedProperties: true });
10536
+ var createHash = (value, options) => (0, import_noya_utils9.hash)(value, { ...options, ignoreUndefinedProperties: true });
10534
10537
 
10535
10538
  // ../state-manager/src/NoyaManager.ts
10536
10539
  var import_noya_utils19 = require("@noya-app/noya-utils");
10537
- var import_observable21 = require("@noya-app/observable");
10540
+ var import_observable22 = require("@noya-app/observable");
10538
10541
 
10539
10542
  // ../noya-pipeline/src/graphToTasks.ts
10540
10543
  var import_observable11 = require("@noya-app/observable");
10541
10544
 
10542
10545
  // ../noya-pipeline/src/state.ts
10543
- var import_noya_utils9 = require("@noya-app/noya-utils");
10546
+ var import_noya_utils10 = require("@noya-app/noya-utils");
10544
10547
  var rectSchema = Type.Object({
10545
10548
  x: Type.Number(),
10546
10549
  y: Type.Number(),
@@ -10645,32 +10648,35 @@ var import_observable12 = require("@noya-app/observable");
10645
10648
  var import_observable13 = require("@noya-app/observable");
10646
10649
 
10647
10650
  // ../state-manager/src/ResourceManager.ts
10648
- var import_noya_utils10 = require("@noya-app/noya-utils");
10651
+ var import_noya_utils11 = require("@noya-app/noya-utils");
10649
10652
  var import_observable14 = require("@noya-app/observable");
10650
10653
 
10651
- // ../state-manager/src/rpcManager.ts
10652
- var import_noya_utils11 = require("@noya-app/noya-utils");
10654
+ // ../state-manager/src/SandboxManager.ts
10653
10655
  var import_observable15 = require("@noya-app/observable");
10654
10656
 
10655
- // ../state-manager/src/SecretManager.ts
10657
+ // ../state-manager/src/rpcManager.ts
10658
+ var import_noya_utils12 = require("@noya-app/noya-utils");
10656
10659
  var import_observable16 = require("@noya-app/observable");
10657
10660
 
10658
- // ../state-manager/src/TaskManager.ts
10661
+ // ../state-manager/src/SecretManager.ts
10659
10662
  var import_observable17 = require("@noya-app/observable");
10660
10663
 
10661
- // ../state-manager/src/TranscriptionManager.ts
10662
- var import_noya_utils12 = require("@noya-app/noya-utils");
10664
+ // ../state-manager/src/TaskManager.ts
10663
10665
  var import_observable18 = require("@noya-app/observable");
10664
10666
 
10667
+ // ../state-manager/src/TranscriptionManager.ts
10668
+ var import_noya_utils13 = require("@noya-app/noya-utils");
10669
+ var import_observable19 = require("@noya-app/observable");
10670
+
10665
10671
  // ../state-manager/src/UserManager.ts
10666
- var import_observable20 = require("@noya-app/observable");
10672
+ var import_observable21 = require("@noya-app/observable");
10667
10673
 
10668
10674
  // ../state-manager/src/sync/clientId.ts
10669
- var import_noya_utils14 = require("@noya-app/noya-utils");
10670
- var import_observable19 = require("@noya-app/observable");
10675
+ var import_noya_utils15 = require("@noya-app/noya-utils");
10676
+ var import_observable20 = require("@noya-app/observable");
10671
10677
 
10672
10678
  // ../state-manager/src/sync/defaultNames.ts
10673
- var import_noya_utils13 = require("@noya-app/noya-utils");
10679
+ var import_noya_utils14 = require("@noya-app/noya-utils");
10674
10680
  var animals = [
10675
10681
  "cat",
10676
10682
  "dog",
@@ -10722,7 +10728,7 @@ function getClientImageUrl(animal) {
10722
10728
  }
10723
10729
  function randomClientIdentity() {
10724
10730
  const animal = randomElement(animals);
10725
- const name = `${(0, import_noya_utils13.upperFirst)(randomElement(adjectives))} ${(0, import_noya_utils13.upperFirst)(animal)}`;
10731
+ const name = `${(0, import_noya_utils14.upperFirst)(randomElement(adjectives))} ${(0, import_noya_utils14.upperFirst)(animal)}`;
10726
10732
  return {
10727
10733
  name,
10728
10734
  animal,
@@ -10740,9 +10746,9 @@ function getClientAnimalFromName(name) {
10740
10746
  var CLIENT_ID_STORAGE_KEY = "noya-client-id";
10741
10747
  var CLIENT_NAME_STORAGE_KEY = "noya-client-name";
10742
10748
  var CLIENT_IMAGE_STORAGE_KEY = "noya-client-image";
10743
- var clientId$ = new import_observable19.Observable(void 0);
10744
- var clientName$ = new import_observable19.Observable(void 0);
10745
- var clientImage$ = new import_observable19.Observable(void 0);
10749
+ var clientId$ = new import_observable20.Observable(void 0);
10750
+ var clientName$ = new import_observable20.Observable(void 0);
10751
+ var clientImage$ = new import_observable20.Observable(void 0);
10746
10752
  var safeGetItem = (key) => {
10747
10753
  try {
10748
10754
  return typeof localStorage !== "undefined" ? localStorage.getItem(key) : null;
@@ -10763,7 +10769,7 @@ if (typeof window !== "undefined") {
10763
10769
  if (storedClientId) {
10764
10770
  clientId$.set(storedClientId);
10765
10771
  } else {
10766
- const newClientId = (0, import_noya_utils14.uuid)();
10772
+ const newClientId = (0, import_noya_utils15.uuid)();
10767
10773
  safeSetItem(CLIENT_ID_STORAGE_KEY, newClientId);
10768
10774
  clientId$.set(newClientId);
10769
10775
  }
@@ -10786,17 +10792,14 @@ if (typeof window !== "undefined") {
10786
10792
  }
10787
10793
 
10788
10794
  // ../state-manager/src/sync/syncUtils.ts
10789
- var import_noya_utils15 = require("@noya-app/noya-utils");
10795
+ var import_noya_utils16 = require("@noya-app/noya-utils");
10790
10796
 
10791
10797
  // ../state-manager/src/sync/localRpcHelpers.ts
10792
- var import_noya_utils16 = require("@noya-app/noya-utils");
10798
+ var import_noya_utils17 = require("@noya-app/noya-utils");
10793
10799
 
10794
10800
  // ../state-manager/src/sync/localStorageSync.ts
10795
10801
  var import_noya_utils18 = require("@noya-app/noya-utils");
10796
10802
 
10797
- // ../state-manager/src/serverScripts.ts
10798
- var import_noya_utils17 = require("@noya-app/noya-utils");
10799
-
10800
10803
  // ../noya-keymap/src/hooks.ts
10801
10804
  var import_react4 = require("react");
10802
10805
 
@@ -10918,10 +10921,10 @@ var createMutatorParametersSchema = Type.Object({
10918
10921
  });
10919
10922
 
10920
10923
  // ../noya-multiplayer-react/src/ai.ts
10921
- var import_react61 = require("react");
10924
+ var import_react62 = require("react");
10922
10925
 
10923
10926
  // ../noya-multiplayer-react/src/NoyaStateContext.tsx
10924
- var import_observable22 = require("@noya-app/observable");
10927
+ var import_observable23 = require("@noya-app/observable");
10925
10928
 
10926
10929
  // ../noya-react-utils/src/components/AutoSizer.tsx
10927
10930
  var React2 = __toESM(require("react"));
@@ -11222,13 +11225,13 @@ function downloadBlob(...params) {
11222
11225
  }
11223
11226
 
11224
11227
  // ../noya-multiplayer-react/src/NoyaStateContext.tsx
11225
- var import_react60 = __toESM(require("react"));
11228
+ var import_react61 = __toESM(require("react"));
11226
11229
 
11227
11230
  // ../noya-multiplayer-react/src/noyaApp.ts
11228
- var import_react58 = require("react");
11231
+ var import_react59 = require("react");
11229
11232
 
11230
11233
  // ../noya-multiplayer-react/src/hooks.ts
11231
- var import_react57 = require("react");
11234
+ var import_react58 = require("react");
11232
11235
  var import_client2 = require("react-dom/client");
11233
11236
 
11234
11237
  // ../noya-multiplayer-react/src/components/ErrorOverlay.tsx
@@ -11306,12 +11309,12 @@ var ErrorOverlay = React6.memo(function ErrorOverlay2({
11306
11309
  });
11307
11310
 
11308
11311
  // ../noya-multiplayer-react/src/inspector/useStateInspector.tsx
11309
- var import_react56 = __toESM(require("react"));
11312
+ var import_react57 = __toESM(require("react"));
11310
11313
  var import_client = require("react-dom/client");
11311
11314
 
11312
11315
  // ../noya-multiplayer-react/src/inspector/StateInspector.tsx
11313
11316
  var import_noya_utils24 = require("@noya-app/noya-utils");
11314
- var import_react55 = __toESM(require("react"));
11317
+ var import_react56 = __toESM(require("react"));
11315
11318
 
11316
11319
  // ../../node_modules/react-inspector/dist/index.mjs
11317
11320
  var import_react24 = __toESM(require("react"), 1);
@@ -12888,7 +12891,9 @@ function EventsSection({
12888
12891
  setShowEvents,
12889
12892
  colorScheme,
12890
12893
  eventsContainerRef,
12891
- connectionEvents
12894
+ connectionEvents,
12895
+ paused,
12896
+ onTogglePaused
12892
12897
  }) {
12893
12898
  const theme3 = getStateInspectorTheme(colorScheme);
12894
12899
  return /* @__PURE__ */ import_react49.default.createElement(
@@ -12897,9 +12902,20 @@ function EventsSection({
12897
12902
  open: showEvents,
12898
12903
  setOpen: setShowEvents,
12899
12904
  title: "Events",
12900
- colorScheme
12905
+ colorScheme,
12906
+ right: /* @__PURE__ */ import_react49.default.createElement(StateInspectorButton, { theme: theme3, onClick: onTogglePaused }, paused ? "Resume" : "Pause")
12901
12907
  },
12902
- /* @__PURE__ */ import_react49.default.createElement(StateInspectorDisclosureRowInner, { ref: eventsContainerRef }, connectionEvents?.map(
12908
+ /* @__PURE__ */ import_react49.default.createElement(StateInspectorDisclosureRowInner, { ref: eventsContainerRef }, paused && /* @__PURE__ */ import_react49.default.createElement(
12909
+ "div",
12910
+ {
12911
+ style: {
12912
+ padding: "4px 12px",
12913
+ fontSize: "11px",
12914
+ opacity: 0.7
12915
+ }
12916
+ },
12917
+ "Event streaming paused"
12918
+ ), connectionEvents?.map(
12903
12919
  (event, index) => event.type === "stateChange" ? /* @__PURE__ */ import_react49.default.createElement(StateInspectorRow, { key: index, colorScheme }, "connection:", " ", /* @__PURE__ */ import_react49.default.createElement("span", { style: { fontStyle: "italic" } }, event.state.toLowerCase())) : /* @__PURE__ */ import_react49.default.createElement(
12904
12920
  StateInspectorRow,
12905
12921
  {
@@ -12930,7 +12946,7 @@ function EventsSection({
12930
12946
  }
12931
12947
  )
12932
12948
  )
12933
- ), !connectionEvents && /* @__PURE__ */ import_react49.default.createElement(
12949
+ ), !connectionEvents?.length && /* @__PURE__ */ import_react49.default.createElement(
12934
12950
  "div",
12935
12951
  {
12936
12952
  style: {
@@ -13182,7 +13198,8 @@ function ServerScriptLogsSection({
13182
13198
  logs,
13183
13199
  containerRef,
13184
13200
  paused,
13185
- onTogglePaused
13201
+ onTogglePaused,
13202
+ title = "Server Script Logs"
13186
13203
  }) {
13187
13204
  const theme3 = getStateInspectorTheme(colorScheme);
13188
13205
  return /* @__PURE__ */ import_react51.default.createElement(
@@ -13190,7 +13207,7 @@ function ServerScriptLogsSection({
13190
13207
  {
13191
13208
  open: showLogs,
13192
13209
  setOpen: setShowLogs,
13193
- title: "Server Script Logs",
13210
+ title,
13194
13211
  colorScheme,
13195
13212
  right: /* @__PURE__ */ import_react51.default.createElement(StateInspectorButton, { theme: theme3, onClick: onTogglePaused }, paused ? "Resume" : "Pause")
13196
13213
  },
@@ -13219,6 +13236,18 @@ function ServerScriptLogsSection({
13219
13236
  },
13220
13237
  /* @__PURE__ */ import_react51.default.createElement("span", null, formatTimestamp(log.timestamp)),
13221
13238
  /* @__PURE__ */ import_react51.default.createElement("span", { style: { color: levelColors[log.level] } }, log.level),
13239
+ (log.origin || log.target || log.mode) && /* @__PURE__ */ import_react51.default.createElement(
13240
+ "span",
13241
+ {
13242
+ style: {
13243
+ fontFamily: "monospace",
13244
+ textTransform: "none",
13245
+ fontSize: "10px",
13246
+ opacity: 0.75
13247
+ }
13248
+ },
13249
+ [log.origin ?? log.target, log.mode].filter(Boolean).join(" / ")
13250
+ ),
13222
13251
  /* @__PURE__ */ import_react51.default.createElement(
13223
13252
  "span",
13224
13253
  {
@@ -13244,8 +13273,7 @@ function ServerScriptLogsSection({
13244
13273
  {
13245
13274
  key: index,
13246
13275
  data: value,
13247
- theme: theme3,
13248
- expandLevel: 3
13276
+ theme: theme3
13249
13277
  }
13250
13278
  )) : /* @__PURE__ */ import_react51.default.createElement("span", { style: { fontSize: "11px", opacity: 0.7 } }, "No data")
13251
13279
  ))), !logs?.length && /* @__PURE__ */ import_react51.default.createElement(
@@ -13890,6 +13918,31 @@ function useLocalStorageState(key, defaultValue) {
13890
13918
  return [state, setLocalStorageState];
13891
13919
  }
13892
13920
 
13921
+ // ../noya-multiplayer-react/src/inspector/usePausedStream.ts
13922
+ var import_react55 = __toESM(require("react"));
13923
+ function usePausedStream(items) {
13924
+ const [paused, setPaused] = import_react55.default.useState(false);
13925
+ const [visibleItems, setVisibleItems] = import_react55.default.useState(items ?? []);
13926
+ const togglePaused = import_react55.default.useCallback(() => {
13927
+ setPaused((value) => {
13928
+ if (!value) {
13929
+ setVisibleItems(items ?? []);
13930
+ }
13931
+ return !value;
13932
+ });
13933
+ }, [items]);
13934
+ import_react55.default.useEffect(() => {
13935
+ if (paused) return;
13936
+ setVisibleItems(items ?? []);
13937
+ }, [items, paused]);
13938
+ return {
13939
+ paused,
13940
+ setPaused,
13941
+ togglePaused,
13942
+ visibleItems
13943
+ };
13944
+ }
13945
+
13893
13946
  // ../noya-multiplayer-react/src/inspector/StateInspector.tsx
13894
13947
  var StateInspector = memoGeneric(function StateInspector2({
13895
13948
  noyaManager,
@@ -13912,16 +13965,17 @@ var StateInspector = memoGeneric(function StateInspector2({
13912
13965
  activityEventsManager,
13913
13966
  logManager
13914
13967
  } = noyaManager;
13915
- const [didMount, setDidMount] = import_react55.default.useState(false);
13968
+ const [didMount, setDidMount] = import_react56.default.useState(false);
13916
13969
  const tasks = useObservable2(taskManager.tasks$);
13917
13970
  const inputs = useObservable2(ioManager.inputs$);
13918
13971
  const outputTransforms = useObservable2(ioManager.outputTransforms$);
13919
- (0, import_react55.useLayoutEffect)(() => {
13972
+ (0, import_react56.useLayoutEffect)(() => {
13920
13973
  setDidMount(true);
13921
13974
  }, []);
13922
- const eventsContainerRef = import_react55.default.useRef(null);
13923
- const activityEventsContainerRef = import_react55.default.useRef(null);
13924
- const serverLogsContainerRef = import_react55.default.useRef(null);
13975
+ const eventsContainerRef = import_react56.default.useRef(null);
13976
+ const activityEventsContainerRef = import_react56.default.useRef(null);
13977
+ const serverLogsContainerRef = import_react56.default.useRef(null);
13978
+ const serverSimulationLogsContainerRef = import_react56.default.useRef(null);
13925
13979
  const [showInspector, setShowInspector] = useLocalStorageState(
13926
13980
  "noya-multiplayer-react-show-inspector",
13927
13981
  true
@@ -13938,6 +13992,10 @@ var StateInspector = memoGeneric(function StateInspector2({
13938
13992
  "noya-multiplayer-react-show-users",
13939
13993
  true
13940
13994
  );
13995
+ const [showUserDetails, setShowUserDetails] = useLocalStorageState(
13996
+ "noya-multiplayer-react-show-user-details",
13997
+ false
13998
+ );
13941
13999
  const [showData, setShowData] = useLocalStorageState(
13942
14000
  "noya-multiplayer-react-show-data",
13943
14001
  true
@@ -13978,35 +14036,51 @@ var StateInspector = memoGeneric(function StateInspector2({
13978
14036
  "noya-multiplayer-react-show-server-logs",
13979
14037
  false
13980
14038
  );
14039
+ const [showServerSimulationLogs, setShowServerSimulationLogs] = useLocalStorageState(
14040
+ "noya-multiplayer-react-show-server-simulation-logs",
14041
+ false
14042
+ );
14043
+ const [showSimulation, setShowSimulation] = useLocalStorageState(
14044
+ "noya-multiplayer-react-show-simulation",
14045
+ false
14046
+ );
13981
14047
  const connectionEvents = useObservable2(connectionEventManager.events$);
13982
- (0, import_react55.useEffect)(() => {
14048
+ const {
14049
+ visibleItems: visibleConnectionEvents,
14050
+ paused: connectionEventsPaused,
14051
+ togglePaused: toggleConnectionEventsPaused
14052
+ } = usePausedStream(connectionEvents);
14053
+ (0, import_react56.useEffect)(() => {
13983
14054
  if (eventsContainerRef.current) {
13984
14055
  eventsContainerRef.current.scrollTop = eventsContainerRef.current.scrollHeight;
13985
14056
  }
13986
- }, [connectionEvents]);
14057
+ }, [visibleConnectionEvents]);
13987
14058
  const serverLogs = useObservable2(logManager.logs$);
13988
- const [serverLogsPaused, setServerLogsPaused] = import_react55.default.useState(false);
13989
- const [visibleServerLogs, setVisibleServerLogs] = import_react55.default.useState(
13990
- serverLogs ?? []
14059
+ const {
14060
+ visibleItems: visibleServerLogs,
14061
+ paused: serverLogsPaused,
14062
+ togglePaused: toggleServerLogsPaused
14063
+ } = usePausedStream(serverLogs);
14064
+ const serverSimulationLogs = useObservable2(
14065
+ multiplayerStateManager.serverSimulationLogs$
13991
14066
  );
13992
- const toggleServerLogsPaused = (0, import_react55.useCallback)(() => {
13993
- setServerLogsPaused((value) => {
13994
- if (!value) {
13995
- setVisibleServerLogs(serverLogs ?? []);
13996
- }
13997
- return !value;
13998
- });
13999
- }, [serverLogs]);
14000
- (0, import_react55.useEffect)(() => {
14001
- if (serverLogsPaused) return;
14002
- setVisibleServerLogs(serverLogs ?? []);
14003
- }, [serverLogs, serverLogsPaused]);
14004
- (0, import_react55.useEffect)(() => {
14067
+ const {
14068
+ visibleItems: visibleServerSimulationLogs,
14069
+ paused: serverSimulationLogsPaused,
14070
+ togglePaused: toggleServerSimulationLogsPaused
14071
+ } = usePausedStream(serverSimulationLogs);
14072
+ (0, import_react56.useEffect)(() => {
14005
14073
  if (!showServerLogs) return;
14006
14074
  if (serverLogsContainerRef.current) {
14007
14075
  serverLogsContainerRef.current.scrollTop = serverLogsContainerRef.current.scrollHeight;
14008
14076
  }
14009
14077
  }, [showServerLogs, visibleServerLogs]);
14078
+ (0, import_react56.useEffect)(() => {
14079
+ if (!showServerSimulationLogs) return;
14080
+ if (serverSimulationLogsContainerRef.current) {
14081
+ serverSimulationLogsContainerRef.current.scrollTop = serverSimulationLogsContainerRef.current.scrollHeight;
14082
+ }
14083
+ }, [showServerSimulationLogs, visibleServerSimulationLogs]);
14010
14084
  const multipeerStateInitialized = useObservable2(
14011
14085
  multiplayerStateManager.isInitialized$
14012
14086
  );
@@ -14018,8 +14092,10 @@ var StateInspector = memoGeneric(function StateInspector2({
14018
14092
  const assetsInitialized = useObservable2(assetManager.isInitialized$);
14019
14093
  const secrets = useObservable2(secretManager.secrets$);
14020
14094
  const secretsInitialized = useObservable2(secretManager.isInitialized$);
14021
- const connectedUsers = useObservable2(userManager.connectedUsers$);
14095
+ const connectedUsers = useObservable2(userManager.allUsers$);
14022
14096
  const connectionId = useObservable2(userManager.currentConnectionId$);
14097
+ const simulationDiagnostics = multiplayerStateManager.getServerSimulationDiagnostics?.() ?? null;
14098
+ const showSimulationLogsSection = (simulationDiagnostics?.simulateLocally ?? false) || visibleServerSimulationLogs.length > 0;
14023
14099
  const state = useObservable2(multiplayerStateManager.optimisticState$);
14024
14100
  const inputsInitialized = useObservable2(ioManager.inputsInitialized$);
14025
14101
  const outputTransformsInitialized = useObservable2(
@@ -14046,11 +14122,11 @@ var StateInspector = memoGeneric(function StateInspector2({
14046
14122
  zIndex: 9999,
14047
14123
  lineHeight: "13px"
14048
14124
  };
14049
- const handleExportAll = (0, import_react55.useCallback)(async () => {
14125
+ const handleExportAll = (0, import_react56.useCallback)(async () => {
14050
14126
  const buffer = await exportAll(noyaManager);
14051
14127
  downloadBlob(new Blob([buffer]), "state.zip");
14052
14128
  }, [noyaManager]);
14053
- const handleImportAll = (0, import_react55.useCallback)(async () => {
14129
+ const handleImportAll = (0, import_react56.useCallback)(async () => {
14054
14130
  const file = await uploadFile();
14055
14131
  const buffer = await file.arrayBuffer();
14056
14132
  importAll(buffer, noyaManager, {
@@ -14063,7 +14139,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14063
14139
  }, [noyaManager]);
14064
14140
  if (!didMount) return null;
14065
14141
  if (!showInspector) {
14066
- return /* @__PURE__ */ import_react55.default.createElement(
14142
+ return /* @__PURE__ */ import_react56.default.createElement(
14067
14143
  "div",
14068
14144
  {
14069
14145
  ...props,
@@ -14075,7 +14151,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14075
14151
  },
14076
14152
  onClick: () => setShowInspector(true)
14077
14153
  },
14078
- /* @__PURE__ */ import_react55.default.createElement(
14154
+ /* @__PURE__ */ import_react56.default.createElement(
14079
14155
  StateInspectorToggleButton,
14080
14156
  {
14081
14157
  showInspector,
@@ -14086,7 +14162,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14086
14162
  )
14087
14163
  );
14088
14164
  }
14089
- return /* @__PURE__ */ import_react55.default.createElement(
14165
+ return /* @__PURE__ */ import_react56.default.createElement(
14090
14166
  "div",
14091
14167
  {
14092
14168
  ...props,
@@ -14095,7 +14171,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14095
14171
  ...props.style
14096
14172
  }
14097
14173
  },
14098
- /* @__PURE__ */ import_react55.default.createElement(
14174
+ /* @__PURE__ */ import_react56.default.createElement(
14099
14175
  StateInspectorDisclosureSection,
14100
14176
  {
14101
14177
  isFirst: true,
@@ -14105,9 +14181,17 @@ var StateInspector = memoGeneric(function StateInspector2({
14105
14181
  colorScheme,
14106
14182
  style: {
14107
14183
  flex: "0 0 auto",
14108
- maxHeight: "200px"
14184
+ maxHeight: "50%",
14185
+ overflowY: "auto"
14109
14186
  },
14110
- right: /* @__PURE__ */ import_react55.default.createElement(
14187
+ right: /* @__PURE__ */ import_react56.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react56.default.createElement(
14188
+ StateInspectorButton,
14189
+ {
14190
+ theme: theme3,
14191
+ onClick: () => setShowUserDetails(!showUserDetails)
14192
+ },
14193
+ "Toggle details"
14194
+ ), /* @__PURE__ */ import_react56.default.createElement(
14111
14195
  StateInspectorToggleButton,
14112
14196
  {
14113
14197
  showInspector,
@@ -14115,19 +14199,21 @@ var StateInspector = memoGeneric(function StateInspector2({
14115
14199
  theme: theme3,
14116
14200
  anchor
14117
14201
  }
14118
- )
14202
+ ))
14119
14203
  },
14120
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.map((user, index, array) => {
14121
- const identifier = user.userId ?? user.connectionId;
14122
- return /* @__PURE__ */ import_react55.default.createElement(
14204
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.filter((user) => showUserDetails || !user.inactive).map((user, index, array) => {
14205
+ return /* @__PURE__ */ import_react56.default.createElement(
14123
14206
  StateInspectorRow,
14124
14207
  {
14125
14208
  key: user.connectionId,
14126
14209
  colorScheme,
14127
14210
  variant: user.connectionId === connectionId ? "up" : void 0,
14128
- bordered: index !== array.length - 1
14211
+ bordered: index !== array.length - 1,
14212
+ style: {
14213
+ opacity: user.inactive ? 0.5 : 1
14214
+ }
14129
14215
  },
14130
- user.image && /* @__PURE__ */ import_react55.default.createElement(
14216
+ user.image && /* @__PURE__ */ import_react56.default.createElement(
14131
14217
  "img",
14132
14218
  {
14133
14219
  src: user.image,
@@ -14144,12 +14230,9 @@ var StateInspector = memoGeneric(function StateInspector2({
14144
14230
  }
14145
14231
  }
14146
14232
  ),
14147
- user.name,
14148
- " (",
14149
- ellipsis(identifier, 8, "middle"),
14150
- ")"
14233
+ showUserDetails ? /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: user, theme: theme3 }) : user.name
14151
14234
  );
14152
- }), !connectedUsers && /* @__PURE__ */ import_react55.default.createElement(
14235
+ }), !connectedUsers && /* @__PURE__ */ import_react56.default.createElement(
14153
14236
  "div",
14154
14237
  {
14155
14238
  style: {
@@ -14160,13 +14243,13 @@ var StateInspector = memoGeneric(function StateInspector2({
14160
14243
  gap: "4px"
14161
14244
  }
14162
14245
  },
14163
- /* @__PURE__ */ import_react55.default.createElement("span", null, "No connected users")
14246
+ /* @__PURE__ */ import_react56.default.createElement("span", null, "No connected users")
14164
14247
  ))
14165
14248
  ),
14166
- /* @__PURE__ */ import_react55.default.createElement(
14249
+ /* @__PURE__ */ import_react56.default.createElement(
14167
14250
  StateInspectorDisclosureSection,
14168
14251
  {
14169
- title: /* @__PURE__ */ import_react55.default.createElement(StateInspectorTitleLabel, null, "Data", /* @__PURE__ */ import_react55.default.createElement(
14252
+ title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Data", /* @__PURE__ */ import_react56.default.createElement(
14170
14253
  ColoredDot,
14171
14254
  {
14172
14255
  type: multipeerStateInitialized ? "success" : "error"
@@ -14175,7 +14258,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14175
14258
  colorScheme,
14176
14259
  setOpen: setShowData,
14177
14260
  open: showData,
14178
- right: /* @__PURE__ */ import_react55.default.createElement(
14261
+ right: /* @__PURE__ */ import_react56.default.createElement(
14179
14262
  "span",
14180
14263
  {
14181
14264
  style: {
@@ -14183,9 +14266,9 @@ var StateInspector = memoGeneric(function StateInspector2({
14183
14266
  gap: "12px"
14184
14267
  }
14185
14268
  },
14186
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleImportAll }, "Import"),
14187
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleExportAll }, "Export"),
14188
- /* @__PURE__ */ import_react55.default.createElement(
14269
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleImportAll }, "Import"),
14270
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleExportAll }, "Export"),
14271
+ /* @__PURE__ */ import_react56.default.createElement(
14189
14272
  StateInspectorButton,
14190
14273
  {
14191
14274
  theme: theme3,
@@ -14197,14 +14280,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14197
14280
  )
14198
14281
  )
14199
14282
  },
14200
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react55.default.createElement(
14283
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14201
14284
  themedObjectInspector,
14202
14285
  {
14203
14286
  name: multiplayerStateManager.schema ? "state" : void 0,
14204
14287
  data: state,
14205
14288
  theme: theme3
14206
14289
  }
14207
- )), multiplayerStateManager.schema && /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react55.default.createElement(
14290
+ )), multiplayerStateManager.schema && /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14208
14291
  themedObjectInspector,
14209
14292
  {
14210
14293
  name: "schema",
@@ -14213,7 +14296,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14213
14296
  }
14214
14297
  )))
14215
14298
  ),
14216
- /* @__PURE__ */ import_react55.default.createElement(
14299
+ /* @__PURE__ */ import_react56.default.createElement(
14217
14300
  HistorySection,
14218
14301
  {
14219
14302
  showHistory,
@@ -14223,14 +14306,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14223
14306
  multiplayerStateManager
14224
14307
  }
14225
14308
  ),
14226
- /* @__PURE__ */ import_react55.default.createElement(
14309
+ /* @__PURE__ */ import_react56.default.createElement(
14227
14310
  StateInspectorDisclosureSection,
14228
14311
  {
14229
14312
  open: showAssets,
14230
14313
  setOpen: setShowAssets,
14231
- title: /* @__PURE__ */ import_react55.default.createElement(StateInspectorTitleLabel, null, "Assets (", assets.length, ")", /* @__PURE__ */ import_react55.default.createElement(ColoredDot, { type: assetsInitialized ? "success" : "error" })),
14314
+ title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Assets (", assets.length, ")", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: assetsInitialized ? "success" : "error" })),
14232
14315
  colorScheme,
14233
- right: /* @__PURE__ */ import_react55.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react55.default.createElement(
14316
+ right: /* @__PURE__ */ import_react56.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react56.default.createElement(
14234
14317
  StateInspectorButton,
14235
14318
  {
14236
14319
  theme: theme3,
@@ -14245,7 +14328,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14245
14328
  }
14246
14329
  },
14247
14330
  "Delete all"
14248
- ), /* @__PURE__ */ import_react55.default.createElement(
14331
+ ), /* @__PURE__ */ import_react56.default.createElement(
14249
14332
  StateInspectorButton,
14250
14333
  {
14251
14334
  theme: theme3,
@@ -14258,7 +14341,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14258
14341
  }
14259
14342
  },
14260
14343
  "Reload"
14261
- ), /* @__PURE__ */ import_react55.default.createElement(
14344
+ ), /* @__PURE__ */ import_react56.default.createElement(
14262
14345
  StateInspectorButton,
14263
14346
  {
14264
14347
  theme: theme3,
@@ -14282,14 +14365,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14282
14365
  "Upload"
14283
14366
  ))
14284
14367
  },
14285
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, assets.map((asset) => /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { key: asset.id, colorScheme }, /* @__PURE__ */ import_react55.default.createElement(
14368
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, assets.map((asset) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: asset.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14286
14369
  themedObjectInspector,
14287
14370
  {
14288
14371
  name: asset.id,
14289
14372
  data: truncateAsset(asset),
14290
14373
  theme: theme3
14291
14374
  }
14292
- ), /* @__PURE__ */ import_react55.default.createElement(
14375
+ ), /* @__PURE__ */ import_react56.default.createElement(
14293
14376
  StateInspectorButton,
14294
14377
  {
14295
14378
  theme: theme3,
@@ -14298,14 +14381,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14298
14381
  "Delete"
14299
14382
  ))))
14300
14383
  ),
14301
- advanced && /* @__PURE__ */ import_react55.default.createElement(
14384
+ advanced && /* @__PURE__ */ import_react56.default.createElement(
14302
14385
  StateInspectorDisclosureSection,
14303
14386
  {
14304
- title: /* @__PURE__ */ import_react55.default.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ import_react55.default.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
14387
+ title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
14305
14388
  colorScheme,
14306
14389
  open: showResources,
14307
14390
  setOpen: setShowResources,
14308
- right: /* @__PURE__ */ import_react55.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react55.default.createElement(
14391
+ right: /* @__PURE__ */ import_react56.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react56.default.createElement(
14309
14392
  StateInspectorButton,
14310
14393
  {
14311
14394
  theme: theme3,
@@ -14320,7 +14403,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14320
14403
  }
14321
14404
  },
14322
14405
  "Delete all"
14323
- ), /* @__PURE__ */ import_react55.default.createElement(
14406
+ ), /* @__PURE__ */ import_react56.default.createElement(
14324
14407
  StateInspectorButton,
14325
14408
  {
14326
14409
  theme: theme3,
@@ -14333,7 +14416,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14333
14416
  }
14334
14417
  },
14335
14418
  "Create Directory"
14336
- ), /* @__PURE__ */ import_react55.default.createElement(
14419
+ ), /* @__PURE__ */ import_react56.default.createElement(
14337
14420
  StateInspectorButton,
14338
14421
  {
14339
14422
  theme: theme3,
@@ -14353,21 +14436,21 @@ var StateInspector = memoGeneric(function StateInspector2({
14353
14436
  "Create Asset"
14354
14437
  ))
14355
14438
  },
14356
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, resources?.map((resource) => /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { key: resource.id, colorScheme }, /* @__PURE__ */ import_react55.default.createElement(
14439
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, resources?.map((resource) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: resource.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14357
14440
  themedObjectInspector,
14358
14441
  {
14359
14442
  name: resource.path,
14360
14443
  data: resource,
14361
14444
  theme: theme3
14362
14445
  }
14363
- ), /* @__PURE__ */ import_react55.default.createElement("div", { style: { display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react55.default.createElement(
14446
+ ), /* @__PURE__ */ import_react56.default.createElement("div", { style: { display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react56.default.createElement(
14364
14447
  StateInspectorButton,
14365
14448
  {
14366
14449
  theme: theme3,
14367
14450
  onClick: () => resourceManager.deleteResource({ id: resource.id })
14368
14451
  },
14369
14452
  "Delete"
14370
- ), /* @__PURE__ */ import_react55.default.createElement(
14453
+ ), /* @__PURE__ */ import_react56.default.createElement(
14371
14454
  StateInspectorButton,
14372
14455
  {
14373
14456
  theme: theme3,
@@ -14380,14 +14463,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14380
14463
  "Rename"
14381
14464
  )))))
14382
14465
  ),
14383
- advanced && /* @__PURE__ */ import_react55.default.createElement(
14466
+ advanced && /* @__PURE__ */ import_react56.default.createElement(
14384
14467
  StateInspectorDisclosureSection,
14385
14468
  {
14386
- title: /* @__PURE__ */ import_react55.default.createElement(StateInspectorTitleLabel, null, "Secrets", /* @__PURE__ */ import_react55.default.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
14469
+ title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Secrets", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
14387
14470
  colorScheme,
14388
14471
  open: showSecrets,
14389
14472
  setOpen: setShowSecrets,
14390
- right: /* @__PURE__ */ import_react55.default.createElement(
14473
+ right: /* @__PURE__ */ import_react56.default.createElement(
14391
14474
  StateInspectorButton,
14392
14475
  {
14393
14476
  theme: theme3,
@@ -14402,7 +14485,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14402
14485
  "Create"
14403
14486
  )
14404
14487
  },
14405
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, secrets.map((secret) => /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { key: secret.id, colorScheme }, /* @__PURE__ */ import_react55.default.createElement(themedObjectInspector, { data: secret, theme: theme3 }), /* @__PURE__ */ import_react55.default.createElement(
14488
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, secrets.map((secret) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: secret.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: secret, theme: theme3 }), /* @__PURE__ */ import_react56.default.createElement(
14406
14489
  StateInspectorButton,
14407
14490
  {
14408
14491
  theme: theme3,
@@ -14411,15 +14494,15 @@ var StateInspector = memoGeneric(function StateInspector2({
14411
14494
  "Delete"
14412
14495
  ))))
14413
14496
  ),
14414
- advanced && /* @__PURE__ */ import_react55.default.createElement(
14497
+ advanced && /* @__PURE__ */ import_react56.default.createElement(
14415
14498
  StateInspectorDisclosureSection,
14416
14499
  {
14417
14500
  open: showInputs,
14418
14501
  setOpen: setShowInputs,
14419
- title: /* @__PURE__ */ import_react55.default.createElement(StateInspectorTitleLabel, null, "Inputs", /* @__PURE__ */ import_react55.default.createElement(ColoredDot, { type: inputsInitialized ? "success" : "error" })),
14502
+ title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Inputs", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: inputsInitialized ? "success" : "error" })),
14420
14503
  colorScheme
14421
14504
  },
14422
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, inputs?.map((input) => /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { key: input.id, colorScheme }, /* @__PURE__ */ import_react55.default.createElement(themedObjectInspector, { data: input, theme: theme3 }))), !inputs?.length && /* @__PURE__ */ import_react55.default.createElement(
14505
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, inputs?.map((input) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: input.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: input, theme: theme3 }))), !inputs?.length && /* @__PURE__ */ import_react56.default.createElement(
14423
14506
  "div",
14424
14507
  {
14425
14508
  style: {
@@ -14430,15 +14513,15 @@ var StateInspector = memoGeneric(function StateInspector2({
14430
14513
  gap: "4px"
14431
14514
  }
14432
14515
  },
14433
- /* @__PURE__ */ import_react55.default.createElement("span", null, "No inputs")
14516
+ /* @__PURE__ */ import_react56.default.createElement("span", null, "No inputs")
14434
14517
  ))
14435
14518
  ),
14436
- advanced && /* @__PURE__ */ import_react55.default.createElement(
14519
+ advanced && /* @__PURE__ */ import_react56.default.createElement(
14437
14520
  StateInspectorDisclosureSection,
14438
14521
  {
14439
14522
  open: showOutputTransforms,
14440
14523
  setOpen: setShowOutputTransforms,
14441
- title: /* @__PURE__ */ import_react55.default.createElement(StateInspectorTitleLabel, null, "Output Transforms", /* @__PURE__ */ import_react55.default.createElement(
14524
+ title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Output Transforms", /* @__PURE__ */ import_react56.default.createElement(
14442
14525
  ColoredDot,
14443
14526
  {
14444
14527
  type: outputTransformsInitialized ? "success" : "error"
@@ -14446,7 +14529,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14446
14529
  )),
14447
14530
  colorScheme
14448
14531
  },
14449
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, outputTransforms?.map((transform) => /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { key: transform.id, colorScheme }, /* @__PURE__ */ import_react55.default.createElement(themedObjectInspector, { data: transform, theme: theme3 }))), !outputTransforms?.length && /* @__PURE__ */ import_react55.default.createElement(
14532
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, outputTransforms?.map((transform) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: transform.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: transform, theme: theme3 }))), !outputTransforms?.length && /* @__PURE__ */ import_react56.default.createElement(
14450
14533
  "div",
14451
14534
  {
14452
14535
  style: {
@@ -14457,10 +14540,10 @@ var StateInspector = memoGeneric(function StateInspector2({
14457
14540
  gap: "4px"
14458
14541
  }
14459
14542
  },
14460
- /* @__PURE__ */ import_react55.default.createElement("span", null, "No output transforms")
14543
+ /* @__PURE__ */ import_react56.default.createElement("span", null, "No output transforms")
14461
14544
  ))
14462
14545
  ),
14463
- advanced && /* @__PURE__ */ import_react55.default.createElement(
14546
+ advanced && /* @__PURE__ */ import_react56.default.createElement(
14464
14547
  StateInspectorDisclosureSection,
14465
14548
  {
14466
14549
  title: "Tasks",
@@ -14468,7 +14551,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14468
14551
  open: showTasks,
14469
14552
  setOpen: setShowTasks
14470
14553
  },
14471
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, tasks?.map((task) => /* @__PURE__ */ import_react55.default.createElement(
14554
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, tasks?.map((task) => /* @__PURE__ */ import_react56.default.createElement(
14472
14555
  StateInspectorRow,
14473
14556
  {
14474
14557
  key: task.id,
@@ -14477,7 +14560,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14477
14560
  backgroundColor: task.status === "done" ? "rgba(0,255,0,0.2)" : task.status === "error" ? "rgba(255,0,0,0.2)" : void 0
14478
14561
  }
14479
14562
  },
14480
- /* @__PURE__ */ import_react55.default.createElement(
14563
+ /* @__PURE__ */ import_react56.default.createElement(
14481
14564
  themedObjectInspector,
14482
14565
  {
14483
14566
  name: task.name,
@@ -14487,7 +14570,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14487
14570
  )
14488
14571
  )))
14489
14572
  ),
14490
- /* @__PURE__ */ import_react55.default.createElement(
14573
+ /* @__PURE__ */ import_react56.default.createElement(
14491
14574
  StateInspectorDisclosureSection,
14492
14575
  {
14493
14576
  open: showShared,
@@ -14495,7 +14578,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14495
14578
  title: "Shared Connection Data",
14496
14579
  colorScheme
14497
14580
  },
14498
- /* @__PURE__ */ import_react55.default.createElement(StateInspectorDisclosureRowInner, null, Object.entries(shared).map(([key, value]) => /* @__PURE__ */ import_react55.default.createElement(StateInspectorRow, { key, colorScheme }, /* @__PURE__ */ import_react55.default.createElement(
14581
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, Object.entries(shared).map(([key, value]) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14499
14582
  themedObjectInspector,
14500
14583
  {
14501
14584
  name: key,
@@ -14505,7 +14588,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14505
14588
  }
14506
14589
  ))))
14507
14590
  ),
14508
- /* @__PURE__ */ import_react55.default.createElement(
14591
+ /* @__PURE__ */ import_react56.default.createElement(
14509
14592
  ServerScriptLogsSection,
14510
14593
  {
14511
14594
  colorScheme,
@@ -14517,7 +14600,44 @@ var StateInspector = memoGeneric(function StateInspector2({
14517
14600
  containerRef: serverLogsContainerRef
14518
14601
  }
14519
14602
  ),
14520
- advanced && /* @__PURE__ */ import_react55.default.createElement(
14603
+ showSimulationLogsSection && /* @__PURE__ */ import_react56.default.createElement(
14604
+ ServerScriptLogsSection,
14605
+ {
14606
+ title: "Server Script Simulation Logs",
14607
+ colorScheme,
14608
+ showLogs: showServerSimulationLogs,
14609
+ setShowLogs: setShowServerSimulationLogs,
14610
+ logs: visibleServerSimulationLogs,
14611
+ paused: serverSimulationLogsPaused,
14612
+ onTogglePaused: toggleServerSimulationLogsPaused,
14613
+ containerRef: serverSimulationLogsContainerRef
14614
+ }
14615
+ ),
14616
+ /* @__PURE__ */ import_react56.default.createElement(
14617
+ StateInspectorDisclosureSection,
14618
+ {
14619
+ open: showSimulation,
14620
+ setOpen: setShowSimulation,
14621
+ title: "Server Simulation",
14622
+ colorScheme
14623
+ },
14624
+ /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14625
+ themedObjectInspector,
14626
+ {
14627
+ name: "status",
14628
+ data: simulationDiagnostics ?? {
14629
+ simulateLocally: false,
14630
+ simulatorActive: false,
14631
+ clockSkewMs: 0,
14632
+ invocations: [],
14633
+ pendingPredictions: []
14634
+ },
14635
+ theme: theme3,
14636
+ expandLevel: 2
14637
+ }
14638
+ )))
14639
+ ),
14640
+ advanced && /* @__PURE__ */ import_react56.default.createElement(
14521
14641
  ActivityEventsSection,
14522
14642
  {
14523
14643
  colorScheme,
@@ -14527,10 +14647,12 @@ var StateInspector = memoGeneric(function StateInspector2({
14527
14647
  activityEventsManager
14528
14648
  }
14529
14649
  ),
14530
- /* @__PURE__ */ import_react55.default.createElement(
14650
+ /* @__PURE__ */ import_react56.default.createElement(
14531
14651
  EventsSection,
14532
14652
  {
14533
- connectionEvents,
14653
+ connectionEvents: visibleConnectionEvents,
14654
+ paused: connectionEventsPaused,
14655
+ onTogglePaused: toggleConnectionEventsPaused,
14534
14656
  colorScheme,
14535
14657
  eventsContainerRef,
14536
14658
  showEvents,
@@ -14548,7 +14670,7 @@ var truncateAsset = (0, import_noya_utils24.memoize)((asset) => {
14548
14670
 
14549
14671
  // ../noya-multiplayer-react/src/hooks.ts
14550
14672
  function useManagedHistory(stateManager) {
14551
- return (0, import_react57.useSyncExternalStore)(
14673
+ return (0, import_react58.useSyncExternalStore)(
14552
14674
  stateManager.historyEmittor.addListener,
14553
14675
  stateManager.getHistorySnapshot,
14554
14676
  stateManager.getHistorySnapshot
@@ -14556,15 +14678,15 @@ function useManagedHistory(stateManager) {
14556
14678
  }
14557
14679
 
14558
14680
  // ../noya-multiplayer-react/src/singleton.tsx
14559
- var import_react59 = __toESM(require("react"));
14681
+ var import_react60 = __toESM(require("react"));
14560
14682
 
14561
14683
  // ../noya-multiplayer-react/src/NoyaStateContext.tsx
14562
- var AnyNoyaStateContext = (0, import_react60.createContext)(void 0);
14684
+ var AnyNoyaStateContext = (0, import_react61.createContext)(void 0);
14563
14685
  var emptyArray = [];
14564
14686
  function useActivityEventsForManager(streamFilter, activityEventsManager) {
14565
- const [streamId, setStreamId] = (0, import_react60.useState)(void 0);
14687
+ const [streamId, setStreamId] = (0, import_react61.useState)(void 0);
14566
14688
  const stableStreamFilter = useJsonMemo(streamFilter);
14567
- (0, import_react60.useEffect)(() => {
14689
+ (0, import_react61.useEffect)(() => {
14568
14690
  if (!stableStreamFilter) return;
14569
14691
  const streamId2 = activityEventsManager.subscribe(stableStreamFilter);
14570
14692
  setStreamId(streamId2);
@@ -14578,8 +14700,8 @@ function useActivityEventsForManager(streamFilter, activityEventsManager) {
14578
14700
  }
14579
14701
 
14580
14702
  // ../noya-multiplayer-react/src/components/UserPointersOverlay.tsx
14581
- var import_observable23 = require("@noya-app/observable");
14582
- var import_react62 = __toESM(require("react"));
14703
+ var import_observable24 = require("@noya-app/observable");
14704
+ var import_react63 = __toESM(require("react"));
14583
14705
  function shouldShow(hideAfter, updatedAt) {
14584
14706
  return !!updatedAt && Date.now() - updatedAt < hideAfter;
14585
14707
  }
@@ -14589,18 +14711,18 @@ var UserPointerInternal = memoGeneric(function UserPointerInternal2({
14589
14711
  hideAfter = 5e3,
14590
14712
  renderUserPointer
14591
14713
  }) {
14592
- const observable = (0, import_react62.useMemo)(() => {
14714
+ const observable = (0, import_react63.useMemo)(() => {
14593
14715
  const metadata$ = sharedConnectionDataManager.metadata$.observePath([user.connectionId]).throttle(50);
14594
14716
  const data$ = sharedConnectionDataManager.data$.observePath([user.connectionId]).throttle(50);
14595
- return import_observable23.Observable.combine([metadata$, data$], ([metadata2, data2]) => {
14717
+ return import_observable24.Observable.combine([metadata$, data$], ([metadata2, data2]) => {
14596
14718
  return { metadata: metadata2, data: data2 };
14597
14719
  });
14598
14720
  }, [sharedConnectionDataManager, user.connectionId]);
14599
14721
  const { metadata, data } = useObservable2(observable);
14600
- const [, setForceUpdate] = (0, import_react62.useState)(0);
14722
+ const [, setForceUpdate] = (0, import_react63.useState)(0);
14601
14723
  const updatedAt = metadata?.updatedAt ?? 0;
14602
14724
  const show = shouldShow(hideAfter, updatedAt);
14603
- (0, import_react62.useEffect)(() => {
14725
+ (0, import_react63.useEffect)(() => {
14604
14726
  if (!show) return;
14605
14727
  const timeoutId = setTimeout(() => {
14606
14728
  setForceUpdate((prev) => prev + 1);
@@ -14624,9 +14746,9 @@ var UserPointersOverlay = memoGeneric(function UserPointers({
14624
14746
  sharedConnectionDataManager.currentConnectionId$
14625
14747
  );
14626
14748
  const connectedUsers = useObservable2(userManager.connectedUsers$);
14627
- return /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, connectedUsers.map((user) => {
14749
+ return /* @__PURE__ */ import_react63.default.createElement(import_react63.default.Fragment, null, connectedUsers.map((user) => {
14628
14750
  if (user.connectionId === currentConnectionId) return null;
14629
- return /* @__PURE__ */ import_react62.default.createElement(
14751
+ return /* @__PURE__ */ import_react63.default.createElement(
14630
14752
  UserPointerInternal,
14631
14753
  {
14632
14754
  key: user.connectionId,
@@ -14640,15 +14762,15 @@ var UserPointersOverlay = memoGeneric(function UserPointers({
14640
14762
 
14641
14763
  // src/react/tableHooks.ts
14642
14764
  var import_observable_store = require("@noya-app/observable-store");
14643
- var import_react63 = require("react");
14765
+ var import_react64 = require("react");
14644
14766
  function useTable(table, {
14645
14767
  where,
14646
14768
  select
14647
14769
  }, options = {}) {
14648
- const stableSelect = (0, import_react63.useMemo)(() => {
14770
+ const stableSelect = (0, import_react64.useMemo)(() => {
14649
14771
  return JSON.stringify(select);
14650
14772
  }, [select]);
14651
- const stableWhere = (0, import_react63.useMemo)(() => {
14773
+ const stableWhere = (0, import_react64.useMemo)(() => {
14652
14774
  let cloneWithNoUndefined = {};
14653
14775
  for (const [key, value] of Object.entries(where ?? {})) {
14654
14776
  if (value !== void 0) {
@@ -14657,7 +14779,7 @@ function useTable(table, {
14657
14779
  }
14658
14780
  return JSON.stringify(cloneWithNoUndefined);
14659
14781
  }, [where]);
14660
- const observable = (0, import_react63.useMemo)(() => {
14782
+ const observable = (0, import_react64.useMemo)(() => {
14661
14783
  const parsedSelect = JSON.parse(stableSelect);
14662
14784
  const parsedWhere = JSON.parse(stableWhere);
14663
14785
  if (!table) {
@@ -14684,18 +14806,18 @@ function useTable(table, {
14684
14806
  }
14685
14807
  );
14686
14808
  }, [stableSelect, stableWhere, table, options.policy, options.debug]);
14687
- (0, import_react63.useEffect)(() => {
14809
+ (0, import_react64.useEffect)(() => {
14688
14810
  observable.start?.();
14689
14811
  }, [observable]);
14690
14812
  const { status, data } = useObservable2(observable);
14691
- const optimisticUpdate = (0, import_react63.useCallback)(
14813
+ const optimisticUpdate = (0, import_react64.useCallback)(
14692
14814
  (entity, config) => {
14693
14815
  if (!table) return;
14694
14816
  table.optimisticUpdate(entity, config);
14695
14817
  },
14696
14818
  [table]
14697
14819
  );
14698
- return (0, import_react63.useMemo)(() => {
14820
+ return (0, import_react64.useMemo)(() => {
14699
14821
  return {
14700
14822
  status,
14701
14823
  data,
@@ -14725,7 +14847,7 @@ function useFileListItem(id, select, options = {}) {
14725
14847
  { where: { id: id ?? null }, select },
14726
14848
  options
14727
14849
  );
14728
- return (0, import_react63.useMemo)(() => {
14850
+ return (0, import_react64.useMemo)(() => {
14729
14851
  return {
14730
14852
  data: data.at(0),
14731
14853
  status,
@@ -14755,7 +14877,7 @@ function useUser(id, select, options = {}) {
14755
14877
  { select, where: { id: id ?? null } },
14756
14878
  options
14757
14879
  );
14758
- return (0, import_react63.useMemo)(() => {
14880
+ return (0, import_react64.useMemo)(() => {
14759
14881
  return {
14760
14882
  status,
14761
14883
  data: data.at(0),