@noya-app/noya-multiplayer-react 0.1.47 → 0.1.49

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.d.mts CHANGED
@@ -3,7 +3,7 @@ import { ConnectedUsersManager, EphemeralUserDataManager, NoyaManager, StateMana
3
3
  export * from '@noya-app/state-manager';
4
4
  import React, { SetStateAction } from 'react';
5
5
  import { GetAtPath, ObservableOptions, PathKey, Observable } from '@noya-app/observable';
6
- import * as _noya_app_noya_designsystem from '@noya-app/noya-designsystem';
6
+ import { MenuItem } from '@noya-app/noya-designsystem';
7
7
 
8
8
  type Point = {
9
9
  x: number;
@@ -116,11 +116,20 @@ interface NoyaStateProviderProps<S, M extends object, E extends object, MenuT ex
116
116
  initialState?: S;
117
117
  fallback?: React.ReactNode;
118
118
  }
119
+ declare function useAnyNoyaStateContext(): {
120
+ noyaManager: NoyaManager<any, any, any, any>;
121
+ theme: AppTheme;
122
+ viewType: AppViewType;
123
+ };
124
+ declare function useAnyNoyaManager(): NoyaManager<any, any, any, any>;
125
+ declare function useColorScheme(): AppTheme;
126
+ declare function useViewType(): AppViewType;
119
127
  declare function useAssets(): _noya_app_state_manager.Asset[];
120
128
  declare function useAsset(id: string | undefined): _noya_app_state_manager.Asset | undefined;
121
129
  declare function useAssetManager(): {
122
130
  create: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
123
131
  delete: (id: string) => Promise<void>;
132
+ isInitialized: boolean;
124
133
  };
125
134
  declare function useAIManager(): _noya_app_state_manager.AIManager;
126
135
  declare function useSecretManager(): _noya_app_state_manager.SecretManager;
@@ -159,11 +168,18 @@ declare function createNoyaContext<Schema extends TSchema, M extends object = ob
159
168
  };
160
169
  useStateManager: () => MultiplayerStateManager<Static<Schema>, M>;
161
170
  useEphemeralUserDataManager: () => EphemeralUserDataManager<E>;
162
- useLeftMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
163
- useRightMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
171
+ useLeftMenuItems: () => MenuItem<MenuT>[];
172
+ useSetLeftMenuItems: (leftMenuItems?: MenuItem<MenuT>[]) => void;
173
+ useRightMenuItems: () => MenuItem<MenuT>[];
174
+ useSetRightMenuItems: (rightMenuItems?: MenuItem<MenuT>[]) => void;
164
175
  useHandleMenuItem: (callback: (type: MenuT) => void) => void;
165
176
  useOnSelectMenuItemCallback: () => (type: MenuT) => void;
166
177
  useNoyaManager: () => NoyaManager<Static<Schema>, M, E, MenuT>;
178
+ useMenu: (options: {
179
+ leftMenuItems?: MenuItem<MenuT>[];
180
+ rightMenuItems?: MenuItem<MenuT>[];
181
+ onSelectMenuItem?: (type: MenuT) => void;
182
+ }) => void;
167
183
  };
168
184
 
169
185
  declare function useObservable<T>(observable: Observable<T>): T;
@@ -208,4 +224,4 @@ declare class WebSocketConnection<State> {
208
224
  removeListener(listener: (state: ReconnectingWebSocketState) => void): void;
209
225
  }
210
226
 
211
- export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useWorkflowManager };
227
+ export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAnyNoyaManager, useAnyNoyaStateContext, useAsset, useAssetManager, useAssets, useColorScheme, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useViewType, useWorkflowManager };
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { ConnectedUsersManager, EphemeralUserDataManager, NoyaManager, StateMana
3
3
  export * from '@noya-app/state-manager';
4
4
  import React, { SetStateAction } from 'react';
5
5
  import { GetAtPath, ObservableOptions, PathKey, Observable } from '@noya-app/observable';
6
- import * as _noya_app_noya_designsystem from '@noya-app/noya-designsystem';
6
+ import { MenuItem } from '@noya-app/noya-designsystem';
7
7
 
8
8
  type Point = {
9
9
  x: number;
@@ -116,11 +116,20 @@ interface NoyaStateProviderProps<S, M extends object, E extends object, MenuT ex
116
116
  initialState?: S;
117
117
  fallback?: React.ReactNode;
118
118
  }
119
+ declare function useAnyNoyaStateContext(): {
120
+ noyaManager: NoyaManager<any, any, any, any>;
121
+ theme: AppTheme;
122
+ viewType: AppViewType;
123
+ };
124
+ declare function useAnyNoyaManager(): NoyaManager<any, any, any, any>;
125
+ declare function useColorScheme(): AppTheme;
126
+ declare function useViewType(): AppViewType;
119
127
  declare function useAssets(): _noya_app_state_manager.Asset[];
120
128
  declare function useAsset(id: string | undefined): _noya_app_state_manager.Asset | undefined;
121
129
  declare function useAssetManager(): {
122
130
  create: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
123
131
  delete: (id: string) => Promise<void>;
132
+ isInitialized: boolean;
124
133
  };
125
134
  declare function useAIManager(): _noya_app_state_manager.AIManager;
126
135
  declare function useSecretManager(): _noya_app_state_manager.SecretManager;
@@ -159,11 +168,18 @@ declare function createNoyaContext<Schema extends TSchema, M extends object = ob
159
168
  };
