@noya-app/noya-multiplayer-react 0.1.69 → 0.1.71

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.mjs CHANGED
@@ -1493,7 +1493,7 @@ var require_lib2 = __commonJS({
1493
1493
  export * from "@noya-app/state-manager";
1494
1494
 
1495
1495
  // src/ai.ts
1496
- import { useEffect as useEffect5 } from "react";
1496
+ import { useEffect as useEffect6 } from "react";
1497
1497
 
1498
1498
  // ../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
1499
1499
  var TransformKind = Symbol.for("TypeBox.Transform");
@@ -4616,7 +4616,7 @@ import React17, {
4616
4616
  createContext,
4617
4617
  useCallback as useCallback3,
4618
4618
  useContext,
4619
- useEffect as useEffect4,
4619
+ useEffect as useEffect5,
4620
4620
  useMemo as useMemo4,
4621
4621
  useState as useState4
4622
4622
  } from "react";
@@ -4632,7 +4632,7 @@ import {
4632
4632
  TypeGuard,
4633
4633
  webSocketSync
4634
4634
  } from "@noya-app/state-manager";
4635
- import { useMemo as useMemo3, useState as useState3 } from "react";
4635
+ import { useEffect as useEffect4, useMemo as useMemo3, useState as useState3 } from "react";
4636
4636
 
4637
4637
  // src/hooks.ts
4638
4638
  import {
@@ -5084,14 +5084,15 @@ function StateInspectorRow({
5084
5084
  colorScheme,
5085
5085
  selected,
5086
5086
  style,
5087
- variant
5087
+ variant,
5088
+ bordered = true
5088
5089
  }) {
5089
5090
  const solidBorderColor = colorScheme === "light" ? "rgb(223 223 223)" : "rgb(29 29 29)";
5090
5091
  return /* @__PURE__ */ React6.createElement(
5091
5092
  "div",
5092
5093
  {
5093
5094
  style: {
5094
- borderBottom: `1px solid ${solidBorderColor}`,
5095
+ borderBottom: bordered ? `1px solid ${solidBorderColor}` : void 0,
5095
5096
  fontSize: "12px",
5096
5097
  fontFamily: "Menlo, monospace",
5097
5098
  padding: "2px 12px 1px",
@@ -6193,12 +6194,13 @@ var StateInspector = memoGeneric(function StateInspector2({
6193
6194
  colorScheme = "light",
6194
6195
  anchor = "right",
6195
6196
  unstyled = false,
6197
+ advanced = false,
6196
6198
  ...props
6197
6199
  }) {
6198
6200
  const {
6199
6201
  multiplayerStateManager,
6200
6202
  assetManager,
6201
- connectedUsersManager,
6203
+ userManager,
6202
6204
  secretManager,
6203
6205
  ephemeralUserDataManager,
6204
6206
  connectionEventManager,
@@ -6285,8 +6287,8 @@ var StateInspector = memoGeneric(function StateInspector2({
6285
6287
  const assetsInitialized = useObservable(assetManager.isInitialized$);
6286
6288
  const secrets = useObservable(secretManager.secrets$);
6287
6289
  const secretsInitialized = useObservable(secretManager.isInitialized$);
6288
- const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);
6289
- const userId = useObservable(connectedUsersManager.currentUserId$);
6290
+ const connectedUsers = useObservable(userManager.connectedUsers$);
6291
+ const userId = useObservable(userManager.currentUserId$);
6290
6292
  const state = useObservable(multiplayerStateManager.optimisticState$);
6291
6293
  const inputsInitialized = useObservable(ioManager.inputsInitialized$);
6292
6294
  const outputTransformsInitialized = useObservable(
@@ -6384,12 +6386,13 @@ var StateInspector = memoGeneric(function StateInspector2({
6384
6386
  }
6385
6387
  )
6386
6388
  },
6387
- /* @__PURE__ */ React14.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.map((user) => /* @__PURE__ */ React14.createElement(
6389
+ /* @__PURE__ */ React14.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.map((user, index, array) => /* @__PURE__ */ React14.createElement(
6388
6390
  StateInspectorRow,
6389
6391
  {
6390
6392
  key: user.id,
6391
6393
  colorScheme,
6392
- variant: user.id === userId ? "up" : void 0
6394
+ variant: user.id === userId ? "up" : void 0,
6395
+ bordered: index !== array.length - 1
6393
6396
  },
6394
6397
  user.image && /* @__PURE__ */ React14.createElement(
6395
6398
  "img",
@@ -6561,7 +6564,7 @@ var StateInspector = memoGeneric(function StateInspector2({
6561
6564
  "Delete"
6562
6565
  ))))
6563
6566
  ),
6564
- /* @__PURE__ */ React14.createElement(
6567
+ advanced && /* @__PURE__ */ React14.createElement(
6565
6568
  StateInspectorDisclosureSection,
6566
6569
  {
6567
6570
  title: /* @__PURE__ */ React14.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ React14.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
@@ -6643,7 +6646,7 @@ var StateInspector = memoGeneric(function StateInspector2({
6643
6646
  "Rename"
6644
6647
  )))))
6645
6648
  ),
6646
- /* @__PURE__ */ React14.createElement(
6649
+ advanced && /* @__PURE__ */ React14.createElement(
6647
6650
  StateInspectorDisclosureSection,
6648
6651
  {
6649
6652
  title: /* @__PURE__ */ React14.createElement(StateInspectorTitleLabel, null, "Secrets", /* @__PURE__ */ React14.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
@@ -6674,8 +6677,7 @@ var StateInspector = memoGeneric(function StateInspector2({
6674
6677
  "Delete"
6675
6678
  ))))
6676
6679
  ),
6677
- " ",
6678
- /* @__PURE__ */ React14.createElement(
6680
+ advanced && /* @__PURE__ */ React14.createElement(
6679
6681
  StateInspectorDisclosureSection,
6680
6682
  {
6681
6683
  open: showInputs,
@@ -6697,7 +6699,7 @@ var StateInspector = memoGeneric(function StateInspector2({
6697
6699
  /* @__PURE__ */ React14.createElement("span", null, "No inputs")
6698
6700
  ))
6699
6701
  ),
6700
- /* @__PURE__ */ React14.createElement(
6702
+ advanced && /* @__PURE__ */ React14.createElement(
6701
6703
  StateInspectorDisclosureSection,
6702
6704
  {
6703
6705
  open: showOutputTransforms,
@@ -6724,7 +6726,7 @@ var StateInspector = memoGeneric(function StateInspector2({
6724
6726
  /* @__PURE__ */ React14.createElement("span", null, "No output transforms")
6725
6727
  ))
6726
6728
  ),
6727
- /* @__PURE__ */ React14.createElement(
6729
+ advanced && /* @__PURE__ */ React14.createElement(
6728
6730
  StateInspectorDisclosureSection,
6729
6731
  {
6730
6732
  title: "Tasks",
@@ -6769,7 +6771,7 @@ var StateInspector = memoGeneric(function StateInspector2({
6769
6771
  }
6770
6772
  ))))
6771
6773
  ),
6772
- /* @__PURE__ */ React14.createElement(
6774
+ advanced && /* @__PURE__ */ React14.createElement(
6773
6775
  ActivityEventsSection,
6774
6776
  {
6775
6777
  colorScheme,
@@ -6821,6 +6823,7 @@ function createStateInspectorRoot() {
6821
6823
  function useStateInspector({
6822
6824
  noyaManager,
6823
6825
  disabled = false,
6826
+ advanced = false,
6824
6827
  colorScheme,
6825
6828
  anchor
6826
6829
  }) {
@@ -6839,11 +6842,12 @@ function useStateInspector({
6839
6842
  {
6840
6843
  colorScheme,
6841
6844
  anchor,
6842
- noyaManager
6845
+ noyaManager,
6846
+ advanced
6843
6847
  }
6844
6848
  )
6845
6849
  );
6846
- }, [noyaManager, anchor, colorScheme, root]);
6850
+ }, [noyaManager, anchor, colorScheme, root, advanced]);
6847
6851
  }
6848
6852
 
6849
6853
  // src/hooks.ts
@@ -6911,7 +6915,7 @@ function useBindNoyaManager(noyaManager, options) {
6911
6915
  noyaManager,
6912
6916
  taskManager: noyaManager.taskManager,
6913
6917
  connectionEventManager: noyaManager.connectionEventManager,
6914
- connectedUsersManager: noyaManager.connectedUsersManager,
6918
+ userManager: noyaManager.userManager,
6915
6919
  ephemeralUserDataManager: noyaManager.ephemeralUserDataManager,
6916
6920
  multiplayerStateManager: noyaManager.multiplayerStateManager,
6917
6921
  assetManager: noyaManager.assetManager,
@@ -6935,6 +6939,7 @@ function useBindNoyaManager(noyaManager, options) {
6935
6939
  useStateInspector({
6936
6940
  noyaManager,
6937
6941
  disabled: !options?.inspector,
6942
+ advanced: true,
6938
6943
  ...typeof options?.inspector === "object" && options?.inspector
6939
6944
  });
6940
6945
  return [state, noyaManager.multiplayerStateManager.setState, extras];
@@ -6972,7 +6977,8 @@ function createDefaultAppData(initialState) {
6972
6977
  theme: "light",
6973
6978
  viewType: "editable",
6974
6979
  initialState,
6975
- inspector: false
6980
+ inspector: false,
6981
+ isDemo: false
6976
6982
  };
6977
6983
  }
6978
6984
  function enforceSchema(initialState, schema) {
@@ -7003,6 +7009,7 @@ function getAppData(initialState, schema, options) {
7003
7009
  appData.initialState = resolvedInitialState;
7004
7010
  }
7005
7011
  appData.initialState = enforceSchema(appData.initialState, schema);
7012
+ appData.isDemo = appData.isDemo ?? false;
7006
7013
  return appData;
7007
7014
  }
7008
7015
  function getSyncAdapter(params) {
@@ -7017,7 +7024,9 @@ function useNoyaStateInternal(...args) {
7017
7024
  inspector,
7018
7025
  initialState: noyaAppInitialState,
7019
7026
  theme,
7020
- viewType
7027
+ viewType,
7028
+ userId,
7029
+ isDemo
7021
7030
  }
7022
7031
  ] = useState3(() => {
7023
7032
  return getAppData(initialState, options?.schema, {
@@ -7034,14 +7043,19 @@ function useNoyaStateInternal(...args) {
7034
7043
  const [noyaManager] = useState3(
7035
7044
  () => new NoyaManager3(noyaAppInitialState, options)
7036
7045
  );
7046
+ useEffect4(() => {
7047
+ if (!userId) return;
7048
+ noyaManager.ephemeralUserDataManager.setCurrentUserId(userId);
7049
+ noyaManager.userManager.setCurrentUserId(userId);
7050
+ }, [noyaManager, userId]);
7037
7051
  const result = useBindNoyaManager(noyaManager, {
7038
7052
  inspector: options?.inspector ?? inspector,
7039
7053
  sync: options?.sync ?? sync
7040
7054
  });
7041
7055
  const [, , extras] = result;
7042
7056
  const mergedExtras = useMemo3(() => {
7043
- return { ...extras, theme, viewType };
7044
- }, [extras, theme, viewType]);
7057
+ return { ...extras, theme, viewType, isDemo };
7058
+ }, [extras, theme, viewType, isDemo]);
7045
7059
  return [result[0], result[1], mergedExtras];
7046
7060
  }
7047
7061
 
@@ -7077,6 +7091,12 @@ function initializeNoyaSingleton(options) {
7077
7091
  appData.initialState,
7078
7092
  managerOptions
7079
7093
  );
7094
+ if (appData.userId) {
7095
+ noyaManagerSingleton.ephemeralUserDataManager.setCurrentUserId(
7096
+ appData.userId
7097
+ );
7098
+ noyaManagerSingleton.userManager.setCurrentUserId(appData.userId);
7099
+ }
7080
7100
  const resolvedSync = sync ?? getSyncAdapter({
7081
7101
  multiplayerUrl: multiplayerUrl ?? appData.multiplayerUrl,
7082
7102
  offlineStorageKey,
@@ -7098,7 +7118,8 @@ function initializeNoyaSingleton(options) {
7098
7118
  {
7099
7119
  noyaManager: noyaManagerSingleton,
7100
7120
  colorScheme: resolvedInspector === true ? resolvedTheme : resolvedInspector.colorScheme,
7101
- anchor: resolvedInspector === true ? "bottom right" : resolvedInspector.anchor
7121
+ anchor: resolvedInspector === true ? "bottom right" : resolvedInspector.anchor,
7122
+ advanced: resolvedInspector === true ? false : resolvedInspector.advanced
7102
7123
  }
7103
7124
  )
7104
7125
  );
@@ -7107,7 +7128,9 @@ function initializeNoyaSingleton(options) {
7107
7128
  sync: resolvedSync,
7108
7129
  inspector: resolvedInspector,
7109
7130
  theme: resolvedTheme,
7110
- viewType: resolvedViewType
7131
+ viewType: resolvedViewType,
7132
+ userId: appData.userId,
7133
+ isDemo: appData.isDemo
7111
7134
  };
7112
7135
  }
7113
7136
  function getNoyaManagerSingleton() {
@@ -7283,7 +7306,7 @@ function useIOManager() {
7283
7306
  function usePublish(callback) {
7284
7307
  const { noyaManager } = useAnyNoyaStateContext();
7285
7308
  const stableCallback = useStableCallback(callback);
7286
- useEffect4(() => {
7309
+ useEffect5(() => {
7287
7310
  noyaManager.publishingManager.setPublishingEnabled(true);
7288
7311
  noyaManager.publishingManager.getFilesToPublish = stableCallback;
7289
7312
  return () => {
@@ -7311,18 +7334,18 @@ function usePipelineManager() {
7311
7334
  const { noyaManager } = useAnyNoyaStateContext();
7312
7335
  return noyaManager.pipelineManager;
7313
7336
  }
7314
- function useConnectedUsersManager() {
7337
+ function useUserManager() {
7315
7338
  const { noyaManager } = useAnyNoyaStateContext();
7316
- return noyaManager.connectedUsersManager;
7339
+ return noyaManager.userManager;
7317
7340
  }
7318
7341
  function useConnectedUsers() {
7319
- const connectedUsersManager = useConnectedUsersManager();
7320
- return useObservable(connectedUsersManager?.connectedUsers$);
7342
+ const userManager = useUserManager();
7343
+ return useObservable(userManager?.connectedUsers$);
7321
7344
  }
7322
7345
  function useConnectedUser(userId) {
7323
- const connectedUsersManager = useConnectedUsersManager();
7346
+ const userManager = useUserManager();
7324
7347
  return useObservable(
7325
- connectedUsersManager?.connectedUsers$,
7348
+ userManager?.connectedUsers$,
7326
7349
  useCallback3(
7327
7350
  (users) => {
7328
7351
  return users.find((user) => {
@@ -7339,8 +7362,8 @@ function useAnyEphemeralUserData() {
7339
7362
  return noyaManager.ephemeralUserDataManager;
7340
7363
  }
7341
7364
  function useCurrentUserId() {
7342
- const connectedUsersManager = useConnectedUsersManager();
7343
- return useObservable(connectedUsersManager?.currentUserId$);
7365
+ const userManager = useUserManager();
7366
+ return useObservable(userManager?.currentUserId$);
7344
7367
  }
7345
7368
  function useIsProcessing() {
7346
7369
  const { noyaManager } = useAnyNoyaStateContext();
@@ -7441,7 +7464,7 @@ function useActivityEvents(streamFilter) {
7441
7464
  function useActivityEventsForManager(streamFilter, activityEventsManager) {
7442
7465
  const [streamId, setStreamId] = useState4(void 0);
7443
7466
  const stableStreamFilter = useJsonMemo(streamFilter);
7444
- useEffect4(() => {
7467
+ useEffect5(() => {
7445
7468
  if (!stableStreamFilter) return;
7446
7469
  const streamId2 = activityEventsManager.subscribe(stableStreamFilter);
7447
7470
  setStreamId(streamId2);
@@ -7549,7 +7572,7 @@ function createNoyaContext({
7549
7572
  }
7550
7573
  function useSetLeftMenuItems(leftMenuItems) {
7551
7574
  const { menuManager } = useNoyaManager();
7552
- useEffect4(() => {
7575
+ useEffect5(() => {
7553
7576
  if (leftMenuItems) {
7554
7577
  menuManager.setLeftMenuItems(leftMenuItems);
7555
7578
  }
@@ -7561,7 +7584,7 @@ function createNoyaContext({
7561
7584
  }
7562
7585
  function useSetRightMenuItems(rightMenuItems) {
7563
7586
  const { menuManager } = useNoyaManager();
7564
- useEffect4(() => {
7587
+ useEffect5(() => {
7565
7588
  if (rightMenuItems) {
7566
7589
  menuManager.setRightMenuItems(rightMenuItems);
7567
7590
  }
@@ -7569,7 +7592,7 @@ function createNoyaContext({
7569
7592
  }
7570
7593
  function useHandleMenuItem(callback) {
7571
7594
  const { menuManager } = useNoyaManager();
7572
- useEffect4(() => {
7595
+ useEffect5(() => {
7573
7596
  return menuManager.addListener(callback);
7574
7597
  }, [menuManager, callback]);
7575
7598
  }
@@ -7608,7 +7631,7 @@ function createNoyaContext({
7608
7631
  // src/ai.ts
7609
7632
  function useRegisterAITool(tool) {
7610
7633
  const aiManager = useAIManager();
7611
- useEffect5(() => {
7634
+ useEffect6(() => {
7612
7635
  return aiManager.registerTool(tool);
7613
7636
  }, [aiManager, tool]);
7614
7637
  }
@@ -7620,7 +7643,7 @@ function useCallableAITools() {
7620
7643
  // src/components/UserPointersOverlay.tsx
7621
7644
  import { Observable as Observable2 } from "@noya-app/observable";
7622
7645
  import { memoGeneric as memoGeneric2 } from "@noya-app/react-utils";
7623
- import React18, { useEffect as useEffect6, useMemo as useMemo5, useState as useState5 } from "react";
7646
+ import React18, { useEffect as useEffect7, useMemo as useMemo5, useState as useState5 } from "react";
7624
7647
  function shouldShow(hideAfter, updatedAt) {
7625
7648
  return !!updatedAt && Date.now() - updatedAt < hideAfter;
7626
7649
  }
@@ -7641,7 +7664,7 @@ var UserPointerInternal = memoGeneric2(function UserPointerInternal2({
7641
7664
  const [, setForceUpdate] = useState5(0);
7642
7665
  const updatedAt = metadata?.updatedAt ?? 0;
7643
7666
  const show = shouldShow(hideAfter, updatedAt);
7644
- useEffect6(() => {
7667
+ useEffect7(() => {
7645
7668
  if (!show) return;
7646
7669
  const timeoutId = setTimeout(() => {
7647
7670
  setForceUpdate((prev) => prev + 1);
@@ -7657,12 +7680,12 @@ var UserPointerInternal = memoGeneric2(function UserPointerInternal2({
7657
7680
  });
7658
7681
  });
7659
7682
  var UserPointersOverlay = memoGeneric2(function UserPointers({
7660
- connectedUsersManager,
7683
+ userManager,
7661
7684
  ephemeralUserDataManager,
7662
7685
  renderUserPointer
7663
7686
  }) {
7664
7687
  const currentUserId = useObservable(ephemeralUserDataManager.currentUserId$);
7665
- const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);
7688
+ const connectedUsers = useObservable(userManager.connectedUsers$);
7666
7689
  return /* @__PURE__ */ React18.createElement(React18.Fragment, null, connectedUsers.map((user) => {
7667
7690
  if (user.id === currentUserId) return null;
7668
7691
  return /* @__PURE__ */ React18.createElement(
@@ -7797,7 +7820,6 @@ export {
7797
7820
  useColorScheme,
7798
7821
  useConnectedUser,
7799
7822
  useConnectedUsers,
7800
- useConnectedUsersManager,
7801
7823
  useCurrentUserId,
7802
7824
  useFileName,
7803
7825
  useFilePropertyManager,
@@ -7821,6 +7843,7 @@ export {
7821
7843
  useSecrets,
7822
7844
  useSetFileNameState,
7823
7845
  useStateInspector,
7846
+ useUserManager,
7824
7847
  useViewType
7825
7848
  };
7826
7849
  //# sourceMappingURL=index.mjs.map