160
169
  useStateManager: () => MultiplayerStateManager<Static<Schema>, M>;
161
170
  useEphemeralUserDataManager: () => EphemeralUserDataManager<E>;
162
- useLeftMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
163
- useRightMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
171
+ useLeftMenuItems: () => MenuItem<MenuT>[];
172
+ useSetLeftMenuItems: (leftMenuItems?: MenuItem<MenuT>[]) => void;
173
+ useRightMenuItems: () => MenuItem<MenuT>[];
174
+ useSetRightMenuItems: (rightMenuItems?: MenuItem<MenuT>[]) => void;
164
175
  useHandleMenuItem: (callback: (type: MenuT) => void) => void;
165
176
  useOnSelectMenuItemCallback: () => (type: MenuT) => void;
166
177
  useNoyaManager: () => NoyaManager<Static<Schema>, M, E, MenuT>;
178
+ useMenu: (options: {
179
+ leftMenuItems?: MenuItem<MenuT>[];
180
+ rightMenuItems?: MenuItem<MenuT>[];
181
+ onSelectMenuItem?: (type: MenuT) => void;
182
+ }) => void;
167
183
  };
168
184
 
169
185
  declare function useObservable<T>(observable: Observable<T>): T;
@@ -208,4 +224,4 @@ declare class WebSocketConnection<State> {
208
224
  removeListener(listener: (state: ReconnectingWebSocketState) => void): void;
209
225
  }
210
226
 
211
- export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useWorkflowManager };
227
+ export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAnyNoyaManager, useAnyNoyaStateContext, useAsset, useAssetManager, useAssets, useColorScheme, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useViewType, useWorkflowManager };
package/dist/index.js CHANGED
@@ -44,9 +44,12 @@ __export(src_exports, {
44
44
  parseAppDataParameter: () => parseAppDataParameter,
45
45
  useAIManager: () => useAIManager,
46
46
  useAnyEphemeralUserData: () => useAnyEphemeralUserData,
47
+ useAnyNoyaManager: () => useAnyNoyaManager,
48
+ useAnyNoyaStateContext: () => useAnyNoyaStateContext,
47
49
  useAsset: () => useAsset,
48
50
  useAssetManager: () => useAssetManager,
49
51
  useAssets: () => useAssets,
52
+ useColorScheme: () => useColorScheme,
50
53
  useConnectedUsersManager: () => useConnectedUsersManager,
51
54
  useCurrentUserId: () => useCurrentUserId,
52
55
  useIsInitialized: () => useIsInitialized,
@@ -59,6 +62,7 @@ __export(src_exports, {
59
62
  useSecretManager: () => useSecretManager,
60
63
  useSecrets: () => useSecrets,
61
64
  useSyncStateManager: () => useSyncStateManager,
65
+ useViewType: () => useViewType,
62
66
  useWorkflowManager: () => useWorkflowManager
63
67
  });
64
68
  module.exports = __toCommonJS(src_exports);
@@ -1370,7 +1374,10 @@ function useNoyaState(...args) {
1370
1374
  });
1371
1375
  });
1372
1376
  const sync = (0, import_react7.useMemo)(() => {
1373
- return (0, import_state_manager2.isEmbeddedApp)() ? (0, import_state_manager2.parentFrameSync)({ debug: options?.debug }) : multiplayerUrl ? (0, import_state_manager2.webSocketSync)(multiplayerUrl) : options?.offlineStorageKey ? (0, import_state_manager2.localStorageSync)({ key: options.offlineStorageKey }) : (0, import_state_manager2.stubSync)();
1377
+ return (0, import_state_manager2.isEmbeddedApp)() ? (0, import_state_manager2.parentFrameSync)({ debug: options?.debug }) : multiplayerUrl ? (0, import_state_manager2.webSocketSync)({
1378
+ url: multiplayerUrl,
1379
+ debug: options?.debug
1380
+ }) : options?.offlineStorageKey ? (0, import_state_manager2.localStorageSync)({ key: options.offlineStorageKey }) : (0, import_state_manager2.stubSync)();
1374
1381
  }, [multiplayerUrl, options?.offlineStorageKey, options?.debug]);
1375
1382
  const result = useMultiplayerState(noyaAppInitialState, {
1376
1383
  ...options,
@@ -1397,69 +1404,81 @@ function useAnyNoyaStateContext() {
1397
1404
  }
1398
1405
  return value;
1399
1406
  }
1407
+ function useAnyNoyaManager() {
1408
+ const { noyaManager } = useAnyNoyaStateContext();
1409
+ return noyaManager;
1410
+ }
1411
+ function useColorScheme() {
1412
+ const { theme } = useAnyNoyaStateContext();
1413
+ return theme;
1414
+ }
1415
+ function useViewType() {
1416
+ const { viewType } = useAnyNoyaStateContext();
1417
+ return viewType;
1418
+ }
1400
1419
  function useAssets() {
1401
- const { assetManager } = useAnyNoyaStateContext();
1402
- return useObservable(assetManager.assets$);
1420
+ const { noyaManager } = useAnyNoyaStateContext();
1421
+ return useObservable(noyaManager.assetManager.assets$);
1403
1422
  }
1404
1423
  function useAsset(id) {
1405
- const { assetManager } = useAnyNoyaStateContext();
1424
+ const { noyaManager } = useAnyNoyaStateContext();
1406
1425
  const observable = (0, import_react8.useMemo)(
1407
- () => assetManager.assets$.map((assets) => assets.find((a) => a.id === id)),
1408
- [assetManager, id]
1426
+ () => noyaManager.assetManager.assets$.map(
1427
+ (assets) => assets.find((a) => a.id === id)
1428
+ ),
1429
+ [noyaManager, id]
1409
1430
  );
1410
1431
  return useObservable(observable);
1411
1432
  }
1412
1433
  function useAssetManager() {
1413
- const { assetManager } = useAnyNoyaStateContext();
1434
+ const { noyaManager } = useAnyNoyaStateContext();
1435
+ const isInitialized = useObservable(noyaManager.assetManager.isInitialized$);
1414
1436
  return (0, import_react8.useMemo)(
1415
1437
  () => ({
1416
- create: assetManager.create,
1417
- delete: assetManager.delete
1438
+ create: noyaManager.assetManager.create,
1439
+ delete: noyaManager.assetManager.delete,
1440
+ isInitialized
1418
1441
  }),
1419
- [assetManager]
1442
+ [noyaManager, isInitialized]
1420
1443
  );
1421
1444
  }
1422
1445
  function useAIManager() {
1423
- const { aiManager } = useAnyNoyaStateContext();
1424
- return aiManager;
1446
+ const { noyaManager } = useAnyNoyaStateContext();
1447
+ return noyaManager.aiManager;
1425
1448
  }
1426
1449
  function useSecretManager() {
1427
- const { secretManager } = useAnyNoyaStateContext();
1428
- return secretManager;
1450
+ const { noyaManager } = useAnyNoyaStateContext();
1451
+ return noyaManager.secretManager;
1429
1452
  }
1430
1453
  function useSecrets() {
1431
- const { secretManager } = useAnyNoyaStateContext();
1432
- return useObservable(secretManager.secrets$);
1454
+ const { noyaManager } = useAnyNoyaStateContext();
1455
+ return useObservable(noyaManager.secretManager.secrets$);
1433
1456
  }
1434
1457
  function useSecret(name) {
1435
- const { secretManager } = useAnyNoyaStateContext();
1458
+ const { noyaManager } = useAnyNoyaStateContext();
1436
1459
  return useObservable(
1437
- secretManager.secrets$,
1460
+ noyaManager.secretManager.secrets$,
1438
1461
  (0, import_react8.useCallback)((secrets) => secrets.find((s) => s.name === name), [name])
1439
1462
  );
1440
1463
  }
1441
1464
  function useIsInitialized() {
1442
- const {
1443
- multiplayerStateManager: ms,
1444
- secretManager,
1445
- assetManager
1446
- } = useAnyNoyaStateContext();
1465
+ const { noyaManager, viewType } = useAnyNoyaStateContext();
1447
1466
  const isInitializedObservable = (0, import_react8.useMemo)(
1448
1467
  () => import_observable.Observable.combine(
1449
1468
  [
1450
- ms.isInitialized$,
1451
- secretManager.isInitialized$,
1452
- assetManager.isInitialized$
1469
+ ...viewType === "preview" ? [] : [noyaManager.multiplayerStateManager.isInitialized$],
1470
+ noyaManager.secretManager.isInitialized$,
1471
+ noyaManager.assetManager.isInitialized$
1453
1472
  ],
1454
1473
  (values) => values.every((v) => v)
1455
1474
  ),
1456
- [ms, secretManager, assetManager]
1475
+ [noyaManager, viewType]
1457
1476
  );
1458
1477
  return useObservable(isInitializedObservable);
1459
1478
  }
1460
1479
  function useWorkflowManager() {
1461
- const { workflowManager } = useAnyNoyaStateContext();
1462
- return workflowManager;
1480
+ const { noyaManager } = useAnyNoyaStateContext();
1481
+ return noyaManager.workflowManager;
1463
1482
  }
1464
1483
  var ConnectedUsersContext = (0, import_react8.createContext)(void 0);
1465
1484
  function useConnectedUsersManager() {
@@ -1491,12 +1510,23 @@ function createNoyaContext({
1491
1510
  initialState,
1492
1511
  ...options
1493
1512
  }) {
1494
- const [, , { noyaManager }] = useNoyaState(initialState, {
1495
- ...options,
1496
- schema,
1497
- mergeHistoryEntries
1498
- });
1499
- return /* @__PURE__ */ import_react8.default.createElement(AnyNoyaStateContext.Provider, { value: noyaManager }, /* @__PURE__ */ import_react8.default.createElement(
1513
+ const [, , { noyaManager, theme, viewType }] = useNoyaState(
1514
+ initialState,
1515
+ {
1516
+ ...options,
1517
+ schema,
1518
+ mergeHistoryEntries
1519
+ }
1520
+ );
1521
+ const contextValue = (0, import_react8.useMemo)(
1522
+ () => ({
1523
+ noyaManager,
1524
+ theme,
1525
+ viewType
1526
+ }),
1527
+ [noyaManager, theme, viewType]
1528
+ );
1529
+ return /* @__PURE__ */ import_react8.default.createElement(AnyNoyaStateContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react8.default.createElement(
1500
1530
  ConnectedUsersContext.Provider,
1501
1531
  {
1502
1532
  value: noyaManager.connectedUsersManager
@@ -1511,25 +1541,31 @@ function createNoyaContext({
1511
1541
  ));
1512
1542
  }
1513
1543
  function useValue(path, options) {
1514
- const { multiplayerStateManager: ms } = useAnyNoyaStateContext();
1544
+ const { noyaManager } = useAnyNoyaStateContext();
1515
1545
  let actualPath = typeof path === "function" || !path ? "" : path;
1516
1546
  const mappedObservable = (0, import_react8.useMemo)(() => {
1517
1547
  if (typeof path === "function") {
1518
- return ms.optimisticState$.map(path, { isEqual: options?.isEqual });
1548
+ return noyaManager.multiplayerStateManager.optimisticState$.map(path, {
1549
+ isEqual: options?.isEqual
1550
+ });
1519
1551
  }
1520
- return ms.optimisticState$;
1521
- }, [ms, path, options?.isEqual]);
1552
+ return noyaManager.multiplayerStateManager.optimisticState$;
1553
+ }, [noyaManager, path, options?.isEqual]);
1522
1554
  const value = useObservable(mappedObservable, actualPath);
1523
1555
  return value;
1524
1556
  }
1525
1557
  function useSetValue(path) {
1526
- const { multiplayerStateManager: ms } = useAnyNoyaStateContext();
1558
+ const { noyaManager } = useAnyNoyaStateContext();
1527
1559
  const setValue = (0, import_react8.useCallback)(
1528
1560
  (...args) => {
1529
1561
  const [metadata, value] = args.length === 2 ? args : [{}, args[0]];
1530
- ms.setStateAtPath(metadata, path ?? "", value);
1562
+ noyaManager.multiplayerStateManager.setStateAtPath(
1563
+ metadata,
1564
+ path ?? "",
1565
+ value
1566
+ );
1531
1567
  },
1532
- [ms, path]
1568
+ [noyaManager, path]
1533
1569
  );
1534
1570
  return setValue;
1535
1571
  }
@@ -1540,8 +1576,8 @@ function createNoyaContext({
1540
1576
  return [value, setValue];
1541
1577
  }
1542
1578
  function useStateManager() {
1543
- const { multiplayerStateManager: ms } = useAnyNoyaStateContext();
1544
- return ms;
1579
+ const { noyaManager } = useAnyNoyaStateContext();
1580
+ return noyaManager.multiplayerStateManager;
1545
1581
  }
1546
1582
  function useEphemeralUserDataManager() {
1547
1583
  const ephemeralUserData = (0, import_react8.useContext)(EphemeralUserDataManagerContext);
@@ -1553,16 +1589,32 @@ function createNoyaContext({
1553
1589
  return ephemeralUserData;
1554
1590
  }
1555
1591
  function useNoyaManager() {
1556
- return useAnyNoyaStateContext();
1592
+ return useAnyNoyaStateContext().noyaManager;
1557
1593
  }
1558
1594
  function useLeftMenuItems() {
1559
1595
  const { menuManager } = useNoyaManager();
1560
1596
  return useObservable(menuManager.leftMenuItems$);
1561
1597
  }
1598
+ function useSetLeftMenuItems(leftMenuItems) {
1599
+ const { menuManager } = useNoyaManager();
1600
+ (0, import_react8.useEffect)(() => {
1601
+ if (leftMenuItems) {
1602
+ menuManager.setLeftMenuItems(leftMenuItems);
1603
+ }
1604
+ }, [menuManager, leftMenuItems]);
1605
+ }
1562
1606
  function useRightMenuItems() {
1563
1607
  const { menuManager } = useNoyaManager();
1564
1608
  return useObservable(menuManager.rightMenuItems$);
1565
1609
  }
1610
+ function useSetRightMenuItems(rightMenuItems) {
1611
+ const { menuManager } = useNoyaManager();
1612
+ (0, import_react8.useEffect)(() => {
1613
+ if (rightMenuItems) {
1614
+ menuManager.setRightMenuItems(rightMenuItems);
1615
+ }
1616
+ }, [menuManager, rightMenuItems]);
1617
+ }
1566
1618
  function useHandleMenuItem(callback) {
1567
1619
  const { menuManager } = useNoyaManager();
1568
1620
  (0, import_react8.useEffect)(() => {
@@ -1573,6 +1625,14 @@ function createNoyaContext({
1573
1625
  const { menuManager } = useNoyaManager();
1574
1626
  return (0, import_react8.useCallback)((type) => menuManager.emit(type), [menuManager]);
1575
1627
  }
1628
+ function useMenu(options) {
1629
+ const { leftMenuItems, rightMenuItems, onSelectMenuItem } = options;
1630
+ useSetLeftMenuItems(leftMenuItems);
1631
+ useSetRightMenuItems(rightMenuItems);
1632
+ const noop = (0, import_react8.useCallback)(() => {
1633
+ }, []);
1634
+ useHandleMenuItem(onSelectMenuItem ?? noop);
1635
+ }
1576
1636
  return {
1577
1637
  Context: NoyaStateContext,
1578
1638
  Provider: NoyaStateProvider,
@@ -1582,10 +1642,13 @@ function createNoyaContext({
1582
1642
  useStateManager,
1583
1643
  useEphemeralUserDataManager,
1584
1644
  useLeftMenuItems,
1645
+ useSetLeftMenuItems,
1585
1646
  useRightMenuItems,
1647
+ useSetRightMenuItems,
1586
1648
  useHandleMenuItem,
1587
1649
  useOnSelectMenuItemCallback,
1588
- useNoyaManager
1650
+ useNoyaManager,
1651
+ useMenu
1589
1652
  };
1590
1653
  }
1591
1654
 
@@ -1699,9 +1762,12 @@ var WebSocketConnection = class {
1699
1762
  parseAppDataParameter,
1700
1763
  useAIManager,
1701
1764
  useAnyEphemeralUserData,
1765
+ useAnyNoyaManager,
1766
+ useAnyNoyaStateContext,
1702
1767
  useAsset,
1703
1768
  useAssetManager,
1704
1769
  useAssets,
1770
+ useColorScheme,
1705
1771
  useConnectedUsersManager,
1706
1772
  useCurrentUserId,
1707
1773
  useIsInitialized,
@@ -1714,6 +1780,7 @@ var WebSocketConnection = class {
1714
1780
  useSecretManager,
1715
1781
  useSecrets,
1716
1782
  useSyncStateManager,
1783
+ useViewType,
1717
1784
  useWorkflowManager,
1718
1785
  ...require("@noya-app/state-manager")
1719
1786
  });